From 2464449c825e8a8840509072e07bd942e3ebb788 Mon Sep 17 00:00:00 2001 From: SonYoungsung Date: Fri, 12 Jan 2024 13:58:09 +0900 Subject: [PATCH] Feat : Contracts - trimAbis to extract only abi interface array from artifacts --- .../data/swapperV2/abi/SwapperV2Proxy.json | 821 ++-- contracts/data/tonstarter/abi/L1StosInL2.json | 640 ++- .../data/tonstarter/abi/L1StosInL2Proxy.json | 1063 ++--- .../tonstarter/abi/L2AirdropStosVault.json | 1887 ++++---- .../abi/L2AirdropStosVaultProxy.json | 1705 +++----- .../abi/L2AirdropTonStakerVaultProxy.json | 1715 +++----- .../tonstarter/abi/L2AirdropTonVault.json | 1919 ++++---- .../abi/L2AirdropTonVaultProxy.json | 1747 +++----- .../abi/L2CustomVaultBaseProxy.json | 1482 +++---- .../tonstarter/abi/L2DividendPoolForStos.json | 1833 ++++---- .../abi/L2DividendPoolForStosProxy.json | 1651 +++---- .../abi/L2InitialLiquidityVault.json | 2730 +++++------- .../abi/L2InitialLiquidityVaultProxy.json | 1943 +++------ .../data/tonstarter/abi/L2LpRewardVault.json | 2381 +++++----- .../tonstarter/abi/L2LpRewardVaultProxy.json | 1887 +++----- .../tonstarter/abi/L2NonScheduleVault.json | 1717 +++----- .../data/tonstarter/abi/L2ProjectManager.json | 3873 ++++++++--------- .../tonstarter/abi/L2ProjectManagerProxy.json | 1861 +++----- .../data/tonstarter/abi/L2ScheduleVault.json | 1988 ++++----- .../tonstarter/abi/L2ScheduleVaultProxy.json | 1689 +++---- .../data/tonstarter/abi/L2TokenFactory.json | 955 ++-- .../data/tonstarter/abi/L2UniversalStos.json | 1207 +++-- .../tonstarter/abi/L2UniversalStosProxy.json | 1357 +++--- .../tonstarter/abi/LockIdNftForRegister.json | 3280 ++++++-------- .../abi/LockIdNftForRegisterProxy.json | 2144 ++++----- contracts/data/tosv2/abi/BondDepository.json | 2269 +++++----- .../data/tosv2/abi/BondDepositoryProxy.json | 1989 +++++---- contracts/src/trimAbis.ts | 5 +- 28 files changed, 20271 insertions(+), 29467 deletions(-) diff --git a/contracts/data/swapperV2/abi/SwapperV2Proxy.json b/contracts/data/swapperV2/abi/SwapperV2Proxy.json index 035d9ff..f98b41c 100644 --- a/contracts/data/swapperV2/abi/SwapperV2Proxy.json +++ b/contracts/data/swapperV2/abi/SwapperV2Proxy.json @@ -1,415 +1,406 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SwapperV2", - "sourceName": "contracts/SwapperV2.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "inputToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "outputToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "ExactInputEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "inputToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "outputToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "refund", - "type": "uint256" - } - ], - "name": "ExactOutputEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TonToWTON", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WtonToTON", - "type": "event" - }, - { - "inputs": [], - "name": "_WETH", - "outputs": [ - { - "internalType": "contract IWETH", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "path", - "type": "bytes" - } - ], - "name": "decodeLastPool", - "outputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "path", - "type": "bytes" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountOutMinimum", - "type": "uint256" - } - ], - "internalType": "struct ISwapRouter.ExactInputParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_wrapEth", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_outputUnwrapEth", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_inputWrapWTON", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_outputUnwrapTON", - "type": "bool" - } - ], - "name": "exactInput", - "outputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "path", - "type": "bytes" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountInMaximum", - "type": "uint256" - } - ], - "internalType": "struct ISwapRouter.ExactOutputParams", - "name": "params", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_wrapEth", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_outputUnwrapEth", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_inputWrapWTON", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_outputUnwrapTON", - "type": "bool" - } - ], - "name": "exactOutput", - "outputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "transferAmount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onApprove", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ton", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "tonToWton", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapRouter", - "outputs": [ - { - "internalType": "contract ISwapRouter", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wton", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "wtonToTon", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6080604052600160035534801561001557600080fd5b50614607806100256000396000f3fe60806040526004361061009c5760003560e01c8063735de9f711610064578063735de9f7146101a657806389f395de146101d15780638d62d949146101fc57806393c8068f14610227578063cc48b94714610250578063e0af36161461027b5761009c565b806313e76be7146100a157806327e26c3b146100e05780633d54dc4a146101105780634273ca1614610140578063454797491461017d575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190612ce4565b6102a6565b6040516100d793929190612d8c565b60405180910390f35b6100fa60048036038101906100f59190612f0f565b610320565b6040516101079190612fb5565b60405180910390f35b61012a60048036038101906101259190613078565b61033b565b6040516101379190612fb5565b60405180910390f35b34801561014c57600080fd5b506101676004803603810190610162919061316f565b610356565b6040516101749190613206565b60405180910390f35b34801561018957600080fd5b506101a4600480360381019061019f9190613221565b610a7d565b005b3480156101b257600080fd5b506101bb610a8a565b6040516101c891906132ad565b60405180910390f35b3480156101dd57600080fd5b506101e6610ab0565b6040516101f391906132c8565b60405180910390f35b34801561020857600080fd5b50610211610ad6565b60405161021e91906132c8565b60405180910390f35b34801561023357600080fd5b5061024e60048036038101906102499190613221565b610afa565b005b34801561025c57600080fd5b50610265610b07565b60405161027291906132c8565b60405180910390f35b34801561028757600080fd5b50610290610b2d565b60405161029d9190613304565b60405180910390f35b600080600080602b905060006102d38287516102c2919061334e565b8388610b539092919063ffffffff16565b90506102e9600082610c7190919063ffffffff16565b94506102ff601482610ce790919063ffffffff16565b9250610315601782610c7190919063ffffffff16565b935050509193909250565b6000610330338787878787610d4e565b905095945050505050565b600061034b338787878787611565565b905095945050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103ff575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61043e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610435906133df565b60405180910390fd5b600083839050905060a4811015806104565750601581145b610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048c9061344b565b60405180910390fd5b60a48110610961576000806105036001846104b0919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610512576001610515565b60005b905060008061057d60028561052a919061334e565b88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff161461058c57600161058f565b60005b90506000806105f76003866105a4919061334e565b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610606576001610609565b60005b905060008061067160048761061e919061334e565b8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610680576001610683565b60005b905060006106ed6001600488610699919061334e565b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b539092919063ffffffff16565b9050600081519050600061074f60008c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1611156108595760006040518060a0016040528061079360006001607487610779919061334e565b610783919061334e565b87610b539092919063ffffffff16565b81526020016107c360016074866107aa919061334e565b6107b4919061334e565b86610c7190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16815260200142815260200161080f60016040866107f6919061334e565b610800919061334e565b86611bce90919063ffffffff16565b815260200161083f6001602086610826919061334e565b610830919061334e565b86611bce90919063ffffffff16565b81525090506108528e8286888a8c610d4e565b5050610956565b60006040518060a001604052806108946000600160748761087a919061334e565b610884919061334e565b87610b539092919063ffffffff16565b81526020016108c460016074866108ab919061334e565b6108b5919061334e565b86610c7190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16815260200142815260200161091060016040866108f7919061334e565b610901919061334e565b86611bce90919063ffffffff16565b81526020016109406001602086610927919061334e565b610931919061334e565b86611bce90919063ffffffff16565b81525090506109538e8286888a8c611565565b50505b505050505050610a6f565b6015811415610a6e576000806109d060018461097d919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff16146109df5760016109e2565b60005b90506000610a496015846109f6919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610c7190919063ffffffff16565b90508115610a6057610a5b8188611c35565b610a6b565b610a6a8188611da7565b5b50505b5b600191505095945050505050565b610a873382611c35565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b043382611da7565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606081601f83610b63919061346b565b1015610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061350d565b60405180910390fd5b8183610bb0919061346b565b84511015610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613579565b60405180910390fd5b6060821560008114610c145760405191506000825260208201604052610c65565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610c525780518352602083019250602081019050610c35565b50868552601f19601f8301166040525050505b50809150509392505050565b6000601482610c80919061346b565b83511015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba906135e5565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b6000600382610cf6919061346b565b83511015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613651565b60405180910390fd5b60008260038501015190508091505092915050565b60008673ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906136bd565b60405180910390fd5b6000806000806000610de38c8c600001518d608001518d8d8d8d6001611f0e565b9450945094509450945060008b6020015190508780610dff5750895b15610e08573090505b8b608001518573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610e6a9291906136dd565b602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061371b565b1015610f95578473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e608001516040518363ffffffff1660e01b8152600401610f12929190613748565b6020604051808303816000875af1158015610f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f559190613786565b610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b906137ff565b60405180910390fd5b5b6001861415611117578815610fcd57633b9aca00808d60800151610fb9919061384e565b610fc3919061387f565b8c60800181815250505b60006040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018462ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018e6060015181526020018e608001518152602001600073ffffffffffffffffffffffffffffffffffffffff168152509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db3e2198826040518263ffffffff1660e01b81526004016110cc91906139b7565b6020604051808303816000875af11580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061371b565b975050611213565b8b600001518c60000181905250808c6020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c42611169919061346b565b8c6040018181525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f28c04988d6040518263ffffffff1660e01b81526004016111cd9190613ad1565b6020604051808303816000875af11580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611210919061371b565b96505b60008c60600151905088156113045760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e858f836040518363ffffffff1660e01b815260040161127d929190613748565b6020604051808303816000875af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190613786565b6112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613b3f565b60405180910390fd5b6113e0565b8a156113df57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016113659190612fb5565b600060405180830381600087803b15801561137f57600080fd5b505af1158015611393573d6000803e3d6000fd5b505050508d73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113dd573d6000803e3d6000fd5b505b5b60008e905060008e608001518a101561151157898f60800151611403919061334e565b90508d156114e457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016114669190612fb5565b600060405180830381600087803b15801561148057600080fd5b505af1158015611494573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114de573d6000803e3d6000fd5b50611510565b61150f82828a73ffffffffffffffffffffffffffffffffffffffff1661258d9092919063ffffffff16565b5b5b7fb249544ecc37c72b533dc0368d9901211d1a1f8dcab3942d772db24ee84219438289888d878660405161154a96959493929190613b5f565b60405180910390a15050505050505050509695505050505050565b60008673ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d0906136bd565b60405180910390fd5b60008060008060006115fa8c8c600001518d606001518d8d8d8d6000611f0e565b9450945094509450945060008b60200151905087806116165750895b1561161f573090505b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e606001516040518363ffffffff1660e01b8152600401611680929190613748565b6020604051808303816000875af115801561169f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c39190613786565b611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f9906137ff565b60405180910390fd5b60018614156118615760006040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018462ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001600c42611785919061346b565b81526020018e6060015181526020018e608001518152602001600073ffffffffffffffffffffffffffffffffffffffff168152509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b81526004016118169190613c62565b6020604051808303816000875af1158015611835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611859919061371b565b975050611950565b808c6020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c426118a6919061346b565b8c6040018181525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04b8d598d6040518263ffffffff1660e01b815260040161190a9190613cf4565b6020604051808303816000875af1158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061371b565b96505b8715611a385760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e858e896040518363ffffffff1660e01b81526004016119b1929190613748565b6020604051808303816000875af11580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190613786565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90613b3f565b60405180910390fd5b611b14565b8915611b1357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d886040518263ffffffff1660e01b8152600401611a999190612fb5565b600060405180830381600087803b158015611ab357600080fd5b505af1158015611ac7573d6000803e3d6000fd5b505050508c73ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015611b11573d6000803e3d6000fd5b505b5b7fa53fabf69304d48dc03d1ebf9cef43fe58bd7f63de92f16e59077ee5c1dd6c7c8d86858f606001518b604051611b4f959493929190613d16565b60405180910390a15050505050509695505050505050565b6000600182611b76919061346b565b83511015611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613db5565b60405180910390fd5b60008260018501015190508091505092915050565b6000602082611bdd919061346b565b83511015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790613e21565b60405180910390fd5b60008260208501015190508091505092915050565b611c3e81612613565b611c8d823083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663588420b783836040518363ffffffff1660e01b8152600401611ce8929190613748565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b9190613786565b611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613e8d565b60405180910390fd5b7f172956b5ba35b4c72f12017e46b7b118426fc72f2802a0db77b28198281bf7698282604051611d9b929190613748565b60405180910390a15050565b611df482308360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e8583836040518363ffffffff1660e01b8152600401611e4f929190613748565b6020604051808303816000875af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613786565b611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613b3f565b60405180910390fd5b7fc8114a69a766e691f503f227a368c628de422c458ec5640514ca4f6549080ce28282604051611f02929190613748565b60405180910390a15050565b6000806000806000611f1f8c612884565b945060008511611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613ef9565b60405180910390fd5b8515611f9457611f738c6102a6565b809350819650829550505050611f888c6128b3565b90505080925050611fbb565b611f9d8c6128b3565b809350819550829650505050611fb28c6102a6565b90915050809250505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613f65565b60405180910390fd5b89156120c557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790613fd1565b60405180910390fd5b61215b565b871561215a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121509061403d565b60405180910390fd5b5b5b88156121f657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906140a9565b60405180910390fd5b61228c565b861561228b5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614115565b60405180910390fd5b5b5b891561235c578a34146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614181565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08c6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233e57600080fd5b505af1158015612352573d6000803e3d6000fd5b505050505061257d565b6000341461239f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612396906141ed565b60405180910390fd5b871561254e57633b9aca00808c6123b6919061384e565b6123c0919061387f565b8b14612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614259565b60405180910390fd5b6000633b9aca008c612413919061384e565b905061241e81612613565b61246d8e3083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e34869d7826040518263ffffffff1660e01b81526004016124c69190612fb5565b6020604051808303816000875af11580156124e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125099190613786565b612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f906142c5565b60405180910390fd5b5061257c565b61257b8d308d8773ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b5b5b9850985098509850989350505050565b61260e8363a9059cbb60e01b84846040516024016125ac929190613748565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061290d565b505050565b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016126919291906136dd565b602060405180830381865afa1580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d2919061371b565b10156127f857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612775929190613748565b6020604051808303816000875af1158015612794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b89190613786565b6127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90614331565b60405180910390fd5b5b50565b61287e846323b872dd60e01b85858560405160240161281c93929190614351565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061290d565b50505050565b600060036014612894919061346b565b601483516128a2919061334e565b6128ac919061384e565b9050919050565b60008060006128cc600085610c7190919063ffffffff16565b92506128e2601485610ce790919063ffffffff16565b9050612904600360146128f5919061346b565b85610c7190919063ffffffff16565b91509193909250565b600061296f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129d49092919063ffffffff16565b90506000815111156129cf578080602001905181019061298f9190613786565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c5906143fa565b60405180910390fd5b5b505050565b60606129e384846000856129ec565b90509392505050565b606082471015612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061448c565b60405180910390fd5b612a3a85612b00565b612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a70906144f8565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612aa29190614554565b60006040518083038185875af1925050503d8060008114612adf576040519150601f19603f3d011682016040523d82523d6000602084013e612ae4565b606091505b5091509150612af4828286612b23565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612b3357829050612b83565b600083511115612b465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a91906145af565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bf182612ba8565b810181811067ffffffffffffffff82111715612c1057612c0f612bb9565b5b80604052505050565b6000612c23612b8a565b9050612c2f8282612be8565b919050565b600067ffffffffffffffff821115612c4f57612c4e612bb9565b5b612c5882612ba8565b9050602081019050919050565b82818337600083830152505050565b6000612c87612c8284612c34565b612c19565b905082815260208101848484011115612ca357612ca2612ba3565b5b612cae848285612c65565b509392505050565b600082601f830112612ccb57612cca612b9e565b5b8135612cdb848260208601612c74565b91505092915050565b600060208284031215612cfa57612cf9612b94565b5b600082013567ffffffffffffffff811115612d1857612d17612b99565b5b612d2484828501612cb6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5882612d2d565b9050919050565b612d6881612d4d565b82525050565b600062ffffff82169050919050565b612d8681612d6e565b82525050565b6000606082019050612da16000830186612d5f565b612dae6020830185612d5f565b612dbb6040830184612d7d565b949350505050565b600080fd5b600080fd5b612dd681612d4d565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b6000819050919050565b612e0c81612df9565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b600060a08284031215612e4557612e44612dc3565b5b612e4f60a0612c19565b9050600082013567ffffffffffffffff811115612e6f57612e6e612dc8565b5b612e7b84828501612cb6565b6000830152506020612e8f84828501612de4565b6020830152506040612ea384828501612e1a565b6040830152506060612eb784828501612e1a565b6060830152506080612ecb84828501612e1a565b60808301525092915050565b60008115159050919050565b612eec81612ed7565b8114612ef757600080fd5b50565b600081359050612f0981612ee3565b92915050565b600080600080600060a08688031215612f2b57612f2a612b94565b5b600086013567ffffffffffffffff811115612f4957612f48612b99565b5b612f5588828901612e2f565b9550506020612f6688828901612efa565b9450506040612f7788828901612efa565b9350506060612f8888828901612efa565b9250506080612f9988828901612efa565b9150509295509295909350565b612faf81612df9565b82525050565b6000602082019050612fca6000830184612fa6565b92915050565b600060a08284031215612fe657612fe5612dc3565b5b612ff060a0612c19565b9050600082013567ffffffffffffffff8111156130105761300f612dc8565b5b61301c84828501612cb6565b600083015250602061303084828501612de4565b602083015250604061304484828501612e1a565b604083015250606061305884828501612e1a565b606083015250608061306c84828501612e1a565b60808301525092915050565b600080600080600060a0868803121561309457613093612b94565b5b600086013567ffffffffffffffff8111156130b2576130b1612b99565b5b6130be88828901612fd0565b95505060206130cf88828901612efa565b94505060406130e088828901612efa565b93505060606130f188828901612efa565b925050608061310288828901612efa565b9150509295509295909350565b600080fd5b600080fd5b60008083601f84011261312f5761312e612b9e565b5b8235905067ffffffffffffffff81111561314c5761314b61310f565b5b60208301915083600182028301111561316857613167613114565b5b9250929050565b60008060008060006080868803121561318b5761318a612b94565b5b600061319988828901612de4565b95505060206131aa88828901612de4565b94505060406131bb88828901612e1a565b935050606086013567ffffffffffffffff8111156131dc576131db612b99565b5b6131e888828901613119565b92509250509295509295909350565b61320081612ed7565b82525050565b600060208201905061321b60008301846131f7565b92915050565b60006020828403121561323757613236612b94565b5b600061324584828501612e1a565b91505092915050565b6000819050919050565b600061327361326e61326984612d2d565b61324e565b612d2d565b9050919050565b600061328582613258565b9050919050565b60006132978261327a565b9050919050565b6132a78161328c565b82525050565b60006020820190506132c2600083018461329e565b92915050565b60006020820190506132dd6000830184612d5f565b92915050565b60006132ee8261327a565b9050919050565b6132fe816132e3565b82525050565b600060208201905061331960008301846132f5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061335982612df9565b915061336483612df9565b9250828210156133775761337661331f565b5b828203905092915050565b600082825260208201905092915050565b7f73656e646572206973206e6f7420746f6e206f722077746f6e2e000000000000600082015250565b60006133c9601a83613382565b91506133d482613393565b602082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b7f646174612e6c656e677468206e6565642074686520313633206f766572000000600082015250565b6000613435601d83613382565b9150613440826133ff565b602082019050919050565b6000602082019050818103600083015261346481613428565b9050919050565b600061347682612df9565b915061348183612df9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134b6576134b561331f565b5b828201905092915050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b60006134f7600e83613382565b9150613502826134c1565b602082019050919050565b60006020820190508181036000830152613526816134ea565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b6000613563601183613382565b915061356e8261352d565b602082019050919050565b6000602082019050818103600083015261359281613556565b9050919050565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b60006135cf601583613382565b91506135da82613599565b602082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000600082015250565b600061363b601483613382565b915061364682613605565b602082019050919050565b6000602082019050818103600083015261366a8161362e565b9050919050565b7f726563697069656e74206973206e6f742073656e646572000000000000000000600082015250565b60006136a7601783613382565b91506136b282613671565b602082019050919050565b600060208201905081810360008301526136d68161369a565b9050919050565b60006040820190506136f26000830185612d5f565b6136ff6020830184612d5f565b9392505050565b60008151905061371581612e03565b92915050565b60006020828403121561373157613730612b94565b5b600061373f84828501613706565b91505092915050565b600060408201905061375d6000830185612d5f565b61376a6020830184612fa6565b9392505050565b60008151905061378081612ee3565b92915050565b60006020828403121561379c5761379b612b94565b5b60006137aa84828501613771565b91505092915050565b7f617070726f7665206661696c0000000000000000000000000000000000000000600082015250565b60006137e9600c83613382565b91506137f4826137b3565b602082019050919050565b60006020820190508181036000830152613818816137dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385982612df9565b915061386483612df9565b9250826138745761387361381f565b5b828204905092915050565b600061388a82612df9565b915061389583612df9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ce576138cd61331f565b5b828202905092915050565b6138e281612d4d565b82525050565b6138f181612d6e565b82525050565b61390081612df9565b82525050565b61390f81612d2d565b82525050565b6101008201600082015161392c60008501826138d9565b50602082015161393f60208501826138d9565b50604082015161395260408501826138e8565b50606082015161396560608501826138d9565b50608082015161397860808501826138f7565b5060a082015161398b60a08501826138f7565b5060c082015161399e60c08501826138f7565b5060e08201516139b160e0850182613906565b50505050565b6000610100820190506139cd6000830184613915565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a0d5780820151818401526020810190506139f2565b83811115613a1c576000848401525b50505050565b6000613a2d826139d3565b613a3781856139de565b9350613a478185602086016139ef565b613a5081612ba8565b840191505092915050565b600060a0830160008301518482036000860152613a788282613a22565b9150506020830151613a8d60208601826138d9565b506040830151613aa060408601826138f7565b506060830151613ab360608601826138f7565b506080830151613ac660808601826138f7565b508091505092915050565b60006020820190508181036000830152613aeb8184613a5b565b905092915050565b7f77746f6e2073776170546f544f4e416e645472616e73666572206661696c0000600082015250565b6000613b29601e83613382565b9150613b3482613af3565b602082019050919050565b60006020820190508181036000830152613b5881613b1c565b9050919050565b600060c082019050613b746000830189612d5f565b613b816020830188612d5f565b613b8e6040830187612d5f565b613b9b6060830186612fa6565b613ba86080830185612fa6565b613bb560a0830184612fa6565b979650505050505050565b61010082016000820151613bd760008501826138d9565b506020820151613bea60208501826138d9565b506040820151613bfd60408501826138e8565b506060820151613c1060608501826138d9565b506080820151613c2360808501826138f7565b5060a0820151613c3660a08501826138f7565b5060c0820151613c4960c08501826138f7565b5060e0820151613c5c60e0850182613906565b50505050565b600061010082019050613c786000830184613bc0565b92915050565b600060a0830160008301518482036000860152613c9b8282613a22565b9150506020830151613cb060208601826138d9565b506040830151613cc360408601826138f7565b506060830151613cd660608601826138f7565b506080830151613ce960808601826138f7565b508091505092915050565b60006020820190508181036000830152613d0e8184613c7e565b905092915050565b600060a082019050613d2b6000830188612d5f565b613d386020830187612d5f565b613d456040830186612d5f565b613d526060830185612fa6565b613d5f6080830184612fa6565b9695505050505050565b7f746f55696e74385f6f75744f66426f756e647300000000000000000000000000600082015250565b6000613d9f601383613382565b9150613daa82613d69565b602082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f746f55696e743235365f6f75744f66426f756e64730000000000000000000000600082015250565b6000613e0b601583613382565b9150613e1682613dd5565b602082019050919050565b60006020820190508181036000830152613e3a81613dfe565b9050919050565b7f77746f6e207377617046726f6d544f4e416e645472616e73666572206661696c600082015250565b6000613e77602083613382565b9150613e8282613e41565b602082019050919050565b60006020820190508181036000830152613ea681613e6a565b9050919050565b7f77726f6e67207061746800000000000000000000000000000000000000000000600082015250565b6000613ee3600a83613382565b9150613eee82613ead565b602082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b7f73616d6520746f6b656e496e202c20746f6b656e4f7574000000000000000000600082015250565b6000613f4f601783613382565b9150613f5a82613f19565b602082019050919050565b60006020820190508181036000830152613f7e81613f42565b9050919050565b7f746f6b656e496e206973206e6f74205745544800000000000000000000000000600082015250565b6000613fbb601383613382565b9150613fc682613f85565b602082019050919050565b60006020820190508181036000830152613fea81613fae565b9050919050565b7f746f6b656e496e206973206e6f742057544f4e00000000000000000000000000600082015250565b6000614027601383613382565b915061403282613ff1565b602082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f746f6b656e4f7574206973206e6f742057455448000000000000000000000000600082015250565b6000614093601483613382565b915061409e8261405d565b602082019050919050565b600060208201905081810360008301526140c281614086565b9050919050565b7f746f6b656e4f7574206973206e6f742057544f4e000000000000000000000000600082015250565b60006140ff601483613382565b915061410a826140c9565b602082019050919050565b6000602082019050818103600083015261412e816140f2565b9050919050565b7f77726f6e67206d73672e76616c75650000000000000000000000000000000000600082015250565b600061416b600f83613382565b915061417682614135565b602082019050919050565b6000602082019050818103600083015261419a8161415e565b9050919050565b7f6d73672e76616c75652073686f756c6420626520300000000000000000000000600082015250565b60006141d7601583613382565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f616d6f756e74496e206e6565642077746f6e2075696e74000000000000000000600082015250565b6000614243601783613382565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f77746f6e207377617046726f6d544f4e206661696c0000000000000000000000600082015250565b60006142af601583613382565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f746f6e20617070726f7665206661696c00000000000000000000000000000000600082015250565b600061431b601083613382565b9150614326826142e5565b602082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b60006060820190506143666000830186612d5f565b6143736020830185612d5f565b6143806040830184612fa6565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006143e4602a83613382565b91506143ef82614388565b604082019050919050565b60006020820190508181036000830152614413816143d7565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614476602683613382565b91506144818261441a565b604082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006144e2601d83613382565b91506144ed826144ac565b602082019050919050565b60006020820190508181036000830152614511816144d5565b9050919050565b600081905092915050565b600061452e826139d3565b6145388185614518565b93506145488185602086016139ef565b80840191505092915050565b60006145608284614523565b915081905092915050565b600081519050919050565b60006145818261456b565b61458b8185613382565b935061459b8185602086016139ef565b6145a481612ba8565b840191505092915050565b600060208201905081810360008301526145c98184614576565b90509291505056fea2646970667358221220cac4109f36f09c8bcbf5a43d8f8844f749d8a3b52d868bce334a8cf7f9b9c51664736f6c634300080c0033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063735de9f711610064578063735de9f7146101a657806389f395de146101d15780638d62d949146101fc57806393c8068f14610227578063cc48b94714610250578063e0af36161461027b5761009c565b806313e76be7146100a157806327e26c3b146100e05780633d54dc4a146101105780634273ca1614610140578063454797491461017d575b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190612ce4565b6102a6565b6040516100d793929190612d8c565b60405180910390f35b6100fa60048036038101906100f59190612f0f565b610320565b6040516101079190612fb5565b60405180910390f35b61012a60048036038101906101259190613078565b61033b565b6040516101379190612fb5565b60405180910390f35b34801561014c57600080fd5b506101676004803603810190610162919061316f565b610356565b6040516101749190613206565b60405180910390f35b34801561018957600080fd5b506101a4600480360381019061019f9190613221565b610a7d565b005b3480156101b257600080fd5b506101bb610a8a565b6040516101c891906132ad565b60405180910390f35b3480156101dd57600080fd5b506101e6610ab0565b6040516101f391906132c8565b60405180910390f35b34801561020857600080fd5b50610211610ad6565b60405161021e91906132c8565b60405180910390f35b34801561023357600080fd5b5061024e60048036038101906102499190613221565b610afa565b005b34801561025c57600080fd5b50610265610b07565b60405161027291906132c8565b60405180910390f35b34801561028757600080fd5b50610290610b2d565b60405161029d9190613304565b60405180910390f35b600080600080602b905060006102d38287516102c2919061334e565b8388610b539092919063ffffffff16565b90506102e9600082610c7190919063ffffffff16565b94506102ff601482610ce790919063ffffffff16565b9250610315601782610c7190919063ffffffff16565b935050509193909250565b6000610330338787878787610d4e565b905095945050505050565b600061034b338787878787611565565b905095945050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103ff575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61043e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610435906133df565b60405180910390fd5b600083839050905060a4811015806104565750601581145b610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048c9061344b565b60405180910390fd5b60a48110610961576000806105036001846104b0919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610512576001610515565b60005b905060008061057d60028561052a919061334e565b88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff161461058c57600161058f565b60005b90506000806105f76003866105a4919061334e565b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610606576001610609565b60005b905060008061067160048761061e919061334e565b8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1614610680576001610683565b60005b905060006106ed6001600488610699919061334e565b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b539092919063ffffffff16565b9050600081519050600061074f60008c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff1611156108595760006040518060a0016040528061079360006001607487610779919061334e565b610783919061334e565b87610b539092919063ffffffff16565b81526020016107c360016074866107aa919061334e565b6107b4919061334e565b86610c7190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16815260200142815260200161080f60016040866107f6919061334e565b610800919061334e565b86611bce90919063ffffffff16565b815260200161083f6001602086610826919061334e565b610830919061334e565b86611bce90919063ffffffff16565b81525090506108528e8286888a8c610d4e565b5050610956565b60006040518060a001604052806108946000600160748761087a919061334e565b610884919061334e565b87610b539092919063ffffffff16565b81526020016108c460016074866108ab919061334e565b6108b5919061334e565b86610c7190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16815260200142815260200161091060016040866108f7919061334e565b610901919061334e565b86611bce90919063ffffffff16565b81526020016109406001602086610927919061334e565b610931919061334e565b86611bce90919063ffffffff16565b81525090506109538e8286888a8c611565565b50505b505050505050610a6f565b6015811415610a6e576000806109d060018461097d919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b6790919063ffffffff16565b60ff16146109df5760016109e2565b60005b90506000610a496015846109f6919061334e565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610c7190919063ffffffff16565b90508115610a6057610a5b8188611c35565b610a6b565b610a6a8188611da7565b5b50505b5b600191505095945050505050565b610a873382611c35565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b043382611da7565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606081601f83610b63919061346b565b1015610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061350d565b60405180910390fd5b8183610bb0919061346b565b84511015610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613579565b60405180910390fd5b6060821560008114610c145760405191506000825260208201604052610c65565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610c525780518352602083019250602081019050610c35565b50868552601f19601f8301166040525050505b50809150509392505050565b6000601482610c80919061346b565b83511015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba906135e5565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b6000600382610cf6919061346b565b83511015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613651565b60405180910390fd5b60008260038501015190508091505092915050565b60008673ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906136bd565b60405180910390fd5b6000806000806000610de38c8c600001518d608001518d8d8d8d6001611f0e565b9450945094509450945060008b6020015190508780610dff5750895b15610e08573090505b8b608001518573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610e6a9291906136dd565b602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061371b565b1015610f95578473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e608001516040518363ffffffff1660e01b8152600401610f12929190613748565b6020604051808303816000875af1158015610f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f559190613786565b610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b906137ff565b60405180910390fd5b5b6001861415611117578815610fcd57633b9aca00808d60800151610fb9919061384e565b610fc3919061387f565b8c60800181815250505b60006040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018462ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018e6060015181526020018e608001518152602001600073ffffffffffffffffffffffffffffffffffffffff168152509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db3e2198826040518263ffffffff1660e01b81526004016110cc91906139b7565b6020604051808303816000875af11580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061371b565b975050611213565b8b600001518c60000181905250808c6020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c42611169919061346b565b8c6040018181525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f28c04988d6040518263ffffffff1660e01b81526004016111cd9190613ad1565b6020604051808303816000875af11580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611210919061371b565b96505b60008c60600151905088156113045760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e858f836040518363ffffffff1660e01b815260040161127d929190613748565b6020604051808303816000875af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190613786565b6112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613b3f565b60405180910390fd5b6113e0565b8a156113df57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016113659190612fb5565b600060405180830381600087803b15801561137f57600080fd5b505af1158015611393573d6000803e3d6000fd5b505050508d73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113dd573d6000803e3d6000fd5b505b5b60008e905060008e608001518a101561151157898f60800151611403919061334e565b90508d156114e457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016114669190612fb5565b600060405180830381600087803b15801561148057600080fd5b505af1158015611494573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114de573d6000803e3d6000fd5b50611510565b61150f82828a73ffffffffffffffffffffffffffffffffffffffff1661258d9092919063ffffffff16565b5b5b7fb249544ecc37c72b533dc0368d9901211d1a1f8dcab3942d772db24ee84219438289888d878660405161154a96959493929190613b5f565b60405180910390a15050505050505050509695505050505050565b60008673ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d0906136bd565b60405180910390fd5b60008060008060006115fa8c8c600001518d606001518d8d8d8d6000611f0e565b9450945094509450945060008b60200151905087806116165750895b1561161f573090505b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e606001516040518363ffffffff1660e01b8152600401611680929190613748565b6020604051808303816000875af115801561169f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c39190613786565b611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f9906137ff565b60405180910390fd5b60018614156118615760006040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018462ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001600c42611785919061346b565b81526020018e6060015181526020018e608001518152602001600073ffffffffffffffffffffffffffffffffffffffff168152509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b81526004016118169190613c62565b6020604051808303816000875af1158015611835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611859919061371b565b975050611950565b808c6020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c426118a6919061346b565b8c6040018181525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04b8d598d6040518263ffffffff1660e01b815260040161190a9190613cf4565b6020604051808303816000875af1158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061371b565b96505b8715611a385760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e858e896040518363ffffffff1660e01b81526004016119b1929190613748565b6020604051808303816000875af11580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190613786565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90613b3f565b60405180910390fd5b611b14565b8915611b1357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d886040518263ffffffff1660e01b8152600401611a999190612fb5565b600060405180830381600087803b158015611ab357600080fd5b505af1158015611ac7573d6000803e3d6000fd5b505050508c73ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015611b11573d6000803e3d6000fd5b505b5b7fa53fabf69304d48dc03d1ebf9cef43fe58bd7f63de92f16e59077ee5c1dd6c7c8d86858f606001518b604051611b4f959493929190613d16565b60405180910390a15050505050509695505050505050565b6000600182611b76919061346b565b83511015611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613db5565b60405180910390fd5b60008260018501015190508091505092915050565b6000602082611bdd919061346b565b83511015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790613e21565b60405180910390fd5b60008260208501015190508091505092915050565b611c3e81612613565b611c8d823083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663588420b783836040518363ffffffff1660e01b8152600401611ce8929190613748565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b9190613786565b611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613e8d565b60405180910390fd5b7f172956b5ba35b4c72f12017e46b7b118426fc72f2802a0db77b28198281bf7698282604051611d9b929190613748565b60405180910390a15050565b611df482308360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3b99e8583836040518363ffffffff1660e01b8152600401611e4f929190613748565b6020604051808303816000875af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613786565b611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613b3f565b60405180910390fd5b7fc8114a69a766e691f503f227a368c628de422c458ec5640514ca4f6549080ce28282604051611f02929190613748565b60405180910390a15050565b6000806000806000611f1f8c612884565b945060008511611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613ef9565b60405180910390fd5b8515611f9457611f738c6102a6565b809350819650829550505050611f888c6128b3565b90505080925050611fbb565b611f9d8c6128b3565b809350819550829650505050611fb28c6102a6565b90915050809250505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613f65565b60405180910390fd5b89156120c557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790613fd1565b60405180910390fd5b61215b565b871561215a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121509061403d565b60405180910390fd5b5b5b88156121f657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906140a9565b60405180910390fd5b61228c565b861561228b5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614115565b60405180910390fd5b5b5b891561235c578a34146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614181565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08c6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233e57600080fd5b505af1158015612352573d6000803e3d6000fd5b505050505061257d565b6000341461239f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612396906141ed565b60405180910390fd5b871561254e57633b9aca00808c6123b6919061384e565b6123c0919061387f565b8b14612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614259565b60405180910390fd5b6000633b9aca008c612413919061384e565b905061241e81612613565b61246d8e3083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e34869d7826040518263ffffffff1660e01b81526004016124c69190612fb5565b6020604051808303816000875af11580156124e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125099190613786565b612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f906142c5565b60405180910390fd5b5061257c565b61257b8d308d8773ffffffffffffffffffffffffffffffffffffffff166127fb909392919063ffffffff16565b5b5b9850985098509850989350505050565b61260e8363a9059cbb60e01b84846040516024016125ac929190613748565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061290d565b505050565b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016126919291906136dd565b602060405180830381865afa1580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d2919061371b565b10156127f857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612775929190613748565b6020604051808303816000875af1158015612794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b89190613786565b6127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90614331565b60405180910390fd5b5b50565b61287e846323b872dd60e01b85858560405160240161281c93929190614351565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061290d565b50505050565b600060036014612894919061346b565b601483516128a2919061334e565b6128ac919061384e565b9050919050565b60008060006128cc600085610c7190919063ffffffff16565b92506128e2601485610ce790919063ffffffff16565b9050612904600360146128f5919061346b565b85610c7190919063ffffffff16565b91509193909250565b600061296f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129d49092919063ffffffff16565b90506000815111156129cf578080602001905181019061298f9190613786565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c5906143fa565b60405180910390fd5b5b505050565b60606129e384846000856129ec565b90509392505050565b606082471015612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061448c565b60405180910390fd5b612a3a85612b00565b612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a70906144f8565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612aa29190614554565b60006040518083038185875af1925050503d8060008114612adf576040519150601f19603f3d011682016040523d82523d6000602084013e612ae4565b606091505b5091509150612af4828286612b23565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612b3357829050612b83565b600083511115612b465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a91906145af565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bf182612ba8565b810181811067ffffffffffffffff82111715612c1057612c0f612bb9565b5b80604052505050565b6000612c23612b8a565b9050612c2f8282612be8565b919050565b600067ffffffffffffffff821115612c4f57612c4e612bb9565b5b612c5882612ba8565b9050602081019050919050565b82818337600083830152505050565b6000612c87612c8284612c34565b612c19565b905082815260208101848484011115612ca357612ca2612ba3565b5b612cae848285612c65565b509392505050565b600082601f830112612ccb57612cca612b9e565b5b8135612cdb848260208601612c74565b91505092915050565b600060208284031215612cfa57612cf9612b94565b5b600082013567ffffffffffffffff811115612d1857612d17612b99565b5b612d2484828501612cb6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5882612d2d565b9050919050565b612d6881612d4d565b82525050565b600062ffffff82169050919050565b612d8681612d6e565b82525050565b6000606082019050612da16000830186612d5f565b612dae6020830185612d5f565b612dbb6040830184612d7d565b949350505050565b600080fd5b600080fd5b612dd681612d4d565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b6000819050919050565b612e0c81612df9565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b600060a08284031215612e4557612e44612dc3565b5b612e4f60a0612c19565b9050600082013567ffffffffffffffff811115612e6f57612e6e612dc8565b5b612e7b84828501612cb6565b6000830152506020612e8f84828501612de4565b6020830152506040612ea384828501612e1a565b6040830152506060612eb784828501612e1a565b6060830152506080612ecb84828501612e1a565b60808301525092915050565b60008115159050919050565b612eec81612ed7565b8114612ef757600080fd5b50565b600081359050612f0981612ee3565b92915050565b600080600080600060a08688031215612f2b57612f2a612b94565b5b600086013567ffffffffffffffff811115612f4957612f48612b99565b5b612f5588828901612e2f565b9550506020612f6688828901612efa565b9450506040612f7788828901612efa565b9350506060612f8888828901612efa565b9250506080612f9988828901612efa565b9150509295509295909350565b612faf81612df9565b82525050565b6000602082019050612fca6000830184612fa6565b92915050565b600060a08284031215612fe657612fe5612dc3565b5b612ff060a0612c19565b9050600082013567ffffffffffffffff8111156130105761300f612dc8565b5b61301c84828501612cb6565b600083015250602061303084828501612de4565b602083015250604061304484828501612e1a565b604083015250606061305884828501612e1a565b606083015250608061306c84828501612e1a565b60808301525092915050565b600080600080600060a0868803121561309457613093612b94565b5b600086013567ffffffffffffffff8111156130b2576130b1612b99565b5b6130be88828901612fd0565b95505060206130cf88828901612efa565b94505060406130e088828901612efa565b93505060606130f188828901612efa565b925050608061310288828901612efa565b9150509295509295909350565b600080fd5b600080fd5b60008083601f84011261312f5761312e612b9e565b5b8235905067ffffffffffffffff81111561314c5761314b61310f565b5b60208301915083600182028301111561316857613167613114565b5b9250929050565b60008060008060006080868803121561318b5761318a612b94565b5b600061319988828901612de4565b95505060206131aa88828901612de4565b94505060406131bb88828901612e1a565b935050606086013567ffffffffffffffff8111156131dc576131db612b99565b5b6131e888828901613119565b92509250509295509295909350565b61320081612ed7565b82525050565b600060208201905061321b60008301846131f7565b92915050565b60006020828403121561323757613236612b94565b5b600061324584828501612e1a565b91505092915050565b6000819050919050565b600061327361326e61326984612d2d565b61324e565b612d2d565b9050919050565b600061328582613258565b9050919050565b60006132978261327a565b9050919050565b6132a78161328c565b82525050565b60006020820190506132c2600083018461329e565b92915050565b60006020820190506132dd6000830184612d5f565b92915050565b60006132ee8261327a565b9050919050565b6132fe816132e3565b82525050565b600060208201905061331960008301846132f5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061335982612df9565b915061336483612df9565b9250828210156133775761337661331f565b5b828203905092915050565b600082825260208201905092915050565b7f73656e646572206973206e6f7420746f6e206f722077746f6e2e000000000000600082015250565b60006133c9601a83613382565b91506133d482613393565b602082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b7f646174612e6c656e677468206e6565642074686520313633206f766572000000600082015250565b6000613435601d83613382565b9150613440826133ff565b602082019050919050565b6000602082019050818103600083015261346481613428565b9050919050565b600061347682612df9565b915061348183612df9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134b6576134b561331f565b5b828201905092915050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b60006134f7600e83613382565b9150613502826134c1565b602082019050919050565b60006020820190508181036000830152613526816134ea565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b6000613563601183613382565b915061356e8261352d565b602082019050919050565b6000602082019050818103600083015261359281613556565b9050919050565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b60006135cf601583613382565b91506135da82613599565b602082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000600082015250565b600061363b601483613382565b915061364682613605565b602082019050919050565b6000602082019050818103600083015261366a8161362e565b9050919050565b7f726563697069656e74206973206e6f742073656e646572000000000000000000600082015250565b60006136a7601783613382565b91506136b282613671565b602082019050919050565b600060208201905081810360008301526136d68161369a565b9050919050565b60006040820190506136f26000830185612d5f565b6136ff6020830184612d5f565b9392505050565b60008151905061371581612e03565b92915050565b60006020828403121561373157613730612b94565b5b600061373f84828501613706565b91505092915050565b600060408201905061375d6000830185612d5f565b61376a6020830184612fa6565b9392505050565b60008151905061378081612ee3565b92915050565b60006020828403121561379c5761379b612b94565b5b60006137aa84828501613771565b91505092915050565b7f617070726f7665206661696c0000000000000000000000000000000000000000600082015250565b60006137e9600c83613382565b91506137f4826137b3565b602082019050919050565b60006020820190508181036000830152613818816137dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385982612df9565b915061386483612df9565b9250826138745761387361381f565b5b828204905092915050565b600061388a82612df9565b915061389583612df9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ce576138cd61331f565b5b828202905092915050565b6138e281612d4d565b82525050565b6138f181612d6e565b82525050565b61390081612df9565b82525050565b61390f81612d2d565b82525050565b6101008201600082015161392c60008501826138d9565b50602082015161393f60208501826138d9565b50604082015161395260408501826138e8565b50606082015161396560608501826138d9565b50608082015161397860808501826138f7565b5060a082015161398b60a08501826138f7565b5060c082015161399e60c08501826138f7565b5060e08201516139b160e0850182613906565b50505050565b6000610100820190506139cd6000830184613915565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a0d5780820151818401526020810190506139f2565b83811115613a1c576000848401525b50505050565b6000613a2d826139d3565b613a3781856139de565b9350613a478185602086016139ef565b613a5081612ba8565b840191505092915050565b600060a0830160008301518482036000860152613a788282613a22565b9150506020830151613a8d60208601826138d9565b506040830151613aa060408601826138f7565b506060830151613ab360608601826138f7565b506080830151613ac660808601826138f7565b508091505092915050565b60006020820190508181036000830152613aeb8184613a5b565b905092915050565b7f77746f6e2073776170546f544f4e416e645472616e73666572206661696c0000600082015250565b6000613b29601e83613382565b9150613b3482613af3565b602082019050919050565b60006020820190508181036000830152613b5881613b1c565b9050919050565b600060c082019050613b746000830189612d5f565b613b816020830188612d5f565b613b8e6040830187612d5f565b613b9b6060830186612fa6565b613ba86080830185612fa6565b613bb560a0830184612fa6565b979650505050505050565b61010082016000820151613bd760008501826138d9565b506020820151613bea60208501826138d9565b506040820151613bfd60408501826138e8565b506060820151613c1060608501826138d9565b506080820151613c2360808501826138f7565b5060a0820151613c3660a08501826138f7565b5060c0820151613c4960c08501826138f7565b5060e0820151613c5c60e0850182613906565b50505050565b600061010082019050613c786000830184613bc0565b92915050565b600060a0830160008301518482036000860152613c9b8282613a22565b9150506020830151613cb060208601826138d9565b506040830151613cc360408601826138f7565b506060830151613cd660608601826138f7565b506080830151613ce960808601826138f7565b508091505092915050565b60006020820190508181036000830152613d0e8184613c7e565b905092915050565b600060a082019050613d2b6000830188612d5f565b613d386020830187612d5f565b613d456040830186612d5f565b613d526060830185612fa6565b613d5f6080830184612fa6565b9695505050505050565b7f746f55696e74385f6f75744f66426f756e647300000000000000000000000000600082015250565b6000613d9f601383613382565b9150613daa82613d69565b602082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f746f55696e743235365f6f75744f66426f756e64730000000000000000000000600082015250565b6000613e0b601583613382565b9150613e1682613dd5565b602082019050919050565b60006020820190508181036000830152613e3a81613dfe565b9050919050565b7f77746f6e207377617046726f6d544f4e416e645472616e73666572206661696c600082015250565b6000613e77602083613382565b9150613e8282613e41565b602082019050919050565b60006020820190508181036000830152613ea681613e6a565b9050919050565b7f77726f6e67207061746800000000000000000000000000000000000000000000600082015250565b6000613ee3600a83613382565b9150613eee82613ead565b602082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b7f73616d6520746f6b656e496e202c20746f6b656e4f7574000000000000000000600082015250565b6000613f4f601783613382565b9150613f5a82613f19565b602082019050919050565b60006020820190508181036000830152613f7e81613f42565b9050919050565b7f746f6b656e496e206973206e6f74205745544800000000000000000000000000600082015250565b6000613fbb601383613382565b9150613fc682613f85565b602082019050919050565b60006020820190508181036000830152613fea81613fae565b9050919050565b7f746f6b656e496e206973206e6f742057544f4e00000000000000000000000000600082015250565b6000614027601383613382565b915061403282613ff1565b602082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f746f6b656e4f7574206973206e6f742057455448000000000000000000000000600082015250565b6000614093601483613382565b915061409e8261405d565b602082019050919050565b600060208201905081810360008301526140c281614086565b9050919050565b7f746f6b656e4f7574206973206e6f742057544f4e000000000000000000000000600082015250565b60006140ff601483613382565b915061410a826140c9565b602082019050919050565b6000602082019050818103600083015261412e816140f2565b9050919050565b7f77726f6e67206d73672e76616c75650000000000000000000000000000000000600082015250565b600061416b600f83613382565b915061417682614135565b602082019050919050565b6000602082019050818103600083015261419a8161415e565b9050919050565b7f6d73672e76616c75652073686f756c6420626520300000000000000000000000600082015250565b60006141d7601583613382565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f616d6f756e74496e206e6565642077746f6e2075696e74000000000000000000600082015250565b6000614243601783613382565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f77746f6e207377617046726f6d544f4e206661696c0000000000000000000000600082015250565b60006142af601583613382565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f746f6e20617070726f7665206661696c00000000000000000000000000000000600082015250565b600061431b601083613382565b9150614326826142e5565b602082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b60006060820190506143666000830186612d5f565b6143736020830185612d5f565b6143806040830184612fa6565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006143e4602a83613382565b91506143ef82614388565b604082019050919050565b60006020820190508181036000830152614413816143d7565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614476602683613382565b91506144818261441a565b604082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006144e2601d83613382565b91506144ed826144ac565b602082019050919050565b60006020820190508181036000830152614511816144d5565b9050919050565b600081905092915050565b600061452e826139d3565b6145388185614518565b93506145488185602086016139ef565b80840191505092915050565b60006145608284614523565b915081905092915050565b600081519050919050565b60006145818261456b565b61458b8185613382565b935061459b8185602086016139ef565b6145a481612ba8565b840191505092915050565b600060208201905081810360008301526145c98184614576565b90509291505056fea2646970667358221220cac4109f36f09c8bcbf5a43d8f8844f749d8a3b52d868bce334a8cf7f9b9c51664736f6c634300080c0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "name": "ExactInputEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "refund", + "type": "uint256" + } + ], + "name": "ExactOutputEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TonToWTON", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WtonToTON", + "type": "event" + }, + { + "inputs": [], + "name": "_WETH", + "outputs": [ + { + "internalType": "contract IWETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + } + ], + "name": "decodeLastPool", + "outputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + } + ], + "internalType": "struct ISwapRouter.ExactInputParams", + "name": "params", + "type": "tuple" + }, + { + "internalType": "bool", + "name": "_wrapEth", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_outputUnwrapEth", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_inputWrapWTON", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_outputUnwrapTON", + "type": "bool" + } + ], + "name": "exactInput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + } + ], + "internalType": "struct ISwapRouter.ExactOutputParams", + "name": "params", + "type": "tuple" + }, + { + "internalType": "bool", + "name": "_wrapEth", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_outputUnwrapEth", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_inputWrapWTON", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_outputUnwrapTON", + "type": "bool" + } + ], + "name": "exactOutput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "transferAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onApprove", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ton", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "tonToWton", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapRouter", + "outputs": [ + { + "internalType": "contract ISwapRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wton", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "wtonToTon", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L1StosInL2.json b/contracts/data/tonstarter/abi/L1StosInL2.json index 9275a4f..059e7bd 100644 --- a/contracts/data/tonstarter/abi/L1StosInL2.json +++ b/contracts/data/tonstarter/abi/L1StosInL2.json @@ -1,414 +1,260 @@ -{ - "address": "0x5c8ee41536721D2e31352259D3A84419B09d716F", - "abi": [ - { - "inputs": [], - "name": "_manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "decodeSyncPackets", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "lockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo", - "name": "packet", - "type": "tuple" - } - ], - "internalType": "struct LibLockId.SyncPacket[]", - "name": "packets", - "type": "tuple[]" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "managerAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "l2messanger_", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "l1Register", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2CrossDomainMessenger", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lockIdNftForRegister", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "multiRegister", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l1Register_", - "type": "address" - } - ], - "name": "setL1Register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lockIdNft_", - "type": "address" - } - ], - "name": "setLockIdNft", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x01451ed2e75a24f5c982527eec0f94bf113a586e7ccd8001dc53340cf89a7ae4", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x5c8ee41536721D2e31352259D3A84419B09d716F", - "transactionIndex": 0, - "gasUsed": "1002476", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3d81bbb04b85a7941f1a4d33f1ef97c87ceb3011296ad9ed04cc5317bbf6ca69", - "transactionHash": "0x01451ed2e75a24f5c982527eec0f94bf113a586e7ccd8001dc53340cf89a7ae4", - "logs": [], - "blockNumber": 23649, - "cumulativeGasUsed": "1002476", - "status": 1, - "byzantium": true +[ + { + "inputs": [], + "name": "_manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" }, - "args": [], - "numDeployments": 2, - "solcInputHash": "bea1fe67a15bb59d7ee22582278039ee", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"_manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"decodeSyncPackets\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"lockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo\",\"name\":\"packet\",\"type\":\"tuple\"}],\"internalType\":\"struct LibLockId.SyncPacket[]\",\"name\":\"packets\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"managerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2messanger_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Register\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockIdNftForRegister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"multiRegister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1Register_\",\"type\":\"address\"}],\"name\":\"setL1Register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lockIdNft_\",\"type\":\"address\"}],\"name\":\"setLockIdNft\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/L1StosInL2.sol\":\"L1StosInL2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"contracts/L2/L1StosInL2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\nimport \\\"../libraries/BytesLib.sol\\\";\\nimport \\\"../libraries/LibLockId.sol\\\";\\n\\nimport \\\"../proxy/ProxyStorage2.sol\\\";\\nimport \\\"./L1StosInL2Storage.sol\\\";\\n\\n// import \\\"hardhat/console.sol\\\";\\n\\ninterface ILockIdNftForRegister {\\n function register(\\n address account,\\n LibLockId.SyncPacket[] memory packets\\n ) external;\\n}\\n\\ninterface IL2CrossDomainMessenger {\\n function xDomainMessageSender() external view returns (address);\\n}\\n\\ncontract L1StosInL2 is ProxyStorage2, L1StosInL2Storage {\\n using BytesLib for bytes;\\n\\n modifier onlyMessengerAndL1Register() {\\n\\n require(\\n l2CrossDomainMessenger == msg.sender &&\\n IL2CrossDomainMessenger(l2CrossDomainMessenger).xDomainMessageSender() == l1Register,\\n \\\"not onlyMessengerAndL1Register\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 _val) {\\n require(_val != 0, \\\"zero value\\\");\\n _;\\n }\\n\\n modifier onlyOwner() {\\n require(_owner == msg.sender, \\\"not owner\\\");\\n _;\\n }\\n\\n function initialize (\\n address managerAddress,\\n address l2messanger_\\n ) external onlyOwner {\\n _manager = managerAddress;\\n l2CrossDomainMessenger =l2messanger_;\\n }\\n\\n function setL1Register(address l1Register_) external onlyManager {\\n require(l1Register != l1Register_, \\\"same\\\");\\n l1Register = l1Register_;\\n }\\n\\n function setLockIdNft(address lockIdNft_) external onlyManager {\\n require(lockIdNftForRegister != lockIdNft_, \\\"same\\\");\\n lockIdNftForRegister = lockIdNft_;\\n }\\n\\n /*** Public ***/\\n // function register(bytes memory data) public {\\n // console.log('IL1StosInL2 register in' );\\n // console.logBytes(data);\\n // console.log('IL1StosInL2 l2CrossDomainMessenger %s', l2CrossDomainMessenger);\\n // console.log('IL1StosInL2 msg.sender %s', msg.sender );\\n // address xDomainMessageSender = IL2CrossDomainMessenger(l2CrossDomainMessenger).xDomainMessageSender();\\n\\n // console.log('IL1StosInL2 xDomainMessageSender %s', xDomainMessageSender );\\n // console.log('IL1StosInL2 l1Register %s', l1Register );\\n\\n\\n // }\\n\\n function register(bytes memory data) public onlyMessengerAndL1Register {\\n\\n // packet {address | 1st sync packet 2nd sync packet .....}\\n // address : 20 bytes\\n // one sync packets : 104 bytes: (32 byte) uint256 lockId, (32+32+4+4) syncInfo -> total 104\\n require(data.length > 123, \\\"wrong bytes length\\\");\\n address user = data.toAddress(0);\\n\\n LibLockId.SyncPacket[] memory packets = decodeSyncPackets(data.slice(20,(data.length-20)));\\n\\n require(packets.length != 0, \\\"no sync data\\\");\\n ILockIdNftForRegister(lockIdNftForRegister).register(user, packets);\\n }\\n\\n function multiRegister(bytes[] memory datas) external onlyMessengerAndL1Register {\\n require(datas.length != 0, \\\"no data\\\");\\n for(uint256 i = 0; i < datas.length; i++) {\\n register(datas[i]);\\n }\\n }\\n\\n\\n function decodeSyncPackets(bytes memory data) public pure returns (LibLockId.SyncPacket[] memory packets) {\\n uint256 packSize = 104;\\n uint256 len = data.length / packSize;\\n packets = new LibLockId.SyncPacket[](len);\\n for(uint256 i = 0; i < len ; i++){\\n bytes memory packet = data.slice(i, packSize);\\n packets[i] = LibLockId.SyncPacket({\\n lockId: packet.toUint256(0),\\n packet: LibLockId.SyncInfo({\\n slope: packet.toInt256(32),\\n bias: packet.toInt256(64),\\n timestamp: packet.toUint32(96),\\n syncTime: packet.toUint32(100)\\n })\\n });\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x2dfa794b2f320151530b3f309b1f7521e4507b83261d640d04a29c30ade02109\",\"license\":\"MIT\"},\"contracts/L2/L1StosInL2Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract L1StosInL2Storage {\\n address public _manager;\\n address public lockIdNftForRegister;\\n address public l2CrossDomainMessenger;\\n address public l1Register;\\n\\n modifier onlyManager() {\\n require(_manager == msg.sender, \\\"not manager\\\");\\n _;\\n }\\n\\n}\",\"keccak256\":\"0x6860161d1d3bbe291190d031629a5592a062b77505d5e19a78c3600b8cd698fa\",\"license\":\"MIT\"},\"contracts/libraries/BytesLib.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\n/*\\n * @title Solidity Bytes Arrays Utils\\n * @author Gon\\u00e7alo S\\u00e1 \\n *\\n * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.\\n * The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.\\n */\\npragma solidity ^0.8.0;\\n// pragma solidity >=0.5.0 <0.8.0;\\n\\n\\nlibrary BytesLib {\\n function slice(\\n bytes memory _bytes,\\n uint256 _start,\\n uint256 _length\\n ) internal pure returns (bytes memory) {\\n require(_length + 31 >= _length, 'slice_overflow');\\n require(_start + _length >= _start, 'slice_overflow');\\n require(_bytes.length >= _start + _length, 'slice_outOfBounds');\\n\\n bytes memory tempBytes;\\n\\n assembly {\\n switch iszero(_length)\\n case 0 {\\n // Get a location of some free memory and store it in tempBytes as\\n // Solidity does for memory variables.\\n tempBytes := mload(0x40)\\n\\n // The first word of the slice result is potentially a partial\\n // word read from the original array. To read it, we calculate\\n // the length of that partial word and start copying that many\\n // bytes into the array. The first word we copy will start with\\n // data we don't care about, but the last `lengthmod` bytes will\\n // land at the beginning of the contents of the new array. When\\n // we're done copying, we overwrite the full first word with\\n // the actual length of the slice.\\n let lengthmod := and(_length, 31)\\n\\n // The multiplication in the next line is necessary\\n // because when slicing multiples of 32 bytes (lengthmod == 0)\\n // the following copy loop was copying the origin's length\\n // and then ending prematurely not copying everything it should.\\n let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n let end := add(mc, _length)\\n\\n for {\\n // The multiplication in the next line has the same exact purpose\\n // as the one above.\\n let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n } lt(mc, end) {\\n mc := add(mc, 0x20)\\n cc := add(cc, 0x20)\\n } {\\n mstore(mc, mload(cc))\\n }\\n\\n mstore(tempBytes, _length)\\n\\n //update free-memory pointer\\n //allocating the array padded to 32 bytes like the compiler does now\\n mstore(0x40, and(add(mc, 31), not(31)))\\n }\\n //if we want a zero-length slice let's just return a zero-length array\\n default {\\n tempBytes := mload(0x40)\\n //zero out the 32 bytes slice we are about to return\\n //we need to do it because Solidity does not garbage collect\\n mstore(tempBytes, 0)\\n\\n mstore(0x40, add(tempBytes, 0x20))\\n }\\n }\\n\\n return tempBytes;\\n }\\n\\n function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {\\n require(_start + 20 >= _start, 'toAddress_overflow');\\n require(_bytes.length >= _start + 20, 'toAddress_outOfBounds');\\n address tempAddress;\\n\\n assembly {\\n tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\\n }\\n\\n return tempAddress;\\n }\\n\\n function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) {\\n require(_start + 3 >= _start, 'toUint24_overflow');\\n require(_bytes.length >= _start + 3, 'toUint24_outOfBounds');\\n uint24 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x3), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) {\\n require(_start + 1 >= _start, 'toUint8_overflow');\\n require(_bytes.length >= _start + 1, 'toUint8_outOfBounds');\\n uint8 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x1), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n function toBool(bytes memory _bytes, uint256 _start) internal pure returns (bool) {\\n require(_start + 1 >= _start, 'toBool_overflow');\\n require(_bytes.length >= _start + 1, 'toBool_overflow');\\n bool tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x1), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n function toUint16(bytes memory _bytes, uint256 _start) internal pure returns (uint16) {\\n require(_start + 2 >= _start, 'toUint16_overflow');\\n require(_bytes.length >= _start + 2, 'toUint16_outOfBounds');\\n uint16 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x2), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n function toUint32(bytes memory _bytes, uint256 _start) internal pure returns (uint32) {\\n require(_start + 4 >= _start, 'toUint32_overflow');\\n require(_bytes.length >= _start + 4, 'toUint32_outOfBounds');\\n uint32 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x4), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n\\n function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) {\\n require(_start + 32 >= _start, 'toUint256_overflow');\\n require(_bytes.length >= _start + 32, 'toUint256_outOfBounds');\\n uint256 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x20), _start))\\n }\\n\\n return tempUint;\\n }\\n\\n function toInt256(bytes memory _bytes, uint256 _start) internal pure returns (int256) {\\n require(_start + 32 >= _start, 'toUint256_overflow');\\n require(_bytes.length >= _start + 32, 'toUint256_outOfBounds');\\n int256 tempUint;\\n\\n assembly {\\n tempUint := mload(add(add(_bytes, 0x20), _start))\\n }\\n\\n return tempUint;\\n }\\n}\\n\",\"keccak256\":\"0x064f1eac3145c434626e04bc0aa16776dbb3ef78104864587eab9ce56d9c1d66\",\"license\":\"GPL-2.0-or-later\"},\"contracts/libraries/LibLockId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibLockId\\n */\\nlibrary LibLockId {\\n\\n // LockId\\uc758 \\ud3ec\\uc778\\ud2b8 \\uc815\\ubcf4\\n struct Point {\\n int256 slope;\\n int256 bias;\\n uint256 timestamp; // \\ub4f1\\ub85d(\\uc2dc\\uc791)\\uc2dc\\uc810\\n }\\n\\n // LockId\\uc758 \\uc794\\uace0\\n struct LockedInfo {\\n uint256 start;\\n uint256 end;\\n uint256 amount;\\n uint256 withdrawlTime;\\n }\\n\\n // SyncInfo\\n struct SyncInfo {\\n int256 slope;\\n int256 bias;\\n uint32 timestamp; // point \\uc815\\ubcf4\\uc5d0 \\uc788\\ub294 \\uc778\\ub371\\uc2a4\\uc5d0 \\ud574\\ub2f9\\ud558\\ub294 timestamp\\n uint32 syncTime; // \\ub3d9\\uae30\\ud654 \\uc2dc\\uc810\\n }\\n\\n struct SyncPacket {\\n uint256 lockId;\\n SyncInfo packet;\\n }\\n\\n struct UnlimitedAmount {\\n uint32 timestamp;\\n uint256 amount;\\n }\\n\\n}\",\"keccak256\":\"0xf1a7a0153b2bd0a20c1dd536adfa44e1c7c3dc7336a37eef2e3166c44285792e\",\"license\":\"MIT\"},\"contracts/proxy/ProxyStorage2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage2 {\\n\\n address public _owner;\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n\\n}\",\"keccak256\":\"0x143792b4a69ee77d8ac3bf521938acc34f9e6800751d4db9bae90333b4749a4a\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50611135806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636b765aa611610097578063c8d2f27c11610066578063c8d2f27c14610259578063d75bf0ce1461026c578063f0329f6b1461027f578063fbef005a1461029257600080fd5b80636b765aa6146101f757806382fbdc9c1461020a578063b2bdfa7b1461021d578063b911135f1461023057600080fd5b8063485cc955116100d3578063485cc9551461014b57806350d2a2761461015e578063550d01a31461019f57806363a8fd89146101d257600080fd5b806303a2948f146100fa5780632bd5a6a41461010f5780632c57035814610122575b600080fd5b61010d610108366004610e06565b6102a5565b005b61010d61011d366004610ee1565b61040a565b610135610130366004610f05565b6104ba565b6040516101429190610fb5565b60405180910390f35b61010d610159366004610fc8565b610609565b61018761016c366004611001565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101c26101ad366004610ee1565b60026020526000908152604090205460ff1681565b6040519015158152602001610142565b6000546101c29074010000000000000000000000000000000000000000900460ff1681565b600554610187906001600160a01b031681565b61010d610218366004610f05565b61067d565b600054610187906001600160a01b031681565b61018761023e366004611043565b6001602052600090815260409020546001600160a01b031681565b61010d610267366004610ee1565b610898565b600754610187906001600160a01b031681565b600454610187906001600160a01b031681565b600654610187906001600160a01b031681565b6006546001600160a01b03163314801561033a575060075460065460408051636e296e4560e01b815290516001600160a01b039384169390921691636e296e45916004808201926020929091908290030181865afa15801561030b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032f919061105c565b6001600160a01b0316145b61038b5760405162461bcd60e51b815260206004820152601e60248201527f6e6f74206f6e6c794d657373656e676572416e644c315265676973746572000060448201526064015b60405180910390fd5b80516000036103c65760405162461bcd60e51b81526020600482015260076024820152666e6f206461746160c81b6044820152606401610382565b60005b8151811015610406576103f48282815181106103e7576103e7611079565b602002602001015161067d565b806103fe816110a5565b9150506103c9565b5050565b6004546001600160a01b031633146104525760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610382565b6007546001600160a01b038083169116036104985760405162461bcd60e51b81526004016103829060208082526004908201526373616d6560e01b604082015260600190565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b606060006068905060008184516104d191906110be565b90508067ffffffffffffffff8111156104ec576104ec610d4f565b60405190808252806020026020018201604052801561052557816020015b610512610d01565b81526020019060019003908161050a5790505b50925060005b81811015610601576000610540868386610948565b90506040518060400160405280610561600084610aab90919063ffffffff16565b81526020016040518060800160405280610585602086610aab90919063ffffffff16565b8152602001610595856040610aab565b81526020016105a5856060610b71565b63ffffffff1681526020016105c4606486610b7190919063ffffffff16565b63ffffffff168152508152508583815181106105e2576105e2611079565b60200260200101819052505080806105f9906110a5565b91505061052b565b505050919050565b6000546001600160a01b0316331461064f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610382565b600480546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6006546001600160a01b031633148015610712575060075460065460408051636e296e4560e01b815290516001600160a01b039384169390921691636e296e45916004808201926020929091908290030181865afa1580156106e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610707919061105c565b6001600160a01b0316145b61075e5760405162461bcd60e51b815260206004820152601e60248201527f6e6f74206f6e6c794d657373656e676572416e644c31526567697374657200006044820152606401610382565b607b8151116107af5760405162461bcd60e51b815260206004820152601260248201527f77726f6e67206279746573206c656e67746800000000000000000000000000006044820152606401610382565b60006107bb8282610c31565b905060006107dc61013060148086516107d491906110e0565b869190610948565b9050805160000361082f5760405162461bcd60e51b815260206004820152600c60248201527f6e6f2073796e63206461746100000000000000000000000000000000000000006044820152606401610382565b60055460405163743500ad60e01b81526001600160a01b039091169063743500ad9061086190859085906004016110f3565b600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b50505050505050565b6004546001600160a01b031633146108e05760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610382565b6005546001600160a01b038083169116036109265760405162461bcd60e51b81526004016103829060208082526004908201526373616d6560e01b604082015260600190565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60608161095681601f611115565b10156109955760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610382565b826109a08382611115565b10156109df5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610382565b6109e98284611115565b84511015610a395760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610382565b606082158015610a585760405191506000825260208201604052610aa2565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610a91578051835260209283019201610a79565b5050858452601f01601f1916604052505b50949350505050565b600081610ab9816020611115565b1015610b075760405162461bcd60e51b815260206004820152601260248201527f746f55696e743235365f6f766572666c6f7700000000000000000000000000006044820152606401610382565b610b12826020611115565b83511015610b625760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e647300000000000000000000006044820152606401610382565b50818101602001515b92915050565b600081610b7f816004611115565b1015610bcd5760405162461bcd60e51b815260206004820152601160248201527f746f55696e7433325f6f766572666c6f770000000000000000000000000000006044820152606401610382565b610bd8826004611115565b83511015610c285760405162461bcd60e51b815260206004820152601460248201527f746f55696e7433325f6f75744f66426f756e64730000000000000000000000006044820152606401610382565b50016004015190565b600081610c3f816014611115565b1015610c8d5760405162461bcd60e51b815260206004820152601260248201527f746f416464726573735f6f766572666c6f7700000000000000000000000000006044820152606401610382565b610c98826014611115565b83511015610ce85760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e647300000000000000000000006044820152606401610382565b5001602001516c01000000000000000000000000900490565b604051806040016040528060008152602001610d4a60405180608001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b905290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600082601f830112610da757600080fd5b813567ffffffffffffffff811115610dc157610dc1610d4f565b610dd4601f8201601f1916602001610d65565b818152846020838601011115610de957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215610e1957600080fd5b823567ffffffffffffffff80821115610e3157600080fd5b818501915085601f830112610e4557600080fd5b813581811115610e5757610e57610d4f565b8060051b610e66858201610d65565b9182528381018501918581019089841115610e8057600080fd5b86860192505b83831015610ebc57823585811115610e9e5760008081fd5b610eac8b89838a0101610d96565b8352509186019190860190610e86565b9998505050505050505050565b6001600160a01b0381168114610ede57600080fd5b50565b600060208284031215610ef357600080fd5b8135610efe81610ec9565b9392505050565b600060208284031215610f1757600080fd5b813567ffffffffffffffff811115610f2e57600080fd5b610f3a84828501610d96565b949350505050565b600081518084526020808501945080840160005b83811015610faa57815180518852830151805184890152808401516040808a019190915281015163ffffffff9081166060808b01919091529091015116608088015260a09096019590820190600101610f56565b509495945050505050565b602081526000610efe6020830184610f42565b60008060408385031215610fdb57600080fd5b8235610fe681610ec9565b91506020830135610ff681610ec9565b809150509250929050565b60006020828403121561101357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610efe57600080fd5b60006020828403121561105557600080fd5b5035919050565b60006020828403121561106e57600080fd5b8151610efe81610ec9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110b7576110b761108f565b5060010190565b6000826110db57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b6b57610b6b61108f565b6001600160a01b0383168152604060208201526000610f3a6040830184610f42565b80820180821115610b6b57610b6b61108f56fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636b765aa611610097578063c8d2f27c11610066578063c8d2f27c14610259578063d75bf0ce1461026c578063f0329f6b1461027f578063fbef005a1461029257600080fd5b80636b765aa6146101f757806382fbdc9c1461020a578063b2bdfa7b1461021d578063b911135f1461023057600080fd5b8063485cc955116100d3578063485cc9551461014b57806350d2a2761461015e578063550d01a31461019f57806363a8fd89146101d257600080fd5b806303a2948f146100fa5780632bd5a6a41461010f5780632c57035814610122575b600080fd5b61010d610108366004610e06565b6102a5565b005b61010d61011d366004610ee1565b61040a565b610135610130366004610f05565b6104ba565b6040516101429190610fb5565b60405180910390f35b61010d610159366004610fc8565b610609565b61018761016c366004611001565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101c26101ad366004610ee1565b60026020526000908152604090205460ff1681565b6040519015158152602001610142565b6000546101c29074010000000000000000000000000000000000000000900460ff1681565b600554610187906001600160a01b031681565b61010d610218366004610f05565b61067d565b600054610187906001600160a01b031681565b61018761023e366004611043565b6001602052600090815260409020546001600160a01b031681565b61010d610267366004610ee1565b610898565b600754610187906001600160a01b031681565b600454610187906001600160a01b031681565b600654610187906001600160a01b031681565b6006546001600160a01b03163314801561033a575060075460065460408051636e296e4560e01b815290516001600160a01b039384169390921691636e296e45916004808201926020929091908290030181865afa15801561030b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032f919061105c565b6001600160a01b0316145b61038b5760405162461bcd60e51b815260206004820152601e60248201527f6e6f74206f6e6c794d657373656e676572416e644c315265676973746572000060448201526064015b60405180910390fd5b80516000036103c65760405162461bcd60e51b81526020600482015260076024820152666e6f206461746160c81b6044820152606401610382565b60005b8151811015610406576103f48282815181106103e7576103e7611079565b602002602001015161067d565b806103fe816110a5565b9150506103c9565b5050565b6004546001600160a01b031633146104525760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610382565b6007546001600160a01b038083169116036104985760405162461bcd60e51b81526004016103829060208082526004908201526373616d6560e01b604082015260600190565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b606060006068905060008184516104d191906110be565b90508067ffffffffffffffff8111156104ec576104ec610d4f565b60405190808252806020026020018201604052801561052557816020015b610512610d01565b81526020019060019003908161050a5790505b50925060005b81811015610601576000610540868386610948565b90506040518060400160405280610561600084610aab90919063ffffffff16565b81526020016040518060800160405280610585602086610aab90919063ffffffff16565b8152602001610595856040610aab565b81526020016105a5856060610b71565b63ffffffff1681526020016105c4606486610b7190919063ffffffff16565b63ffffffff168152508152508583815181106105e2576105e2611079565b60200260200101819052505080806105f9906110a5565b91505061052b565b505050919050565b6000546001600160a01b0316331461064f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610382565b600480546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6006546001600160a01b031633148015610712575060075460065460408051636e296e4560e01b815290516001600160a01b039384169390921691636e296e45916004808201926020929091908290030181865afa1580156106e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610707919061105c565b6001600160a01b0316145b61075e5760405162461bcd60e51b815260206004820152601e60248201527f6e6f74206f6e6c794d657373656e676572416e644c31526567697374657200006044820152606401610382565b607b8151116107af5760405162461bcd60e51b815260206004820152601260248201527f77726f6e67206279746573206c656e67746800000000000000000000000000006044820152606401610382565b60006107bb8282610c31565b905060006107dc61013060148086516107d491906110e0565b869190610948565b9050805160000361082f5760405162461bcd60e51b815260206004820152600c60248201527f6e6f2073796e63206461746100000000000000000000000000000000000000006044820152606401610382565b60055460405163743500ad60e01b81526001600160a01b039091169063743500ad9061086190859085906004016110f3565b600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b50505050505050565b6004546001600160a01b031633146108e05760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610382565b6005546001600160a01b038083169116036109265760405162461bcd60e51b81526004016103829060208082526004908201526373616d6560e01b604082015260600190565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60608161095681601f611115565b10156109955760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610382565b826109a08382611115565b10156109df5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610382565b6109e98284611115565b84511015610a395760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610382565b606082158015610a585760405191506000825260208201604052610aa2565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610a91578051835260209283019201610a79565b5050858452601f01601f1916604052505b50949350505050565b600081610ab9816020611115565b1015610b075760405162461bcd60e51b815260206004820152601260248201527f746f55696e743235365f6f766572666c6f7700000000000000000000000000006044820152606401610382565b610b12826020611115565b83511015610b625760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e647300000000000000000000006044820152606401610382565b50818101602001515b92915050565b600081610b7f816004611115565b1015610bcd5760405162461bcd60e51b815260206004820152601160248201527f746f55696e7433325f6f766572666c6f770000000000000000000000000000006044820152606401610382565b610bd8826004611115565b83511015610c285760405162461bcd60e51b815260206004820152601460248201527f746f55696e7433325f6f75744f66426f756e64730000000000000000000000006044820152606401610382565b50016004015190565b600081610c3f816014611115565b1015610c8d5760405162461bcd60e51b815260206004820152601260248201527f746f416464726573735f6f766572666c6f7700000000000000000000000000006044820152606401610382565b610c98826014611115565b83511015610ce85760405162461bcd60e51b815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e647300000000000000000000006044820152606401610382565b5001602001516c01000000000000000000000000900490565b604051806040016040528060008152602001610d4a60405180608001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b905290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600082601f830112610da757600080fd5b813567ffffffffffffffff811115610dc157610dc1610d4f565b610dd4601f8201601f1916602001610d65565b818152846020838601011115610de957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215610e1957600080fd5b823567ffffffffffffffff80821115610e3157600080fd5b818501915085601f830112610e4557600080fd5b813581811115610e5757610e57610d4f565b8060051b610e66858201610d65565b9182528381018501918581019089841115610e8057600080fd5b86860192505b83831015610ebc57823585811115610e9e5760008081fd5b610eac8b89838a0101610d96565b8352509186019190860190610e86565b9998505050505050505050565b6001600160a01b0381168114610ede57600080fd5b50565b600060208284031215610ef357600080fd5b8135610efe81610ec9565b9392505050565b600060208284031215610f1757600080fd5b813567ffffffffffffffff811115610f2e57600080fd5b610f3a84828501610d96565b949350505050565b600081518084526020808501945080840160005b83811015610faa57815180518852830151805184890152808401516040808a019190915281015163ffffffff9081166060808b01919091529091015116608088015260a09096019590820190600101610f56565b509495945050505050565b602081526000610efe6020830184610f42565b60008060408385031215610fdb57600080fd5b8235610fe681610ec9565b91506020830135610ff681610ec9565b809150509250929050565b60006020828403121561101357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610efe57600080fd5b60006020828403121561105557600080fd5b5035919050565b60006020828403121561106e57600080fd5b8151610efe81610ec9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110b7576110b761108f565b5060010190565b6000826110db57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b6b57610b6b61108f565b6001600160a01b0383168152604060208201526000610f3a6040830184610f42565b80820180821115610b6b57610b6b61108f56fea164736f6c6343000812000a", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 + { + "inputs": [], + "name": "_owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" }, - "storageLayout": { - "storage": [ + { + "inputs": [ { - "astId": 1908, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "decodeSyncPackets", + "outputs": [ { - "astId": 1910, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "pauseProxy", - "offset": 20, - "slot": "0", - "type": "t_bool" - }, + "components": [ + { + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo", + "name": "packet", + "type": "tuple" + } + ], + "internalType": "struct LibLockId.SyncPacket[]", + "name": "packets", + "type": "tuple[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ { - "astId": 1914, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "internalType": "address", + "name": "managerAddress", + "type": "address" }, { - "astId": 1918, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "internalType": "address", + "name": "l2messanger_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Register", + "outputs": [ { - "astId": 1922, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2CrossDomainMessenger", + "outputs": [ { - "astId": 1000, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "_manager", - "offset": 0, - "slot": "4", - "type": "t_address" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockIdNftForRegister", + "outputs": [ { - "astId": 1002, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "lockIdNftForRegister", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1004, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "l2CrossDomainMessenger", - "offset": 0, - "slot": "6", - "type": "t_address" - }, + "internalType": "bytes[]", + "name": "datas", + "type": "bytes[]" + } + ], + "name": "multiRegister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ { - "astId": 1006, - "contract": "contracts/L2/L1StosInL2.sol:L1StosInL2", - "label": "l1Register", - "offset": 0, - "slot": "7", - "type": "t_address" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" } - } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1Register_", + "type": "address" + } + ], + "name": "setL1Register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lockIdNft_", + "type": "address" + } + ], + "name": "setLockIdNft", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L1StosInL2Proxy.json b/contracts/data/tonstarter/abi/L1StosInL2Proxy.json index 03e8cf4..e172f0a 100644 --- a/contracts/data/tonstarter/abi/L1StosInL2Proxy.json +++ b/contracts/data/tonstarter/abi/L1StosInL2Proxy.json @@ -1,678 +1,439 @@ -{ - "address": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "ManagershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "_manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1Register", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2CrossDomainMessenger", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lockIdNftForRegister", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceManagership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "transferManagership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x759b2fb2752faf230c09affc04e642cda3a1c5e4f6d04770ca9d69e547a77824", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", - "transactionIndex": 0, - "gasUsed": "1192345", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000001000000000000000000000000000000000000020000000000080000000800000000000000000000000008000000400400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf2d70f2d16dd7da7abd5a4ee74785d990cf06e9e2f4294b82c9580677b3c4d6b", - "transactionHash": "0x759b2fb2752faf230c09affc04e642cda3a1c5e4f6d04770ca9d69e547a77824", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23626, - "transactionHash": "0x759b2fb2752faf230c09affc04e642cda3a1c5e4f6d04770ca9d69e547a77824", - "address": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0xf2d70f2d16dd7da7abd5a4ee74785d990cf06e9e2f4294b82c9580677b3c4d6b" +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousManager", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newManager", + "type": "address" } ], - "blockNumber": 23626, - "cumulativeGasUsed": "1192345", - "status": 1, - "byzantium": true + "name": "ManagershipTransferred", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "922d4f58da819b2db212e67a166d96d6", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"ManagershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"_manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Register\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockIdNftForRegister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceManagership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferManagership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/L1StosInL2Proxy.sol\":\"L1StosInL2Proxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/L2/L1StosInL2Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"../proxy/Proxy2.sol\\\";\\nimport \\\"./L1StosInL2Storage.sol\\\";\\n\\ncontract L1StosInL2Proxy is Proxy2, L1StosInL2Storage\\n{\\n event ManagershipTransferred(address indexed previousManager, address indexed newManager);\\n\\n constructor() {\\n _manager = msg.sender;\\n }\\n\\n function renounceManagership() external onlyManager {\\n emit ManagershipTransferred(_manager, address(0));\\n _manager = address(0);\\n }\\n\\n function transferManagership(address newManager) external onlyManager {\\n require(newManager != address(0), \\\"new manager is the zero address\\\");\\n emit ManagershipTransferred(_manager, newManager);\\n _manager = newManager;\\n }\\n\\n}\\n\",\"keccak256\":\"0xb6e051045a6b43860bc525cb6e7512616c3aa18e7508a17d602c0f955bc153a2\",\"license\":\"MIT\"},\"contracts/L2/L1StosInL2Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract L1StosInL2Storage {\\n address public _manager;\\n address public lockIdNftForRegister;\\n address public l2CrossDomainMessenger;\\n address public l1Register;\\n\\n modifier onlyManager() {\\n require(_manager == msg.sender, \\\"not manager\\\");\\n _;\\n }\\n\\n}\",\"keccak256\":\"0x6860161d1d3bbe291190d031629a5592a062b77505d5e19a78c3600b8cd698fa\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/proxy/Proxy2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage2.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy2 is ProxyStorage2, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n modifier onlyOwner() {\\n require(_owner == msg.sender, \\\"not owner\\\");\\n _;\\n }\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor () {\\n _owner = msg.sender;\\n emit OwnershipTransferred(address(0), _owner);\\n }\\n\\n /* ========== onlyOwner ========== */\\n\\n function renounceOwnership() external onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n require(newOwner != address(0), \\\"new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n /**\\n * @notice Set the implementation and call a function in a single transaction. Useful to ensure\\n * atomic execution of initialization-based upgrades.\\n *\\n * @param _implementation Address of the implementation contract.\\n * @param _data Calldata to delegatecall the new implementation with.\\n */\\n function upgradeToAndCall(address _implementation, bytes calldata _data)\\n public\\n payable\\n virtual\\n onlyOwner\\n returns (bytes memory)\\n {\\n // _setImplementation(_implementation);\\n _setImplementation2(_implementation, 0, true);\\n\\n (bool success, bytes memory returndata) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy: delegatecall to new implementation contract failed\\\");\\n return returndata;\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x7d0a7c4411d5aba121d4afe73effde4df0c418aa2a3be22400058104ec1fab50\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage2 {\\n\\n address public _owner;\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n\\n}\",\"keccak256\":\"0x143792b4a69ee77d8ac3bf521938acc34f9e6800751d4db9bae90333b4749a4a\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600480546001600160a01b031916331790556113c5806100716000396000f3fe6080604052600436106101795760003560e01c80637cb00d25116100cb578063b911135f1161007f578063f0329f6b11610059578063f0329f6b146104c9578063f2fde38b146104e9578063fbef005a14610509576101cb565b8063b911135f14610453578063ccc3990914610489578063d75bf0ce146104a9576101cb565b80638b8f4a65116100b05780638b8f4a65146103dd5780638d4fdb4014610413578063b2bdfa7b14610433576101cb565b80637cb00d251461039d5780637cd5f663146103bd576101cb565b80635c60da1b1161012d5780636b765aa6116101075780636b765aa6146103535780636c146d9b14610373578063715018a614610388576101cb565b80635c60da1b146102cc5780635cc797d81461031257806363a8fd8914610332576101cb565b80634f1ef2861161015e5780634f1ef2861461021557806350d2a2761461023e578063550d01a31461028c576101cb565b80633659cfe6146101d55780634a5df50f146101f5576101cb565b366101cb5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6101d3610529565b005b3480156101e157600080fd5b506101d36101f0366004611120565b6105d9565b34801561020157600080fd5b506101d3610210366004611142565b61072a565b6102286102233660046111c6565b6109c2565b6040516102359190611249565b60405180910390f35b34801561024a57600080fd5b50610274610259366004611297565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610235565b34801561029857600080fd5b506102bc6102a7366004611120565b60026020526000908152604090205460ff1681565b6040519015158152602001610235565b3480156102d857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610274565b34801561031e57600080fd5b506101d361032d3660046112d1565b610af6565b34801561033e57600080fd5b506000546102bc90600160a01b900460ff1681565b34801561035f57600080fd5b50600554610274906001600160a01b031681565b34801561037f57600080fd5b506101d3610b4a565b34801561039457600080fd5b506101d3610bdc565b3480156103a957600080fd5b506101d36103b8366004611304565b610c6c565b3480156103c957600080fd5b506101d36103d836600461131f565b610ce1565b3480156103e957600080fd5b506102746103f8366004611352565b6000908152600160205260409020546001600160a01b031690565b34801561041f57600080fd5b5061027461042e366004611297565b610d32565b34801561043f57600080fd5b50600054610274906001600160a01b031681565b34801561045f57600080fd5b5061027461046e366004611352565b6001602052600090815260409020546001600160a01b031681565b34801561049557600080fd5b506101d36104a4366004611120565b610e2e565b3480156104b557600080fd5b50600754610274906001600160a01b031681565b3480156104d557600080fd5b50600454610274906001600160a01b031681565b3480156104f557600080fd5b506101d3610504366004611120565b610f28565b34801561051557600080fd5b50600654610274906001600160a01b031681565b60006105406000356001600160e01b031916610d32565b90506001600160a01b038116158015906105645750600054600160a01b900460ff16155b6105b05760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101c2565b3660008037600080366000845af43d6000803e8080156105cf573d6000f35b3d6000fd5b505050565b6000546001600160a01b0316331461061f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6001600160a01b0381166106755760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101c2565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036106e65760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101c2565b6106f3816000600161101f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b031633146107705760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b816107bd5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101c2565b6001600160a01b03811660009081526002602052604090205460ff166108255760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101c2565b60005b828110156109bc57816001600160a01b0316600360008686858181106108505761085061136b565b90506020020160208101906108659190611297565b6001600160e01b03191681526020810191909152604001600020546001600160a01b0316036108d65760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101c2565b81600360008686858181106108ed576108ed61136b565b90506020020160208101906109029190611297565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061094a5761094a61136b565b905060200201602081019061095f9190611297565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806109b481611381565b915050610828565b50505050565b6000546060906001600160a01b03163314610a0b5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b610a18846000600161101f565b600080856001600160a01b03168585604051610a359291906113a8565b600060405180830381855af49150503d8060008114610a70576040519150601f19603f3d011682016040523d82523d6000602084013e610a75565b606091505b509150915081610aed5760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101c2565b95945050505050565b6000546001600160a01b03163314610b3c5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b610b4682826110aa565b5050565b6004546001600160a01b03163314610b925760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016101c2565b6004546040516000916001600160a01b0316907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf5683908390a3600480546001600160a01b0319169055565b6000546001600160a01b03163314610c225760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b60008054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b6000546001600160a01b03163314610d275760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6105d483838361101f565b6001600160e01b031981166000908152600360205260408120546001600160a01b0316610d925750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff1615610df057506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6004546001600160a01b03163314610e765760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016101c2565b6001600160a01b038116610ecc5760405162461bcd60e51b815260206004820152601f60248201527f6e6577206d616e6167657220697320746865207a65726f20616464726573730060448201526064016101c2565b6004546040516001600160a01b038084169216907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf568390600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f6e5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6001600160a01b038116610fc45760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016101c2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b6110765760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101c2565b80156110a457600082815260016020526040902080546001600160a01b0319166001600160a01b0385161790555b6105d483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b80356001600160a01b0381168114610e2957600080fd5b60006020828403121561113257600080fd5b61113b82611109565b9392505050565b60008060006040848603121561115757600080fd5b833567ffffffffffffffff8082111561116f57600080fd5b818601915086601f83011261118357600080fd5b81358181111561119257600080fd5b8760208260051b85010111156111a757600080fd5b6020928301955093506111bd9186019050611109565b90509250925092565b6000806000604084860312156111db57600080fd5b6111e484611109565b9250602084013567ffffffffffffffff8082111561120157600080fd5b818601915086601f83011261121557600080fd5b81358181111561122457600080fd5b87602082850101111561123657600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156112765785810183015185820160400152820161125a565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156112a957600080fd5b81356001600160e01b03198116811461113b57600080fd5b80358015158114610e2957600080fd5b600080604083850312156112e457600080fd5b6112ed83611109565b91506112fb602084016112c1565b90509250929050565b60006020828403121561131657600080fd5b61113b826112c1565b60008060006060848603121561133457600080fd5b61133d84611109565b9250602084013591506111bd604085016112c1565b60006020828403121561136457600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016113a157634e487b7160e01b600052601160045260246000fd5b5060010190565b818382376000910190815291905056fea164736f6c6343000812000a", - "deployedBytecode": "0x6080604052600436106101795760003560e01c80637cb00d25116100cb578063b911135f1161007f578063f0329f6b11610059578063f0329f6b146104c9578063f2fde38b146104e9578063fbef005a14610509576101cb565b8063b911135f14610453578063ccc3990914610489578063d75bf0ce146104a9576101cb565b80638b8f4a65116100b05780638b8f4a65146103dd5780638d4fdb4014610413578063b2bdfa7b14610433576101cb565b80637cb00d251461039d5780637cd5f663146103bd576101cb565b80635c60da1b1161012d5780636b765aa6116101075780636b765aa6146103535780636c146d9b14610373578063715018a614610388576101cb565b80635c60da1b146102cc5780635cc797d81461031257806363a8fd8914610332576101cb565b80634f1ef2861161015e5780634f1ef2861461021557806350d2a2761461023e578063550d01a31461028c576101cb565b80633659cfe6146101d55780634a5df50f146101f5576101cb565b366101cb5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6101d3610529565b005b3480156101e157600080fd5b506101d36101f0366004611120565b6105d9565b34801561020157600080fd5b506101d3610210366004611142565b61072a565b6102286102233660046111c6565b6109c2565b6040516102359190611249565b60405180910390f35b34801561024a57600080fd5b50610274610259366004611297565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610235565b34801561029857600080fd5b506102bc6102a7366004611120565b60026020526000908152604090205460ff1681565b6040519015158152602001610235565b3480156102d857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610274565b34801561031e57600080fd5b506101d361032d3660046112d1565b610af6565b34801561033e57600080fd5b506000546102bc90600160a01b900460ff1681565b34801561035f57600080fd5b50600554610274906001600160a01b031681565b34801561037f57600080fd5b506101d3610b4a565b34801561039457600080fd5b506101d3610bdc565b3480156103a957600080fd5b506101d36103b8366004611304565b610c6c565b3480156103c957600080fd5b506101d36103d836600461131f565b610ce1565b3480156103e957600080fd5b506102746103f8366004611352565b6000908152600160205260409020546001600160a01b031690565b34801561041f57600080fd5b5061027461042e366004611297565b610d32565b34801561043f57600080fd5b50600054610274906001600160a01b031681565b34801561045f57600080fd5b5061027461046e366004611352565b6001602052600090815260409020546001600160a01b031681565b34801561049557600080fd5b506101d36104a4366004611120565b610e2e565b3480156104b557600080fd5b50600754610274906001600160a01b031681565b3480156104d557600080fd5b50600454610274906001600160a01b031681565b3480156104f557600080fd5b506101d3610504366004611120565b610f28565b34801561051557600080fd5b50600654610274906001600160a01b031681565b60006105406000356001600160e01b031916610d32565b90506001600160a01b038116158015906105645750600054600160a01b900460ff16155b6105b05760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101c2565b3660008037600080366000845af43d6000803e8080156105cf573d6000f35b3d6000fd5b505050565b6000546001600160a01b0316331461061f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6001600160a01b0381166106755760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101c2565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036106e65760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101c2565b6106f3816000600161101f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b031633146107705760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b816107bd5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101c2565b6001600160a01b03811660009081526002602052604090205460ff166108255760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101c2565b60005b828110156109bc57816001600160a01b0316600360008686858181106108505761085061136b565b90506020020160208101906108659190611297565b6001600160e01b03191681526020810191909152604001600020546001600160a01b0316036108d65760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101c2565b81600360008686858181106108ed576108ed61136b565b90506020020160208101906109029190611297565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061094a5761094a61136b565b905060200201602081019061095f9190611297565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806109b481611381565b915050610828565b50505050565b6000546060906001600160a01b03163314610a0b5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b610a18846000600161101f565b600080856001600160a01b03168585604051610a359291906113a8565b600060405180830381855af49150503d8060008114610a70576040519150601f19603f3d011682016040523d82523d6000602084013e610a75565b606091505b509150915081610aed5760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101c2565b95945050505050565b6000546001600160a01b03163314610b3c5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b610b4682826110aa565b5050565b6004546001600160a01b03163314610b925760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016101c2565b6004546040516000916001600160a01b0316907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf5683908390a3600480546001600160a01b0319169055565b6000546001600160a01b03163314610c225760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b60008054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b6000546001600160a01b03163314610d275760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6105d483838361101f565b6001600160e01b031981166000908152600360205260408120546001600160a01b0316610d925750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff1615610df057506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6004546001600160a01b03163314610e765760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016101c2565b6001600160a01b038116610ecc5760405162461bcd60e51b815260206004820152601f60248201527f6e6577206d616e6167657220697320746865207a65726f20616464726573730060448201526064016101c2565b6004546040516001600160a01b038084169216907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf568390600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f6e5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016101c2565b6001600160a01b038116610fc45760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016101c2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b6110765760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101c2565b80156110a457600082815260016020526040902080546001600160a01b0319166001600160a01b0385161790555b6105d483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b80356001600160a01b0381168114610e2957600080fd5b60006020828403121561113257600080fd5b61113b82611109565b9392505050565b60008060006040848603121561115757600080fd5b833567ffffffffffffffff8082111561116f57600080fd5b818601915086601f83011261118357600080fd5b81358181111561119257600080fd5b8760208260051b85010111156111a757600080fd5b6020928301955093506111bd9186019050611109565b90509250925092565b6000806000604084860312156111db57600080fd5b6111e484611109565b9250602084013567ffffffffffffffff8082111561120157600080fd5b818601915086601f83011261121557600080fd5b81358181111561122457600080fd5b87602082850101111561123657600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156112765785810183015185820160400152820161125a565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156112a957600080fd5b81356001600160e01b03198116811461113b57600080fd5b80358015158114610e2957600080fd5b600080604083850312156112e457600080fd5b6112ed83611109565b91506112fb602084016112c1565b90509250929050565b60006020828403121561131657600080fd5b61113b826112c1565b60008060006060848603121561133457600080fd5b61133d84611109565b9250602084013591506111bd604085016112c1565b60006020828403121561136457600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016113a157634e487b7160e01b600052601160045260246000fd5b5060010190565b818382376000910190815291905056fea164736f6c6343000812000a", - "devdoc": { - "kind": "dev", - "methods": { - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" }, - "upgradeToAndCall(address,bytes)": { - "params": { - "_data": "Calldata to delegatecall the new implementation with.", - "_implementation": "Address of the implementation contract." - } + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" } - }, - "version": 1 + ], + "name": "OwnershipTransferred", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" - }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeToAndCall(address,bytes)": { - "notice": "Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades." + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 1673, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 1675, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "pauseProxy", - "offset": 20, - "slot": "0", - "type": "t_bool" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 1679, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 1683, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "_manager", + "outputs": [ { - "astId": 1687, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_owner", + "outputs": [ { - "astId": 750, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "_manager", - "offset": 0, - "slot": "4", - "type": "t_address" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 752, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "lockIdNftForRegister", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ { - "astId": 754, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "l2CrossDomainMessenger", - "offset": 0, - "slot": "6", - "type": "t_address" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 756, - "contract": "contracts/L2/L1StosInL2Proxy.sol:L1StosInL2Proxy", - "label": "l1Register", - "offset": 0, - "slot": "7", - "type": "t_address" + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Register", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2CrossDomainMessenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockIdNftForRegister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceManagership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "transferManagership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" } - } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2AirdropStosVault.json b/contracts/data/tonstarter/abi/L2AirdropStosVault.json index 3717bc2..e6e49b8 100644 --- a/contracts/data/tonstarter/abi/L2AirdropStosVault.json +++ b/contracts/data/tonstarter/abi/L2AirdropStosVault.json @@ -1,1180 +1,829 @@ -{ - "address": "0xfd0c0AA6505125eFab34A2195F1b9C99AFE8fB06", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "indexed": false, - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "parmas", - "type": "tuple" - } - ], - "name": "InitializedL2AirdropStosVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newDividendPool", - "type": "address" - } - ], - "name": "SetDividendPool", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "availableClaimAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "dividendPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "getCurrentRound", - "outputs": [ - { - "internalType": "uint256", - "name": "round", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newDividendPool", - "type": "address" - } - ], - "name": "setDividendPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "internalType": "struct LibScheduleVault.VaultInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xbb7b2411a65ae846db5001b1c225680b1890eeb806bae832f410260800ee19f0", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xfd0c0AA6505125eFab34A2195F1b9C99AFE8fB06", - "transactionIndex": 0, - "gasUsed": "2120489", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb9ec76b59ab802c581e45c0dad982d4396457f7a2f91b569187489be9ddb20e9", - "transactionHash": "0xbb7b2411a65ae846db5001b1c225680b1890eeb806bae832f410260800ee19f0", - "logs": [], - "blockNumber": 23694, - "cumulativeGasUsed": "2120489", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b43c6570b3b1b6f48b8dc9da694ef9ce", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"parmas\",\"type\":\"tuple\"}],\"name\":\"InitializedL2AirdropStosVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newDividendPool\",\"type\":\"address\"}],\"name\":\"SetDividendPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"availableClaimAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dividendPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"getCurrentRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDividendPool\",\"type\":\"address\"}],\"name\":\"setDividendPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"internalType\":\"struct LibScheduleVault.VaultInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vaults that anybody claim according to a schedule\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2AirdropStosVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2AirdropStosVault.sol\":\"L2AirdropStosVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropStosVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2AirdropStosVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/LibProject.sol\\\";\\n\\ninterface IDividendPool {\\n function distribute(address token, uint256 amount) external;\\n}\\n\\n/**\\n * @title L2AirdropStosVault\\n * @dev Vaults that anybody claim according to a schedule\\n */\\ncontract L2AirdropStosVault is L2CustomVaultBase, L2AirdropStosVaultStorage {\\n using SafeERC20 for IERC20;\\n\\n event InitializedL2AirdropStosVault(\\n address l2Token,\\n LibProject.InitalParameterScheduleVault parmas\\n );\\n event ClaimedInVault(address l2Token, uint256 amount);\\n event SetDividendPool(address newDividendPool);\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setDividendPool(\\n address _newDividendPool\\n ) external onlyOwner nonZeroAddress(_newDividendPool)\\n {\\n require(dividendPool != _newDividendPool, \\\"same\\\");\\n dividendPool = _newDividendPool;\\n\\n emit SetDividendPool(_newDividendPool);\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function initialize(\\n address l2Token,\\n LibProject.InitalParameterScheduleVault memory params\\n )\\n external onlyL2ProjectManagerOrVaultAdmin(l2Token)\\n {\\n require(params.firstClaimTime > block.number, \\\"first claim time passed\\\");\\n require(params.totalAllocatedAmount != 0 && params.totalClaimCount != 0 && params.roundIntervalTime != 0, \\\"wrong value\\\");\\n if (params.totalClaimCount > 1) require(params.secondClaimTime > params.firstClaimTime, \\\"wrong the second claim time\\\");\\n require(params.totalAllocatedAmount > params.firstClaimAmount, \\\"wrong the first claim amount\\\");\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n require(info.totalAllocatedAmount == 0, \\\"already initialized\\\");\\n\\n LibScheduleVault.VaultInfo memory data = LibScheduleVault.VaultInfo({\\n claimer: params.claimer,\\n totalAllocatedAmount: params.totalAllocatedAmount,\\n totalClaimCount: params.totalClaimCount,\\n totalClaimedAmount: 0,\\n firstClaimAmount: params.firstClaimAmount,\\n firstClaimTime: params.firstClaimTime,\\n secondClaimTime: params.secondClaimTime,\\n roundInterval: params.roundIntervalTime,\\n latestClaimedRound: 0\\n });\\n vaultInfo[l2Token] = data;\\n\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), params.totalAllocatedAmount);\\n\\n emit InitializedL2AirdropStosVault(l2Token, params);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n function claim(address l2Token)\\n external nonZeroAddress(l2Token)\\n {\\n uint256 amount = _availableClaimAmount(l2Token);\\n require(amount != 0, \\\"no claimable amount\\\");\\n require(amount <= IERC20(l2Token).balanceOf(address(this)), 'insufficient balance');\\n vaultInfo[l2Token].totalClaimedAmount += amount;\\n\\n uint256 allowance = IERC20(l2Token).allowance(address(this), dividendPool);\\n if (allowance < amount) IERC20(l2Token).approve(dividendPool, type(uint256).max);\\n\\n IDividendPool(dividendPool).distribute(l2Token, amount);\\n\\n emit ClaimedInVault(l2Token, amount);\\n }\\n\\n\\n /* ========== VIEW ========== */\\n\\n function viewVaultInfo(address l2Token) external view returns (LibScheduleVault.VaultInfo memory){\\n\\n return vaultInfo[l2Token];\\n\\n }\\n\\n function getCurrentRound(address l2Token) public view returns (uint256 round){\\n\\n return _getCurrentRound(l2Token);\\n }\\n\\n function availableClaimAmount(address l2Token) public view returns (uint256 amount){\\n\\n return _availableClaimAmount(l2Token);\\n }\\n\\n /* === ======= internal ========== */\\n\\n function _getCurrentRound(address l2Token) internal view returns (uint256 round){\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n if(info.firstClaimTime != 0 && info.firstClaimTime <= block.timestamp && block.timestamp < info.secondClaimTime) {\\n round = 1;\\n } else if(info.secondClaimTime <= block.timestamp) {\\n round = (block.timestamp - uint256(info.secondClaimTime)) / uint256(info.roundInterval) + 2;\\n }\\n if (round > info.totalClaimCount) round = info.totalClaimCount;\\n }\\n\\n function _availableClaimAmount(address l2Token) internal view returns (uint256 amount){\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n uint256 curRound = _getCurrentRound(l2Token);\\n\\n if(info.latestClaimedRound < curRound) {\\n if (curRound == 1) {\\n amount = info.firstClaimAmount - info.totalClaimedAmount;\\n } else if (curRound < info.totalClaimCount) {\\n amount = (info.firstClaimAmount + ((info.totalAllocatedAmount - info.firstClaimAmount)/(info.totalClaimCount-1) * (curRound -1))) - info.totalClaimedAmount;\\n } else {\\n amount = info.totalAllocatedAmount - info.totalClaimedAmount;\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x55f41330b57dcc0bafc12838af606340f5aa3f2b5eb41668933167110b13af86\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropStosVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\n/**\\n * @title L2AirdropStosVaultStorage\\n * @dev\\n */\\ncontract L2AirdropStosVaultStorage {\\n\\n // l2token - VaultInfo\\n mapping(address => LibScheduleVault.VaultInfo) public vaultInfo;\\n address public dividendPool;\\n}\",\"keccak256\":\"0xcbb877088b210585362730456a0e0ea700ca0aec8ac7bf72e7aa26cf9907a406\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n address poolAddress;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x70aa30ad2bdcc19fee1890162b02f21077efadb0da73a0898d2806f96ff0ffe5\",\"license\":\"MIT\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b506125058061002d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063550d01a31161010f57806391d14854116100a2578063ad4c325a11610071578063ad4c325a14610573578063b911135f14610586578063d547741f146105af578063dc861da6146105c257600080fd5b806391d148541461050c578063a217fddf14610545578063a41823431461054d578063a7bd3e9d1461056057600080fd5b806375829def116100de57806375829def146103d957806375b238fc146103ec5780637fc46ba8146104135780639164359a1461043c57600080fd5b8063550d01a314610383578063565b1a25146103a657806363a8fd89146103b957806370480275146103c657600080fd5b80632f2ff15d11610187578063390d15d211610156578063390d15d21461031c57806350d2a2761461032f57806351e8152a1461035857806352351e851461036b57600080fd5b80632f2ff15d146102b857806330d172d5146102cb57806335b9ac66146102f657806336568abe1461030957600080fd5b80631e8948c3116101c35780631e8948c31461023a578063229852461461024d578063248a9ca31461028257806324d7806c146102a557600080fd5b806301ffc9a7146101ea5780631785f53c146102125780631e83409a14610227575b600080fd5b6101fd6101f83660046120c9565b6106c0565b60405190151581526020015b60405180910390f35b61022561022036600461210f565b6106f7565b005b61022561023536600461210f565b610789565b61022561024836600461212a565b610ab3565b6102747ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610209565b61027461029036600461215d565b60009081526004602052604090206001015490565b6101fd6102b336600461210f565b610c8d565b6102256102c6366004612176565b610ccd565b6008546102de906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61022561030436600461212a565b610cf7565b610225610317366004612176565b610ea2565b61027461032a36600461210f565b610f2e565b6102de61033d3660046120c9565b6003602052600090815260409020546001600160a01b031681565b6101fd61036636600461212a565b610f39565b6005546102de9061010090046001600160a01b031681565b6101fd61039136600461210f565b60026020526000908152604090205460ff1681565b6102746103b436600461210f565b610f76565b6000546101fd9060ff1681565b6102256103d436600461210f565b610f81565b6102256103e736600461210f565b61100b565b6102747fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102de61042136600461210f565b6006602052600090815260409020546001600160a01b031681565b6104af61044a36600461210f565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610209565b6101fd61051a366004612176565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610274600081565b61022561055b36600461210f565b61116d565b61022561056e36600461210f565b61128a565b6102256105813660046121c3565b6113c1565b6102de61059436600461215d565b6001602052600090815260409020546001600160a01b031681565b6102256105bd366004612176565b611975565b6106b36105d036600461210f565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600760209081526040918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b6040516102099190612294565b60006001600160e01b03198216637965db0b60e01b14806106f157506301ffc9a760e01b6001600160e01b03198316145b92915050565b61070033610c8d565b61075c5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ea2565b50565b806001600160a01b0381166107c55760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b60006107d08361199a565b9050806000036108225760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610753565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088a9190612327565b8111156108d95760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610753565b6001600160a01b03831660009081526007602052604081206003018054839290610904908490612356565b9091555050600854604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015260009185169063dd62ed3e90604401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190612327565b905081811015610a035760085460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529085169063095ea7b3906044016020604051808303816000875af11580156109dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a019190612369565b505b600854604051631f72642160e31b81526001600160a01b038681166004830152602482018590529091169063fb93210890604401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f89086dafc339c6f74b6f950c45520e5904b16cf96c7cd2f4702c7f9e46ce060493500190505b60405180910390a150505050565b816001600160a01b038116610aef5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b816001600160a01b038116610b2b5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6001600160a01b0380851660009081526006602052604090205485911615801590610b6f57506001600160a01b038181166000908152600660205260409020541633145b610bc95760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610753565b6001600160a01b03858116600090815260066020526040902054818616911603610c1e5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106f1565b600082815260046020526040902060010154610ce881611afb565b610cf28383611b05565b505050565b816001600160a01b038116610d335760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b816001600160a01b038116610d6f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b60055461010090046001600160a01b031615801590610d9d575060055461010090046001600160a01b031633145b610de95760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610753565b6001600160a01b03848116600090815260066020526040902054818516911603610e3e5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a40261939101610aa5565b6001600160a01b0381163314610f205760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610753565b610f2a8282611ba7565b5050565b60006106f18261199a565b60006001600160a01b03821615801590610f6f57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b60006106f182611c2a565b610f8a33610c8d565b610fe15760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ccd565b61101433610c8d565b61106b5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6001600160a01b0381166110c15760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610753565b6001600160a01b03811633036111195760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610753565b6111437fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ccd565b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ea2565b806001600160a01b0381166111a95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6111b233610c8d565b6112095760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6005546001600160a01b0380841661010090920416036112545760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b61129333610c8d565b6112ea5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b806001600160a01b0381166113265760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6008546001600160a01b0380841691160361136c5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f6e7ce59c579ce0cb4e3fca384521cc28064dfb08050aa555bf67c3853acf40cb9060200160405180910390a15050565b600554829061010090046001600160a01b031633148061141e57506001600160a01b03818116600090815260066020526040902054161580159061141e57506001600160a01b038181166000908152600660205260409020541633145b6114905760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610753565b43826080015163ffffffff16116114e95760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610753565b6020820151158015906114ff5750604082015115155b8015611514575060c082015163ffffffff1615155b6115605760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610753565b6001826040015111156115d057816080015163ffffffff168260a0015163ffffffff16116115d05760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610753565b81606001518260200151116116275760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610753565b6001600160a01b03808416600090815260076020908152604091829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301521561170b5760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610753565b600060405180610120016040528085600001516001600160a01b0316815260200185602001518152602001856040015181526020016000815260200185606001518152602001856080015163ffffffff1681526020018560a0015163ffffffff1681526020018560c0015163ffffffff168152602001600063ffffffff1681525090508060076000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff1602179055509050506118e2600560019054906101000a90046001600160a01b0316308660200151886001600160a01b0316611d60909392919063ffffffff16565b604080516001600160a01b038088168252865116602080830191909152860151818301529085015160608083019190915285015160808083019190915285015163ffffffff90811660a080840191909152860151811660c0808401919091528601511660e08201527f20d337b9dabafe7fe9d99c017abd30bf2ce9cb7c2fd3b6b8c9584e02f03722669061010001610c7e565b60008281526004602052604090206001015461199081611afb565b610cf28383611ba7565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611a3784611c2a565b90508082610100015163ffffffff161015611af45780600103611a6f5781606001518260800151611a68919061238b565b9250611af4565b8160400151811015611add576060820151611a8b60018361238b565b60018460400151611a9c919061238b565b84608001518560200151611ab0919061238b565b611aba919061239e565b611ac491906123c0565b8360800151611ad39190612356565b611a68919061238b565b81606001518260200151611af1919061238b565b92505b5050919050565b6107868133611e99565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f2a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b633390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610f2a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611cd95750428160a0015163ffffffff1611155b8015611cee57508060c0015163ffffffff1642105b15611cfc5760019150611d46565b428160c0015163ffffffff1611611d46578060e0015163ffffffff168160c0015163ffffffff1642611d2e919061238b565b611d38919061239e565b611d43906002612356565b91505b8060400151821115611d5a57806040015191505b50919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691611dd991906123fb565b6000604051808303816000865af19150503d8060008114611e16576040519150601f19603f3d011682016040523d82523d6000602084013e611e1b565b606091505b5091509150818015611e45575080511580611e45575080806020019051810190611e459190612369565b611e915760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610753565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f2a57611ecc81611f0e565b611ed7836020611f20565b604051602001611ee8929190612417565b60408051601f198184030181529082905262461bcd60e51b825261075391600401612498565b60606106f16001600160a01b03831660145b60606000611f2f8360026123c0565b611f3a906002612356565b67ffffffffffffffff811115611f5257611f52612199565b6040519080825280601f01601f191660200182016040528015611f7c576020820181803683370190505b509050600360fc1b81600081518110611f9757611f976124cb565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611fc657611fc66124cb565b60200101906001600160f81b031916908160001a9053506000611fea8460026123c0565b611ff5906001612356565b90505b600181111561207a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612036576120366124cb565b1a60f81b82828151811061204c5761204c6124cb565b60200101906001600160f81b031916908160001a90535060049490941c93612073816124e1565b9050611ff8565b508315610f6f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610753565b6000602082840312156120db57600080fd5b81356001600160e01b031981168114610f6f57600080fd5b80356001600160a01b038116811461210a57600080fd5b919050565b60006020828403121561212157600080fd5b610f6f826120f3565b6000806040838503121561213d57600080fd5b612146836120f3565b9150612154602084016120f3565b90509250929050565b60006020828403121561216f57600080fd5b5035919050565b6000806040838503121561218957600080fd5b82359150612154602084016120f3565b634e487b7160e01b600052604160045260246000fd5b803563ffffffff8116811461210a57600080fd5b6000808284036101008112156121d857600080fd5b6121e1846120f3565b925060e0601f19820112156121f557600080fd5b5060405160e0810181811067ffffffffffffffff8211171561222757634e487b7160e01b600052604160045260246000fd5b604052612236602085016120f3565b815260408401356020820152606084013560408201526080840135606082015261226260a085016121af565b608082015261227360c085016121af565b60a082015261228460e085016121af565b60c0820152809150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516122f960c084018263ffffffff169052565b5060e083015161231160e084018263ffffffff169052565b506101009283015163ffffffff16919092015290565b60006020828403121561233957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106f1576106f1612340565b60006020828403121561237b57600080fd5b81518015158114610f6f57600080fd5b818103818111156106f1576106f1612340565b6000826123bb57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176106f1576106f1612340565b60005b838110156123f25781810151838201526020016123da565b50506000910152565b6000825161240d8184602087016123d7565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161244f8160178501602088016123d7565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161248c8160288401602088016123d7565b01602801949350505050565b60208152600082518060208401526124b78160408501602087016123d7565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b6000816124f0576124f0612340565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063550d01a31161010f57806391d14854116100a2578063ad4c325a11610071578063ad4c325a14610573578063b911135f14610586578063d547741f146105af578063dc861da6146105c257600080fd5b806391d148541461050c578063a217fddf14610545578063a41823431461054d578063a7bd3e9d1461056057600080fd5b806375829def116100de57806375829def146103d957806375b238fc146103ec5780637fc46ba8146104135780639164359a1461043c57600080fd5b8063550d01a314610383578063565b1a25146103a657806363a8fd89146103b957806370480275146103c657600080fd5b80632f2ff15d11610187578063390d15d211610156578063390d15d21461031c57806350d2a2761461032f57806351e8152a1461035857806352351e851461036b57600080fd5b80632f2ff15d146102b857806330d172d5146102cb57806335b9ac66146102f657806336568abe1461030957600080fd5b80631e8948c3116101c35780631e8948c31461023a578063229852461461024d578063248a9ca31461028257806324d7806c146102a557600080fd5b806301ffc9a7146101ea5780631785f53c146102125780631e83409a14610227575b600080fd5b6101fd6101f83660046120c9565b6106c0565b60405190151581526020015b60405180910390f35b61022561022036600461210f565b6106f7565b005b61022561023536600461210f565b610789565b61022561024836600461212a565b610ab3565b6102747ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610209565b61027461029036600461215d565b60009081526004602052604090206001015490565b6101fd6102b336600461210f565b610c8d565b6102256102c6366004612176565b610ccd565b6008546102de906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61022561030436600461212a565b610cf7565b610225610317366004612176565b610ea2565b61027461032a36600461210f565b610f2e565b6102de61033d3660046120c9565b6003602052600090815260409020546001600160a01b031681565b6101fd61036636600461212a565b610f39565b6005546102de9061010090046001600160a01b031681565b6101fd61039136600461210f565b60026020526000908152604090205460ff1681565b6102746103b436600461210f565b610f76565b6000546101fd9060ff1681565b6102256103d436600461210f565b610f81565b6102256103e736600461210f565b61100b565b6102747fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102de61042136600461210f565b6006602052600090815260409020546001600160a01b031681565b6104af61044a36600461210f565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610209565b6101fd61051a366004612176565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610274600081565b61022561055b36600461210f565b61116d565b61022561056e36600461210f565b61128a565b6102256105813660046121c3565b6113c1565b6102de61059436600461215d565b6001602052600090815260409020546001600160a01b031681565b6102256105bd366004612176565b611975565b6106b36105d036600461210f565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600760209081526040918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b6040516102099190612294565b60006001600160e01b03198216637965db0b60e01b14806106f157506301ffc9a760e01b6001600160e01b03198316145b92915050565b61070033610c8d565b61075c5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ea2565b50565b806001600160a01b0381166107c55760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b60006107d08361199a565b9050806000036108225760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610753565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088a9190612327565b8111156108d95760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610753565b6001600160a01b03831660009081526007602052604081206003018054839290610904908490612356565b9091555050600854604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015260009185169063dd62ed3e90604401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190612327565b905081811015610a035760085460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529085169063095ea7b3906044016020604051808303816000875af11580156109dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a019190612369565b505b600854604051631f72642160e31b81526001600160a01b038681166004830152602482018590529091169063fb93210890604401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f89086dafc339c6f74b6f950c45520e5904b16cf96c7cd2f4702c7f9e46ce060493500190505b60405180910390a150505050565b816001600160a01b038116610aef5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b816001600160a01b038116610b2b5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6001600160a01b0380851660009081526006602052604090205485911615801590610b6f57506001600160a01b038181166000908152600660205260409020541633145b610bc95760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610753565b6001600160a01b03858116600090815260066020526040902054818616911603610c1e5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106f1565b600082815260046020526040902060010154610ce881611afb565b610cf28383611b05565b505050565b816001600160a01b038116610d335760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b816001600160a01b038116610d6f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b60055461010090046001600160a01b031615801590610d9d575060055461010090046001600160a01b031633145b610de95760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610753565b6001600160a01b03848116600090815260066020526040902054818516911603610e3e5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a40261939101610aa5565b6001600160a01b0381163314610f205760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610753565b610f2a8282611ba7565b5050565b60006106f18261199a565b60006001600160a01b03821615801590610f6f57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b60006106f182611c2a565b610f8a33610c8d565b610fe15760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ccd565b61101433610c8d565b61106b5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6001600160a01b0381166110c15760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610753565b6001600160a01b03811633036111195760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610753565b6111437fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ccd565b6107867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ea2565b806001600160a01b0381166111a95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6111b233610c8d565b6112095760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b6005546001600160a01b0380841661010090920416036112545760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b61129333610c8d565b6112ea5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610753565b806001600160a01b0381166113265760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610753565b6008546001600160a01b0380841691160361136c5760405162461bcd60e51b81526004016107539060208082526004908201526373616d6560e01b604082015260600190565b600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f6e7ce59c579ce0cb4e3fca384521cc28064dfb08050aa555bf67c3853acf40cb9060200160405180910390a15050565b600554829061010090046001600160a01b031633148061141e57506001600160a01b03818116600090815260066020526040902054161580159061141e57506001600160a01b038181166000908152600660205260409020541633145b6114905760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610753565b43826080015163ffffffff16116114e95760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610753565b6020820151158015906114ff5750604082015115155b8015611514575060c082015163ffffffff1615155b6115605760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610753565b6001826040015111156115d057816080015163ffffffff168260a0015163ffffffff16116115d05760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610753565b81606001518260200151116116275760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610753565b6001600160a01b03808416600090815260076020908152604091829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301521561170b5760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610753565b600060405180610120016040528085600001516001600160a01b0316815260200185602001518152602001856040015181526020016000815260200185606001518152602001856080015163ffffffff1681526020018560a0015163ffffffff1681526020018560c0015163ffffffff168152602001600063ffffffff1681525090508060076000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff1602179055509050506118e2600560019054906101000a90046001600160a01b0316308660200151886001600160a01b0316611d60909392919063ffffffff16565b604080516001600160a01b038088168252865116602080830191909152860151818301529085015160608083019190915285015160808083019190915285015163ffffffff90811660a080840191909152860151811660c0808401919091528601511660e08201527f20d337b9dabafe7fe9d99c017abd30bf2ce9cb7c2fd3b6b8c9584e02f03722669061010001610c7e565b60008281526004602052604090206001015461199081611afb565b610cf28383611ba7565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611a3784611c2a565b90508082610100015163ffffffff161015611af45780600103611a6f5781606001518260800151611a68919061238b565b9250611af4565b8160400151811015611add576060820151611a8b60018361238b565b60018460400151611a9c919061238b565b84608001518560200151611ab0919061238b565b611aba919061239e565b611ac491906123c0565b8360800151611ad39190612356565b611a68919061238b565b81606001518260200151611af1919061238b565b92505b5050919050565b6107868133611e99565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f2a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b633390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610f2a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611cd95750428160a0015163ffffffff1611155b8015611cee57508060c0015163ffffffff1642105b15611cfc5760019150611d46565b428160c0015163ffffffff1611611d46578060e0015163ffffffff168160c0015163ffffffff1642611d2e919061238b565b611d38919061239e565b611d43906002612356565b91505b8060400151821115611d5a57806040015191505b50919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691611dd991906123fb565b6000604051808303816000865af19150503d8060008114611e16576040519150601f19603f3d011682016040523d82523d6000602084013e611e1b565b606091505b5091509150818015611e45575080511580611e45575080806020019051810190611e459190612369565b611e915760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610753565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f2a57611ecc81611f0e565b611ed7836020611f20565b604051602001611ee8929190612417565b60408051601f198184030181529082905262461bcd60e51b825261075391600401612498565b60606106f16001600160a01b03831660145b60606000611f2f8360026123c0565b611f3a906002612356565b67ffffffffffffffff811115611f5257611f52612199565b6040519080825280601f01601f191660200182016040528015611f7c576020820181803683370190505b509050600360fc1b81600081518110611f9757611f976124cb565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611fc657611fc66124cb565b60200101906001600160f81b031916908160001a9053506000611fea8460026123c0565b611ff5906001612356565b90505b600181111561207a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612036576120366124cb565b1a60f81b82828151811061204c5761204c6124cb565b60200101906001600160f81b031916908160001a90535060049490941c93612073816124e1565b9050611ff8565b508315610f6f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610753565b6000602082840312156120db57600080fd5b81356001600160e01b031981168114610f6f57600080fd5b80356001600160a01b038116811461210a57600080fd5b919050565b60006020828403121561212157600080fd5b610f6f826120f3565b6000806040838503121561213d57600080fd5b612146836120f3565b9150612154602084016120f3565b90509250929050565b60006020828403121561216f57600080fd5b5035919050565b6000806040838503121561218957600080fd5b82359150612154602084016120f3565b634e487b7160e01b600052604160045260246000fd5b803563ffffffff8116811461210a57600080fd5b6000808284036101008112156121d857600080fd5b6121e1846120f3565b925060e0601f19820112156121f557600080fd5b5060405160e0810181811067ffffffffffffffff8211171561222757634e487b7160e01b600052604160045260246000fd5b604052612236602085016120f3565b815260408401356020820152606084013560408201526080840135606082015261226260a085016121af565b608082015261227360c085016121af565b60a082015261228460e085016121af565b60c0820152809150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516122f960c084018263ffffffff169052565b5060e083015161231160e084018263ffffffff169052565b506101009283015163ffffffff16919092015290565b60006020828403121561233957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106f1576106f1612340565b60006020828403121561237b57600080fd5b81518015158114610f6f57600080fd5b818103818111156106f1576106f1612340565b6000826123bb57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176106f1576106f1612340565b60005b838110156123f25781810151838201526020016123da565b50506000910152565b6000825161240d8184602087016123d7565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161244f8160178501602088016123d7565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161248c8160288401602088016123d7565b01602801949350505050565b60208152600082518060208401526124b78160408501602087016123d7565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b6000816124f0576124f0612340565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "details": "Vaults that anybody claim according to a schedule", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + ], + "name": "ClaimedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "indexed": false, + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "parmas", + "type": "tuple" + } + ], + "name": "InitializedL2AirdropStosVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2AirdropStosVault", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDividendPool", + "type": "address" + } + ], + "name": "SetDividendPool", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 5155, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 5159, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 5163, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 5167, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 24, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "availableClaimAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "dividendPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "getCurrentRound", + "outputs": [ + { + "internalType": "uint256", + "name": "round", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3667, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3669, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 3673, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 3502, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_struct(VaultInfo)4610_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3504, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "dividendPool", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newDividendPool", + "type": "address" + } + ], + "name": "setDividendPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_address,t_struct(VaultInfo)4610_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)4610_storage" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_struct(VaultInfo)4610_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 4593, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" + "internalType": "address", + "name": "claimer", + "type": "address" }, { - "astId": 4595, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 4597, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, { - "astId": 4599, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, { - "astId": 4601, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, { - "astId": 4603, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, { - "astId": 4605, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, { - "astId": 4607, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, { - "astId": 4609, - "contract": "contracts/L2/vaults/L2AirdropStosVault.sol:L2AirdropStosVault", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } ], - "numberOfBytes": "192" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + "internalType": "struct LibScheduleVault.VaultInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2AirdropStosVaultProxy.json b/contracts/data/tonstarter/abi/L2AirdropStosVaultProxy.json index 2b00b49..d854986 100644 --- a/contracts/data/tonstarter/abi/L2AirdropStosVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2AirdropStosVaultProxy.json @@ -1,1119 +1,678 @@ -{ - "address": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dividendPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x04b6160e62ce208229eedb85be27f08dfd55c2354959ff18a4925652ee817217", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", - "transactionIndex": 0, - "gasUsed": "1546269", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000200040000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf172f1e32cdd9da6973db3289883dae6f3d57c2914510c3e41fe7d6c6bc78d41", - "transactionHash": "0x04b6160e62ce208229eedb85be27f08dfd55c2354959ff18a4925652ee817217", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23695, - "transactionHash": "0x04b6160e62ce208229eedb85be27f08dfd55c2354959ff18a4925652ee817217", - "address": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0xf172f1e32cdd9da6973db3289883dae6f3d57c2914510c3e41fe7d6c6bc78d41" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 23695, - "transactionHash": "0x04b6160e62ce208229eedb85be27f08dfd55c2354959ff18a4925652ee817217", - "address": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xf172f1e32cdd9da6973db3289883dae6f3d57c2914510c3e41fe7d6c6bc78d41" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 23695, - "cumulativeGasUsed": "1546269", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b43c6570b3b1b6f48b8dc9da694ef9ce", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dividendPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2AirdropStosVaultProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2AirdropStosVaultProxy.sol\":\"L2AirdropStosVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropStosVaultProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBaseProxy.sol\\\";\\nimport { L2AirdropStosVaultStorage } from \\\"./L2AirdropStosVaultStorage.sol\\\";\\n\\n/**\\n * @title L2AirdropStosVaultProxy\\n * @dev\\n */\\ncontract L2AirdropStosVaultProxy is L2CustomVaultBaseProxy, L2AirdropStosVaultStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xdba158591e80c00fcdcb60fb21ca448c2273ea0e2b4c2514460aef25ec017e6e\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropStosVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\n/**\\n * @title L2AirdropStosVaultStorage\\n * @dev\\n */\\ncontract L2AirdropStosVaultStorage {\\n\\n // l2token - VaultInfo\\n mapping(address => LibScheduleVault.VaultInfo) public vaultInfo;\\n address public dividendPool;\\n}\",\"keccak256\":\"0xcbb877088b210585362730456a0e0ea700ca0aec8ac7bf72e7aa26cf9907a406\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBaseProxy\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x32dc8c79ba6a7d1d3270e56c38f85745c20e844dc353cbe0b2bc03e72e95e487\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001b11833981519152806200005b565b6200005560008051602062001b1183398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119a7806200016a6000396000f3fe6080604052600436106101c65760003560e01c80635cc797d8116100f75780637fc46ba81161009557806391d148541161006457806391d14854146106e1578063a217fddf14610727578063b911135f1461073c578063d547741f1461077257610218565b80637fc46ba8146105805780638b8f4a65146105b65780638d4fdb40146105d65780639164359a146105f657610218565b806375829def116100d157806375829def146104ec57806375b238fc1461050c5780637cb00d25146105405780637cd5f6631461056057610218565b80635cc797d81461049257806363a8fd89146104b257806370480275146104cc57610218565b806336568abe1161016457806350d2a2761161013e57806350d2a276146103c157806352351e85146103f7578063550d01a31461041c5780635c60da1b1461044c57610218565b806336568abe146103615780633659cfe6146103815780634a5df50f146103a157610218565b8063248a9ca3116101a0578063248a9ca3146102b957806324d7806c146102e95780632f2ff15d1461030957806330d172d51461032957610218565b806301ffc9a7146102225780631785f53c14610257578063229852461461027757610218565b366102185760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610220610792565b005b34801561022e57600080fd5b5061024261023d366004611659565b61083b565b60405190151581526020015b60405180910390f35b34801561026357600080fd5b5061022061027236600461169a565b610872565b34801561028357600080fd5b506102ab7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024e565b3480156102c557600080fd5b506102ab6102d43660046116b5565b60009081526004602052604090206001015490565b3480156102f557600080fd5b5061024261030436600461169a565b6108ed565b34801561031557600080fd5b506102206103243660046116ce565b61092d565b34801561033557600080fd5b50600854610349906001600160a01b031681565b6040516001600160a01b03909116815260200161024e565b34801561036d57600080fd5b5061022061037c3660046116ce565b610952565b34801561038d57600080fd5b5061022061039c36600461169a565b6109de565b3480156103ad57600080fd5b506102206103bc3660046116fa565b610b37565b3480156103cd57600080fd5b506103496103dc366004611659565b6003602052600090815260409020546001600160a01b031681565b34801561040357600080fd5b506005546103499061010090046001600160a01b031681565b34801561042857600080fd5b5061024261043736600461169a565b60026020526000908152604090205460ff1681565b34801561045857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610349565b34801561049e57600080fd5b506102206104ad36600461178e565b610de4565b3480156104be57600080fd5b506000546102429060ff1681565b3480156104d857600080fd5b506102206104e736600461169a565b610e3c565b3480156104f857600080fd5b5061022061050736600461169a565b610eb4565b34801561051857600080fd5b506102ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561054c57600080fd5b5061022061055b3660046117b8565b611004565b34801561056c57600080fd5b5061022061057b3660046117d3565b611065565b34801561058c57600080fd5b5061034961059b36600461169a565b6006602052600090815260409020546001600160a01b031681565b3480156105c257600080fd5b506103496105d13660046116b5565b6110be565b3480156105e257600080fd5b506103496105f1366004611659565b6110db565b34801561060257600080fd5b5061068461061136600461169a565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161024e565b3480156106ed57600080fd5b506102426106fc3660046116ce565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073357600080fd5b506102ab600081565b34801561074857600080fd5b506103496107573660046116b5565b6001602052600090815260409020546001600160a01b031681565b34801561077e57600080fd5b5061022061078d3660046116ce565b6111d7565b60006107a96000356001600160e01b0319166110db565b90506001600160a01b038116158015906107c6575060005460ff16155b6108125760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161020f565b3660008037600080366000845af43d6000803e808015610831573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061086c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61087b336108ed565b6108c05760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610952565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661086c565b600082815260046020526040902060010154610948816111fc565b6108368383611206565b6001600160a01b03811633146109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161020f565b6109da82826112a8565b5050565b6109e7336108ed565b610a2c5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610a825760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161020f565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610af35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161020f565b610b00816000600161132b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b40336108ed565b610b855760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b81610bd25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161020f565b6001600160a01b03811660009081526002602052604090205460ff16610c3a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161020f565b60005b82811015610dde57816001600160a01b031660036000868685818110610c6557610c65611806565b9050602002016020810190610c7a9190611659565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ceb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161020f565b8160036000868685818110610d0257610d02611806565b9050602002016020810190610d179190611659565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d6c57610d6c611806565b9050602002016020810190610d819190611659565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610dd681611832565b915050610c3d565b50505050565b610ded336108ed565b610e325760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6109da82826113c3565b610e45336108ed565b610e8a5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b610ebd336108ed565b610f025760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610f585760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161020f565b6001600160a01b0381163303610fb05760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161020f565b610fda7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610952565b61100d336108ed565b6110525760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6000805460ff1916911515919091179055565b61106e336108ed565b6110b35760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b61083683838361132b565b6000818152600160205260408120546001600160a01b031661086c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661113b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561119957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111f2816111fc565b61083683836112a8565b6108ea8133611422565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112643390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109da5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113825760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161020f565b80156113bd576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61083683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5761145581611497565b6114608360206114a9565b60405160200161147192919061186f565b60408051601f198184030181529082905262461bcd60e51b825261020f916004016118f0565b606061086c6001600160a01b03831660145b606060006114b8836002611923565b6114c390600261193a565b67ffffffffffffffff8111156114db576114db61194d565b6040519080825280601f01601f191660200182016040528015611505576020820181803683370190505b509050600360fc1b8160008151811061152057611520611806565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061154f5761154f611806565b60200101906001600160f81b031916908160001a9053506000611573846002611923565b61157e90600161193a565b90505b6001811115611603577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115bf576115bf611806565b1a60f81b8282815181106115d5576115d5611806565b60200101906001600160f81b031916908160001a90535060049490941c936115fc81611963565b9050611581565b5083156116525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020f565b9392505050565b60006020828403121561166b57600080fd5b81356001600160e01b03198116811461165257600080fd5b80356001600160a01b03811681146111d257600080fd5b6000602082840312156116ac57600080fd5b61165282611683565b6000602082840312156116c757600080fd5b5035919050565b600080604083850312156116e157600080fd5b823591506116f160208401611683565b90509250929050565b60008060006040848603121561170f57600080fd5b833567ffffffffffffffff8082111561172757600080fd5b818601915086601f83011261173b57600080fd5b81358181111561174a57600080fd5b8760208260051b850101111561175f57600080fd5b6020928301955093506117759186019050611683565b90509250925092565b803580151581146111d257600080fd5b600080604083850312156117a157600080fd5b6117aa83611683565b91506116f16020840161177e565b6000602082840312156117ca57600080fd5b6116528261177e565b6000806000606084860312156117e857600080fd5b6117f184611683565b9250602084013591506117756040850161177e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118445761184461181c565b5060010190565b60005b8381101561186657818101518382015260200161184e565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118a781601785016020880161184b565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118e481602884016020880161184b565b01602801949350505050565b602081526000825180602084015261190f81604085016020870161184b565b601f01601f19169190910160400192915050565b808202811582820484141761086c5761086c61181c565b8082018082111561086c5761086c61181c565b634e487b7160e01b600052604160045260246000fd5b6000816119725761197261181c565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101c65760003560e01c80635cc797d8116100f75780637fc46ba81161009557806391d148541161006457806391d14854146106e1578063a217fddf14610727578063b911135f1461073c578063d547741f1461077257610218565b80637fc46ba8146105805780638b8f4a65146105b65780638d4fdb40146105d65780639164359a146105f657610218565b806375829def116100d157806375829def146104ec57806375b238fc1461050c5780637cb00d25146105405780637cd5f6631461056057610218565b80635cc797d81461049257806363a8fd89146104b257806370480275146104cc57610218565b806336568abe1161016457806350d2a2761161013e57806350d2a276146103c157806352351e85146103f7578063550d01a31461041c5780635c60da1b1461044c57610218565b806336568abe146103615780633659cfe6146103815780634a5df50f146103a157610218565b8063248a9ca3116101a0578063248a9ca3146102b957806324d7806c146102e95780632f2ff15d1461030957806330d172d51461032957610218565b806301ffc9a7146102225780631785f53c14610257578063229852461461027757610218565b366102185760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610220610792565b005b34801561022e57600080fd5b5061024261023d366004611659565b61083b565b60405190151581526020015b60405180910390f35b34801561026357600080fd5b5061022061027236600461169a565b610872565b34801561028357600080fd5b506102ab7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024e565b3480156102c557600080fd5b506102ab6102d43660046116b5565b60009081526004602052604090206001015490565b3480156102f557600080fd5b5061024261030436600461169a565b6108ed565b34801561031557600080fd5b506102206103243660046116ce565b61092d565b34801561033557600080fd5b50600854610349906001600160a01b031681565b6040516001600160a01b03909116815260200161024e565b34801561036d57600080fd5b5061022061037c3660046116ce565b610952565b34801561038d57600080fd5b5061022061039c36600461169a565b6109de565b3480156103ad57600080fd5b506102206103bc3660046116fa565b610b37565b3480156103cd57600080fd5b506103496103dc366004611659565b6003602052600090815260409020546001600160a01b031681565b34801561040357600080fd5b506005546103499061010090046001600160a01b031681565b34801561042857600080fd5b5061024261043736600461169a565b60026020526000908152604090205460ff1681565b34801561045857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610349565b34801561049e57600080fd5b506102206104ad36600461178e565b610de4565b3480156104be57600080fd5b506000546102429060ff1681565b3480156104d857600080fd5b506102206104e736600461169a565b610e3c565b3480156104f857600080fd5b5061022061050736600461169a565b610eb4565b34801561051857600080fd5b506102ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561054c57600080fd5b5061022061055b3660046117b8565b611004565b34801561056c57600080fd5b5061022061057b3660046117d3565b611065565b34801561058c57600080fd5b5061034961059b36600461169a565b6006602052600090815260409020546001600160a01b031681565b3480156105c257600080fd5b506103496105d13660046116b5565b6110be565b3480156105e257600080fd5b506103496105f1366004611659565b6110db565b34801561060257600080fd5b5061068461061136600461169a565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161024e565b3480156106ed57600080fd5b506102426106fc3660046116ce565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073357600080fd5b506102ab600081565b34801561074857600080fd5b506103496107573660046116b5565b6001602052600090815260409020546001600160a01b031681565b34801561077e57600080fd5b5061022061078d3660046116ce565b6111d7565b60006107a96000356001600160e01b0319166110db565b90506001600160a01b038116158015906107c6575060005460ff16155b6108125760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161020f565b3660008037600080366000845af43d6000803e808015610831573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061086c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61087b336108ed565b6108c05760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610952565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661086c565b600082815260046020526040902060010154610948816111fc565b6108368383611206565b6001600160a01b03811633146109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161020f565b6109da82826112a8565b5050565b6109e7336108ed565b610a2c5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610a825760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161020f565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610af35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161020f565b610b00816000600161132b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b40336108ed565b610b855760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b81610bd25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161020f565b6001600160a01b03811660009081526002602052604090205460ff16610c3a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161020f565b60005b82811015610dde57816001600160a01b031660036000868685818110610c6557610c65611806565b9050602002016020810190610c7a9190611659565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ceb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161020f565b8160036000868685818110610d0257610d02611806565b9050602002016020810190610d179190611659565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d6c57610d6c611806565b9050602002016020810190610d819190611659565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610dd681611832565b915050610c3d565b50505050565b610ded336108ed565b610e325760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6109da82826113c3565b610e45336108ed565b610e8a5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b610ebd336108ed565b610f025760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610f585760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161020f565b6001600160a01b0381163303610fb05760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161020f565b610fda7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610952565b61100d336108ed565b6110525760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6000805460ff1916911515919091179055565b61106e336108ed565b6110b35760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b61083683838361132b565b6000818152600160205260408120546001600160a01b031661086c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661113b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561119957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111f2816111fc565b61083683836112a8565b6108ea8133611422565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112643390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109da5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113825760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161020f565b80156113bd576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61083683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5761145581611497565b6114608360206114a9565b60405160200161147192919061186f565b60408051601f198184030181529082905262461bcd60e51b825261020f916004016118f0565b606061086c6001600160a01b03831660145b606060006114b8836002611923565b6114c390600261193a565b67ffffffffffffffff8111156114db576114db61194d565b6040519080825280601f01601f191660200182016040528015611505576020820181803683370190505b509050600360fc1b8160008151811061152057611520611806565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061154f5761154f611806565b60200101906001600160f81b031916908160001a9053506000611573846002611923565b61157e90600161193a565b90505b6001811115611603577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115bf576115bf611806565b1a60f81b8282815181106115d5576115d5611806565b60200101906001600160f81b031916908160001a90535060049490941c936115fc81611963565b9050611581565b5083156116525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020f565b9392505050565b60006020828403121561166b57600080fd5b81356001600160e01b03198116811461165257600080fd5b80356001600160a01b03811681146111d257600080fd5b6000602082840312156116ac57600080fd5b61165282611683565b6000602082840312156116c757600080fd5b5035919050565b600080604083850312156116e157600080fd5b823591506116f160208401611683565b90509250929050565b60008060006040848603121561170f57600080fd5b833567ffffffffffffffff8082111561172757600080fd5b818601915086601f83011261173b57600080fd5b81358181111561174a57600080fd5b8760208260051b850101111561175f57600080fd5b6020928301955093506117759186019050611683565b90509250925092565b803580151581146111d257600080fd5b600080604083850312156117a157600080fd5b6117aa83611683565b91506116f16020840161177e565b6000602082840312156117ca57600080fd5b6116528261177e565b6000806000606084860312156117e857600080fd5b6117f184611683565b9250602084013591506117756040850161177e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118445761184461181c565b5060010190565b60005b8381101561186657818101518382015260200161184e565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118a781601785016020880161184b565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118e481602884016020880161184b565b01602801949350505050565b602081526000825180602084015261190f81604085016020870161184b565b601f01601f19169190910160400192915050565b808202811582820484141761086c5761086c61181c565b8082018082111561086c5761086c61181c565b634e487b7160e01b600052604160045260246000fd5b6000816119725761197261181c565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2AirdropStosVaultProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 5155, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 5159, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 5163, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 5167, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 3667, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 3669, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dividendPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3673, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3502, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_struct(VaultInfo)4610_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3504, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "dividendPool", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_struct(VaultInfo)4610_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)4610_storage" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_struct(VaultInfo)4610_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ - { - "astId": 4593, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 4595, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 4597, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 4599, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 4601, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 4603, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 4605, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 4607, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 4609, - "contract": "contracts/L2/vaults/L2AirdropStosVaultProxy.sol:L2AirdropStosVaultProxy", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" - } - ], - "numberOfBytes": "192" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2AirdropTonStakerVaultProxy.json b/contracts/data/tonstarter/abi/L2AirdropTonStakerVaultProxy.json index d08dc46..073a3f5 100644 --- a/contracts/data/tonstarter/abi/L2AirdropTonStakerVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2AirdropTonStakerVaultProxy.json @@ -1,1124 +1,683 @@ -{ - "address": "0x5d85cD9D3e2864D4a156497083eb6E4394bF8aae", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dividendPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xe757467d595dc9cf9279575b7aefa13f4afa7a6352246ed7eb5dc0bdb558dfb2", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x5d85cD9D3e2864D4a156497083eb6E4394bF8aae", - "transactionIndex": 0, - "gasUsed": "1546269", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000400000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000200000000000040000000000000000000000000000000000000000000000", - "blockHash": "0xd5c5cda685efa95869f36493042c762ef2eef19348a8d15781719a762fd4af6d", - "transactionHash": "0xe757467d595dc9cf9279575b7aefa13f4afa7a6352246ed7eb5dc0bdb558dfb2", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23736, - "transactionHash": "0xe757467d595dc9cf9279575b7aefa13f4afa7a6352246ed7eb5dc0bdb558dfb2", - "address": "0x5d85cD9D3e2864D4a156497083eb6E4394bF8aae", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0xd5c5cda685efa95869f36493042c762ef2eef19348a8d15781719a762fd4af6d" +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 23736, - "transactionHash": "0xe757467d595dc9cf9279575b7aefa13f4afa7a6352246ed7eb5dc0bdb558dfb2", - "address": "0x5d85cD9D3e2864D4a156497083eb6E4394bF8aae", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xd5c5cda685efa95869f36493042c762ef2eef19348a8d15781719a762fd4af6d" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 23736, - "cumulativeGasUsed": "1546269", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "5dc3b2c913139ecf944a1377bf6efca4", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dividendPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2AirdropTonStakerVaultProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol\":\"L2AirdropTonStakerVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBaseProxy.sol\\\";\\nimport { L2AirdropTonVaultStorage } from \\\"./L2AirdropTonVaultStorage.sol\\\";\\n\\n/**\\n * @title L2AirdropTonStakerVaultProxy\\n * @dev\\n */\\ncontract L2AirdropTonStakerVaultProxy is L2CustomVaultBaseProxy, L2AirdropTonVaultStorage {\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor () {\\n\\n }\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xc7254ec85612d09b3d1035a68cb23ffd2773c6684d8b589a878d3dbf2a94760f\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\n/**\\n * @title L2AirdropTonVaultStorage\\n * @dev\\n */\\ncontract L2AirdropTonVaultStorage {\\n\\n // l2token - VaultInfo\\n mapping(address => LibScheduleVault.VaultInfo) public vaultInfo;\\n address public dividendPool;\\n}\",\"keccak256\":\"0x004021982d34a75e8f2bc05c8155673992790a55234f94562a956b8c8e4d5f4f\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBaseProxy\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x32dc8c79ba6a7d1d3270e56c38f85745c20e844dc353cbe0b2bc03e72e95e487\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001b11833981519152806200005b565b6200005560008051602062001b1183398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119a7806200016a6000396000f3fe6080604052600436106101c65760003560e01c80635cc797d8116100f75780637fc46ba81161009557806391d148541161006457806391d14854146106e1578063a217fddf14610727578063b911135f1461073c578063d547741f1461077257610218565b80637fc46ba8146105805780638b8f4a65146105b65780638d4fdb40146105d65780639164359a146105f657610218565b806375829def116100d157806375829def146104ec57806375b238fc1461050c5780637cb00d25146105405780637cd5f6631461056057610218565b80635cc797d81461049257806363a8fd89146104b257806370480275146104cc57610218565b806336568abe1161016457806350d2a2761161013e57806350d2a276146103c157806352351e85146103f7578063550d01a31461041c5780635c60da1b1461044c57610218565b806336568abe146103615780633659cfe6146103815780634a5df50f146103a157610218565b8063248a9ca3116101a0578063248a9ca3146102b957806324d7806c146102e95780632f2ff15d1461030957806330d172d51461032957610218565b806301ffc9a7146102225780631785f53c14610257578063229852461461027757610218565b366102185760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610220610792565b005b34801561022e57600080fd5b5061024261023d366004611659565b61083b565b60405190151581526020015b60405180910390f35b34801561026357600080fd5b5061022061027236600461169a565b610872565b34801561028357600080fd5b506102ab7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024e565b3480156102c557600080fd5b506102ab6102d43660046116b5565b60009081526004602052604090206001015490565b3480156102f557600080fd5b5061024261030436600461169a565b6108ed565b34801561031557600080fd5b506102206103243660046116ce565b61092d565b34801561033557600080fd5b50600854610349906001600160a01b031681565b6040516001600160a01b03909116815260200161024e565b34801561036d57600080fd5b5061022061037c3660046116ce565b610952565b34801561038d57600080fd5b5061022061039c36600461169a565b6109de565b3480156103ad57600080fd5b506102206103bc3660046116fa565b610b37565b3480156103cd57600080fd5b506103496103dc366004611659565b6003602052600090815260409020546001600160a01b031681565b34801561040357600080fd5b506005546103499061010090046001600160a01b031681565b34801561042857600080fd5b5061024261043736600461169a565b60026020526000908152604090205460ff1681565b34801561045857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610349565b34801561049e57600080fd5b506102206104ad36600461178e565b610de4565b3480156104be57600080fd5b506000546102429060ff1681565b3480156104d857600080fd5b506102206104e736600461169a565b610e3c565b3480156104f857600080fd5b5061022061050736600461169a565b610eb4565b34801561051857600080fd5b506102ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561054c57600080fd5b5061022061055b3660046117b8565b611004565b34801561056c57600080fd5b5061022061057b3660046117d3565b611065565b34801561058c57600080fd5b5061034961059b36600461169a565b6006602052600090815260409020546001600160a01b031681565b3480156105c257600080fd5b506103496105d13660046116b5565b6110be565b3480156105e257600080fd5b506103496105f1366004611659565b6110db565b34801561060257600080fd5b5061068461061136600461169a565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161024e565b3480156106ed57600080fd5b506102426106fc3660046116ce565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073357600080fd5b506102ab600081565b34801561074857600080fd5b506103496107573660046116b5565b6001602052600090815260409020546001600160a01b031681565b34801561077e57600080fd5b5061022061078d3660046116ce565b6111d7565b60006107a96000356001600160e01b0319166110db565b90506001600160a01b038116158015906107c6575060005460ff16155b6108125760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161020f565b3660008037600080366000845af43d6000803e808015610831573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061086c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61087b336108ed565b6108c05760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610952565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661086c565b600082815260046020526040902060010154610948816111fc565b6108368383611206565b6001600160a01b03811633146109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161020f565b6109da82826112a8565b5050565b6109e7336108ed565b610a2c5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610a825760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161020f565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610af35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161020f565b610b00816000600161132b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b40336108ed565b610b855760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b81610bd25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161020f565b6001600160a01b03811660009081526002602052604090205460ff16610c3a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161020f565b60005b82811015610dde57816001600160a01b031660036000868685818110610c6557610c65611806565b9050602002016020810190610c7a9190611659565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ceb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161020f565b8160036000868685818110610d0257610d02611806565b9050602002016020810190610d179190611659565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d6c57610d6c611806565b9050602002016020810190610d819190611659565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610dd681611832565b915050610c3d565b50505050565b610ded336108ed565b610e325760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6109da82826113c3565b610e45336108ed565b610e8a5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b610ebd336108ed565b610f025760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610f585760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161020f565b6001600160a01b0381163303610fb05760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161020f565b610fda7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610952565b61100d336108ed565b6110525760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6000805460ff1916911515919091179055565b61106e336108ed565b6110b35760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b61083683838361132b565b6000818152600160205260408120546001600160a01b031661086c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661113b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561119957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111f2816111fc565b61083683836112a8565b6108ea8133611422565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112643390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109da5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113825760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161020f565b80156113bd576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61083683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5761145581611497565b6114608360206114a9565b60405160200161147192919061186f565b60408051601f198184030181529082905262461bcd60e51b825261020f916004016118f0565b606061086c6001600160a01b03831660145b606060006114b8836002611923565b6114c390600261193a565b67ffffffffffffffff8111156114db576114db61194d565b6040519080825280601f01601f191660200182016040528015611505576020820181803683370190505b509050600360fc1b8160008151811061152057611520611806565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061154f5761154f611806565b60200101906001600160f81b031916908160001a9053506000611573846002611923565b61157e90600161193a565b90505b6001811115611603577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115bf576115bf611806565b1a60f81b8282815181106115d5576115d5611806565b60200101906001600160f81b031916908160001a90535060049490941c936115fc81611963565b9050611581565b5083156116525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020f565b9392505050565b60006020828403121561166b57600080fd5b81356001600160e01b03198116811461165257600080fd5b80356001600160a01b03811681146111d257600080fd5b6000602082840312156116ac57600080fd5b61165282611683565b6000602082840312156116c757600080fd5b5035919050565b600080604083850312156116e157600080fd5b823591506116f160208401611683565b90509250929050565b60008060006040848603121561170f57600080fd5b833567ffffffffffffffff8082111561172757600080fd5b818601915086601f83011261173b57600080fd5b81358181111561174a57600080fd5b8760208260051b850101111561175f57600080fd5b6020928301955093506117759186019050611683565b90509250925092565b803580151581146111d257600080fd5b600080604083850312156117a157600080fd5b6117aa83611683565b91506116f16020840161177e565b6000602082840312156117ca57600080fd5b6116528261177e565b6000806000606084860312156117e857600080fd5b6117f184611683565b9250602084013591506117756040850161177e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118445761184461181c565b5060010190565b60005b8381101561186657818101518382015260200161184e565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118a781601785016020880161184b565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118e481602884016020880161184b565b01602801949350505050565b602081526000825180602084015261190f81604085016020870161184b565b601f01601f19169190910160400192915050565b808202811582820484141761086c5761086c61181c565b8082018082111561086c5761086c61181c565b634e487b7160e01b600052604160045260246000fd5b6000816119725761197261181c565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101c65760003560e01c80635cc797d8116100f75780637fc46ba81161009557806391d148541161006457806391d14854146106e1578063a217fddf14610727578063b911135f1461073c578063d547741f1461077257610218565b80637fc46ba8146105805780638b8f4a65146105b65780638d4fdb40146105d65780639164359a146105f657610218565b806375829def116100d157806375829def146104ec57806375b238fc1461050c5780637cb00d25146105405780637cd5f6631461056057610218565b80635cc797d81461049257806363a8fd89146104b257806370480275146104cc57610218565b806336568abe1161016457806350d2a2761161013e57806350d2a276146103c157806352351e85146103f7578063550d01a31461041c5780635c60da1b1461044c57610218565b806336568abe146103615780633659cfe6146103815780634a5df50f146103a157610218565b8063248a9ca3116101a0578063248a9ca3146102b957806324d7806c146102e95780632f2ff15d1461030957806330d172d51461032957610218565b806301ffc9a7146102225780631785f53c14610257578063229852461461027757610218565b366102185760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610220610792565b005b34801561022e57600080fd5b5061024261023d366004611659565b61083b565b60405190151581526020015b60405180910390f35b34801561026357600080fd5b5061022061027236600461169a565b610872565b34801561028357600080fd5b506102ab7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024e565b3480156102c557600080fd5b506102ab6102d43660046116b5565b60009081526004602052604090206001015490565b3480156102f557600080fd5b5061024261030436600461169a565b6108ed565b34801561031557600080fd5b506102206103243660046116ce565b61092d565b34801561033557600080fd5b50600854610349906001600160a01b031681565b6040516001600160a01b03909116815260200161024e565b34801561036d57600080fd5b5061022061037c3660046116ce565b610952565b34801561038d57600080fd5b5061022061039c36600461169a565b6109de565b3480156103ad57600080fd5b506102206103bc3660046116fa565b610b37565b3480156103cd57600080fd5b506103496103dc366004611659565b6003602052600090815260409020546001600160a01b031681565b34801561040357600080fd5b506005546103499061010090046001600160a01b031681565b34801561042857600080fd5b5061024261043736600461169a565b60026020526000908152604090205460ff1681565b34801561045857600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610349565b34801561049e57600080fd5b506102206104ad36600461178e565b610de4565b3480156104be57600080fd5b506000546102429060ff1681565b3480156104d857600080fd5b506102206104e736600461169a565b610e3c565b3480156104f857600080fd5b5061022061050736600461169a565b610eb4565b34801561051857600080fd5b506102ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561054c57600080fd5b5061022061055b3660046117b8565b611004565b34801561056c57600080fd5b5061022061057b3660046117d3565b611065565b34801561058c57600080fd5b5061034961059b36600461169a565b6006602052600090815260409020546001600160a01b031681565b3480156105c257600080fd5b506103496105d13660046116b5565b6110be565b3480156105e257600080fd5b506103496105f1366004611659565b6110db565b34801561060257600080fd5b5061068461061136600461169a565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161024e565b3480156106ed57600080fd5b506102426106fc3660046116ce565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073357600080fd5b506102ab600081565b34801561074857600080fd5b506103496107573660046116b5565b6001602052600090815260409020546001600160a01b031681565b34801561077e57600080fd5b5061022061078d3660046116ce565b6111d7565b60006107a96000356001600160e01b0319166110db565b90506001600160a01b038116158015906107c6575060005460ff16155b6108125760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161020f565b3660008037600080366000845af43d6000803e808015610831573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061086c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61087b336108ed565b6108c05760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610952565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661086c565b600082815260046020526040902060010154610948816111fc565b6108368383611206565b6001600160a01b03811633146109d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161020f565b6109da82826112a8565b5050565b6109e7336108ed565b610a2c5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610a825760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161020f565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610af35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161020f565b610b00816000600161132b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b40336108ed565b610b855760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b81610bd25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161020f565b6001600160a01b03811660009081526002602052604090205460ff16610c3a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161020f565b60005b82811015610dde57816001600160a01b031660036000868685818110610c6557610c65611806565b9050602002016020810190610c7a9190611659565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ceb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161020f565b8160036000868685818110610d0257610d02611806565b9050602002016020810190610d179190611659565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d6c57610d6c611806565b9050602002016020810190610d819190611659565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610dd681611832565b915050610c3d565b50505050565b610ded336108ed565b610e325760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6109da82826113c3565b610e45336108ed565b610e8a5760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b610ebd336108ed565b610f025760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6001600160a01b038116610f585760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161020f565b6001600160a01b0381163303610fb05760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161020f565b610fda7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261092d565b6108ea7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610952565b61100d336108ed565b6110525760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b6000805460ff1916911515919091179055565b61106e336108ed565b6110b35760405162461bcd60e51b8152602060048201526022602482015260008051602061197b83398151915260448201526134b760f11b606482015260840161020f565b61083683838361132b565b6000818152600160205260408120546001600160a01b031661086c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661113b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561119957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111f2816111fc565b61083683836112a8565b6108ea8133611422565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112643390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109da5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113825760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161020f565b80156113bd576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61083683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109da5761145581611497565b6114608360206114a9565b60405160200161147192919061186f565b60408051601f198184030181529082905262461bcd60e51b825261020f916004016118f0565b606061086c6001600160a01b03831660145b606060006114b8836002611923565b6114c390600261193a565b67ffffffffffffffff8111156114db576114db61194d565b6040519080825280601f01601f191660200182016040528015611505576020820181803683370190505b509050600360fc1b8160008151811061152057611520611806565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061154f5761154f611806565b60200101906001600160f81b031916908160001a9053506000611573846002611923565b61157e90600161193a565b90505b6001811115611603577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115bf576115bf611806565b1a60f81b8282815181106115d5576115d5611806565b60200101906001600160f81b031916908160001a90535060049490941c936115fc81611963565b9050611581565b5083156116525760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020f565b9392505050565b60006020828403121561166b57600080fd5b81356001600160e01b03198116811461165257600080fd5b80356001600160a01b03811681146111d257600080fd5b6000602082840312156116ac57600080fd5b61165282611683565b6000602082840312156116c757600080fd5b5035919050565b600080604083850312156116e157600080fd5b823591506116f160208401611683565b90509250929050565b60008060006040848603121561170f57600080fd5b833567ffffffffffffffff8082111561172757600080fd5b818601915086601f83011261173b57600080fd5b81358181111561174a57600080fd5b8760208260051b850101111561175f57600080fd5b6020928301955093506117759186019050611683565b90509250925092565b803580151581146111d257600080fd5b600080604083850312156117a157600080fd5b6117aa83611683565b91506116f16020840161177e565b6000602082840312156117ca57600080fd5b6116528261177e565b6000806000606084860312156117e857600080fd5b6117f184611683565b9250602084013591506117756040850161177e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118445761184461181c565b5060010190565b60005b8381101561186657818101518382015260200161184e565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118a781601785016020880161184b565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118e481602884016020880161184b565b01602801949350505050565b602081526000825180602084015261190f81604085016020870161184b565b601f01601f19169190910160400192915050565b808202811582820484141761086c5761086c61181c565b8082018082111561086c5761086c61181c565b634e487b7160e01b600052604160045260246000fd5b6000816119725761197261181c565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2AirdropTonStakerVaultProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 2570, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 2574, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 2578, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 2582, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 1863, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ { - "astId": 1865, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dividendPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 1869, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 1841, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_struct(VaultInfo)2206_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 1843, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "dividendPool", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_struct(VaultInfo)2206_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)2206_storage" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_struct(VaultInfo)2206_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ - { - "astId": 2189, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 2191, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2193, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 2195, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 2197, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 2199, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 2201, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 2203, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 2205, - "contract": "contracts/L2/vaults/L2AirdropTonStakerVaultProxy.sol:L2AirdropTonStakerVaultProxy", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" - } - ], - "numberOfBytes": "192" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2AirdropTonVault.json b/contracts/data/tonstarter/abi/L2AirdropTonVault.json index 353f0d2..7117c08 100644 --- a/contracts/data/tonstarter/abi/L2AirdropTonVault.json +++ b/contracts/data/tonstarter/abi/L2AirdropTonVault.json @@ -1,1201 +1,842 @@ -{ - "address": "0x8Ee62Ba51D361F860c0A65C01b9d50dc031d7f5d", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "indexed": false, - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "parmas", - "type": "tuple" - } - ], - "name": "InitializedL2AirdropTonVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newDividendPool", - "type": "address" - } - ], - "name": "SetDividendPool", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "availableClaimAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "dividendPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ext", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "getCurrentRound", - "outputs": [ - { - "internalType": "uint256", - "name": "round", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newDividendPool", - "type": "address" - } - ], - "name": "setDividendPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "internalType": "struct LibScheduleVault.VaultInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x0d30e6ecb84a59aeac465556104748d9213a19ffc6f77aafa74dcdafa42970d6", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x8Ee62Ba51D361F860c0A65C01b9d50dc031d7f5d", - "transactionIndex": 0, - "gasUsed": "2126976", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6bc5fc8a380fb45ff3c7b764feff91cfcbc4f7d276bcd737c2b3b31ce33b97b0", - "transactionHash": "0x0d30e6ecb84a59aeac465556104748d9213a19ffc6f77aafa74dcdafa42970d6", - "logs": [], - "blockNumber": 23741, - "cumulativeGasUsed": "2126976", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "ea6316911efee442a07b8412c25039b8", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"parmas\",\"type\":\"tuple\"}],\"name\":\"InitializedL2AirdropTonVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newDividendPool\",\"type\":\"address\"}],\"name\":\"SetDividendPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"availableClaimAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dividendPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"getCurrentRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDividendPool\",\"type\":\"address\"}],\"name\":\"setDividendPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"internalType\":\"struct LibScheduleVault.VaultInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vaults that anybody claim according to a schedule\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2AirdropTonVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2AirdropTonVault.sol\":\"L2AirdropTonVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2AirdropTonVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/LibProject.sol\\\";\\n\\ninterface IDividendPool {\\n function distribute(address token, uint256 amount) external;\\n}\\n\\n/**\\n * @title L2AirdropTonVault\\n * @dev Vaults that anybody claim according to a schedule\\n */\\ncontract L2AirdropTonVault is L2CustomVaultBase, L2AirdropTonVaultStorage {\\n using SafeERC20 for IERC20;\\n\\n event InitializedL2AirdropTonVault(\\n address l2Token,\\n LibProject.InitalParameterScheduleVault parmas\\n );\\n event ClaimedInVault(address l2Token, uint256 amount);\\n event SetDividendPool(address newDividendPool);\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setDividendPool(\\n address _newDividendPool\\n ) external onlyOwner nonZeroAddress(_newDividendPool)\\n {\\n require(dividendPool != _newDividendPool, \\\"same\\\");\\n dividendPool = _newDividendPool;\\n\\n emit SetDividendPool(_newDividendPool);\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function initialize(\\n address l2Token,\\n LibProject.InitalParameterScheduleVault memory params\\n )\\n external onlyL2ProjectManagerOrVaultAdmin(l2Token)\\n {\\n require(params.firstClaimTime > block.number, \\\"first claim time passed\\\");\\n require(params.totalAllocatedAmount != 0 && params.totalClaimCount != 0 && params.roundIntervalTime != 0, \\\"wrong value\\\");\\n if (params.totalClaimCount > 1) require(params.secondClaimTime > params.firstClaimTime, \\\"wrong the second claim time\\\");\\n require(params.totalAllocatedAmount > params.firstClaimAmount, \\\"wrong the first claim amount\\\");\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n require(info.totalAllocatedAmount == 0, \\\"already initialized\\\");\\n\\n LibScheduleVault.VaultInfo memory data = LibScheduleVault.VaultInfo({\\n claimer: params.claimer,\\n totalAllocatedAmount: params.totalAllocatedAmount,\\n totalClaimCount: params.totalClaimCount,\\n totalClaimedAmount: 0,\\n firstClaimAmount: params.firstClaimAmount,\\n firstClaimTime: params.firstClaimTime,\\n secondClaimTime: params.secondClaimTime,\\n roundInterval: params.roundIntervalTime,\\n latestClaimedRound: 0\\n });\\n vaultInfo[l2Token] = data;\\n\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), params.totalAllocatedAmount);\\n\\n emit InitializedL2AirdropTonVault(l2Token, params);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n function claim(address l2Token)\\n external nonZeroAddress(l2Token)\\n {\\n uint256 amount = _availableClaimAmount(l2Token);\\n require(amount != 0, \\\"no claimable amount\\\");\\n require(amount <= IERC20(l2Token).balanceOf(address(this)), 'insufficient balance');\\n vaultInfo[l2Token].totalClaimedAmount += amount;\\n\\n uint256 allowance = IERC20(l2Token).allowance(address(this), dividendPool);\\n if (allowance < amount) IERC20(l2Token).approve(dividendPool, type(uint256).max);\\n\\n IDividendPool(dividendPool).distribute(l2Token, amount);\\n\\n emit ClaimedInVault(l2Token, amount);\\n }\\n\\n\\n /* ========== VIEW ========== */\\n\\n function viewVaultInfo(address l2Token) external view returns (LibScheduleVault.VaultInfo memory){\\n\\n return vaultInfo[l2Token];\\n\\n }\\n\\n function getCurrentRound(address l2Token) public view returns (uint256 round){\\n\\n return _getCurrentRound(l2Token);\\n }\\n\\n function availableClaimAmount(address l2Token) public view returns (uint256 amount){\\n\\n return _availableClaimAmount(l2Token);\\n }\\n\\n /* === ======= internal ========== */\\n\\n function _getCurrentRound(address l2Token) internal view returns (uint256 round){\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n if(info.firstClaimTime != 0 && info.firstClaimTime <= block.timestamp && block.timestamp < info.secondClaimTime) {\\n round = 1;\\n } else if(info.secondClaimTime <= block.timestamp) {\\n round = (block.timestamp - uint256(info.secondClaimTime)) / uint256(info.roundInterval) + 2;\\n }\\n if (round > info.totalClaimCount) round = info.totalClaimCount;\\n }\\n\\n function _availableClaimAmount(address l2Token) internal view returns (uint256 amount){\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token];\\n uint256 curRound = _getCurrentRound(l2Token);\\n\\n if(info.latestClaimedRound < curRound) {\\n if (curRound == 1) {\\n amount = info.firstClaimAmount - info.totalClaimedAmount;\\n } else if (curRound < info.totalClaimCount) {\\n amount = (info.firstClaimAmount + ((info.totalAllocatedAmount - info.firstClaimAmount)/(info.totalClaimCount-1) * (curRound -1))) - info.totalClaimedAmount;\\n } else {\\n amount = info.totalAllocatedAmount - info.totalClaimedAmount;\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x096843ab010fe0da4ca50a1b37934b86574575f31936e7cb59c5bbf06e630991\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\n/**\\n * @title L2AirdropTonVaultStorage\\n * @dev\\n */\\ncontract L2AirdropTonVaultStorage {\\n\\n // l2token - VaultInfo\\n mapping(address => LibScheduleVault.VaultInfo) public vaultInfo;\\n address public dividendPool;\\n address public ext;\\n}\",\"keccak256\":\"0x303d4f5a972ababb5f99770246b4894c8ba1afa46d65ef29091228e4346b81f0\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n address poolAddress;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x70aa30ad2bdcc19fee1890162b02f21077efadb0da73a0898d2806f96ff0ffe5\",\"license\":\"MIT\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b506125238061002d6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063565b1a251161010f578063a217fddf116100a2578063b911135f11610071578063b911135f14610591578063cf9f23b5146105ba578063d547741f146105cd578063dc861da6146105e057600080fd5b8063a217fddf14610550578063a418234314610558578063a7bd3e9d1461056b578063ad4c325a1461057e57600080fd5b806375b238fc116100de57806375b238fc146103f75780637fc46ba81461041e5780639164359a1461044757806391d148541461051757600080fd5b8063565b1a25146103b157806363a8fd89146103c457806370480275146103d157806375829def146103e457600080fd5b806330d172d51161018757806350d2a2761161015657806350d2a2761461033a57806351e8152a1461036357806352351e8514610376578063550d01a31461038e57600080fd5b806330d172d5146102d657806335b9ac661461030157806336568abe14610314578063390d15d21461032757600080fd5b806322985246116101c35780632298524614610258578063248a9ca31461028d57806324d7806c146102b05780632f2ff15d146102c357600080fd5b806301ffc9a7146101f55780631785f53c1461021d5780631e83409a146102325780631e8948c314610245575b600080fd5b6102086102033660046120e7565b6106de565b60405190151581526020015b60405180910390f35b61023061022b36600461212d565b610715565b005b61023061024036600461212d565b6107a7565b610230610253366004612148565b610ad1565b61027f7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610214565b61027f61029b36600461217b565b60009081526004602052604090206001015490565b6102086102be36600461212d565b610cab565b6102306102d1366004612194565b610ceb565b6008546102e9906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b61023061030f366004612148565b610d15565b610230610322366004612194565b610ec0565b61027f61033536600461212d565b610f4c565b6102e96103483660046120e7565b6003602052600090815260409020546001600160a01b031681565b610208610371366004612148565b610f57565b6005546102e99061010090046001600160a01b031681565b61020861039c36600461212d565b60026020526000908152604090205460ff1681565b61027f6103bf36600461212d565b610f94565b6000546102089060ff1681565b6102306103df36600461212d565b610f9f565b6102306103f236600461212d565b611029565b61027f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102e961042c36600461212d565b6006602052600090815260409020546001600160a01b031681565b6104ba61045536600461212d565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610214565b610208610525366004612194565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61027f600081565b61023061056636600461212d565b61118b565b61023061057936600461212d565b6112a8565b61023061058c3660046121e1565b6113df565b6102e961059f36600461217b565b6001602052600090815260409020546001600160a01b031681565b6009546102e9906001600160a01b031681565b6102306105db366004612194565b611993565b6106d16105ee36600461212d565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600760209081526040918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b60405161021491906122b2565b60006001600160e01b03198216637965db0b60e01b148061070f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61071e33610cab565b61077a5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ec0565b50565b806001600160a01b0381166107e35760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b60006107ee836119b8565b9050806000036108405760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610771565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190612345565b8111156108f75760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610771565b6001600160a01b03831660009081526007602052604081206003018054839290610922908490612374565b9091555050600854604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015260009185169063dd62ed3e90604401602060405180830381865afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190612345565b905081811015610a215760085460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529085169063095ea7b3906044016020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190612387565b505b600854604051631f72642160e31b81526001600160a01b038681166004830152602482018590529091169063fb93210890604401600060405180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f89086dafc339c6f74b6f950c45520e5904b16cf96c7cd2f4702c7f9e46ce060493500190505b60405180910390a150505050565b816001600160a01b038116610b0d5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b816001600160a01b038116610b495760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6001600160a01b0380851660009081526006602052604090205485911615801590610b8d57506001600160a01b038181166000908152600660205260409020541633145b610be75760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610771565b6001600160a01b03858116600090815260066020526040902054818616911603610c3c5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661070f565b600082815260046020526040902060010154610d0681611b19565b610d108383611b23565b505050565b816001600160a01b038116610d515760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b816001600160a01b038116610d8d5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b60055461010090046001600160a01b031615801590610dbb575060055461010090046001600160a01b031633145b610e075760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610771565b6001600160a01b03848116600090815260066020526040902054818516911603610e5c5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a40261939101610ac3565b6001600160a01b0381163314610f3e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610771565b610f488282611bc5565b5050565b600061070f826119b8565b60006001600160a01b03821615801590610f8d57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b600061070f82611c48565b610fa833610cab565b610fff5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ceb565b61103233610cab565b6110895760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6001600160a01b0381166110df5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610771565b6001600160a01b03811633036111375760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610771565b6111617fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ceb565b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ec0565b806001600160a01b0381166111c75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6111d033610cab565b6112275760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6005546001600160a01b0380841661010090920416036112725760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6112b133610cab565b6113085760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b806001600160a01b0381166113445760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6008546001600160a01b0380841691160361138a5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f6e7ce59c579ce0cb4e3fca384521cc28064dfb08050aa555bf67c3853acf40cb9060200160405180910390a15050565b600554829061010090046001600160a01b031633148061143c57506001600160a01b03818116600090815260066020526040902054161580159061143c57506001600160a01b038181166000908152600660205260409020541633145b6114ae5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610771565b43826080015163ffffffff16116115075760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610771565b60208201511580159061151d5750604082015115155b8015611532575060c082015163ffffffff1615155b61157e5760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610771565b6001826040015111156115ee57816080015163ffffffff168260a0015163ffffffff16116115ee5760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610771565b81606001518260200151116116455760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610771565b6001600160a01b03808416600090815260076020908152604091829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152156117295760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610771565b600060405180610120016040528085600001516001600160a01b0316815260200185602001518152602001856040015181526020016000815260200185606001518152602001856080015163ffffffff1681526020018560a0015163ffffffff1681526020018560c0015163ffffffff168152602001600063ffffffff1681525090508060076000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050611900600560019054906101000a90046001600160a01b0316308660200151886001600160a01b0316611d7e909392919063ffffffff16565b604080516001600160a01b038088168252865116602080830191909152860151818301529085015160608083019190915285015160808083019190915285015163ffffffff90811660a080840191909152860151811660c0808401919091528601511660e08201527f34e91bd8ea5a5bd0abd7bc8748579337d986685a194405c80b1bbc62746ac1479061010001610c9c565b6000828152600460205260409020600101546119ae81611b19565b610d108383611bc5565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611a5584611c48565b90508082610100015163ffffffff161015611b125780600103611a8d5781606001518260800151611a8691906123a9565b9250611b12565b8160400151811015611afb576060820151611aa96001836123a9565b60018460400151611aba91906123a9565b84608001518560200151611ace91906123a9565b611ad891906123bc565b611ae291906123de565b8360800151611af19190612374565b611a8691906123a9565b81606001518260200151611b0f91906123a9565b92505b5050919050565b6107a48133611eb7565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f485760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610f485760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611cf75750428160a0015163ffffffff1611155b8015611d0c57508060c0015163ffffffff1642105b15611d1a5760019150611d64565b428160c0015163ffffffff1611611d64578060e0015163ffffffff168160c0015163ffffffff1642611d4c91906123a9565b611d5691906123bc565b611d61906002612374565b91505b8060400151821115611d7857806040015191505b50919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691611df79190612419565b6000604051808303816000865af19150503d8060008114611e34576040519150601f19603f3d011682016040523d82523d6000602084013e611e39565b606091505b5091509150818015611e63575080511580611e63575080806020019051810190611e639190612387565b611eaf5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610771565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f4857611eea81611f2c565b611ef5836020611f3e565b604051602001611f06929190612435565b60408051601f198184030181529082905262461bcd60e51b8252610771916004016124b6565b606061070f6001600160a01b03831660145b60606000611f4d8360026123de565b611f58906002612374565b67ffffffffffffffff811115611f7057611f706121b7565b6040519080825280601f01601f191660200182016040528015611f9a576020820181803683370190505b509050600360fc1b81600081518110611fb557611fb56124e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611fe457611fe46124e9565b60200101906001600160f81b031916908160001a90535060006120088460026123de565b612013906001612374565b90505b6001811115612098577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612054576120546124e9565b1a60f81b82828151811061206a5761206a6124e9565b60200101906001600160f81b031916908160001a90535060049490941c93612091816124ff565b9050612016565b508315610f8d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610771565b6000602082840312156120f957600080fd5b81356001600160e01b031981168114610f8d57600080fd5b80356001600160a01b038116811461212857600080fd5b919050565b60006020828403121561213f57600080fd5b610f8d82612111565b6000806040838503121561215b57600080fd5b61216483612111565b915061217260208401612111565b90509250929050565b60006020828403121561218d57600080fd5b5035919050565b600080604083850312156121a757600080fd5b8235915061217260208401612111565b634e487b7160e01b600052604160045260246000fd5b803563ffffffff8116811461212857600080fd5b6000808284036101008112156121f657600080fd5b6121ff84612111565b925060e0601f198201121561221357600080fd5b5060405160e0810181811067ffffffffffffffff8211171561224557634e487b7160e01b600052604160045260246000fd5b60405261225460208501612111565b815260408401356020820152606084013560408201526080840135606082015261228060a085016121cd565b608082015261229160c085016121cd565b60a08201526122a260e085016121cd565b60c0820152809150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c083015161231760c084018263ffffffff169052565b5060e083015161232f60e084018263ffffffff169052565b506101009283015163ffffffff16919092015290565b60006020828403121561235757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070f5761070f61235e565b60006020828403121561239957600080fd5b81518015158114610f8d57600080fd5b8181038181111561070f5761070f61235e565b6000826123d957634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761070f5761070f61235e565b60005b838110156124105781810151838201526020016123f8565b50506000910152565b6000825161242b8184602087016123f5565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161246d8160178501602088016123f5565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516124aa8160288401602088016123f5565b01602801949350505050565b60208152600082518060208401526124d58160408501602087016123f5565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008161250e5761250e61235e565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063565b1a251161010f578063a217fddf116100a2578063b911135f11610071578063b911135f14610591578063cf9f23b5146105ba578063d547741f146105cd578063dc861da6146105e057600080fd5b8063a217fddf14610550578063a418234314610558578063a7bd3e9d1461056b578063ad4c325a1461057e57600080fd5b806375b238fc116100de57806375b238fc146103f75780637fc46ba81461041e5780639164359a1461044757806391d148541461051757600080fd5b8063565b1a25146103b157806363a8fd89146103c457806370480275146103d157806375829def146103e457600080fd5b806330d172d51161018757806350d2a2761161015657806350d2a2761461033a57806351e8152a1461036357806352351e8514610376578063550d01a31461038e57600080fd5b806330d172d5146102d657806335b9ac661461030157806336568abe14610314578063390d15d21461032757600080fd5b806322985246116101c35780632298524614610258578063248a9ca31461028d57806324d7806c146102b05780632f2ff15d146102c357600080fd5b806301ffc9a7146101f55780631785f53c1461021d5780631e83409a146102325780631e8948c314610245575b600080fd5b6102086102033660046120e7565b6106de565b60405190151581526020015b60405180910390f35b61023061022b36600461212d565b610715565b005b61023061024036600461212d565b6107a7565b610230610253366004612148565b610ad1565b61027f7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610214565b61027f61029b36600461217b565b60009081526004602052604090206001015490565b6102086102be36600461212d565b610cab565b6102306102d1366004612194565b610ceb565b6008546102e9906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b61023061030f366004612148565b610d15565b610230610322366004612194565b610ec0565b61027f61033536600461212d565b610f4c565b6102e96103483660046120e7565b6003602052600090815260409020546001600160a01b031681565b610208610371366004612148565b610f57565b6005546102e99061010090046001600160a01b031681565b61020861039c36600461212d565b60026020526000908152604090205460ff1681565b61027f6103bf36600461212d565b610f94565b6000546102089060ff1681565b6102306103df36600461212d565b610f9f565b6102306103f236600461212d565b611029565b61027f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102e961042c36600461212d565b6006602052600090815260409020546001600160a01b031681565b6104ba61045536600461212d565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610214565b610208610525366004612194565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61027f600081565b61023061056636600461212d565b61118b565b61023061057936600461212d565b6112a8565b61023061058c3660046121e1565b6113df565b6102e961059f36600461217b565b6001602052600090815260409020546001600160a01b031681565b6009546102e9906001600160a01b031681565b6102306105db366004612194565b611993565b6106d16105ee36600461212d565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600760209081526040918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b60405161021491906122b2565b60006001600160e01b03198216637965db0b60e01b148061070f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61071e33610cab565b61077a5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ec0565b50565b806001600160a01b0381166107e35760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b60006107ee836119b8565b9050806000036108405760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610771565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a89190612345565b8111156108f75760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610771565b6001600160a01b03831660009081526007602052604081206003018054839290610922908490612374565b9091555050600854604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015260009185169063dd62ed3e90604401602060405180830381865afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190612345565b905081811015610a215760085460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529085169063095ea7b3906044016020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190612387565b505b600854604051631f72642160e31b81526001600160a01b038681166004830152602482018590529091169063fb93210890604401600060405180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f89086dafc339c6f74b6f950c45520e5904b16cf96c7cd2f4702c7f9e46ce060493500190505b60405180910390a150505050565b816001600160a01b038116610b0d5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b816001600160a01b038116610b495760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6001600160a01b0380851660009081526006602052604090205485911615801590610b8d57506001600160a01b038181166000908152600660205260409020541633145b610be75760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610771565b6001600160a01b03858116600090815260066020526040902054818616911603610c3c5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661070f565b600082815260046020526040902060010154610d0681611b19565b610d108383611b23565b505050565b816001600160a01b038116610d515760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b816001600160a01b038116610d8d5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b60055461010090046001600160a01b031615801590610dbb575060055461010090046001600160a01b031633145b610e075760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610771565b6001600160a01b03848116600090815260066020526040902054818516911603610e5c5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a40261939101610ac3565b6001600160a01b0381163314610f3e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610771565b610f488282611bc5565b5050565b600061070f826119b8565b60006001600160a01b03821615801590610f8d57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b600061070f82611c48565b610fa833610cab565b610fff5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ceb565b61103233610cab565b6110895760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6001600160a01b0381166110df5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610771565b6001600160a01b03811633036111375760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610771565b6111617fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ceb565b6107a47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ec0565b806001600160a01b0381166111c75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6111d033610cab565b6112275760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b6005546001600160a01b0380841661010090920416036112725760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6112b133610cab565b6113085760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610771565b806001600160a01b0381166113445760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610771565b6008546001600160a01b0380841691160361138a5760405162461bcd60e51b81526004016107719060208082526004908201526373616d6560e01b604082015260600190565b600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f6e7ce59c579ce0cb4e3fca384521cc28064dfb08050aa555bf67c3853acf40cb9060200160405180910390a15050565b600554829061010090046001600160a01b031633148061143c57506001600160a01b03818116600090815260066020526040902054161580159061143c57506001600160a01b038181166000908152600660205260409020541633145b6114ae5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610771565b43826080015163ffffffff16116115075760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610771565b60208201511580159061151d5750604082015115155b8015611532575060c082015163ffffffff1615155b61157e5760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610771565b6001826040015111156115ee57816080015163ffffffff168260a0015163ffffffff16116115ee5760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610771565b81606001518260200151116116455760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610771565b6001600160a01b03808416600090815260076020908152604091829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152156117295760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610771565b600060405180610120016040528085600001516001600160a01b0316815260200185602001518152602001856040015181526020016000815260200185606001518152602001856080015163ffffffff1681526020018560a0015163ffffffff1681526020018560c0015163ffffffff168152602001600063ffffffff1681525090508060076000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050611900600560019054906101000a90046001600160a01b0316308660200151886001600160a01b0316611d7e909392919063ffffffff16565b604080516001600160a01b038088168252865116602080830191909152860151818301529085015160608083019190915285015160808083019190915285015163ffffffff90811660a080840191909152860151811660c0808401919091528601511660e08201527f34e91bd8ea5a5bd0abd7bc8748579337d986685a194405c80b1bbc62746ac1479061010001610c9c565b6000828152600460205260409020600101546119ae81611b19565b610d108383611bc5565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611a5584611c48565b90508082610100015163ffffffff161015611b125780600103611a8d5781606001518260800151611a8691906123a9565b9250611b12565b8160400151811015611afb576060820151611aa96001836123a9565b60018460400151611aba91906123a9565b84608001518560200151611ace91906123a9565b611ad891906123bc565b611ae291906123de565b8360800151611af19190612374565b611a8691906123a9565b81606001518260200151611b0f91906123a9565b92505b5050919050565b6107a48133611eb7565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f485760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610f485760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0380821660009081526007602090815260408083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611cf75750428160a0015163ffffffff1611155b8015611d0c57508060c0015163ffffffff1642105b15611d1a5760019150611d64565b428160c0015163ffffffff1611611d64578060e0015163ffffffff168160c0015163ffffffff1642611d4c91906123a9565b611d5691906123bc565b611d61906002612374565b91505b8060400151821115611d7857806040015191505b50919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691611df79190612419565b6000604051808303816000865af19150503d8060008114611e34576040519150601f19603f3d011682016040523d82523d6000602084013e611e39565b606091505b5091509150818015611e63575080511580611e63575080806020019051810190611e639190612387565b611eaf5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610771565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610f4857611eea81611f2c565b611ef5836020611f3e565b604051602001611f06929190612435565b60408051601f198184030181529082905262461bcd60e51b8252610771916004016124b6565b606061070f6001600160a01b03831660145b60606000611f4d8360026123de565b611f58906002612374565b67ffffffffffffffff811115611f7057611f706121b7565b6040519080825280601f01601f191660200182016040528015611f9a576020820181803683370190505b509050600360fc1b81600081518110611fb557611fb56124e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611fe457611fe46124e9565b60200101906001600160f81b031916908160001a90535060006120088460026123de565b612013906001612374565b90505b6001811115612098577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612054576120546124e9565b1a60f81b82828151811061206a5761206a6124e9565b60200101906001600160f81b031916908160001a90535060049490941c93612091816124ff565b9050612016565b508315610f8d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610771565b6000602082840312156120f957600080fd5b81356001600160e01b031981168114610f8d57600080fd5b80356001600160a01b038116811461212857600080fd5b919050565b60006020828403121561213f57600080fd5b610f8d82612111565b6000806040838503121561215b57600080fd5b61216483612111565b915061217260208401612111565b90509250929050565b60006020828403121561218d57600080fd5b5035919050565b600080604083850312156121a757600080fd5b8235915061217260208401612111565b634e487b7160e01b600052604160045260246000fd5b803563ffffffff8116811461212857600080fd5b6000808284036101008112156121f657600080fd5b6121ff84612111565b925060e0601f198201121561221357600080fd5b5060405160e0810181811067ffffffffffffffff8211171561224557634e487b7160e01b600052604160045260246000fd5b60405261225460208501612111565b815260408401356020820152606084013560408201526080840135606082015261228060a085016121cd565b608082015261229160c085016121cd565b60a08201526122a260e085016121cd565b60c0820152809150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c083015161231760c084018263ffffffff169052565b5060e083015161232f60e084018263ffffffff169052565b506101009283015163ffffffff16919092015290565b60006020828403121561235757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070f5761070f61235e565b60006020828403121561239957600080fd5b81518015158114610f8d57600080fd5b8181038181111561070f5761070f61235e565b6000826123d957634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761070f5761070f61235e565b60005b838110156124105781810151838201526020016123f8565b50506000910152565b6000825161242b8184602087016123f5565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161246d8160178501602088016123f5565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516124aa8160288401602088016123f5565b01602801949350505050565b60208152600082518060208401526124d58160408501602087016123f5565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008161250e5761250e61235e565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "details": "Vaults that anybody claim according to a schedule", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + ], + "name": "ClaimedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "indexed": false, + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "parmas", + "type": "tuple" + } + ], + "name": "InitializedL2AirdropTonVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2AirdropTonVault", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDividendPool", + "type": "address" + } + ], + "name": "SetDividendPool", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 3943, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 3947, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 3951, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 3955, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 24, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "availableClaimAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "dividendPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ext", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "getCurrentRound", + "outputs": [ + { + "internalType": "uint256", + "name": "round", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 2489, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2491, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2495, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 2322, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_struct(VaultInfo)3398_storage)" + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 2324, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "dividendPool", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2326, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "ext", - "offset": 0, - "slot": "9", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newDividendPool", + "type": "address" + } + ], + "name": "setDividendPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_address,t_struct(VaultInfo)3398_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)3398_storage" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_struct(VaultInfo)3398_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 3381, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" + "internalType": "address", + "name": "claimer", + "type": "address" }, { - "astId": 3383, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 3385, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, { - "astId": 3387, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, { - "astId": 3389, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, { - "astId": 3391, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, { - "astId": 3393, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, { - "astId": 3395, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, { - "astId": 3397, - "contract": "contracts/L2/vaults/L2AirdropTonVault.sol:L2AirdropTonVault", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } ], - "numberOfBytes": "192" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + "internalType": "struct LibScheduleVault.VaultInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2AirdropTonVaultProxy.json b/contracts/data/tonstarter/abi/L2AirdropTonVaultProxy.json index f23a4d5..08be352 100644 --- a/contracts/data/tonstarter/abi/L2AirdropTonVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2AirdropTonVaultProxy.json @@ -1,1145 +1,696 @@ -{ - "address": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dividendPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ext", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x0c316198308540becd753efa58143b14e8f6137be2ecc4ed14a94f03d9bc4d64", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "transactionIndex": 0, - "gasUsed": "1555528", - "logsBloom": "0x00000004000000800800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000400000000000000000000000000000000000000000000000", - "blockHash": "0x96f99c7cbcc078b60c8d66ce1e085cc25a5e865a63fe4470317f78a7fe3308d7", - "transactionHash": "0x0c316198308540becd753efa58143b14e8f6137be2ecc4ed14a94f03d9bc4d64", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23742, - "transactionHash": "0x0c316198308540becd753efa58143b14e8f6137be2ecc4ed14a94f03d9bc4d64", - "address": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x96f99c7cbcc078b60c8d66ce1e085cc25a5e865a63fe4470317f78a7fe3308d7" +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 23742, - "transactionHash": "0x0c316198308540becd753efa58143b14e8f6137be2ecc4ed14a94f03d9bc4d64", - "address": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x96f99c7cbcc078b60c8d66ce1e085cc25a5e865a63fe4470317f78a7fe3308d7" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 23742, - "cumulativeGasUsed": "1555528", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 2, - "solcInputHash": "ea6316911efee442a07b8412c25039b8", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dividendPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2AirdropTonVaultProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2AirdropTonVaultProxy.sol\":\"L2AirdropTonVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonVaultProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBaseProxy.sol\\\";\\nimport { L2AirdropTonVaultStorage } from \\\"./L2AirdropTonVaultStorage.sol\\\";\\n\\n/**\\n * @title L2AirdropTonVaultProxy\\n * @dev\\n */\\ncontract L2AirdropTonVaultProxy is L2CustomVaultBaseProxy, L2AirdropTonVaultStorage {\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor () {\\n\\n }\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xc2487d27ebf1206822c2f63e7728ec112406bd4da04d8703242e23ebf67706e2\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2AirdropTonVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\n/**\\n * @title L2AirdropTonVaultStorage\\n * @dev\\n */\\ncontract L2AirdropTonVaultStorage {\\n\\n // l2token - VaultInfo\\n mapping(address => LibScheduleVault.VaultInfo) public vaultInfo;\\n address public dividendPool;\\n address public ext;\\n}\",\"keccak256\":\"0x303d4f5a972ababb5f99770246b4894c8ba1afa46d65ef29091228e4346b81f0\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBaseProxy\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x32dc8c79ba6a7d1d3270e56c38f85745c20e844dc353cbe0b2bc03e72e95e487\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001b3c833981519152806200005b565b6200005560008051602062001b3c83398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119d2806200016a6000396000f3fe6080604052600436106101d15760003560e01c806363a8fd89116100f75780638b8f4a6511610095578063a217fddf11610064578063a217fddf14610732578063b911135f14610747578063cf9f23b51461077d578063d547741f1461079d57610223565b80638b8f4a65146105c15780638d4fdb40146105e15780639164359a1461060157806391d14854146106ec57610223565b806375b238fc116100d157806375b238fc146105175780637cb00d251461054b5780637cd5f6631461056b5780637fc46ba81461058b57610223565b806363a8fd89146104bd57806370480275146104d757806375829def146104f757610223565b806336568abe1161016f57806352351e851161013e57806352351e8514610402578063550d01a3146104275780635c60da1b146104575780635cc797d81461049d57610223565b806336568abe1461036c5780633659cfe61461038c5780634a5df50f146103ac57806350d2a276146103cc57610223565b8063248a9ca3116101ab578063248a9ca3146102c457806324d7806c146102f45780632f2ff15d1461031457806330d172d51461033457610223565b806301ffc9a71461022d5780631785f53c14610262578063229852461461028257610223565b366102235760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61022b6107bd565b005b34801561023957600080fd5b5061024d610248366004611684565b610866565b60405190151581526020015b60405180910390f35b34801561026e57600080fd5b5061022b61027d3660046116c5565b61089d565b34801561028e57600080fd5b506102b67ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610259565b3480156102d057600080fd5b506102b66102df3660046116e0565b60009081526004602052604090206001015490565b34801561030057600080fd5b5061024d61030f3660046116c5565b610918565b34801561032057600080fd5b5061022b61032f3660046116f9565b610958565b34801561034057600080fd5b50600854610354906001600160a01b031681565b6040516001600160a01b039091168152602001610259565b34801561037857600080fd5b5061022b6103873660046116f9565b61097d565b34801561039857600080fd5b5061022b6103a73660046116c5565b610a09565b3480156103b857600080fd5b5061022b6103c7366004611725565b610b62565b3480156103d857600080fd5b506103546103e7366004611684565b6003602052600090815260409020546001600160a01b031681565b34801561040e57600080fd5b506005546103549061010090046001600160a01b031681565b34801561043357600080fd5b5061024d6104423660046116c5565b60026020526000908152604090205460ff1681565b34801561046357600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610354565b3480156104a957600080fd5b5061022b6104b83660046117b9565b610e0f565b3480156104c957600080fd5b5060005461024d9060ff1681565b3480156104e357600080fd5b5061022b6104f23660046116c5565b610e67565b34801561050357600080fd5b5061022b6105123660046116c5565b610edf565b34801561052357600080fd5b506102b67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561055757600080fd5b5061022b6105663660046117e3565b61102f565b34801561057757600080fd5b5061022b6105863660046117fe565b611090565b34801561059757600080fd5b506103546105a63660046116c5565b6006602052600090815260409020546001600160a01b031681565b3480156105cd57600080fd5b506103546105dc3660046116e0565b6110e9565b3480156105ed57600080fd5b506103546105fc366004611684565b611106565b34801561060d57600080fd5b5061068f61061c3660046116c5565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610259565b3480156106f857600080fd5b5061024d6107073660046116f9565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073e57600080fd5b506102b6600081565b34801561075357600080fd5b506103546107623660046116e0565b6001602052600090815260409020546001600160a01b031681565b34801561078957600080fd5b50600954610354906001600160a01b031681565b3480156107a957600080fd5b5061022b6107b83660046116f9565b611202565b60006107d46000356001600160e01b031916611106565b90506001600160a01b038116158015906107f1575060005460ff16155b61083d5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161021a565b3660008037600080366000845af43d6000803e80801561085c573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061089757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a633610918565b6108eb5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261097d565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610897565b60008281526004602052604090206001015461097381611227565b6108618383611231565b6001600160a01b03811633146109fb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161021a565b610a0582826112d3565b5050565b610a1233610918565b610a575760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610aad5760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161021a565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610b1e5760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161021a565b610b2b8160006001611356565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b6b33610918565b610bb05760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b81610bfd5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161021a565b6001600160a01b03811660009081526002602052604090205460ff16610c655760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161021a565b60005b82811015610e0957816001600160a01b031660036000868685818110610c9057610c90611831565b9050602002016020810190610ca59190611684565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610d165760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161021a565b8160036000868685818110610d2d57610d2d611831565b9050602002016020810190610d429190611684565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d9757610d97611831565b9050602002016020810190610dac9190611684565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610e018161185d565b915050610c68565b50505050565b610e1833610918565b610e5d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b610a0582826113ee565b610e7033610918565b610eb55760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610958565b610ee833610918565b610f2d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610f835760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161021a565b6001600160a01b0381163303610fdb5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161021a565b6110057fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610958565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec423361097d565b61103833610918565b61107d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6000805460ff1916911515919091179055565b61109933610918565b6110de5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b610861838383611356565b6000818152600160205260408120546001600160a01b0316610897565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166111665750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff16156111c457506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b60008281526004602052604090206001015461121d81611227565b61086183836112d3565b610915813361144d565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610a055760008281526004602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561128f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610a055760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113ad5760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161021a565b80156113e8576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61086183825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610a0557611480816114c2565b61148b8360206114d4565b60405160200161149c92919061189a565b60408051601f198184030181529082905262461bcd60e51b825261021a9160040161191b565b60606108976001600160a01b03831660145b606060006114e383600261194e565b6114ee906002611965565b67ffffffffffffffff81111561150657611506611978565b6040519080825280601f01601f191660200182016040528015611530576020820181803683370190505b509050600360fc1b8160008151811061154b5761154b611831565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061157a5761157a611831565b60200101906001600160f81b031916908160001a905350600061159e84600261194e565b6115a9906001611965565b90505b600181111561162e577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115ea576115ea611831565b1a60f81b82828151811061160057611600611831565b60200101906001600160f81b031916908160001a90535060049490941c936116278161198e565b90506115ac565b50831561167d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161021a565b9392505050565b60006020828403121561169657600080fd5b81356001600160e01b03198116811461167d57600080fd5b80356001600160a01b03811681146111fd57600080fd5b6000602082840312156116d757600080fd5b61167d826116ae565b6000602082840312156116f257600080fd5b5035919050565b6000806040838503121561170c57600080fd5b8235915061171c602084016116ae565b90509250929050565b60008060006040848603121561173a57600080fd5b833567ffffffffffffffff8082111561175257600080fd5b818601915086601f83011261176657600080fd5b81358181111561177557600080fd5b8760208260051b850101111561178a57600080fd5b6020928301955093506117a091860190506116ae565b90509250925092565b803580151581146111fd57600080fd5b600080604083850312156117cc57600080fd5b6117d5836116ae565b915061171c602084016117a9565b6000602082840312156117f557600080fd5b61167d826117a9565b60008060006060848603121561181357600080fd5b61181c846116ae565b9250602084013591506117a0604085016117a9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161186f5761186f611847565b5060010190565b60005b83811015611891578181015183820152602001611879565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118d2816017850160208801611876565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161190f816028840160208801611876565b01602801949350505050565b602081526000825180602084015261193a816040850160208701611876565b601f01601f19169190910160400192915050565b808202811582820484141761089757610897611847565b8082018082111561089757610897611847565b634e487b7160e01b600052604160045260246000fd5b60008161199d5761199d611847565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101d15760003560e01c806363a8fd89116100f75780638b8f4a6511610095578063a217fddf11610064578063a217fddf14610732578063b911135f14610747578063cf9f23b51461077d578063d547741f1461079d57610223565b80638b8f4a65146105c15780638d4fdb40146105e15780639164359a1461060157806391d14854146106ec57610223565b806375b238fc116100d157806375b238fc146105175780637cb00d251461054b5780637cd5f6631461056b5780637fc46ba81461058b57610223565b806363a8fd89146104bd57806370480275146104d757806375829def146104f757610223565b806336568abe1161016f57806352351e851161013e57806352351e8514610402578063550d01a3146104275780635c60da1b146104575780635cc797d81461049d57610223565b806336568abe1461036c5780633659cfe61461038c5780634a5df50f146103ac57806350d2a276146103cc57610223565b8063248a9ca3116101ab578063248a9ca3146102c457806324d7806c146102f45780632f2ff15d1461031457806330d172d51461033457610223565b806301ffc9a71461022d5780631785f53c14610262578063229852461461028257610223565b366102235760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61022b6107bd565b005b34801561023957600080fd5b5061024d610248366004611684565b610866565b60405190151581526020015b60405180910390f35b34801561026e57600080fd5b5061022b61027d3660046116c5565b61089d565b34801561028e57600080fd5b506102b67ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610259565b3480156102d057600080fd5b506102b66102df3660046116e0565b60009081526004602052604090206001015490565b34801561030057600080fd5b5061024d61030f3660046116c5565b610918565b34801561032057600080fd5b5061022b61032f3660046116f9565b610958565b34801561034057600080fd5b50600854610354906001600160a01b031681565b6040516001600160a01b039091168152602001610259565b34801561037857600080fd5b5061022b6103873660046116f9565b61097d565b34801561039857600080fd5b5061022b6103a73660046116c5565b610a09565b3480156103b857600080fd5b5061022b6103c7366004611725565b610b62565b3480156103d857600080fd5b506103546103e7366004611684565b6003602052600090815260409020546001600160a01b031681565b34801561040e57600080fd5b506005546103549061010090046001600160a01b031681565b34801561043357600080fd5b5061024d6104423660046116c5565b60026020526000908152604090205460ff1681565b34801561046357600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610354565b3480156104a957600080fd5b5061022b6104b83660046117b9565b610e0f565b3480156104c957600080fd5b5060005461024d9060ff1681565b3480156104e357600080fd5b5061022b6104f23660046116c5565b610e67565b34801561050357600080fd5b5061022b6105123660046116c5565b610edf565b34801561052357600080fd5b506102b67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561055757600080fd5b5061022b6105663660046117e3565b61102f565b34801561057757600080fd5b5061022b6105863660046117fe565b611090565b34801561059757600080fd5b506103546105a63660046116c5565b6006602052600090815260409020546001600160a01b031681565b3480156105cd57600080fd5b506103546105dc3660046116e0565b6110e9565b3480156105ed57600080fd5b506103546105fc366004611684565b611106565b34801561060d57600080fd5b5061068f61061c3660046116c5565b6007602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610259565b3480156106f857600080fd5b5061024d6107073660046116f9565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073e57600080fd5b506102b6600081565b34801561075357600080fd5b506103546107623660046116e0565b6001602052600090815260409020546001600160a01b031681565b34801561078957600080fd5b50600954610354906001600160a01b031681565b3480156107a957600080fd5b5061022b6107b83660046116f9565b611202565b60006107d46000356001600160e01b031916611106565b90506001600160a01b038116158015906107f1575060005460ff16155b61083d5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161021a565b3660008037600080366000845af43d6000803e80801561085c573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061089757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a633610918565b6108eb5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261097d565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610897565b60008281526004602052604090206001015461097381611227565b6108618383611231565b6001600160a01b03811633146109fb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161021a565b610a0582826112d3565b5050565b610a1233610918565b610a575760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610aad5760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161021a565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610b1e5760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161021a565b610b2b8160006001611356565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b6b33610918565b610bb05760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b81610bfd5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161021a565b6001600160a01b03811660009081526002602052604090205460ff16610c655760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161021a565b60005b82811015610e0957816001600160a01b031660036000868685818110610c9057610c90611831565b9050602002016020810190610ca59190611684565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610d165760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161021a565b8160036000868685818110610d2d57610d2d611831565b9050602002016020810190610d429190611684565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d9757610d97611831565b9050602002016020810190610dac9190611684565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610e018161185d565b915050610c68565b50505050565b610e1833610918565b610e5d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b610a0582826113ee565b610e7033610918565b610eb55760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610958565b610ee833610918565b610f2d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610f835760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161021a565b6001600160a01b0381163303610fdb5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161021a565b6110057fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610958565b6109157fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec423361097d565b61103833610918565b61107d5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b6000805460ff1916911515919091179055565b61109933610918565b6110de5760405162461bcd60e51b815260206004820152602260248201526000805160206119a683398151915260448201526134b760f11b606482015260840161021a565b610861838383611356565b6000818152600160205260408120546001600160a01b0316610897565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166111665750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff16156111c457506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b60008281526004602052604090206001015461121d81611227565b61086183836112d3565b610915813361144d565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610a055760008281526004602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561128f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610a055760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113ad5760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161021a565b80156113e8576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61086183825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610a0557611480816114c2565b61148b8360206114d4565b60405160200161149c92919061189a565b60408051601f198184030181529082905262461bcd60e51b825261021a9160040161191b565b60606108976001600160a01b03831660145b606060006114e383600261194e565b6114ee906002611965565b67ffffffffffffffff81111561150657611506611978565b6040519080825280601f01601f191660200182016040528015611530576020820181803683370190505b509050600360fc1b8160008151811061154b5761154b611831565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061157a5761157a611831565b60200101906001600160f81b031916908160001a905350600061159e84600261194e565b6115a9906001611965565b90505b600181111561162e577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106115ea576115ea611831565b1a60f81b82828151811061160057611600611831565b60200101906001600160f81b031916908160001a90535060049490941c936116278161198e565b90506115ac565b50831561167d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161021a565b9392505050565b60006020828403121561169657600080fd5b81356001600160e01b03198116811461167d57600080fd5b80356001600160a01b03811681146111fd57600080fd5b6000602082840312156116d757600080fd5b61167d826116ae565b6000602082840312156116f257600080fd5b5035919050565b6000806040838503121561170c57600080fd5b8235915061171c602084016116ae565b90509250929050565b60008060006040848603121561173a57600080fd5b833567ffffffffffffffff8082111561175257600080fd5b818601915086601f83011261176657600080fd5b81358181111561177557600080fd5b8760208260051b850101111561178a57600080fd5b6020928301955093506117a091860190506116ae565b90509250925092565b803580151581146111fd57600080fd5b600080604083850312156117cc57600080fd5b6117d5836116ae565b915061171c602084016117a9565b6000602082840312156117f557600080fd5b61167d826117a9565b60008060006060848603121561181357600080fd5b61181c846116ae565b9250602084013591506117a0604085016117a9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161186f5761186f611847565b5060010190565b60005b83811015611891578181015183820152602001611879565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118d2816017850160208801611876565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161190f816028840160208801611876565b01602801949350505050565b602081526000825180602084015261193a816040850160208701611876565b601f01601f19169190910160400192915050565b808202811582820484141761089757610897611847565b8082018082111561089757610897611847565b634e487b7160e01b600052604160045260246000fd5b60008161199d5761199d611847565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2AirdropTonVaultProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 3943, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 3947, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 3951, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 3955, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 2489, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 2491, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dividendPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ext", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ { - "astId": 2495, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2322, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_struct(VaultInfo)3398_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2324, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "dividendPool", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2326, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "ext", - "offset": 0, - "slot": "9", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_struct(VaultInfo)3398_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)3398_storage" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_struct(VaultInfo)3398_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ - { - "astId": 3381, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 3383, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 3385, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3387, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 3389, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 3391, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3393, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3395, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3397, - "contract": "contracts/L2/vaults/L2AirdropTonVaultProxy.sol:L2AirdropTonVaultProxy", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" - } - ], - "numberOfBytes": "192" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2CustomVaultBaseProxy.json b/contracts/data/tonstarter/abi/L2CustomVaultBaseProxy.json index 07aaea2..4cfeea9 100644 --- a/contracts/data/tonstarter/abi/L2CustomVaultBaseProxy.json +++ b/contracts/data/tonstarter/abi/L2CustomVaultBaseProxy.json @@ -1,940 +1,606 @@ -{ - "address": "0x0779606501F1A61557A1A201DB82EBCB5B326859", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x1352a944368d11ae7e0ac8b9d31e55120ab34e52876a7c2ef37d748a6766ac01", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x0779606501F1A61557A1A201DB82EBCB5B326859", - "transactionIndex": 0, - "gasUsed": "1484132", - "logsBloom": "0x00000004000000000800000040000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000080000000000", - "blockHash": "0x81ac0839f9a1b96a8f98ebb45bcb2e68f84e82b6207921ec4e83ac621b48f9b0", - "transactionHash": "0x1352a944368d11ae7e0ac8b9d31e55120ab34e52876a7c2ef37d748a6766ac01", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 22638, - "transactionHash": "0x1352a944368d11ae7e0ac8b9d31e55120ab34e52876a7c2ef37d748a6766ac01", - "address": "0x0779606501F1A61557A1A201DB82EBCB5B326859", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x81ac0839f9a1b96a8f98ebb45bcb2e68f84e82b6207921ec4e83ac621b48f9b0" - }, +[ + { + "anonymous": false, + "inputs": [ { - "transactionIndex": 0, - "blockNumber": 22638, - "transactionHash": "0x1352a944368d11ae7e0ac8b9d31e55120ab34e52876a7c2ef37d748a6766ac01", - "address": "0x0779606501F1A61557A1A201DB82EBCB5B326859", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x81ac0839f9a1b96a8f98ebb45bcb2e68f84e82b6207921ec4e83ac621b48f9b0" - } - ], - "blockNumber": 22638, - "cumulativeGasUsed": "1484132", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "1ed1c592115e49eafa413f74ea8d056d", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2CustomVaultBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":\"L2CustomVaultBaseProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x7c1dfc5d2b669ef43872d3f836983a9a5d3de4feb12123ebc87e6399e9743539\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a600080516020620019f0833981519152806200005b565b62000055600080516020620019f083398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611886806200016a6000396000f3fe6080604052600436106101b05760003560e01c80635cc797d8116100ec5780637fc46ba81161008a57806391d148541161006457806391d14854146105c0578063a217fddf14610606578063b911135f1461061b578063d547741f1461065157610202565b80637fc46ba81461054a5780638b8f4a65146105805780638d4fdb40146105a057610202565b806375829def116100c657806375829def146104b657806375b238fc146104d65780637cb00d251461050a5780637cd5f6631461052a57610202565b80635cc797d81461045c57806363a8fd891461047c578063704802751461049657610202565b806336568abe1161015957806350d2a2761161013357806350d2a2761461037357806352351e85146103c1578063550d01a3146103e65780635c60da1b1461041657610202565b806336568abe146103135780633659cfe6146103335780634a5df50f1461035357610202565b8063248a9ca31161018a578063248a9ca3146102a357806324d7806c146102d35780632f2ff15d146102f357610202565b806301ffc9a71461020c5780631785f53c14610241578063229852461461026157610202565b366102025760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61020a610671565b005b34801561021857600080fd5b5061022c610227366004611538565b61071a565b60405190151581526020015b60405180910390f35b34801561024d57600080fd5b5061020a61025c366004611579565b610751565b34801561026d57600080fd5b506102957ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610238565b3480156102af57600080fd5b506102956102be366004611594565b60009081526004602052604090206001015490565b3480156102df57600080fd5b5061022c6102ee366004611579565b6107cc565b3480156102ff57600080fd5b5061020a61030e3660046115ad565b61080c565b34801561031f57600080fd5b5061020a61032e3660046115ad565b610831565b34801561033f57600080fd5b5061020a61034e366004611579565b6108bd565b34801561035f57600080fd5b5061020a61036e3660046115d9565b610a16565b34801561037f57600080fd5b506103a961038e366004611538565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610238565b3480156103cd57600080fd5b506005546103a99061010090046001600160a01b031681565b3480156103f257600080fd5b5061022c610401366004611579565b60026020526000908152604090205460ff1681565b34801561042257600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103a9565b34801561046857600080fd5b5061020a61047736600461166d565b610cc3565b34801561048857600080fd5b5060005461022c9060ff1681565b3480156104a257600080fd5b5061020a6104b1366004611579565b610d1b565b3480156104c257600080fd5b5061020a6104d1366004611579565b610d93565b3480156104e257600080fd5b506102957fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561051657600080fd5b5061020a610525366004611697565b610ee3565b34801561053657600080fd5b5061020a6105453660046116b2565b610f44565b34801561055657600080fd5b506103a9610565366004611579565b6006602052600090815260409020546001600160a01b031681565b34801561058c57600080fd5b506103a961059b366004611594565b610f9d565b3480156105ac57600080fd5b506103a96105bb366004611538565b610fba565b3480156105cc57600080fd5b5061022c6105db3660046115ad565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561061257600080fd5b50610295600081565b34801561062757600080fd5b506103a9610636366004611594565b6001602052600090815260409020546001600160a01b031681565b34801561065d57600080fd5b5061020a61066c3660046115ad565b6110b6565b60006106886000356001600160e01b031916610fba565b90506001600160a01b038116158015906106a5575060005460ff16155b6106f15760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101f9565b3660008037600080366000845af43d6000803e808015610710573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061074b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61075a336107cc565b61079f5760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610831565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661074b565b600082815260046020526040902060010154610827816110db565b61071583836110e5565b6001600160a01b03811633146108af5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016101f9565b6108b98282611187565b5050565b6108c6336107cc565b61090b5760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6001600160a01b0381166109615760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101f9565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036109d25760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101f9565b6109df816000600161120a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610a1f336107cc565b610a645760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b81610ab15760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101f9565b6001600160a01b03811660009081526002602052604090205460ff16610b195760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101f9565b60005b82811015610cbd57816001600160a01b031660036000868685818110610b4457610b446116e5565b9050602002016020810190610b599190611538565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610bca5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101f9565b8160036000868685818110610be157610be16116e5565b9050602002016020810190610bf69190611538565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610c4b57610c4b6116e5565b9050602002016020810190610c609190611538565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610cb581611711565b915050610b1c565b50505050565b610ccc336107cc565b610d115760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6108b982826112a2565b610d24336107cc565b610d695760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261080c565b610d9c336107cc565b610de15760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6001600160a01b038116610e375760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016101f9565b6001600160a01b0381163303610e8f5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016101f9565b610eb97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261080c565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610831565b610eec336107cc565b610f315760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6000805460ff1916911515919091179055565b610f4d336107cc565b610f925760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b61071583838361120a565b6000818152600160205260408120546001600160a01b031661074b565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661101a5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561107857506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546110d1816110db565b6107158383611187565b6107c98133611301565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108b95760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111433390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156108b95760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6112615760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101f9565b801561129c576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61071583825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108b95761133481611376565b61133f836020611388565b60405160200161135092919061174e565b60408051601f198184030181529082905262461bcd60e51b82526101f9916004016117cf565b606061074b6001600160a01b03831660145b60606000611397836002611802565b6113a2906002611819565b67ffffffffffffffff8111156113ba576113ba61182c565b6040519080825280601f01601f1916602001820160405280156113e4576020820181803683370190505b509050600360fc1b816000815181106113ff576113ff6116e5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061142e5761142e6116e5565b60200101906001600160f81b031916908160001a9053506000611452846002611802565b61145d906001611819565b90505b60018111156114e2577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061149e5761149e6116e5565b1a60f81b8282815181106114b4576114b46116e5565b60200101906001600160f81b031916908160001a90535060049490941c936114db81611842565b9050611460565b5083156115315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016101f9565b9392505050565b60006020828403121561154a57600080fd5b81356001600160e01b03198116811461153157600080fd5b80356001600160a01b03811681146110b157600080fd5b60006020828403121561158b57600080fd5b61153182611562565b6000602082840312156115a657600080fd5b5035919050565b600080604083850312156115c057600080fd5b823591506115d060208401611562565b90509250929050565b6000806000604084860312156115ee57600080fd5b833567ffffffffffffffff8082111561160657600080fd5b818601915086601f83011261161a57600080fd5b81358181111561162957600080fd5b8760208260051b850101111561163e57600080fd5b6020928301955093506116549186019050611562565b90509250925092565b803580151581146110b157600080fd5b6000806040838503121561168057600080fd5b61168983611562565b91506115d06020840161165d565b6000602082840312156116a957600080fd5b6115318261165d565b6000806000606084860312156116c757600080fd5b6116d084611562565b9250602084013591506116546040850161165d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611723576117236116fb565b5060010190565b60005b8381101561174557818101518382015260200161172d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161178681601785016020880161172a565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117c381602884016020880161172a565b01602801949350505050565b60208152600082518060208401526117ee81604085016020870161172a565b601f01601f19169190910160400192915050565b808202811582820484141761074b5761074b6116fb565b8082018082111561074b5761074b6116fb565b634e487b7160e01b600052604160045260246000fd5b600081611851576118516116fb565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101b05760003560e01c80635cc797d8116100ec5780637fc46ba81161008a57806391d148541161006457806391d14854146105c0578063a217fddf14610606578063b911135f1461061b578063d547741f1461065157610202565b80637fc46ba81461054a5780638b8f4a65146105805780638d4fdb40146105a057610202565b806375829def116100c657806375829def146104b657806375b238fc146104d65780637cb00d251461050a5780637cd5f6631461052a57610202565b80635cc797d81461045c57806363a8fd891461047c578063704802751461049657610202565b806336568abe1161015957806350d2a2761161013357806350d2a2761461037357806352351e85146103c1578063550d01a3146103e65780635c60da1b1461041657610202565b806336568abe146103135780633659cfe6146103335780634a5df50f1461035357610202565b8063248a9ca31161018a578063248a9ca3146102a357806324d7806c146102d35780632f2ff15d146102f357610202565b806301ffc9a71461020c5780631785f53c14610241578063229852461461026157610202565b366102025760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61020a610671565b005b34801561021857600080fd5b5061022c610227366004611538565b61071a565b60405190151581526020015b60405180910390f35b34801561024d57600080fd5b5061020a61025c366004611579565b610751565b34801561026d57600080fd5b506102957ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610238565b3480156102af57600080fd5b506102956102be366004611594565b60009081526004602052604090206001015490565b3480156102df57600080fd5b5061022c6102ee366004611579565b6107cc565b3480156102ff57600080fd5b5061020a61030e3660046115ad565b61080c565b34801561031f57600080fd5b5061020a61032e3660046115ad565b610831565b34801561033f57600080fd5b5061020a61034e366004611579565b6108bd565b34801561035f57600080fd5b5061020a61036e3660046115d9565b610a16565b34801561037f57600080fd5b506103a961038e366004611538565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610238565b3480156103cd57600080fd5b506005546103a99061010090046001600160a01b031681565b3480156103f257600080fd5b5061022c610401366004611579565b60026020526000908152604090205460ff1681565b34801561042257600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103a9565b34801561046857600080fd5b5061020a61047736600461166d565b610cc3565b34801561048857600080fd5b5060005461022c9060ff1681565b3480156104a257600080fd5b5061020a6104b1366004611579565b610d1b565b3480156104c257600080fd5b5061020a6104d1366004611579565b610d93565b3480156104e257600080fd5b506102957fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561051657600080fd5b5061020a610525366004611697565b610ee3565b34801561053657600080fd5b5061020a6105453660046116b2565b610f44565b34801561055657600080fd5b506103a9610565366004611579565b6006602052600090815260409020546001600160a01b031681565b34801561058c57600080fd5b506103a961059b366004611594565b610f9d565b3480156105ac57600080fd5b506103a96105bb366004611538565b610fba565b3480156105cc57600080fd5b5061022c6105db3660046115ad565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561061257600080fd5b50610295600081565b34801561062757600080fd5b506103a9610636366004611594565b6001602052600090815260409020546001600160a01b031681565b34801561065d57600080fd5b5061020a61066c3660046115ad565b6110b6565b60006106886000356001600160e01b031916610fba565b90506001600160a01b038116158015906106a5575060005460ff16155b6106f15760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101f9565b3660008037600080366000845af43d6000803e808015610710573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061074b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61075a336107cc565b61079f5760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610831565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661074b565b600082815260046020526040902060010154610827816110db565b61071583836110e5565b6001600160a01b03811633146108af5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016101f9565b6108b98282611187565b5050565b6108c6336107cc565b61090b5760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6001600160a01b0381166109615760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101f9565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036109d25760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101f9565b6109df816000600161120a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610a1f336107cc565b610a645760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b81610ab15760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101f9565b6001600160a01b03811660009081526002602052604090205460ff16610b195760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101f9565b60005b82811015610cbd57816001600160a01b031660036000868685818110610b4457610b446116e5565b9050602002016020810190610b599190611538565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610bca5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101f9565b8160036000868685818110610be157610be16116e5565b9050602002016020810190610bf69190611538565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610c4b57610c4b6116e5565b9050602002016020810190610c609190611538565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610cb581611711565b915050610b1c565b50505050565b610ccc336107cc565b610d115760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6108b982826112a2565b610d24336107cc565b610d695760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261080c565b610d9c336107cc565b610de15760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6001600160a01b038116610e375760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016101f9565b6001600160a01b0381163303610e8f5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016101f9565b610eb97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261080c565b6107c97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610831565b610eec336107cc565b610f315760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b6000805460ff1916911515919091179055565b610f4d336107cc565b610f925760405162461bcd60e51b8152602060048201526022602482015260008051602061185a83398151915260448201526134b760f11b60648201526084016101f9565b61071583838361120a565b6000818152600160205260408120546001600160a01b031661074b565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661101a5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561107857506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546110d1816110db565b6107158383611187565b6107c98133611301565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108b95760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111433390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156108b95760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6112615760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101f9565b801561129c576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61071583825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108b95761133481611376565b61133f836020611388565b60405160200161135092919061174e565b60408051601f198184030181529082905262461bcd60e51b82526101f9916004016117cf565b606061074b6001600160a01b03831660145b60606000611397836002611802565b6113a2906002611819565b67ffffffffffffffff8111156113ba576113ba61182c565b6040519080825280601f01601f1916602001820160405280156113e4576020820181803683370190505b509050600360fc1b816000815181106113ff576113ff6116e5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061142e5761142e6116e5565b60200101906001600160f81b031916908160001a9053506000611452846002611802565b61145d906001611819565b90505b60018111156114e2577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061149e5761149e6116e5565b1a60f81b8282815181106114b4576114b46116e5565b60200101906001600160f81b031916908160001a90535060049490941c936114db81611842565b9050611460565b5083156115315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016101f9565b9392505050565b60006020828403121561154a57600080fd5b81356001600160e01b03198116811461153157600080fd5b80356001600160a01b03811681146110b157600080fd5b60006020828403121561158b57600080fd5b61153182611562565b6000602082840312156115a657600080fd5b5035919050565b600080604083850312156115c057600080fd5b823591506115d060208401611562565b90509250929050565b6000806000604084860312156115ee57600080fd5b833567ffffffffffffffff8082111561160657600080fd5b818601915086601f83011261161a57600080fd5b81358181111561162957600080fd5b8760208260051b850101111561163e57600080fd5b6020928301955093506116549186019050611562565b90509250925092565b803580151581146110b157600080fd5b6000806040838503121561168057600080fd5b61168983611562565b91506115d06020840161165d565b6000602082840312156116a957600080fd5b6115318261165d565b6000806000606084860312156116c757600080fd5b6116d084611562565b9250602084013591506116546040850161165d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611723576117236116fb565b5060010190565b60005b8381101561174557818101518382015260200161172d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161178681601785016020880161172a565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117c381602884016020880161172a565b01602801949350505050565b60208152600082518060208401526117ee81604085016020870161172a565b601f01601f19169190910160400192915050565b808202811582820484141761074b5761074b6116fb565b8082018082111561074b5761074b6116fb565b634e487b7160e01b600052604160045260246000fd5b600081611851576118516116fb565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." - }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } - }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } - } - }, - "title": "L2CustomVaultBase", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } - }, - "version": 1 + ], + "name": "RoleAdminChanged", + "type": "event" }, - "storageLayout": { - "storage": [ + { + "anonymous": false, + "inputs": [ { - "astId": 7441, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 7445, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 7449, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 7453, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 3479, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 3481, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, { - "astId": 3485, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2CustomVaultBaseProxy.sol:L2CustomVaultBaseProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_imp", + "type": "address" } - } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2DividendPoolForStos.json b/contracts/data/tonstarter/abi/L2DividendPoolForStos.json index df23d22..76fae41 100644 --- a/contracts/data/tonstarter/abi/L2DividendPoolForStos.json +++ b/contracts/data/tonstarter/abi/L2DividendPoolForStos.json @@ -1,1140 +1,793 @@ -{ - "address": "0x310AeC1C6Ab68DD1DB4bf9B885835BD73BdEb958", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "Claimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wekklyEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Distributed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Redistributed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_tokensPerWeek", - "type": "uint256" - } - ], - "name": "calculateClaimPerEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tokens", - "type": "address[]" - } - ], - "name": "claimBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "claimUpTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "claimable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "distribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "distributedTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "distributions", - "outputs": [ - { - "internalType": "bool", - "name": "exists", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalDistribution", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastBalance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochUnit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "genesis", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "getAvailableClaims", - "outputs": [ - { - "internalType": "address[]", - "name": "tokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "claimableAmounts", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "getCurrentWeeklyEpochTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "getWeeklyEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_universalStos", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_epochUnit", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_weeklyEpoch", - "type": "uint256" - } - ], - "name": "redistribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "tokensPerWeekAt", - "outputs": [ - { - "internalType": "uint256", - "name": "epochNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "universalStos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb5bdcc8761e284e025b37a49be566193e0d28f3186fd79faa1a4a17951f720f0", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x310AeC1C6Ab68DD1DB4bf9B885835BD73BdEb958", - "transactionIndex": 0, - "gasUsed": "1906222", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x705be095e9cebc3dffef9c08c3a4530a4f50a684a30c202e31dab7af0a8032dd", - "transactionHash": "0xb5bdcc8761e284e025b37a49be566193e0d28f3186fd79faa1a4a17951f720f0", - "logs": [], - "blockNumber": 23689, - "cumulativeGasUsed": "1906222", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b43c6570b3b1b6f48b8dc9da694ef9ce", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epochNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wekklyEpoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Distributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEpoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Redistributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokensPerWeek\",\"type\":\"uint256\"}],\"name\":\"calculateClaimPerEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"}],\"name\":\"claimBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"claimUpTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"distribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"distributedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"distributions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalDistribution\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochUnit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"genesis\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"getAvailableClaims\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimableAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"getCurrentWeeklyEpochTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"getWeeklyEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_universalStos\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_epochUnit\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_weeklyEpoch\",\"type\":\"uint256\"}],\"name\":\"redistribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"tokensPerWeekAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"universalStos\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/airdrop/L2DividendPoolForStos.sol\":\"L2DividendPoolForStos\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/airdrop/L2DividendPoolForStos.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2DividendPoolForStosStorage } from \\\"./L2DividendPoolForStosStorage.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport \\\"../../libraries/LibDividend.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\ninterface IUniversalStos {\\n\\n function balanceOfAt(address account, uint256 _timestamp) external view returns (uint256);\\n function totalSupplyAt(uint256 _timestamp) external view returns (uint256);\\n\\n}\\n\\ncontract L2DividendPoolForStos is ProxyStorage, AccessibleCommon, L2DividendPoolForStosStorage {\\n using SafeERC20 for IERC20;\\n\\n event Claimed(address indexed token, address indexed account, uint256 amount, uint256 epochNumber, uint256 timestamp);\\n event Distributed(address indexed token, uint256 wekklyEpoch, uint256 amount);\\n event Redistributed(address indexed token, uint256 oldEpoch, uint256 newEpoch, uint256 amount);\\n\\n modifier ifFree {\\n require(!free, \\\"already in use\\\");\\n free = true;\\n _;\\n free = false;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"zero value\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address addr) {\\n require(addr != address(0), \\\"zero address\\\");\\n _;\\n }\\n\\n /* ========== onlyOwner ========== */\\n\\n function initialize(address _universalStos, uint256 _epochUnit) external onlyOwner {\\n universalStos = _universalStos;\\n epochUnit = _epochUnit;\\n }\\n\\n /* ========== external ========== */\\n\\n function claimBatch(address[] calldata _tokens) external {\\n for (uint i = 0; i < _tokens.length; ++i) {\\n claim(_tokens[i]);\\n }\\n }\\n\\n function claim(address _token) public {\\n claimUpTo(_token, block.timestamp - epochUnit);\\n }\\n\\n function claimUpTo(address _token, uint256 _timestamp) public {\\n require(genesis[_token] != 0, \\\"genesis is zero\\\");\\n require(block.timestamp >= genesis[_token] + epochUnit, \\\"the first epoch\\\");\\n uint256 timestamp = Math.min(_timestamp, block.timestamp - epochUnit);\\n uint256 weeklyEpoch = getWeeklyEpoch(_token, timestamp);\\n\\n uint256 amountToClaim = claimableForEpoches(\\n _token,\\n msg.sender,\\n claimStartWeeklyEpoch[_token][msg.sender],\\n weeklyEpoch);\\n\\n require(amountToClaim > 0, \\\"no claimable amlount\\\");\\n LibDividend.Distribution storage distr = distributions[_token];\\n require(distr.lastBalance >= amountToClaim, \\\"insufficient balance\\\");\\n claimStartWeeklyEpoch[_token][msg.sender] = weeklyEpoch + 1;\\n distr.lastBalance -= amountToClaim;\\n\\n IERC20(_token).safeTransfer(msg.sender, amountToClaim);\\n emit Claimed(_token, msg.sender, amountToClaim, weeklyEpoch, _timestamp);\\n }\\n\\n function _recordClaim(\\n address _token,\\n address account,\\n uint256 _weeklyEpoch\\n ) internal returns (uint256 amountToClaim) {\\n\\n amountToClaim = claimableForEpoches(\\n _token,\\n account,\\n claimStartWeeklyEpoch[_token][account],\\n _weeklyEpoch\\n );\\n\\n require(amountToClaim > 0, \\\"Amount to be claimed is zero\\\");\\n LibDividend.Distribution storage distr = distributions[_token];\\n require(distr.lastBalance >= amountToClaim, \\\"insufficient remained balance\\\");\\n\\n claimStartWeeklyEpoch[_token][account] = _weeklyEpoch + 1;\\n distr.lastBalance -= amountToClaim;\\n }\\n\\n\\n function distribute(address _token, uint256 _amount)\\n external nonZero(_amount) nonZeroAddress(_token) ifFree\\n {\\n if (genesis[_token] == 0) genesis[_token] = block.timestamp / epochUnit * epochUnit;\\n uint256 weeklyEpoch = getWeeklyEpoch(_token, block.timestamp);\\n\\n LibDividend.Distribution storage distr = distributions[_token];\\n if (distr.exists == false) distributedTokens.push(_token);\\n distr.exists = true;\\n\\n IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n\\n distr.lastBalance = IERC20(_token).balanceOf(address(this));\\n distr.totalDistribution += _amount;\\n tokensPerWeek[_token][weeklyEpoch] += _amount;\\n\\n emit Distributed(_token, weeklyEpoch, _amount);\\n }\\n\\n // \\uc774\\uc804\\uc5d0 \\uc774\\ubbf8 \\ubc30\\ud3ec\\ud588\\ub294\\ub370, \\ud574\\ub2f9 \\uc2a4\\ub0c5\\uc0f7 \\uc2dc\\uc810\\uc5d0 \\ucd1d \\uae08\\uc561\\uc774 \\uc5c6\\uc5b4\\uc11c \\uc5d0\\uc5b4\\ub4dc\\ub78d \\ubc1b\\uc744 \\uc0ac\\ub78c\\uc774 \\uc5c6\\ub294\\uacbd\\uc6b0,..\\n // \\ud574\\ub2f9 \\uc5d0\\ud3ed\\uc758 \\uae08\\uc561\\uc744 \\ud604\\uc7ac \\uc5d0\\ud3ed\\uc73c\\ub85c \\uac00\\uc838\\uc62c \\uc218 \\uc788\\uac8c \\ud55c\\ub2e4.\\n function redistribute(address _token, uint256 _weeklyEpoch)\\n external nonZeroAddress(_token) ifFree\\n {\\n uint256 currentEpoch = getWeeklyEpoch(_token, block.timestamp);\\n require(_weeklyEpoch < currentEpoch, \\\"It can only be set if it is the last epoch.\\\");\\n uint256 timestamp = genesis[_token] + (_weeklyEpoch * epochUnit) + epochUnit;\\n\\n require(\\n IUniversalStos(universalStos).totalSupplyAt(timestamp) == 0,\\n \\\"Token exists for that epoch\\\"\\n );\\n\\n uint256 amount = tokensPerWeek[_token][_weeklyEpoch];\\n tokensPerWeek[_token][currentEpoch] += amount;\\n tokensPerWeek[_token][_weeklyEpoch] = 0;\\n\\n emit Redistributed(_token, _weeklyEpoch, currentEpoch, amount);\\n }\\n\\n\\n function tokensPerWeekAt(address _token, uint256 _timestamp)\\n external\\n view\\n returns (uint256 epochNumber, uint256 amount)\\n {\\n uint256 weeklyEpoch = getWeeklyEpoch(_token, _timestamp);\\n return (weeklyEpoch, tokensPerWeek[_token][weeklyEpoch]);\\n }\\n\\n /* ========== public ========== */\\n\\n function getWeeklyEpoch(address _token, uint256 _timestamp)\\n public\\n view\\n returns (uint256)\\n {\\n uint256 stime = genesis[_token];\\n if (stime == 0) return 0;\\n return _timestamp > stime ? (_timestamp - stime) / epochUnit : 0;\\n }\\n\\n function getAvailableClaims(address _account)\\n external view returns (address[] memory tokens, uint256[] memory claimableAmounts)\\n {\\n uint256[] memory amounts = new uint256[](distributedTokens.length);\\n\\n for (uint256 i = 0; i < distributedTokens.length; ++i) {\\n amounts[i] = claimable(_account, distributedTokens[i]);\\n }\\n\\n return (distributedTokens, amounts);\\n }\\n\\n function claimable(address _account, address _token) public view returns (uint256) {\\n\\n uint256 stime = genesis[_token];\\n if (stime == 0) return 0;\\n\\n uint256 endEpoch = getWeeklyEpoch(_token, block.timestamp - epochUnit);\\n uint256 startEpoch = claimStartWeeklyEpoch[_token][_account];\\n return claimableForEpoches(_account, _token, startEpoch, endEpoch);\\n }\\n\\n\\n function calculateClaimPerEpoch(\\n address _account,\\n uint256 _timestamp,\\n uint256 _tokensPerWeek\\n ) public view returns (uint256) {\\n uint256 balance = IUniversalStos(universalStos).balanceOfAt(_account, _timestamp);\\n uint256 supply = IUniversalStos(universalStos).totalSupplyAt(_timestamp);\\n if (balance == 0 || supply == 0) return 0;\\n return (_tokensPerWeek * balance / supply);\\n }\\n\\n function getCurrentWeeklyEpochTimestamp(address _token) public view returns (uint256) {\\n uint256 stime = genesis[_token];\\n if (stime == 0) return 0;\\n\\n uint256 weeklyEpoch = getWeeklyEpoch(_token, block.timestamp);\\n return (stime + (weeklyEpoch * epochUnit) + epochUnit);\\n }\\n\\n /* ========== internal ========== */\\n\\n function claimableForEpoches(\\n address _token,\\n address _account,\\n uint256 startEpoch,\\n uint256 endEpoch\\n ) internal view returns (uint256 amountToClaim) {\\n if (startEpoch > endEpoch) return 0;\\n uint256 stime = genesis[_token];\\n uint256 epochIterator = startEpoch;\\n while (startEpoch <= endEpoch) {\\n if (tokensPerWeek[_token][epochIterator] != 0 && stime != 0) {\\n amountToClaim += calculateClaimPerEpoch(\\n _account,\\n stime + (epochIterator * epochUnit) + epochUnit,\\n tokensPerWeek[_token][epochIterator]);\\n }\\n epochIterator++;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xcb626f5de83d2c9a72cdab19bd85842590d4e4b6da04fc2cf353495fb5eb32a0\",\"license\":\"MIT\"},\"contracts/L2/airdrop/L2DividendPoolForStosStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../libraries/LibDividend.sol\\\";\\n\\n/**\\n * @title L2DividendPoolForStosStorage\\n * @dev\\n */\\ncontract L2DividendPoolForStosStorage {\\n\\n address public universalStos;\\n uint256 public epochUnit;\\n\\n // token - start airdrop time , it must be set at thursdat at 9 o'clock\\n mapping(address => uint256) public genesis;\\n\\n // token - Distribution\\n mapping(address => LibDividend.Distribution) public distributions;\\n\\n // token - epoch number - distributed amount\\n mapping (address => mapping(uint256 => uint256)) tokensPerWeek;\\n\\n // token - account - start epoch number\\n mapping (address => mapping (address => uint256)) claimStartWeeklyEpoch;\\n\\n // tokens\\n address[] public distributedTokens;\\n bool internal free;\\n}\",\"keccak256\":\"0xe232147b7658236fbfd4a44f20e6f2d08b6d8475a29e7ca7b3b5849b78534057\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibDividend.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibDividend\\n */\\nlibrary LibDividend {\\n\\n struct Distribution {\\n bool exists;\\n uint256 totalDistribution;\\n uint256 lastBalance;\\n }\\n}\",\"keccak256\":\"0x364cd6f9febe39baf893427d192e924c4d1f6f4c23fa0acac57e4f3b71c31f72\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061218d806100206000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806375b238fc1161012a578063cd6dc687116100bd578063e1de599b1161008c578063efb93e9611610071578063efb93e96146105ab578063fb932108146105be578063fd2dcecf146105d157600080fd5b8063e1de599b14610585578063e3ba18a51461059857600080fd5b8063cd6dc68714610539578063d4570c1c1461054c578063d4abe7171461055f578063d547741f1461057257600080fd5b80639353b9df116100f95780639353b9df146104a5578063a217fddf146104f5578063b911135f146104fd578063c83d3c471461052657600080fd5b806375b238fc146103fd57806377222509146104245780637b7eb2e21461044457806391d148541461046c57600080fd5b8063324fb13b116101bd578063550d01a31161018c57806363a8fd891161017157806363a8fd89146103ca57806370480275146103d757806375829def146103ea57600080fd5b8063550d01a31461038657806362e40c24146103a957600080fd5b8063324fb13b1461030c57806336568abe1461031f57806337a155031461033257806350d2a2761461035d57600080fd5b8063248a9ca3116101f9578063248a9ca3146102b057806324d7806c146102d35780632f2ff15d146102e6578063324cd9b1146102f957600080fd5b806301ffc9a71461022b5780631785f53c146102535780631e83409a14610268578063229852461461027b575b600080fd5b61023e610239366004611d5a565b6105da565b60405190151581526020015b60405180910390f35b610266610261366004611da0565b610611565b005b610266610276366004611da0565b6106a3565b6102a27ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024a565b6102a26102be366004611dbb565b60009081526004602052604090206001015490565b61023e6102e1366004611da0565b6106b5565b6102666102f4366004611dd4565b6106f5565b6102a2610307366004611e00565b61071f565b6102a261031a366004611e2a565b610776565b61026661032d366004611dd4565b6108a0565b610345610340366004611dbb565b61092c565b6040516001600160a01b03909116815260200161024a565b61034561036b366004611d5a565b6003602052600090815260409020546001600160a01b031681565b61023e610394366004611da0565b60026020526000908152604090205460ff1681565b6103bc6103b7366004611da0565b610956565b60405161024a929190611e5d565b60005461023e9060ff1681565b6102666103e5366004611da0565b610a7a565b6102666103f8366004611da0565b610b04565b6102a27fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102a2610432366004611da0565b60076020526000908152604090205481565b610457610452366004611e00565b610c66565b6040805192835260208301919091520161024a565b61023e61047a366004611dd4565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6104d86104b3366004611da0565b60086020526000908152604090208054600182015460029092015460ff909116919083565b60408051931515845260208401929092529082015260600161024a565b6102a2600081565b61034561050b366004611dbb565b6001602052600090815260409020546001600160a01b031681565b600554610345906001600160a01b031681565b610266610547366004611e00565b610ca4565b6102a261055a366004611ee1565b610d37565b61026661056d366004611f0b565b610db4565b610266610580366004611dd4565b610df9565b610266610593366004611e00565b610e1e565b6102666105a6366004611e00565b6110e9565b6102a26105b9366004611da0565b611395565b6102666105cc366004611e00565b6113ee565b6102a260065481565b60006001600160e01b03198216637965db0b60e01b148061060b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61061a336106b5565b6106765760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108a0565b50565b6106a081600654426105a69190611f96565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661060b565b600082815260046020526040902060010154610710816116c3565b61071a83836116cd565b505050565b6001600160a01b03821660009081526007602052604081205480820361074957600091505061060b565b80831161075757600061076e565b6006546107648285611f96565b61076e9190611fa9565b949350505050565b60055460405163277166bf60e11b81526001600160a01b038581166004830152602482018590526000928392911690634ee2cd7e90604401602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611fcb565b600554604051630981b24d60e41b8152600481018790529192506000916001600160a01b039091169063981b24d090602401602060405180830381865afa15801561083e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108629190611fcb565b905081158061086f575080155b1561087f57600092505050610899565b8061088a8386611fe4565b6108949190611fa9565b925050505b9392505050565b6001600160a01b038116331461091e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161066d565b610928828261176f565b5050565b600b818154811061093c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060806000600b8054905067ffffffffffffffff81111561097957610979611ffb565b6040519080825280602002602001820160405280156109a2578160200160208202803683370190505b50905060005b600b54811015610a10576109e385600b83815481106109c9576109c9612011565b6000918252602090912001546001600160a01b0316610d37565b8282815181106109f5576109f5612011565b6020908102919091010152610a0981612027565b90506109a8565b50600b8181805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4b575b505050505091509250925050915091565b610a83336106b5565b610ada5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106f5565b610b0d336106b5565b610b645760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6001600160a01b038116610bba5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161066d565b6001600160a01b0381163303610c125760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161066d565b610c3c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106f5565b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336108a0565b6000806000610c75858561071f565b6001600160a01b0395909516600090815260096020908152604080832088845290915290205494959350505050565b610cad336106b5565b610d045760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600655565b6001600160a01b038116600090815260076020526040812054808203610d6157600091505061060b565b6000610d7584600654426103079190611f96565b6001600160a01b038086166000908152600a60209081526040808320938a1683529290522054909150610daa868683856117f2565b9695505050505050565b60005b8181101561071a57610de9838383818110610dd457610dd4612011565b90506020020160208101906102769190611da0565b610df281612027565b9050610db7565b600082815260046020526040902060010154610e14816116c3565b61071a838361176f565b816001600160a01b038116610e645760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161066d565b600c5460ff1615610ea85760405162461bcd60e51b815260206004820152600e60248201526d616c726561647920696e2075736560901b604482015260640161066d565b600c805460ff191660011790556000610ec1844261071f565b9050808310610f385760405162461bcd60e51b815260206004820152602b60248201527f49742063616e206f6e6c7920626520736574206966206974206973207468652060448201527f6c6173742065706f63682e000000000000000000000000000000000000000000606482015260840161066d565b600654600090610f488186611fe4565b6001600160a01b038716600090815260076020526040902054610f6b9190612040565b610f759190612040565b600554604051630981b24d60e41b8152600481018390529192506001600160a01b03169063981b24d090602401602060405180830381865afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe39190611fcb565b156110305760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e2065786973747320666f7220746861742065706f63680000000000604482015260640161066d565b6001600160a01b03851660009081526009602090815260408083208784529091528082205484835290822080549192839261106c908490612040565b90915550506001600160a01b038616600081815260096020908152604080832089845282528083209290925581518881529081018690529081018390527f1cb7f4652f6aadb7311647870434938dd368ea922f1c0a01b8cfad68df3e6975906060015b60405180910390a25050600c805460ff1916905550505050565b6001600160a01b03821660009081526007602052604081205490036111505760405162461bcd60e51b815260206004820152600f60248201527f67656e65736973206973207a65726f0000000000000000000000000000000000604482015260640161066d565b6006546001600160a01b0383166000908152600760205260409020546111769190612040565b4210156111c55760405162461bcd60e51b815260206004820152600f60248201527f7468652066697273742065706f63680000000000000000000000000000000000604482015260640161066d565b60006111de82600654426111d99190611f96565b6118d5565b905060006111ec848361071f565b6001600160a01b0385166000908152600a602090815260408083203380855292528220549293509091611221918791856117f2565b9050600081116112735760405162461bcd60e51b815260206004820152601460248201527f6e6f20636c61696d61626c6520616d6c6f756e74000000000000000000000000604482015260640161066d565b6001600160a01b038516600090815260086020526040902060028101548211156112df5760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e6365000000000000000000000000604482015260640161066d565b6112ea836001612040565b6001600160a01b0387166000908152600a60209081526040808320338452909152812091909155600282018054849290611325908490611f96565b9091555061133f90506001600160a01b03871633846118eb565b604080518381526020810185905290810186905233906001600160a01b038816907fd795915374024be1f03204e052bd584b33bb85c9128ede9c54adbe0bbdc220959060600160405180910390a3505050505050565b6001600160a01b0381166000908152600760205260408120548082036113be5750600092915050565b60006113ca844261071f565b6006549091506113da8183611fe4565b6113e49084612040565b61076e9190612040565b808060000361142c5760405162461bcd60e51b815260206004820152600a6024820152697a65726f2076616c756560b01b604482015260640161066d565b826001600160a01b0381166114725760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161066d565b600c5460ff16156114b65760405162461bcd60e51b815260206004820152600e60248201526d616c726561647920696e2075736560901b604482015260640161066d565b600c805460ff191660011790556001600160a01b0384166000908152600760205260408120549003611513576006546114ef8142611fa9565b6114f99190611fe4565b6001600160a01b0385166000908152600760205260409020555b600061151f854261071f565b6001600160a01b038616600090815260086020526040812080549293509160ff16151590036115a157600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790555b805460ff191660011781556115c16001600160a01b038716333088611a06565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116299190611fcb565b8160020181905550848160010160008282546116459190612040565b90915550506001600160a01b03861660009081526009602090815260408083208584529091528120805487929061167d908490612040565b909155505060408051838152602081018790526001600160a01b038816917f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d891016110cf565b6106a08133611b2a565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109285760008281526004602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561172b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109285760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818311156118045750600061076e565b6001600160a01b038516600090815260076020526040902054835b8385116118cb576001600160a01b03871660009081526009602090815260408083208484529091529020541580159061185757508115155b156118b9576006546118ac90879061186f8185611fe4565b6118799086612040565b6118839190612040565b6001600160a01b038a166000908152600960209081526040808320878452909152902054610776565b6118b69084612040565b92505b806118c381612027565b91505061181f565b5050949350505050565b60008183106118e45781610899565b5090919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916119479190612077565b6000604051808303816000865af19150503d8060008114611984576040519150601f19603f3d011682016040523d82523d6000602084013e611989565b606091505b50915091508180156119b35750805115806119b35750808060200190518101906119b39190612093565b6119ff5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161066d565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a6a9190612077565b6000604051808303816000865af19150503d8060008114611aa7576040519150601f19603f3d011682016040523d82523d6000602084013e611aac565b606091505b5091509150818015611ad6575080511580611ad6575080806020019051810190611ad69190612093565b611b225760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161066d565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661092857611b5d81611b9f565b611b68836020611bb1565b604051602001611b799291906120b5565b60408051601f198184030181529082905262461bcd60e51b825261066d91600401612136565b606061060b6001600160a01b03831660145b60606000611bc0836002611fe4565b611bcb906002612040565b67ffffffffffffffff811115611be357611be3611ffb565b6040519080825280601f01601f191660200182016040528015611c0d576020820181803683370190505b509050600360fc1b81600081518110611c2857611c28612011565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c5757611c57612011565b60200101906001600160f81b031916908160001a9053506000611c7b846002611fe4565b611c86906001612040565b90505b6001811115611d0b577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611cc757611cc7612011565b1a60f81b828281518110611cdd57611cdd612011565b60200101906001600160f81b031916908160001a90535060049490941c93611d0481612169565b9050611c89565b5083156108995760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161066d565b600060208284031215611d6c57600080fd5b81356001600160e01b03198116811461089957600080fd5b80356001600160a01b0381168114611d9b57600080fd5b919050565b600060208284031215611db257600080fd5b61089982611d84565b600060208284031215611dcd57600080fd5b5035919050565b60008060408385031215611de757600080fd5b82359150611df760208401611d84565b90509250929050565b60008060408385031215611e1357600080fd5b611e1c83611d84565b946020939093013593505050565b600080600060608486031215611e3f57600080fd5b611e4884611d84565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b82811015611e9f5781516001600160a01b031684529284019290840190600101611e7a565b5050508381038285015284518082528583019183019060005b81811015611ed457835183529284019291840191600101611eb8565b5090979650505050505050565b60008060408385031215611ef457600080fd5b611efd83611d84565b9150611df760208401611d84565b60008060208385031215611f1e57600080fd5b823567ffffffffffffffff80821115611f3657600080fd5b818501915085601f830112611f4a57600080fd5b813581811115611f5957600080fd5b8660208260051b8501011115611f6e57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561060b5761060b611f80565b600082611fc657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611fdd57600080fd5b5051919050565b808202811582820484141761060b5761060b611f80565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161203957612039611f80565b5060010190565b8082018082111561060b5761060b611f80565b60005b8381101561206e578181015183820152602001612056565b50506000910152565b60008251612089818460208701612053565b9190910192915050565b6000602082840312156120a557600080fd5b8151801515811461089957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516120ed816017850160208801612053565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161212a816028840160208801612053565b01602801949350505050565b6020815260008251806020840152612155816040850160208701612053565b601f01601f19169190910160400192915050565b60008161217857612178611f80565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102265760003560e01c806375b238fc1161012a578063cd6dc687116100bd578063e1de599b1161008c578063efb93e9611610071578063efb93e96146105ab578063fb932108146105be578063fd2dcecf146105d157600080fd5b8063e1de599b14610585578063e3ba18a51461059857600080fd5b8063cd6dc68714610539578063d4570c1c1461054c578063d4abe7171461055f578063d547741f1461057257600080fd5b80639353b9df116100f95780639353b9df146104a5578063a217fddf146104f5578063b911135f146104fd578063c83d3c471461052657600080fd5b806375b238fc146103fd57806377222509146104245780637b7eb2e21461044457806391d148541461046c57600080fd5b8063324fb13b116101bd578063550d01a31161018c57806363a8fd891161017157806363a8fd89146103ca57806370480275146103d757806375829def146103ea57600080fd5b8063550d01a31461038657806362e40c24146103a957600080fd5b8063324fb13b1461030c57806336568abe1461031f57806337a155031461033257806350d2a2761461035d57600080fd5b8063248a9ca3116101f9578063248a9ca3146102b057806324d7806c146102d35780632f2ff15d146102e6578063324cd9b1146102f957600080fd5b806301ffc9a71461022b5780631785f53c146102535780631e83409a14610268578063229852461461027b575b600080fd5b61023e610239366004611d5a565b6105da565b60405190151581526020015b60405180910390f35b610266610261366004611da0565b610611565b005b610266610276366004611da0565b6106a3565b6102a27ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161024a565b6102a26102be366004611dbb565b60009081526004602052604090206001015490565b61023e6102e1366004611da0565b6106b5565b6102666102f4366004611dd4565b6106f5565b6102a2610307366004611e00565b61071f565b6102a261031a366004611e2a565b610776565b61026661032d366004611dd4565b6108a0565b610345610340366004611dbb565b61092c565b6040516001600160a01b03909116815260200161024a565b61034561036b366004611d5a565b6003602052600090815260409020546001600160a01b031681565b61023e610394366004611da0565b60026020526000908152604090205460ff1681565b6103bc6103b7366004611da0565b610956565b60405161024a929190611e5d565b60005461023e9060ff1681565b6102666103e5366004611da0565b610a7a565b6102666103f8366004611da0565b610b04565b6102a27fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6102a2610432366004611da0565b60076020526000908152604090205481565b610457610452366004611e00565b610c66565b6040805192835260208301919091520161024a565b61023e61047a366004611dd4565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6104d86104b3366004611da0565b60086020526000908152604090208054600182015460029092015460ff909116919083565b60408051931515845260208401929092529082015260600161024a565b6102a2600081565b61034561050b366004611dbb565b6001602052600090815260409020546001600160a01b031681565b600554610345906001600160a01b031681565b610266610547366004611e00565b610ca4565b6102a261055a366004611ee1565b610d37565b61026661056d366004611f0b565b610db4565b610266610580366004611dd4565b610df9565b610266610593366004611e00565b610e1e565b6102666105a6366004611e00565b6110e9565b6102a26105b9366004611da0565b611395565b6102666105cc366004611e00565b6113ee565b6102a260065481565b60006001600160e01b03198216637965db0b60e01b148061060b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61061a336106b5565b6106765760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108a0565b50565b6106a081600654426105a69190611f96565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661060b565b600082815260046020526040902060010154610710816116c3565b61071a83836116cd565b505050565b6001600160a01b03821660009081526007602052604081205480820361074957600091505061060b565b80831161075757600061076e565b6006546107648285611f96565b61076e9190611fa9565b949350505050565b60055460405163277166bf60e11b81526001600160a01b038581166004830152602482018590526000928392911690634ee2cd7e90604401602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611fcb565b600554604051630981b24d60e41b8152600481018790529192506000916001600160a01b039091169063981b24d090602401602060405180830381865afa15801561083e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108629190611fcb565b905081158061086f575080155b1561087f57600092505050610899565b8061088a8386611fe4565b6108949190611fa9565b925050505b9392505050565b6001600160a01b038116331461091e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161066d565b610928828261176f565b5050565b600b818154811061093c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060806000600b8054905067ffffffffffffffff81111561097957610979611ffb565b6040519080825280602002602001820160405280156109a2578160200160208202803683370190505b50905060005b600b54811015610a10576109e385600b83815481106109c9576109c9612011565b6000918252602090912001546001600160a01b0316610d37565b8282815181106109f5576109f5612011565b6020908102919091010152610a0981612027565b90506109a8565b50600b8181805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4b575b505050505091509250925050915091565b610a83336106b5565b610ada5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106f5565b610b0d336106b5565b610b645760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6001600160a01b038116610bba5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161066d565b6001600160a01b0381163303610c125760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161066d565b610c3c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106f5565b6106a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336108a0565b6000806000610c75858561071f565b6001600160a01b0395909516600090815260096020908152604080832088845290915290205494959350505050565b610cad336106b5565b610d045760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840161066d565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600655565b6001600160a01b038116600090815260076020526040812054808203610d6157600091505061060b565b6000610d7584600654426103079190611f96565b6001600160a01b038086166000908152600a60209081526040808320938a1683529290522054909150610daa868683856117f2565b9695505050505050565b60005b8181101561071a57610de9838383818110610dd457610dd4612011565b90506020020160208101906102769190611da0565b610df281612027565b9050610db7565b600082815260046020526040902060010154610e14816116c3565b61071a838361176f565b816001600160a01b038116610e645760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161066d565b600c5460ff1615610ea85760405162461bcd60e51b815260206004820152600e60248201526d616c726561647920696e2075736560901b604482015260640161066d565b600c805460ff191660011790556000610ec1844261071f565b9050808310610f385760405162461bcd60e51b815260206004820152602b60248201527f49742063616e206f6e6c7920626520736574206966206974206973207468652060448201527f6c6173742065706f63682e000000000000000000000000000000000000000000606482015260840161066d565b600654600090610f488186611fe4565b6001600160a01b038716600090815260076020526040902054610f6b9190612040565b610f759190612040565b600554604051630981b24d60e41b8152600481018390529192506001600160a01b03169063981b24d090602401602060405180830381865afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe39190611fcb565b156110305760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e2065786973747320666f7220746861742065706f63680000000000604482015260640161066d565b6001600160a01b03851660009081526009602090815260408083208784529091528082205484835290822080549192839261106c908490612040565b90915550506001600160a01b038616600081815260096020908152604080832089845282528083209290925581518881529081018690529081018390527f1cb7f4652f6aadb7311647870434938dd368ea922f1c0a01b8cfad68df3e6975906060015b60405180910390a25050600c805460ff1916905550505050565b6001600160a01b03821660009081526007602052604081205490036111505760405162461bcd60e51b815260206004820152600f60248201527f67656e65736973206973207a65726f0000000000000000000000000000000000604482015260640161066d565b6006546001600160a01b0383166000908152600760205260409020546111769190612040565b4210156111c55760405162461bcd60e51b815260206004820152600f60248201527f7468652066697273742065706f63680000000000000000000000000000000000604482015260640161066d565b60006111de82600654426111d99190611f96565b6118d5565b905060006111ec848361071f565b6001600160a01b0385166000908152600a602090815260408083203380855292528220549293509091611221918791856117f2565b9050600081116112735760405162461bcd60e51b815260206004820152601460248201527f6e6f20636c61696d61626c6520616d6c6f756e74000000000000000000000000604482015260640161066d565b6001600160a01b038516600090815260086020526040902060028101548211156112df5760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e6365000000000000000000000000604482015260640161066d565b6112ea836001612040565b6001600160a01b0387166000908152600a60209081526040808320338452909152812091909155600282018054849290611325908490611f96565b9091555061133f90506001600160a01b03871633846118eb565b604080518381526020810185905290810186905233906001600160a01b038816907fd795915374024be1f03204e052bd584b33bb85c9128ede9c54adbe0bbdc220959060600160405180910390a3505050505050565b6001600160a01b0381166000908152600760205260408120548082036113be5750600092915050565b60006113ca844261071f565b6006549091506113da8183611fe4565b6113e49084612040565b61076e9190612040565b808060000361142c5760405162461bcd60e51b815260206004820152600a6024820152697a65726f2076616c756560b01b604482015260640161066d565b826001600160a01b0381166114725760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161066d565b600c5460ff16156114b65760405162461bcd60e51b815260206004820152600e60248201526d616c726561647920696e2075736560901b604482015260640161066d565b600c805460ff191660011790556001600160a01b0384166000908152600760205260408120549003611513576006546114ef8142611fa9565b6114f99190611fe4565b6001600160a01b0385166000908152600760205260409020555b600061151f854261071f565b6001600160a01b038616600090815260086020526040812080549293509160ff16151590036115a157600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790555b805460ff191660011781556115c16001600160a01b038716333088611a06565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116299190611fcb565b8160020181905550848160010160008282546116459190612040565b90915550506001600160a01b03861660009081526009602090815260408083208584529091528120805487929061167d908490612040565b909155505060408051838152602081018790526001600160a01b038816917f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d891016110cf565b6106a08133611b2a565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109285760008281526004602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561172b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109285760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818311156118045750600061076e565b6001600160a01b038516600090815260076020526040902054835b8385116118cb576001600160a01b03871660009081526009602090815260408083208484529091529020541580159061185757508115155b156118b9576006546118ac90879061186f8185611fe4565b6118799086612040565b6118839190612040565b6001600160a01b038a166000908152600960209081526040808320878452909152902054610776565b6118b69084612040565b92505b806118c381612027565b91505061181f565b5050949350505050565b60008183106118e45781610899565b5090919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916119479190612077565b6000604051808303816000865af19150503d8060008114611984576040519150601f19603f3d011682016040523d82523d6000602084013e611989565b606091505b50915091508180156119b35750805115806119b35750808060200190518101906119b39190612093565b6119ff5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161066d565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a6a9190612077565b6000604051808303816000865af19150503d8060008114611aa7576040519150601f19603f3d011682016040523d82523d6000602084013e611aac565b606091505b5091509150818015611ad6575080511580611ad6575080806020019051810190611ad69190612093565b611b225760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161066d565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661092857611b5d81611b9f565b611b68836020611bb1565b604051602001611b799291906120b5565b60408051601f198184030181529082905262461bcd60e51b825261066d91600401612136565b606061060b6001600160a01b03831660145b60606000611bc0836002611fe4565b611bcb906002612040565b67ffffffffffffffff811115611be357611be3611ffb565b6040519080825280601f01601f191660200182016040528015611c0d576020820181803683370190505b509050600360fc1b81600081518110611c2857611c28612011565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c5757611c57612011565b60200101906001600160f81b031916908160001a9053506000611c7b846002611fe4565b611c86906001612040565b90505b6001811115611d0b577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611cc757611cc7612011565b1a60f81b828281518110611cdd57611cdd612011565b60200101906001600160f81b031916908160001a90535060049490941c93611d0481612169565b9050611c89565b5083156108995760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161066d565b600060208284031215611d6c57600080fd5b81356001600160e01b03198116811461089957600080fd5b80356001600160a01b0381168114611d9b57600080fd5b919050565b600060208284031215611db257600080fd5b61089982611d84565b600060208284031215611dcd57600080fd5b5035919050565b60008060408385031215611de757600080fd5b82359150611df760208401611d84565b90509250929050565b60008060408385031215611e1357600080fd5b611e1c83611d84565b946020939093013593505050565b600080600060608486031215611e3f57600080fd5b611e4884611d84565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b82811015611e9f5781516001600160a01b031684529284019290840190600101611e7a565b5050508381038285015284518082528583019183019060005b81811015611ed457835183529284019291840191600101611eb8565b5090979650505050505050565b60008060408385031215611ef457600080fd5b611efd83611d84565b9150611df760208401611d84565b60008060208385031215611f1e57600080fd5b823567ffffffffffffffff80821115611f3657600080fd5b818501915085601f830112611f4a57600080fd5b813581811115611f5957600080fd5b8660208260051b8501011115611f6e57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561060b5761060b611f80565b600082611fc657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611fdd57600080fd5b5051919050565b808202811582820484141761060b5761060b611f80565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161203957612039611f80565b5060010190565b8082018082111561060b5761060b611f80565b60005b8381101561206e578181015183820152602001612056565b50506000910152565b60008251612089818460208701612053565b9190910192915050565b6000602082840312156120a557600080fd5b8151801515811461089957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516120ed816017850160208801612053565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161212a816028840160208801612053565b01602801949350505050565b6020815260008251806020840152612155816040850160208701612053565b601f01601f19169190910160400192915050565b60008161217857612178611f80565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." - }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "Claimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": false, + "internalType": "uint256", + "name": "wekklyEpoch", + "type": "uint256" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + ], + "name": "Distributed", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 5155, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 5159, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" }, { - "astId": 5163, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "indexed": false, + "internalType": "uint256", + "name": "oldEpoch", + "type": "uint256" }, { - "astId": 5167, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "uint256", + "name": "newEpoch", + "type": "uint256" }, { - "astId": 24, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Redistributed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2708, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "universalStos", - "offset": 0, - "slot": "5", - "type": "t_address" + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "astId": 2710, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "epochUnit", - "offset": 0, - "slot": "6", - "type": "t_uint256" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2714, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "genesis", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_uint256)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 2719, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "distributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_struct(Distribution)4108_storage)" + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2725, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "tokensPerWeek", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 2731, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "claimStartWeeklyEpoch", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" }, { - "astId": 2734, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "distributedTokens", - "offset": 0, - "slot": "11", - "type": "t_array(t_address)dyn_storage" + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" }, { - "astId": 2736, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "free", - "offset": 0, - "slot": "12", - "type": "t_bool" + "internalType": "uint256", + "name": "_tokensPerWeek", + "type": "uint256" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" + "name": "calculateClaimPerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tokens", + "type": "address[]" + } + ], + "name": "claimBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "claimUpTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "claimable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "distribute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "distributedTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "distributions", + "outputs": [ + { + "internalType": "bool", + "name": "exists", + "type": "bool" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "totalDistribution", + "type": "uint256" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" + { + "internalType": "uint256", + "name": "lastBalance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "genesis", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "getAvailableClaims", + "outputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" + { + "internalType": "uint256[]", + "name": "claimableAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getCurrentWeeklyEpochTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" }, - "t_mapping(t_address,t_struct(Distribution)4108_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibDividend.Distribution)", - "numberOfBytes": "32", - "value": "t_struct(Distribution)4108_storage" + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getWeeklyEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_universalStos", + "type": "address" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "_epochUnit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "_weeklyEpoch", + "type": "uint256" + } + ], + "name": "redistribute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_struct(Distribution)4108_storage": { - "encoding": "inplace", - "label": "struct LibDividend.Distribution", - "members": [ - { - "astId": 4103, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "exists", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4105, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "totalDistribution", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 4107, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "lastBalance", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/airdrop/L2DividendPoolForStos.sol:L2DividendPoolForStos", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "tokensPerWeekAt", + "outputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" } - } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "universalStos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2DividendPoolForStosProxy.json b/contracts/data/tonstarter/abi/L2DividendPoolForStosProxy.json index 927a593..a4e0d21 100644 --- a/contracts/data/tonstarter/abi/L2DividendPoolForStosProxy.json +++ b/contracts/data/tonstarter/abi/L2DividendPoolForStosProxy.json @@ -1,1087 +1,648 @@ -{ - "address": "0x26C3C2620c511444b5C9c213d2Da9e5fAc451Edf", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "distributedTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "distributions", - "outputs": [ - { - "internalType": "bool", - "name": "exists", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalDistribution", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastBalance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochUnit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "genesis", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "universalStos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x4056b58d42260bd52f5a6e45065474e8b53997350eb1c3d7a040648adef9ac2b", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x26C3C2620c511444b5C9c213d2Da9e5fAc451Edf", - "transactionIndex": 0, - "gasUsed": "1506685", - "logsBloom": "0x00000004000000000800000000000000080000100000000000000000000100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7162512da91c1b68460b3e68f33c924ab27cdaefafcecdb2353a5239426d2c82", - "transactionHash": "0x4056b58d42260bd52f5a6e45065474e8b53997350eb1c3d7a040648adef9ac2b", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23690, - "transactionHash": "0x4056b58d42260bd52f5a6e45065474e8b53997350eb1c3d7a040648adef9ac2b", - "address": "0x26C3C2620c511444b5C9c213d2Da9e5fAc451Edf", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x7162512da91c1b68460b3e68f33c924ab27cdaefafcecdb2353a5239426d2c82" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 23690, - "transactionHash": "0x4056b58d42260bd52f5a6e45065474e8b53997350eb1c3d7a040648adef9ac2b", - "address": "0x26C3C2620c511444b5C9c213d2Da9e5fAc451Edf", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x7162512da91c1b68460b3e68f33c924ab27cdaefafcecdb2353a5239426d2c82" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 23690, - "cumulativeGasUsed": "1506685", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b43c6570b3b1b6f48b8dc9da694ef9ce", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"distributedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"distributions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalDistribution\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochUnit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"genesis\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"universalStos\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2DividendPoolForStosProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/airdrop/L2DividendPoolForStosProxy.sol\":\"L2DividendPoolForStosProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/airdrop/L2DividendPoolForStosProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../proxy/Proxy.sol\\\";\\nimport { L2DividendPoolForStosStorage } from \\\"./L2DividendPoolForStosStorage.sol\\\";\\n\\n/**\\n * @title L2DividendPoolForStosProxy\\n * @dev\\n */\\ncontract L2DividendPoolForStosProxy is Proxy, L2DividendPoolForStosStorage {\\n\\n}\",\"keccak256\":\"0xb429e20011a563f76bb29e30621b16ca586c6dbbd415e22daeb96a89142a5f92\",\"license\":\"MIT\"},\"contracts/L2/airdrop/L2DividendPoolForStosStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../libraries/LibDividend.sol\\\";\\n\\n/**\\n * @title L2DividendPoolForStosStorage\\n * @dev\\n */\\ncontract L2DividendPoolForStosStorage {\\n\\n address public universalStos;\\n uint256 public epochUnit;\\n\\n // token - start airdrop time , it must be set at thursdat at 9 o'clock\\n mapping(address => uint256) public genesis;\\n\\n // token - Distribution\\n mapping(address => LibDividend.Distribution) public distributions;\\n\\n // token - epoch number - distributed amount\\n mapping (address => mapping(uint256 => uint256)) tokensPerWeek;\\n\\n // token - account - start epoch number\\n mapping (address => mapping (address => uint256)) claimStartWeeklyEpoch;\\n\\n // tokens\\n address[] public distributedTokens;\\n bool internal free;\\n}\",\"keccak256\":\"0xe232147b7658236fbfd4a44f20e6f2d08b6d8475a29e7ca7b3b5849b78534057\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibDividend.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibDividend\\n */\\nlibrary LibDividend {\\n\\n struct Distribution {\\n bool exists;\\n uint256 totalDistribution;\\n uint256 lastBalance;\\n }\\n}\",\"keccak256\":\"0x364cd6f9febe39baf893427d192e924c4d1f6f4c23fa0acac57e4f3b71c31f72\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506200002d60008051602062001ab3833981519152806200004e565b6200004860008051602062001ab38339815191523362000099565b6200014d565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000a58282620000a9565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000a55760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001093390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611956806200015d6000396000f3fe6080604052600436106101d15760003560e01c806370480275116100f75780638d4fdb4011610095578063b911135f11610064578063b911135f1461068b578063c83d3c47146106c1578063d547741f146106e1578063fd2dcecf1461070157610223565b80638d4fdb40146105b357806391d14854146105d35780639353b9df14610619578063a217fddf1461067657610223565b806377222509116100d157806377222509146105265780637cb00d25146105535780637cd5f663146105735780638b8f4a651461059357610223565b806370480275146104b257806375829def146104d257806375b238fc146104f257610223565b80633659cfe61161016f578063550d01a31161013e578063550d01a3146104025780635c60da1b146104325780635cc797d81461047857806363a8fd891461049857610223565b80633659cfe61461035457806337a15503146103745780634a5df50f146103ac57806350d2a276146103cc57610223565b8063248a9ca3116101ab578063248a9ca3146102c457806324d7806c146102f45780632f2ff15d1461031457806336568abe1461033457610223565b806301ffc9a71461022d5780631785f53c14610262578063229852461461028257610223565b366102235760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61022b610717565b005b34801561023957600080fd5b5061024d610248366004611608565b6107c0565b60405190151581526020015b60405180910390f35b34801561026e57600080fd5b5061022b61027d366004611649565b6107f7565b34801561028e57600080fd5b506102b67ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610259565b3480156102d057600080fd5b506102b66102df366004611664565b60009081526004602052604090206001015490565b34801561030057600080fd5b5061024d61030f366004611649565b610872565b34801561032057600080fd5b5061022b61032f36600461167d565b6108b2565b34801561034057600080fd5b5061022b61034f36600461167d565b6108d7565b34801561036057600080fd5b5061022b61036f366004611649565b610963565b34801561038057600080fd5b5061039461038f366004611664565b610abc565b6040516001600160a01b039091168152602001610259565b3480156103b857600080fd5b5061022b6103c73660046116a9565b610ae6565b3480156103d857600080fd5b506103946103e7366004611608565b6003602052600090815260409020546001600160a01b031681565b34801561040e57600080fd5b5061024d61041d366004611649565b60026020526000908152604090205460ff1681565b34801561043e57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610394565b34801561048457600080fd5b5061022b61049336600461173d565b610d93565b3480156104a457600080fd5b5060005461024d9060ff1681565b3480156104be57600080fd5b5061022b6104cd366004611649565b610deb565b3480156104de57600080fd5b5061022b6104ed366004611649565b610e63565b3480156104fe57600080fd5b506102b67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561053257600080fd5b506102b6610541366004611649565b60076020526000908152604090205481565b34801561055f57600080fd5b5061022b61056e366004611767565b610fb3565b34801561057f57600080fd5b5061022b61058e366004611782565b611014565b34801561059f57600080fd5b506103946105ae366004611664565b61106d565b3480156105bf57600080fd5b506103946105ce366004611608565b61108a565b3480156105df57600080fd5b5061024d6105ee36600461167d565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561062557600080fd5b50610659610634366004611649565b60086020526000908152604090208054600182015460029092015460ff909116919083565b604080519315158452602084019290925290820152606001610259565b34801561068257600080fd5b506102b6600081565b34801561069757600080fd5b506103946106a6366004611664565b6001602052600090815260409020546001600160a01b031681565b3480156106cd57600080fd5b50600554610394906001600160a01b031681565b3480156106ed57600080fd5b5061022b6106fc36600461167d565b611186565b34801561070d57600080fd5b506102b660065481565b600061072e6000356001600160e01b03191661108a565b90506001600160a01b0381161580159061074b575060005460ff16155b6107975760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161021a565b3660008037600080366000845af43d6000803e8080156107b6573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b14806107f157506301ffc9a760e01b6001600160e01b03198316145b92915050565b61080033610872565b6108455760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108d7565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166107f1565b6000828152600460205260409020600101546108cd816111ab565b6107bb83836111b5565b6001600160a01b03811633146109555760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161021a565b61095f8282611257565b5050565b61096c33610872565b6109b15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610a075760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161021a565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610a785760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161021a565b610a8581600060016112da565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600b8181548110610acc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aef33610872565b610b345760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b81610b815760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161021a565b6001600160a01b03811660009081526002602052604090205460ff16610be95760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161021a565b60005b82811015610d8d57816001600160a01b031660036000868685818110610c1457610c146117b5565b9050602002016020810190610c299190611608565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610c9a5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161021a565b8160036000868685818110610cb157610cb16117b5565b9050602002016020810190610cc69190611608565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d1b57610d1b6117b5565b9050602002016020810190610d309190611608565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610d85816117e1565b915050610bec565b50505050565b610d9c33610872565b610de15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61095f8282611372565b610df433610872565b610e395760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108b2565b610e6c33610872565b610eb15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610f075760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161021a565b6001600160a01b0381163303610f5f5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161021a565b610f897fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108b2565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336108d7565b610fbc33610872565b6110015760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6000805460ff1916911515919091179055565b61101d33610872565b6110625760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6107bb8383836112da565b6000818152600160205260408120546001600160a01b03166107f1565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166110ea5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561114857506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111a1816111ab565b6107bb8383611257565b61086f81336113d1565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661095f5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff161561095f5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113315760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161021a565b801561136c576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6107bb83825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661095f5761140481611446565b61140f836020611458565b60405160200161142092919061181e565b60408051601f198184030181529082905262461bcd60e51b825261021a9160040161189f565b60606107f16001600160a01b03831660145b606060006114678360026118d2565b6114729060026118e9565b67ffffffffffffffff81111561148a5761148a6118fc565b6040519080825280601f01601f1916602001820160405280156114b4576020820181803683370190505b509050600360fc1b816000815181106114cf576114cf6117b5565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106114fe576114fe6117b5565b60200101906001600160f81b031916908160001a90535060006115228460026118d2565b61152d9060016118e9565b90505b60018111156115b2577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061156e5761156e6117b5565b1a60f81b828281518110611584576115846117b5565b60200101906001600160f81b031916908160001a90535060049490941c936115ab81611912565b9050611530565b5083156116015760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161021a565b9392505050565b60006020828403121561161a57600080fd5b81356001600160e01b03198116811461160157600080fd5b80356001600160a01b038116811461118157600080fd5b60006020828403121561165b57600080fd5b61160182611632565b60006020828403121561167657600080fd5b5035919050565b6000806040838503121561169057600080fd5b823591506116a060208401611632565b90509250929050565b6000806000604084860312156116be57600080fd5b833567ffffffffffffffff808211156116d657600080fd5b818601915086601f8301126116ea57600080fd5b8135818111156116f957600080fd5b8760208260051b850101111561170e57600080fd5b6020928301955093506117249186019050611632565b90509250925092565b8035801515811461118157600080fd5b6000806040838503121561175057600080fd5b61175983611632565b91506116a06020840161172d565b60006020828403121561177957600080fd5b6116018261172d565b60008060006060848603121561179757600080fd5b6117a084611632565b9250602084013591506117246040850161172d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016117f3576117f36117cb565b5060010190565b60005b838110156118155781810151838201526020016117fd565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118568160178501602088016117fa565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118938160288401602088016117fa565b01602801949350505050565b60208152600082518060208401526118be8160408501602087016117fa565b601f01601f19169190910160400192915050565b80820281158282048414176107f1576107f16117cb565b808201808211156107f1576107f16117cb565b634e487b7160e01b600052604160045260246000fd5b600081611921576119216117cb565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101d15760003560e01c806370480275116100f75780638d4fdb4011610095578063b911135f11610064578063b911135f1461068b578063c83d3c47146106c1578063d547741f146106e1578063fd2dcecf1461070157610223565b80638d4fdb40146105b357806391d14854146105d35780639353b9df14610619578063a217fddf1461067657610223565b806377222509116100d157806377222509146105265780637cb00d25146105535780637cd5f663146105735780638b8f4a651461059357610223565b806370480275146104b257806375829def146104d257806375b238fc146104f257610223565b80633659cfe61161016f578063550d01a31161013e578063550d01a3146104025780635c60da1b146104325780635cc797d81461047857806363a8fd891461049857610223565b80633659cfe61461035457806337a15503146103745780634a5df50f146103ac57806350d2a276146103cc57610223565b8063248a9ca3116101ab578063248a9ca3146102c457806324d7806c146102f45780632f2ff15d1461031457806336568abe1461033457610223565b806301ffc9a71461022d5780631785f53c14610262578063229852461461028257610223565b366102235760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61022b610717565b005b34801561023957600080fd5b5061024d610248366004611608565b6107c0565b60405190151581526020015b60405180910390f35b34801561026e57600080fd5b5061022b61027d366004611649565b6107f7565b34801561028e57600080fd5b506102b67ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610259565b3480156102d057600080fd5b506102b66102df366004611664565b60009081526004602052604090206001015490565b34801561030057600080fd5b5061024d61030f366004611649565b610872565b34801561032057600080fd5b5061022b61032f36600461167d565b6108b2565b34801561034057600080fd5b5061022b61034f36600461167d565b6108d7565b34801561036057600080fd5b5061022b61036f366004611649565b610963565b34801561038057600080fd5b5061039461038f366004611664565b610abc565b6040516001600160a01b039091168152602001610259565b3480156103b857600080fd5b5061022b6103c73660046116a9565b610ae6565b3480156103d857600080fd5b506103946103e7366004611608565b6003602052600090815260409020546001600160a01b031681565b34801561040e57600080fd5b5061024d61041d366004611649565b60026020526000908152604090205460ff1681565b34801561043e57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610394565b34801561048457600080fd5b5061022b61049336600461173d565b610d93565b3480156104a457600080fd5b5060005461024d9060ff1681565b3480156104be57600080fd5b5061022b6104cd366004611649565b610deb565b3480156104de57600080fd5b5061022b6104ed366004611649565b610e63565b3480156104fe57600080fd5b506102b67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561053257600080fd5b506102b6610541366004611649565b60076020526000908152604090205481565b34801561055f57600080fd5b5061022b61056e366004611767565b610fb3565b34801561057f57600080fd5b5061022b61058e366004611782565b611014565b34801561059f57600080fd5b506103946105ae366004611664565b61106d565b3480156105bf57600080fd5b506103946105ce366004611608565b61108a565b3480156105df57600080fd5b5061024d6105ee36600461167d565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561062557600080fd5b50610659610634366004611649565b60086020526000908152604090208054600182015460029092015460ff909116919083565b604080519315158452602084019290925290820152606001610259565b34801561068257600080fd5b506102b6600081565b34801561069757600080fd5b506103946106a6366004611664565b6001602052600090815260409020546001600160a01b031681565b3480156106cd57600080fd5b50600554610394906001600160a01b031681565b3480156106ed57600080fd5b5061022b6106fc36600461167d565b611186565b34801561070d57600080fd5b506102b660065481565b600061072e6000356001600160e01b03191661108a565b90506001600160a01b0381161580159061074b575060005460ff16155b6107975760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161021a565b3660008037600080366000845af43d6000803e8080156107b6573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b14806107f157506301ffc9a760e01b6001600160e01b03198316145b92915050565b61080033610872565b6108455760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108d7565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166107f1565b6000828152600460205260409020600101546108cd816111ab565b6107bb83836111b5565b6001600160a01b03811633146109555760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161021a565b61095f8282611257565b5050565b61096c33610872565b6109b15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610a075760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161021a565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610a785760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161021a565b610a8581600060016112da565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600b8181548110610acc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aef33610872565b610b345760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b81610b815760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161021a565b6001600160a01b03811660009081526002602052604090205460ff16610be95760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161021a565b60005b82811015610d8d57816001600160a01b031660036000868685818110610c1457610c146117b5565b9050602002016020810190610c299190611608565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610c9a5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161021a565b8160036000868685818110610cb157610cb16117b5565b9050602002016020810190610cc69190611608565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d1b57610d1b6117b5565b9050602002016020810190610d309190611608565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610d85816117e1565b915050610bec565b50505050565b610d9c33610872565b610de15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61095f8282611372565b610df433610872565b610e395760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108b2565b610e6c33610872565b610eb15760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6001600160a01b038116610f075760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161021a565b6001600160a01b0381163303610f5f5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161021a565b610f897fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826108b2565b61086f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336108d7565b610fbc33610872565b6110015760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6000805460ff1916911515919091179055565b61101d33610872565b6110625760405162461bcd60e51b8152602060048201526022602482015260008051602061192a83398151915260448201526134b760f11b606482015260840161021a565b6107bb8383836112da565b6000818152600160205260408120546001600160a01b03166107f1565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166110ea5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561114857506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111a1816111ab565b6107bb8383611257565b61086f81336113d1565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661095f5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff161561095f5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113315760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161021a565b801561136c576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6107bb83825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661095f5761140481611446565b61140f836020611458565b60405160200161142092919061181e565b60408051601f198184030181529082905262461bcd60e51b825261021a9160040161189f565b60606107f16001600160a01b03831660145b606060006114678360026118d2565b6114729060026118e9565b67ffffffffffffffff81111561148a5761148a6118fc565b6040519080825280601f01601f1916602001820160405280156114b4576020820181803683370190505b509050600360fc1b816000815181106114cf576114cf6117b5565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106114fe576114fe6117b5565b60200101906001600160f81b031916908160001a90535060006115228460026118d2565b61152d9060016118e9565b90505b60018111156115b2577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061156e5761156e6117b5565b1a60f81b828281518110611584576115846117b5565b60200101906001600160f81b031916908160001a90535060049490941c936115ab81611912565b9050611530565b5083156116015760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161021a565b9392505050565b60006020828403121561161a57600080fd5b81356001600160e01b03198116811461160157600080fd5b80356001600160a01b038116811461118157600080fd5b60006020828403121561165b57600080fd5b61160182611632565b60006020828403121561167657600080fd5b5035919050565b6000806040838503121561169057600080fd5b823591506116a060208401611632565b90509250929050565b6000806000604084860312156116be57600080fd5b833567ffffffffffffffff808211156116d657600080fd5b818601915086601f8301126116ea57600080fd5b8135818111156116f957600080fd5b8760208260051b850101111561170e57600080fd5b6020928301955093506117249186019050611632565b90509250925092565b8035801515811461118157600080fd5b6000806040838503121561175057600080fd5b61175983611632565b91506116a06020840161172d565b60006020828403121561177957600080fd5b6116018261172d565b60008060006060848603121561179757600080fd5b6117a084611632565b9250602084013591506117246040850161172d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016117f3576117f36117cb565b5060010190565b60005b838110156118155781810151838201526020016117fd565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118568160178501602088016117fa565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118938160288401602088016117fa565b01602801949350505050565b60208152600082518060208401526118be8160408501602087016117fa565b601f01601f19169190910160400192915050565b80820281158282048414176107f1576107f16117cb565b808201808211156107f1576107f16117cb565b634e487b7160e01b600052604160045260246000fd5b600081611921576119216117cb565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2DividendPoolForStosProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 5155, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 5159, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 5163, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 5167, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 24, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 2708, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "universalStos", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ { - "astId": 2710, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "epochUnit", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 2714, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "genesis", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_uint256)" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "astId": 2719, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "distributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_struct(Distribution)4108_storage)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ { - "astId": 2725, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "tokensPerWeek", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 2731, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "claimStartWeeklyEpoch", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "distributedTokens", + "outputs": [ { - "astId": 2734, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "distributedTokens", - "offset": 0, - "slot": "11", - "type": "t_array(t_address)dyn_storage" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 2736, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "free", - "offset": 0, - "slot": "12", - "type": "t_bool" + "internalType": "address", + "name": "", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" + "name": "distributions", + "outputs": [ + { + "internalType": "bool", + "name": "exists", + "type": "bool" }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" + { + "internalType": "uint256", + "name": "totalDistribution", + "type": "uint256" }, - "t_mapping(t_address,t_struct(Distribution)4108_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibDividend.Distribution)", - "numberOfBytes": "32", - "value": "t_struct(Distribution)4108_storage" + { + "internalType": "uint256", + "name": "lastBalance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "genesis", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_struct(Distribution)4108_storage": { - "encoding": "inplace", - "label": "struct LibDividend.Distribution", - "members": [ - { - "astId": 4103, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "exists", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4105, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "totalDistribution", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 4107, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "lastBalance", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/airdrop/L2DividendPoolForStosProxy.sol:L2DividendPoolForStosProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "universalStos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2InitialLiquidityVault.json b/contracts/data/tonstarter/abi/L2InitialLiquidityVault.json index bf2990a..2d1da45 100644 --- a/contracts/data/tonstarter/abi/L2InitialLiquidityVault.json +++ b/contracts/data/tonstarter/abi/L2InitialLiquidityVault.json @@ -1,1655 +1,1235 @@ -{ - "address": "0xB8Bc738947DB3Fc42f24Be7bC6eaf2Ad85a38602", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "liquidity", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "IncreasedLiquidityInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "liquidity", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "InitialMintedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTosPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTokenPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint160", - "name": "initSqrtPriceX96", - "type": "uint160" - }, - { - "indexed": false, - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "name": "InitializedInitialLiquidityVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "SetCreatedPool", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint160", - "name": "inSqrtPriceX96", - "type": "uint160" - } - ], - "name": "SetPoolInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - } - ], - "name": "SetStartTime", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "_npm", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "_ton", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "_tos", - "type": "address" - } - ], - "name": "SetUniswapInfo", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TWAP_PERIOD", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "_tick", - "type": "int24" - }, - { - "internalType": "int24", - "name": "_tickSpacings", - "type": "int24" - } - ], - "name": "acceptMaxTick", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "_tick", - "type": "int24" - }, - { - "internalType": "int24", - "name": "_tickSpacings", - "type": "int24" - } - ], - "name": "acceptMinTick", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptSlippagePrice", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptTickChangeInterval", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "tickSpacings", - "type": "int24" - } - ], - "name": "getMaxTick", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "tickSpacings", - "type": "int24" - } - ], - "name": "getMiniTick", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "tick", - "type": "int24" - }, - { - "internalType": "uint128", - "name": "amountIn", - "type": "uint128" - }, - { - "internalType": "address", - "name": "baseToken", - "type": "address" - }, - { - "internalType": "address", - "name": "quoteToken", - "type": "address" - } - ], - "name": "getQuoteAtTick", - "outputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint24", - "name": "_fee", - "type": "uint24" - } - ], - "name": "getTickSpacing", - "outputs": [ - { - "internalType": "int24", - "name": "tickSpacings", - "type": "int24" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initSqrtPrice", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "fee", - "type": "uint16" - } - ], - "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", - "name": "params", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tosAmount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonfungiblePositionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "poolInfo", - "outputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lpToken", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint160", - "name": "initSqrtPriceX96", - "type": "uint160" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - }, - { - "internalType": "bool", - "name": "boolReadyToCreatePool", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "_value", - "type": "int24" - } - ], - "name": "setAcceptSlippagePrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int24", - "name": "_interval", - "type": "int24" - } - ], - "name": "setAcceptTickChangeInterval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "setCreatePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_startTime", - "type": "uint32" - } - ], - "name": "setStartTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "value", - "type": "uint32" - } - ], - "name": "setTWAP_PERIOD", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_poolfactory", - "type": "address" - }, - { - "internalType": "address", - "name": "_npm", - "type": "address" - }, - { - "internalType": "address", - "name": "_ton", - "type": "address" - }, - { - "internalType": "address", - "name": "_tos", - "type": "address" - } - ], - "name": "setUniswapInfo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tickSpacings", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ton", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lpToken", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint160", - "name": "initSqrtPriceX96", - "type": "uint160" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - }, - { - "internalType": "bool", - "name": "boolReadyToCreatePool", - "type": "bool" - } - ], - "internalType": "struct LibInitialLiquidityVault.PoolInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x038c0fff5c44b8d4f5663bcdc7f4ee455fc8d6a2004444b0cc0e636f05ef8cba", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xB8Bc738947DB3Fc42f24Be7bC6eaf2Ad85a38602", - "transactionIndex": 0, - "gasUsed": "4409421", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1c364aba036c5cc74f28577165580499f16a265e1e4718d31cce73b5632211fa", - "transactionHash": "0x038c0fff5c44b8d4f5663bcdc7f4ee455fc8d6a2004444b0cc0e636f05ef8cba", - "logs": [], - "blockNumber": 22630, - "cumulativeGasUsed": "4409421", - "status": 1, - "byzantium": true +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "IncreasedLiquidityInVault", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a3d458828a1932a50e4175124b65d2fd", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"IncreasedLiquidityInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"InitialMintedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTosPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTokenPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"initSqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"InitializedInitialLiquidityVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"SetCreatedPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"inSqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"SetPoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"}],\"name\":\"SetStartTime\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_npm\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_ton\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_tos\",\"type\":\"address\"}],\"name\":\"SetUniswapInfo\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TWAP_PERIOD\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"_tick\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"_tickSpacings\",\"type\":\"int24\"}],\"name\":\"acceptMaxTick\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"_tick\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"_tickSpacings\",\"type\":\"int24\"}],\"name\":\"acceptMinTick\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptSlippagePrice\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTickChangeInterval\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickSpacings\",\"type\":\"int24\"}],\"name\":\"getMaxTick\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickSpacings\",\"type\":\"int24\"}],\"name\":\"getMiniTick\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amountIn\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"}],\"name\":\"getQuoteAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"}],\"name\":\"getTickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"tickSpacings\",\"type\":\"int24\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initSqrtPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"fee\",\"type\":\"uint16\"}],\"internalType\":\"struct LibProject.InitalParameterInitialLiquidityVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tosAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonfungiblePositionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lpToken\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint160\",\"name\":\"initSqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"boolReadyToCreatePool\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"_value\",\"type\":\"int24\"}],\"name\":\"setAcceptSlippagePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"_interval\",\"type\":\"int24\"}],\"name\":\"setAcceptTickChangeInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"setCreatePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_startTime\",\"type\":\"uint32\"}],\"name\":\"setStartTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"value\",\"type\":\"uint32\"}],\"name\":\"setTWAP_PERIOD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolfactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_npm\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tos\",\"type\":\"address\"}],\"name\":\"setUniswapInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacings\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ton\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tos\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV3Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lpToken\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint160\",\"name\":\"initSqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"boolReadyToCreatePool\",\"type\":\"bool\"}],\"internalType\":\"struct LibInitialLiquidityVault.PoolInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2InitialLiquidityVault.sol\":\"L2InitialLiquidityVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes calldata data\\n ) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Enumerable is IERC721 {\\n /**\\n * @dev Returns the total amount of tokens stored by the contract.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\\n */\\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\\n * Use along with {totalSupply} to enumerate all tokens.\\n */\\n function tokenByIndex(uint256 index) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/interfaces/IERC721Permit.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.7.5;\\n\\nimport '@openzeppelin/contracts/token/ERC721/IERC721.sol';\\n\\n/// @title ERC721 with permit\\n/// @notice Extension to ERC721 that includes a permit function for signature based approvals\\ninterface IERC721Permit is IERC721 {\\n /// @notice The permit typehash used in the permit signature\\n /// @return The typehash for the permit\\n function PERMIT_TYPEHASH() external pure returns (bytes32);\\n\\n /// @notice The domain separator used in the permit signature\\n /// @return The domain seperator used in encoding of permit signature\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n /// @notice Approve of a specific token ID for spending by spender via signature\\n /// @param spender The account that is being approved\\n /// @param tokenId The ID of the token that is being approved for spending\\n /// @param deadline The deadline timestamp by which the call must be mined for the approve to work\\n /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\\n /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\\n /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\\n function permit(\\n address spender,\\n uint256 tokenId,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9e3c2a4ee65ddf95b2dfcb0815784eea3a295707e6f8b83e4c4f0f8fe2e3a1d4\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/interfaces/INonfungiblePositionManager.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.7.5;\\npragma abicoder v2;\\n\\nimport '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';\\nimport '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol';\\n\\nimport './IPoolInitializer.sol';\\nimport './IERC721Permit.sol';\\nimport './IPeripheryPayments.sol';\\nimport './IPeripheryImmutableState.sol';\\nimport '../libraries/PoolAddress.sol';\\n\\n/// @title Non-fungible token for positions\\n/// @notice Wraps Uniswap V3 positions in a non-fungible token interface which allows for them to be transferred\\n/// and authorized.\\ninterface INonfungiblePositionManager is\\n IPoolInitializer,\\n IPeripheryPayments,\\n IPeripheryImmutableState,\\n IERC721Metadata,\\n IERC721Enumerable,\\n IERC721Permit\\n{\\n /// @notice Emitted when liquidity is increased for a position NFT\\n /// @dev Also emitted when a token is minted\\n /// @param tokenId The ID of the token for which liquidity was increased\\n /// @param liquidity The amount by which liquidity for the NFT position was increased\\n /// @param amount0 The amount of token0 that was paid for the increase in liquidity\\n /// @param amount1 The amount of token1 that was paid for the increase in liquidity\\n event IncreaseLiquidity(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\\n /// @notice Emitted when liquidity is decreased for a position NFT\\n /// @param tokenId The ID of the token for which liquidity was decreased\\n /// @param liquidity The amount by which liquidity for the NFT position was decreased\\n /// @param amount0 The amount of token0 that was accounted for the decrease in liquidity\\n /// @param amount1 The amount of token1 that was accounted for the decrease in liquidity\\n event DecreaseLiquidity(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\\n /// @notice Emitted when tokens are collected for a position NFT\\n /// @dev The amounts reported may not be exactly equivalent to the amounts transferred, due to rounding behavior\\n /// @param tokenId The ID of the token for which underlying tokens were collected\\n /// @param recipient The address of the account that received the collected tokens\\n /// @param amount0 The amount of token0 owed to the position that was collected\\n /// @param amount1 The amount of token1 owed to the position that was collected\\n event Collect(uint256 indexed tokenId, address recipient, uint256 amount0, uint256 amount1);\\n\\n /// @notice Returns the position information associated with a given token ID.\\n /// @dev Throws if the token ID is not valid.\\n /// @param tokenId The ID of the token that represents the position\\n /// @return nonce The nonce for permits\\n /// @return operator The address that is approved for spending\\n /// @return token0 The address of the token0 for a specific pool\\n /// @return token1 The address of the token1 for a specific pool\\n /// @return fee The fee associated with the pool\\n /// @return tickLower The lower end of the tick range for the position\\n /// @return tickUpper The higher end of the tick range for the position\\n /// @return liquidity The liquidity of the position\\n /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\\n /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\\n /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\\n /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\\n function positions(uint256 tokenId)\\n external\\n view\\n returns (\\n uint96 nonce,\\n address operator,\\n address token0,\\n address token1,\\n uint24 fee,\\n int24 tickLower,\\n int24 tickUpper,\\n uint128 liquidity,\\n uint256 feeGrowthInside0LastX128,\\n uint256 feeGrowthInside1LastX128,\\n uint128 tokensOwed0,\\n uint128 tokensOwed1\\n );\\n\\n struct MintParams {\\n address token0;\\n address token1;\\n uint24 fee;\\n int24 tickLower;\\n int24 tickUpper;\\n uint256 amount0Desired;\\n uint256 amount1Desired;\\n uint256 amount0Min;\\n uint256 amount1Min;\\n address recipient;\\n uint256 deadline;\\n }\\n\\n /// @notice Creates a new position wrapped in a NFT\\n /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized\\n /// a method does not exist, i.e. the pool is assumed to be initialized.\\n /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata\\n /// @return tokenId The ID of the token that represents the minted position\\n /// @return liquidity The amount of liquidity for this position\\n /// @return amount0 The amount of token0\\n /// @return amount1 The amount of token1\\n function mint(MintParams calldata params)\\n external\\n payable\\n returns (\\n uint256 tokenId,\\n uint128 liquidity,\\n uint256 amount0,\\n uint256 amount1\\n );\\n\\n struct IncreaseLiquidityParams {\\n uint256 tokenId;\\n uint256 amount0Desired;\\n uint256 amount1Desired;\\n uint256 amount0Min;\\n uint256 amount1Min;\\n uint256 deadline;\\n }\\n\\n /// @notice Increases the amount of liquidity in a position, with tokens paid by the `msg.sender`\\n /// @param params tokenId The ID of the token for which liquidity is being increased,\\n /// amount0Desired The desired amount of token0 to be spent,\\n /// amount1Desired The desired amount of token1 to be spent,\\n /// amount0Min The minimum amount of token0 to spend, which serves as a slippage check,\\n /// amount1Min The minimum amount of token1 to spend, which serves as a slippage check,\\n /// deadline The time by which the transaction must be included to effect the change\\n /// @return liquidity The new liquidity amount as a result of the increase\\n /// @return amount0 The amount of token0 to acheive resulting liquidity\\n /// @return amount1 The amount of token1 to acheive resulting liquidity\\n function increaseLiquidity(IncreaseLiquidityParams calldata params)\\n external\\n payable\\n returns (\\n uint128 liquidity,\\n uint256 amount0,\\n uint256 amount1\\n );\\n\\n struct DecreaseLiquidityParams {\\n uint256 tokenId;\\n uint128 liquidity;\\n uint256 amount0Min;\\n uint256 amount1Min;\\n uint256 deadline;\\n }\\n\\n /// @notice Decreases the amount of liquidity in a position and accounts it to the position\\n /// @param params tokenId The ID of the token for which liquidity is being decreased,\\n /// amount The amount by which liquidity will be decreased,\\n /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity,\\n /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity,\\n /// deadline The time by which the transaction must be included to effect the change\\n /// @return amount0 The amount of token0 accounted to the position's tokens owed\\n /// @return amount1 The amount of token1 accounted to the position's tokens owed\\n function decreaseLiquidity(DecreaseLiquidityParams calldata params)\\n external\\n payable\\n returns (uint256 amount0, uint256 amount1);\\n\\n struct CollectParams {\\n uint256 tokenId;\\n address recipient;\\n uint128 amount0Max;\\n uint128 amount1Max;\\n }\\n\\n /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient\\n /// @param params tokenId The ID of the NFT for which tokens are being collected,\\n /// recipient The account that should receive the tokens,\\n /// amount0Max The maximum amount of token0 to collect,\\n /// amount1Max The maximum amount of token1 to collect\\n /// @return amount0 The amount of fees collected in token0\\n /// @return amount1 The amount of fees collected in token1\\n function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);\\n\\n /// @notice Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens\\n /// must be collected first.\\n /// @param tokenId The ID of the token that is being burned\\n function burn(uint256 tokenId) external payable;\\n}\\n\",\"keccak256\":\"0x3357b065654abb7f4a9ebd184a260bc39efde2afa4e99dca2e72ffc28e9c2984\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/interfaces/IPeripheryImmutableState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Immutable state\\n/// @notice Functions that return immutable state of the router\\ninterface IPeripheryImmutableState {\\n /// @return Returns the address of the Uniswap V3 factory\\n function factory() external view returns (address);\\n\\n /// @return Returns the address of WETH9\\n function WETH9() external view returns (address);\\n}\\n\",\"keccak256\":\"0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/interfaces/IPeripheryPayments.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.7.5;\\n\\n/// @title Periphery Payments\\n/// @notice Functions to ease deposits and withdrawals of ETH\\ninterface IPeripheryPayments {\\n /// @notice Unwraps the contract's WETH9 balance and sends it to recipient as ETH.\\n /// @dev The amountMinimum parameter prevents malicious contracts from stealing WETH9 from users.\\n /// @param amountMinimum The minimum amount of WETH9 to unwrap\\n /// @param recipient The address receiving ETH\\n function unwrapWETH9(uint256 amountMinimum, address recipient) external payable;\\n\\n /// @notice Refunds any ETH balance held by this contract to the `msg.sender`\\n /// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps\\n /// that use ether for the input amount\\n function refundETH() external payable;\\n\\n /// @notice Transfers the full amount of a token held by this contract to recipient\\n /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\\n /// @param token The contract address of the token which will be transferred to `recipient`\\n /// @param amountMinimum The minimum amount of token required for a transfer\\n /// @param recipient The destination address of the token\\n function sweepToken(\\n address token,\\n uint256 amountMinimum,\\n address recipient\\n ) external payable;\\n}\\n\",\"keccak256\":\"0xb547e10f1e69bed03621a62b73a503e260643066c6b4054867a4d1fef47eb274\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/interfaces/IPoolInitializer.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.7.5;\\npragma abicoder v2;\\n\\n/// @title Creates and initializes V3 Pools\\n/// @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that\\n/// require the pool to exist.\\ninterface IPoolInitializer {\\n /// @notice Creates a new pool if it does not exist, then initializes if not initialized\\n /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\\n /// @param token0 The contract address of token0 of the pool\\n /// @param token1 The contract address of token1 of the pool\\n /// @param fee The fee amount of the v3 pool for the specified token pair\\n /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value\\n /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary\\n function createAndInitializePoolIfNecessary(\\n address token0,\\n address token1,\\n uint24 fee,\\n uint160 sqrtPriceX96\\n ) external payable returns (address pool);\\n}\\n\",\"keccak256\":\"0x9d7695e8d94c22cc5fcced602017aabb988de89981ea7bee29ea629d5328a862\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n /// @param a The multiplicand\\n /// @param b The multiplier\\n /// @param denominator The divisor\\n /// @return result The 256-bit result\\n /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n function mulDiv(\\n uint256 a,\\n uint256 b,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n // Handle division by zero\\n require(denominator > 0);\\n\\n // 512-bit multiply [prod1 prod0] = a * b\\n // Compute the product mod 2**256 and mod 2**256 - 1\\n // then use the Chinese Remainder Theorem to reconstruct\\n // the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2**256 + prod0\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(a, b, not(0))\\n prod0 := mul(a, b)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division\\n if (prod1 == 0) {\\n // require(denominator > 0);\\n assembly {\\n result := div(prod0, denominator)\\n }\\n return result;\\n }\\n\\n // Make sure the result is less than 2**256.\\n // Also prevents denominator == 0\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0]\\n // Compute remainder using mulmod\\n uint256 remainder;\\n assembly {\\n remainder := mulmod(a, b, denominator)\\n }\\n\\n // Subtract 256 bit number from 512 bit number\\n assembly {\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator\\n // Compute largest power of two divisor of denominator.\\n // Always >= 1.\\n // 2022.0314.modified\\n //uint256 twos = -denominator & denominator;\\n //uint256 twos = denominator & (~denominator + 1);\\n uint256 twos = (type(uint256).max - denominator + 1) & denominator;\\n\\n // Divide denominator by power of two\\n assembly {\\n denominator := div(denominator, twos)\\n }\\n\\n // Divide [prod1 prod0] by the factors of two\\n assembly {\\n prod0 := div(prod0, twos)\\n }\\n // Shift in bits from prod1 into prod0. For this we need\\n // to flip `twos` such that it is 2**256 / twos.\\n // If twos is zero, then it becomes one\\n assembly {\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n unchecked {\\n prod0 |= prod1 * twos;\\n // Invert denominator mod 2**256\\n // Now that denominator is an odd number, it has an inverse\\n // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n // Compute the inverse by starting with a seed that is correct\\n // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n\\n uint256 inv = (3 * denominator) ^ 2;\\n\\n // Now use Newton-Raphson iteration to improve the precision.\\n // Thanks to Hensel's lifting lemma, this also works in modular\\n // arithmetic, doubling the correct bits in each step.\\n inv *= 2 - denominator * inv; // inverse mod 2**8\\n inv *= 2 - denominator * inv; // inverse mod 2**16\\n inv *= 2 - denominator * inv; // inverse mod 2**32\\n inv *= 2 - denominator * inv; // inverse mod 2**64\\n inv *= 2 - denominator * inv; // inverse mod 2**128\\n inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n // Because the division is now exact we can divide by multiplying\\n // with the modular inverse of denominator. This will give us the\\n // correct result modulo 2**256. Since the precoditions guarantee\\n // that the outcome is less than 2**256, this is the final result.\\n // We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inv;\\n }\\n return result;\\n }\\n\\n /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n /// @param a The multiplicand\\n /// @param b The multiplier\\n /// @param denominator The divisor\\n /// @return result The 256-bit result\\n function mulDivRoundingUp(\\n uint256 a,\\n uint256 b,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n result = mulDiv(a, b, denominator);\\n if (mulmod(a, b, denominator) > 0) {\\n require(result < type(uint256).max);\\n result++;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1cb334770aafba8747f54d6ec0766049ab5f2174025f97ec0ada5e99c665c73\",\"license\":\"MIT\"},\"contracts/L2/libraries/OracleLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport '../libraries/FullMath.sol';\\nimport '../libraries/TickMath.sol';\\n\\ninterface IIIUniswapV3Pool {\\n\\n function observe(uint32[] calldata secondsAgos)\\n external\\n view\\n returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n}\\n\\n/// @title Oracle library\\n/// @notice Provides functions to integrate with V3 pool oracle\\nlibrary OracleLibrary {\\n\\n /// @notice Fetches time-weighted average tick using Uniswap V3 oracle\\n /// @param pool Address of Uniswap V3 pool that we want to observe\\n /// @param period Number of seconds in the past to start calculating time-weighted average\\n /// @return timeWeightedAverageTick The time-weighted average tick from (block.timestamp - period) to block.timestamp\\n function consult(address pool, uint32 period) internal view returns (int24 timeWeightedAverageTick) {\\n require(period != 0, 'BP');\\n\\n uint32[] memory secondAgos = new uint32[](2);\\n secondAgos[0] = period;\\n secondAgos[1] = 0;\\n\\n (int56[] memory tickCumulatives, ) = IIIUniswapV3Pool(pool).observe(secondAgos);\\n int56 tickCumulativesDelta = tickCumulatives[1] - tickCumulatives[0];\\n\\n timeWeightedAverageTick = int24(tickCumulativesDelta / int56( int32(period) ));\\n\\n // Always round to negative infinity\\n if (tickCumulativesDelta < 0 && (tickCumulativesDelta % int56( int32(period) ) != 0)) timeWeightedAverageTick--;\\n }\\n\\n /// @notice Given a tick and a token amount, calculates the amount of token received in exchange\\n /// @param tick Tick value used to calculate the quote\\n /// @param baseAmount Amount of token to be converted\\n /// @param baseToken Address of an ERC20 token contract used as the baseAmount denomination\\n /// @param quoteToken Address of an ERC20 token contract used as the quoteAmount denomination\\n /// @return quoteAmount Amount of quoteToken received for baseAmount of baseToken\\n function getQuoteAtTick(\\n int24 tick,\\n uint128 baseAmount,\\n address baseToken,\\n address quoteToken\\n ) internal pure returns (uint256 quoteAmount) {\\n uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tick);\\n\\n // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\\n if (sqrtRatioX96 <= type(uint128).max) {\\n uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\\n quoteAmount = baseToken < quoteToken\\n ? FullMath.mulDiv(ratioX192, baseAmount, 1 << 192)\\n : FullMath.mulDiv(1 << 192, baseAmount, ratioX192);\\n } else {\\n uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\\n quoteAmount = baseToken < quoteToken\\n ? FullMath.mulDiv(ratioX128, baseAmount, 1 << 128)\\n : FullMath.mulDiv(1 << 128, baseAmount, ratioX128);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb986c379a18fc7a2444056025228768d9cc18c34cda9e9d6f3cc7a5fc18df7dd\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee\\nlibrary PoolAddress {\\n\\n bytes32 internal constant POOL_INIT_CODE_HASH = 0xa598dd2fba360510c5a8f02f44423a4468e902df5857dbce3ca162a43a3a31ff;\\n // DARIUS - POOL_INIT_CODE_HASH = 0xa598dd2fba360510c5a8f02f44423a4468e902df5857dbce3ca162a43a3a31ff;\\n // mainnet(default) - POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54\\n\\n /// @notice The identifying key of the pool\\n struct PoolKey {\\n address token0;\\n address token1;\\n uint24 fee;\\n }\\n\\n /// @notice Returns PoolKey: the ordered tokens with the matched fee levels\\n /// @param tokenA The first token of a pool, unsorted\\n /// @param tokenB The second token of a pool, unsorted\\n /// @param fee The fee level of the pool\\n /// @return Poolkey The pool details with ordered token0 and token1 assignments\\n function getPoolKey(\\n address tokenA,\\n address tokenB,\\n uint24 fee\\n ) internal pure returns (PoolKey memory) {\\n if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);\\n return PoolKey({token0: tokenA, token1: tokenB, fee: fee});\\n }\\n\\n /// @notice Deterministically computes the pool address given the factory and PoolKey\\n /// @param factory The Uniswap V3 factory contract address\\n /// @param key The PoolKey\\n /// @return pool The contract address of the V3 pool\\n function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {\\n require(key.token0 < key.token1);\\n pool = address( uint160(\\n uint256(\\n keccak256(\\n abi.encodePacked(\\n hex'ff',\\n factory,\\n keccak256(abi.encode(key.token0, key.token1, key.fee)),\\n POOL_INIT_CODE_HASH\\n )\\n )\\n ))\\n );\\n }\\n}\\n\",\"keccak256\":\"0x47b7ee9999a5f2317ecdb1354dfcb6931af3b62aec8779c032b783982dcef8af\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity ^0.8.4;\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n/// prices between 2**-128 and 2**128\\nlibrary TickMath {\\n /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n int24 internal constant MIN_TICK = -887272;\\n /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n /// @dev Throws if |tick| > max tick\\n /// @param tick The input tick for the above formula\\n /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n /// at the given tick\\n function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n }\\n\\n /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may\\n /// ever return.\\n /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n // second inequality must be < because the price can never reach the price at the max tick\\n require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n uint256 r = ratio;\\n uint256 msb = 0;\\n\\n assembly {\\n let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(5, gt(r, 0xFFFFFFFF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(4, gt(r, 0xFFFF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(3, gt(r, 0xFF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(2, gt(r, 0xF))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := shl(1, gt(r, 0x3))\\n msb := or(msb, f)\\n r := shr(f, r)\\n }\\n assembly {\\n let f := gt(r, 0x1)\\n msb := or(msb, f)\\n }\\n\\n if (msb >= 128) r = ratio >> (msb - 127);\\n else r = ratio << (127 - msb);\\n\\n int256 log_2 = (int256(msb) - 128) << 64;\\n\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(63, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(62, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(61, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(60, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(59, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(58, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(57, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(56, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(55, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(54, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(53, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(52, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(51, f))\\n r := shr(f, r)\\n }\\n assembly {\\n r := shr(127, mul(r, r))\\n let f := shr(128, r)\\n log_2 := or(log_2, shl(50, f))\\n }\\n\\n int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n }\\n}\\n\",\"keccak256\":\"0x390f1d53d74b4cf44f745728a035cbe4519f13e13ecf036628b42dc0623abb8c\",\"license\":\"GPL-2.0-or-later\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2InitialLiquidityVault.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2InitialLiquidityVaultStorage.sol\\\";\\n\\nimport \\\"../interfaces/INonfungiblePositionManager.sol\\\";\\n\\nimport '../../libraries/LibProject.sol';\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"../libraries/TickMath.sol\\\";\\nimport \\\"../libraries/OracleLibrary.sol\\\";\\nimport '../libraries/FullMath.sol';\\n\\ninterface IIUniswapV3Factory {\\n function getPool(\\n address tokenA,\\n address tokenB,\\n uint24 fee\\n ) external view returns (address pool);\\n\\n function createPool(\\n address tokenA,\\n address tokenB,\\n uint24 fee\\n ) external returns (address pool);\\n}\\n\\ninterface IIUniswapV3Pool {\\n\\n function initialize(uint160 sqrtPriceX96) external;\\n function slot0()\\n external\\n view\\n returns (\\n uint160 sqrtPriceX96,\\n int24 tick,\\n uint16 observationIndex,\\n uint16 observationCardinality,\\n uint16 observationCardinalityNext,\\n uint8 feeProtocol,\\n bool unlocked\\n );\\n\\n function token0() external view returns (address);\\n function token1() external view returns (address);\\n\\n}\\n\\ncontract L2InitialLiquidityVault is L2CustomVaultBase, L2InitialLiquidityVaultStorage\\n{\\n using SafeERC20 for IERC20;\\n /* ========== DEPENDENCIES ========== */\\n\\n modifier afterSetUniswap() {\\n require(\\n uniswapV3Factory != address(0)\\n && nonfungiblePositionManager != address(0)\\n && tos != address(0)\\n ,\\n \\\"Vault: before setUniswap\\\");\\n _;\\n }\\n\\n modifier readyToCreatePool(address l2Token) {\\n require(poolInfo[l2Token].boolReadyToCreatePool, \\\"Vault: not ready to CreatePool\\\");\\n _;\\n }\\n\\n modifier beforeSetReadyToCreatePool(address l2Token) {\\n require(!poolInfo[l2Token].boolReadyToCreatePool, \\\"Vault: already ready to CreatePool\\\");\\n _;\\n }\\n\\n event SetUniswapInfo(address _factory, address _npm, address _ton, address _tos);\\n event SetStartTime(address l2Token, uint32 startTime);\\n event SetPoolInitialized(address l2Token, address pool, uint160 inSqrtPriceX96);\\n event SetCreatedPool(address l2Token, address pool);\\n event InitializedInitialLiquidityVault(\\n address l2Token,\\n uint256 totalAllocatedAmount,\\n uint256 initialTosPrice,\\n uint256 initialTokenPrice,\\n uint32 startTime,\\n uint160 initSqrtPriceX96,\\n uint24 fee\\n );\\n\\n event IncreasedLiquidityInVault(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\\n\\n event InitialMintedInVault(\\n address l2Token,\\n address pool,\\n uint256 tokenId,\\n uint128 liquidity,\\n uint256 amount0,\\n uint256 amount1\\n );\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n function setUniswapInfo(address _poolfactory, address _npm, address _ton, address _tos)\\n external\\n onlyOwner nonZeroAddress(_poolfactory) nonZeroAddress(_npm) nonZeroAddress(_ton) nonZeroAddress(_tos)\\n {\\n require(_poolfactory != uniswapV3Factory || _npm != nonfungiblePositionManager ||\\n ton != _ton || tos != _tos, \\\"same\\\");\\n\\n uniswapV3Factory = _poolfactory;\\n nonfungiblePositionManager = _npm;\\n ton = _ton;\\n tos = _tos;\\n\\n emit SetUniswapInfo(_poolfactory, _npm, _ton, _tos);\\n }\\n\\n function setAcceptTickChangeInterval(int24 _interval) external onlyOwner\\n {\\n require(_interval > 0, \\\"zero\\\");\\n require(acceptTickChangeInterval != _interval, \\\"same\\\");\\n acceptTickChangeInterval = _interval;\\n }\\n\\n function setAcceptSlippagePrice(int24 _value) external onlyOwner\\n {\\n require(_value > 0, \\\"zero\\\");\\n require(acceptSlippagePrice != _value, \\\"same\\\");\\n acceptSlippagePrice = _value;\\n }\\n\\n function setTWAP_PERIOD(uint32 value) external onlyOwner\\n {\\n require(value > 0, \\\"zero\\\");\\n require(TWAP_PERIOD != value, \\\"same\\\");\\n TWAP_PERIOD = value;\\n }\\n\\n\\n /* ========== only L2ProjectManager ========== */\\n function initialize(\\n address l2Token,\\n LibProject.InitalParameterInitialLiquidityVault memory params\\n )\\n external onlyL2ProjectManagerOrVaultAdmin(l2Token) afterSetUniswap\\n {\\n // console.log('L2InitialLiquidityVault initialize in %s',l2Token );\\n require(poolInfo[l2Token].totalAllocatedAmount == 0, \\\"already initialized\\\");\\n require(params.totalAllocatedAmount != 0 && params.tosPrice != 0 && params.tokenPrice != 0 && params.initSqrtPrice != 0 && params.fee != 0,\\n \\\"zero totalAllocatedAmount or tosPrice or tokenPrice or initSqrtPriceX96 or startTime\\\");\\n require(params.startTime > uint32(block.timestamp), \\\"StartTime has passed\\\");\\n\\n // console.log('initialize iparams.totalAllocatedAmount %s', params.totalAllocatedAmount);\\n // uint256 balanceToken = IERC20(l2Token).balanceOf(address(this));\\n // console.log('initialize l2Token %s', l2Token);\\n // console.log('initialize balanceToken %s', balanceToken);\\n\\n // uint256 allowance = IERC20(l2Token).allowance(l2ProjectManager, address(this));\\n // console.log('initialize allowance %s', allowance);\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), params.totalAllocatedAmount);\\n // console.log('initialize safeTransferFrom ');\\n\\n LibInitialLiquidityVault.PoolInfo storage info = poolInfo[l2Token];\\n info.totalAllocatedAmount = params.totalAllocatedAmount;\\n info.initialTosPrice = params.tosPrice;\\n info.initialTokenPrice = params.tokenPrice;\\n info.initSqrtPriceX96 = uint160(params.initSqrtPrice);\\n info.startTime = params.startTime;\\n info.fee = params.fee;\\n\\n emit InitializedInitialLiquidityVault(\\n l2Token, params.totalAllocatedAmount, params.tosPrice, params.tokenPrice, params.startTime, uint160(params.initSqrtPrice), params.fee);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n function setStartTime(address l2Token, uint32 _startTime)\\n public onlyVaultAdminOfToken(l2Token)\\n {\\n LibInitialLiquidityVault.PoolInfo storage info = poolInfo[l2Token];\\n require(block.timestamp < info.startTime, \\\"StartTime has passed\\\");\\n require(info.startTime != _startTime, \\\"same StartTime\\\");\\n info.startTime = _startTime;\\n emit SetStartTime(l2Token, _startTime);\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n function setCreatePool(address l2Token) external beforeSetReadyToCreatePool(l2Token) ifFree\\n {\\n LibInitialLiquidityVault.PoolInfo storage info = poolInfo[l2Token];\\n require(info.startTime > 0 && info.startTime < uint32(block.timestamp), \\\"StartTime has not passed.\\\");\\n require(info.pool == address(0), \\\"already created\\\");\\n require(info.initSqrtPriceX96 > 0, \\\"zero initSqrtPriceX96\\\");\\n address pool = IIUniswapV3Factory(uniswapV3Factory).getPool(tos, l2Token, info.fee);\\n\\n if(pool == address(0)){\\n address _pool = IIUniswapV3Factory(uniswapV3Factory).createPool(tos, l2Token, info.fee);\\n require(_pool != address(0), \\\"createPool fail\\\");\\n pool = _pool;\\n }\\n\\n info.pool = pool;\\n info.boolReadyToCreatePool = true;\\n\\n (uint160 sqrtPriceX96,,,,,,) = IIUniswapV3Pool(pool).slot0();\\n if(sqrtPriceX96 == 0){\\n IIUniswapV3Pool(pool).initialize(info.initSqrtPriceX96);\\n emit SetPoolInitialized(l2Token, pool, info.initSqrtPriceX96);\\n }\\n emit SetCreatedPool(l2Token, pool);\\n\\n (uint160 _sqrtPriceX96,,,,,,) = IIUniswapV3Pool(pool).slot0();\\n require(_sqrtPriceX96 != 0, 'zero _sqrtPriceX96');\\n\\n }\\n\\n function mint(address l2Token, uint256 tosAmount)\\n external readyToCreatePool(l2Token) nonZero(tosAmount) ifFree\\n {\\n uint256 tosBalance = IERC20(tos).balanceOf(address(this));\\n uint256 tokenBalance = IERC20(l2Token).balanceOf(address(this));\\n require(tosBalance > 1 ether && tokenBalance > 1 ether, \\\"balance is insufficient\\\");\\n require(tosAmount <= tosBalance, \\\"toBalance is insufficient\\\");\\n\\n if (acceptTickChangeInterval == 0) acceptTickChangeInterval = 8;\\n if (acceptSlippagePrice == 0) acceptSlippagePrice = 10; // based 100\\n if (TWAP_PERIOD == 0) TWAP_PERIOD = 120;\\n\\n LibInitialLiquidityVault.PoolInfo memory info = poolInfo[l2Token];\\n (uint160 sqrtPriceX96, int24 tick,,uint16 observationCardinality,,,) = IIUniswapV3Pool(info.pool).slot0();\\n require(sqrtPriceX96 > 0, \\\"pool is not initialized\\\");\\n\\n if (observationCardinality > 1)\\n {\\n int24 timeWeightedAverageTick = OracleLibrary.consult(info.pool, TWAP_PERIOD);\\n require(\\n acceptMinTick(timeWeightedAverageTick, getTickSpacing(info.fee)) <= tick\\n && tick < acceptMaxTick(timeWeightedAverageTick, getTickSpacing(info.fee)),\\n \\\"It's not allowed changed tick range.\\\"\\n );\\n }\\n\\n uint256 amount0Desired = 0;\\n uint256 amount1Desired = 0;\\n address token0 = IIUniswapV3Pool(info.pool).token0();\\n address _l2Token = l2Token;\\n if(token0 != tos){\\n amount0Desired = getQuoteAtTick(\\n tick,\\n uint128(tosAmount),\\n tos,\\n _l2Token\\n );\\n amount1Desired = tosAmount;\\n require(amount0Desired <= tokenBalance, \\\"tokenBalance is insufficient\\\");\\n checkBalance(_l2Token, amount1Desired, amount0Desired);\\n } else {\\n amount0Desired = tosAmount;\\n amount1Desired = getQuoteAtTick(\\n tick,\\n uint128(tosAmount),\\n tos,\\n _l2Token\\n );\\n\\n require(amount1Desired <= tokenBalance, \\\"tokenBalance is insufficient\\\");\\n checkBalance(_l2Token, amount0Desired, amount1Desired);\\n }\\n\\n uint256 amount0Min = amount0Desired * (100 - uint256(int256(acceptSlippagePrice))) / 100;\\n uint256 amount1Min = amount1Desired * (100 - uint256(int256(acceptSlippagePrice))) / 100;\\n\\n if(poolInfo[_l2Token].lpToken == 0) initialMint(_l2Token, amount0Desired, amount1Desired, amount0Min, amount1Min);\\n else increaseLiquidity(_l2Token, amount0Desired, amount1Desired, amount0Min, amount1Min);\\n }\\n\\n\\n /* ========== VIEW ========== */\\n\\n function getTickSpacing(uint24 _fee) public pure returns (int24 tickSpacings)\\n {\\n if(_fee == 100) tickSpacings = 2;\\n else if(_fee == 500) tickSpacings = 10;\\n else if(_fee == 3000) tickSpacings = 60;\\n else if(_fee == 10000) tickSpacings = 200;\\n }\\n\\n function acceptMinTick(int24 _tick, int24 _tickSpacings) public view returns (int24)\\n {\\n int24 _minTick = getMiniTick(_tickSpacings);\\n int24 _acceptMinTick = _tick - (_tickSpacings * int24(uint24(acceptTickChangeInterval)));\\n\\n if(_minTick < _acceptMinTick) return _acceptMinTick;\\n else return _minTick;\\n }\\n\\n function acceptMaxTick(int24 _tick, int24 _tickSpacings) public view returns (int24)\\n {\\n int24 _maxTick = getMaxTick(_tickSpacings);\\n int24 _acceptMinTick = _tick + (_tickSpacings * int24(uint24(acceptTickChangeInterval)));\\n\\n if(_maxTick < _acceptMinTick) return _maxTick;\\n else return _acceptMinTick;\\n }\\n\\n function getMiniTick(int24 tickSpacings) public pure returns (int24){\\n return (TickMath.MIN_TICK / tickSpacings) * tickSpacings ;\\n }\\n\\n function getMaxTick(int24 tickSpacings) public pure returns (int24){\\n return (TickMath.MAX_TICK / tickSpacings) * tickSpacings ;\\n }\\n\\n function getQuoteAtTick(\\n int24 tick,\\n uint128 amountIn,\\n address baseToken,\\n address quoteToken\\n ) public pure returns (uint256 amountOut) {\\n return OracleLibrary.getQuoteAtTick(tick, amountIn, baseToken, quoteToken);\\n }\\n\\n /* === ======= internal ========== */\\n\\n function increaseLiquidity(address l2Token, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min) internal\\n {\\n LibInitialLiquidityVault.PoolInfo storage info = poolInfo[l2Token];\\n require(info.lpToken > 0, \\\"It is not minted yet\\\");\\n\\n (uint128 liquidity, uint256 amount0, uint256 amount1) = INonfungiblePositionManager(nonfungiblePositionManager).increaseLiquidity(\\n INonfungiblePositionManager.IncreaseLiquidityParams(\\n info.lpToken, amount0Desired, amount1Desired, amount0Min, amount1Min, block.timestamp));\\n\\n emit IncreasedLiquidityInVault(info.lpToken, liquidity, amount0, amount1);\\n }\\n\\n\\n function initialMint(address l2Token, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min) internal\\n {\\n LibInitialLiquidityVault.PoolInfo storage info = poolInfo[l2Token];\\n\\n require(info.lpToken == 0, \\\"already minted\\\");\\n int24 tickLower = (TickMath.MIN_TICK / getTickSpacing(info.fee)) * getTickSpacing(info.fee) ;\\n int24 tickUpper = (TickMath.MAX_TICK / getTickSpacing(info.fee)) * getTickSpacing(info.fee) ;\\n\\n (\\n uint256 tokenId,\\n uint128 liquidity,\\n uint256 amount0,\\n uint256 amount1\\n ) = INonfungiblePositionManager(nonfungiblePositionManager).mint(INonfungiblePositionManager.MintParams(\\n IIUniswapV3Pool(info.pool).token0(),\\n IIUniswapV3Pool(info.pool).token1(),\\n info.fee, tickLower, tickUpper,\\n amount0Desired, amount1Desired, amount0Min, amount1Min,\\n address(this), block.timestamp\\n )\\n );\\n\\n require(tokenId > 0, \\\"zero tokenId\\\");\\n\\n info.lpToken = tokenId;\\n\\n emit InitialMintedInVault(l2Token, info.pool, tokenId, liquidity, amount0, amount1);\\n }\\n\\n\\n function checkBalance(address l2Token, uint256 tosBalance, uint256 tokenBalance) internal {\\n require(IERC20(tos).balanceOf(address(this)) >= tosBalance, \\\"tos is insufficient.\\\");\\n require(IERC20(l2Token).balanceOf(address(this)) >= tokenBalance, \\\"token is insufficient.\\\");\\n if(tosBalance > IERC20(tos).allowance(address(this), nonfungiblePositionManager) ) {\\n require(IERC20(tos).approve(nonfungiblePositionManager, IERC20(tos).totalSupply()),\\\"TOS approve fail\\\");\\n }\\n\\n if(tokenBalance > IERC20(l2Token).allowance(address(this), nonfungiblePositionManager) ) {\\n require(IERC20(l2Token).approve(nonfungiblePositionManager, IERC20(l2Token).totalSupply()),\\\"token approve fail\\\");\\n }\\n }\\n\\n function viewVaultInfo(address l2Token) external view returns(LibInitialLiquidityVault.PoolInfo memory){\\n\\n return poolInfo[l2Token];\\n\\n }\\n\\n}\\n\",\"keccak256\":\"0x06d1ff6da189300232e3091291b9d32cf43043cdc18bf4e3816d6abd99aae067\",\"license\":\"Unlicense\"},\"contracts/L2/vaults/L2InitialLiquidityVaultStorage.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibInitialLiquidityVault } from \\\"../../libraries/LibInitialLiquidityVault.sol\\\";\\n\\ncontract L2InitialLiquidityVaultStorage {\\n uint256 constant INITIAL_PRICE_DIV = 1e18;\\n\\n address public ton; // ton token\\n address public tos; // tos token\\n\\n address public uniswapV3Factory;\\n address public nonfungiblePositionManager;\\n uint32 public TWAP_PERIOD;\\n // int24 public tickIntervalMinimum;\\n int24 public acceptTickChangeInterval;\\n int24 public acceptSlippagePrice;\\n int24 public tickSpacings ;\\n\\n // l2token - PoolInfo\\n mapping(address => LibInitialLiquidityVault.PoolInfo) public poolInfo;\\n\\n}\\n\",\"keccak256\":\"0xb24af5edd294a876d7d1f76592989fc681a7b2cc5660e003f4c766b87c797529\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibInitialLiquidityVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibInitialLiquidityVault\\n */\\nlibrary LibInitialLiquidityVault {\\n\\n struct PoolInfo {\\n address pool;\\n uint256 totalAllocatedAmount;\\n uint256 initialTosPrice;\\n uint256 initialTokenPrice;\\n uint256 lpToken;\\n uint32 startTime;\\n uint160 initSqrtPriceX96;\\n uint24 fee;\\n bool boolReadyToCreatePool;\\n }\\n}\",\"keccak256\":\"0x18b8629b535e46d7ba9c91e96134107df92ccd8d228a49026bfcf662765bd9b4\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n address poolAddress;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x70aa30ad2bdcc19fee1890162b02f21077efadb0da73a0898d2806f96ff0ffe5\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b50614e788061002d6000396000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c806370480275116101a7578063a22f84f0116100ee578063b9c56c8c11610097578063d547741f11610071578063d547741f1461082c578063dc861da61461083f578063ea8668151461094557600080fd5b8063b9c56c8c146107f3578063bef6dc8b14610806578063cc48b9471461081957600080fd5b8063b224f99f116100c8578063b224f99f146107a4578063b44a2722146107b7578063b911135f146107ca57600080fd5b8063a22f84f01461076b578063a41823431461077e578063aec137581461079157600080fd5b806389f395de116101505780639a7b5f111161012a5780639a7b5f111461067e5780639cbbbe8614610756578063a217fddf1461076357600080fd5b806389f395de1461061f57806391d1485414610632578063971c57cc1461066b57600080fd5b80637ca25184116101815780637ca25184146105b75780637fc46ba8146105e3578063826bd4bf1461060c57600080fd5b8063704802751461056a57806375829def1461057d57806375b238fc1461059057600080fd5b806336568abe1161026b57806350d2a27611610214578063550d01a3116101ee578063550d01a3146105275780635b5491821461054a57806363a8fd891461055d57600080fd5b806350d2a276146104bb57806351e8152a146104fc57806352351e851461050f57600080fd5b806343c57a271161024557806343c57a2714610481578063442bede61461049457806345a41148146104a757600080fd5b806336568abe1461044857806337c1cfa51461045b57806340c10f191461046e57600080fd5b8063248a9ca3116102cd5780632f2ff15d116102a75780632f2ff15d1461040e57806335b9ac661461042157806335d20f8a1461043457600080fd5b8063248a9ca3146103c557806324d7806c146103e85780632c00778a146103fb57600080fd5b80631785f53c116102fe5780631785f53c146103685780631e8948c31461037d578063229852461461039057600080fd5b806301ffc9a71461031a5780630f36edbf14610342575b600080fd5b61032d610328366004614306565b610958565b60405190151581526020015b60405180910390f35b61035561035036600461433f565b61098f565b60405160029190910b8152602001610339565b61037b61037636600461438d565b6109eb565b005b61037b61038b3660046143aa565b610a6b565b6103b77ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610339565b6103b76103d33660046143d8565b60009081526004602052604090206001015490565b61032d6103f636600461438d565b610c44565b61037b6104093660046143f1565b610c84565b61037b61041c36600461440e565b610d7a565b61037b61042f3660046143aa565b610da4565b600a5461035590600160d81b900460020b81565b61037b61045636600461440e565b610f59565b61037b61046936600461438d565b610fe5565b61037b61047c366004614433565b611628565b6103b761048f366004614474565b611dac565b61037b6104a236600461453b565b611dc3565b600a5461035590600160c01b900460020b81565b6104e46104c9366004614306565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610339565b61032d61050a3660046143aa565b61221e565b6005546104e49061010090046001600160a01b031681565b61032d61053536600461438d565b60026020526000908152604090205460ff1681565b6009546104e4906001600160a01b031681565b60005461032d9060ff1681565b61037b61057836600461438d565b61225b565b61037b61058b36600461438d565b6122d3565b6103b77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600a546105ce90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610339565b6104e46105f136600461438d565b6006602052600090815260409020546001600160a01b031681565b61035561061a3660046143f1565b612423565b6008546104e4906001600160a01b031681565b61032d61064036600461440e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61037b6106793660046145eb565b61243e565b6106f661068c36600461438d565b600c602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593949293919263ffffffff821691640100000000810490911690600160c01b810462ffffff1690600160d81b900460ff1689565b604080516001600160a01b039a8b16815260208101999099528801969096526060870194909452608086019290925263ffffffff1660a085015290931660c083015262ffffff90921660e082015290151561010082015261012001610339565b600b546103559060020b81565b6103b7600081565b6103556107793660046143f1565b612603565b61037b61078c36600461438d565b61261e565b61035561079f36600461433f565b612729565b61037b6107b2366004614620565b61277d565b600a546104e4906001600160a01b031681565b6104e46107d83660046143d8565b6001602052600090815260409020546001600160a01b031681565b61037b6108013660046143f1565b61287a565b61037b61081436600461463b565b612970565b6007546104e4906001600160a01b031681565b61037b61083a36600461440e565b612bdf565b61093861084d36600461438d565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600c6020908152604091829020825161012081018452815485168152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015463ffffffff811660a0830152640100000000810490921660c0820152600160c01b820462ffffff1660e0820152600160d81b90910460ff16151561010082015290565b604051610339919061466c565b6103556109533660046146ff565b612c04565b60006001600160e01b03198216637965db0b60e01b148061098957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008061099b83612423565b600a549091506000906109b890600160c01b900460020b8561473a565b6109c29086614761565b90508060020b8260020b12156109db5791506109899050565b509050610989565b505092915050565b6109f433610c44565b610a3e5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b60648201526084015b60405180910390fd5b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610f59565b50565b816001600160a01b038116610aa75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b816001600160a01b038116610ae35760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b6001600160a01b0380851660009081526006602052604090205485911615801590610b2757506001600160a01b038181166000908152600660205260409020541633145b610b815760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610a35565b6001600160a01b03858116600090815260066020526040902054818616911603610bd65760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610989565b610c8d33610c44565b610cd25760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008160020b13610d0e5760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a54600282810b600160d81b909204900b03610d565760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805462ffffff909216600160d81b0262ffffff60d81b19909216919091179055565b600082815260046020526040902060010154610d9581612c5e565b610d9f8383612c68565b505050565b816001600160a01b038116610de05760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b816001600160a01b038116610e1c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b60055461010090046001600160a01b031615801590610e4a575060055461010090046001600160a01b031633145b610e965760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610a35565b6001600160a01b03848116600090815260066020526040902054818516911603610eeb5760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a150505050565b6001600160a01b0381163314610fd75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610a35565b610fe18282612d0a565b5050565b6001600160a01b0381166000908152600c60205260409020600501548190600160d81b900460ff16156110655760405162461bcd60e51b815260206004820152602260248201527f5661756c743a20616c726561647920726561647920746f20437265617465506f6044820152611bdb60f21b6064820152608401610a35565b60055460ff166110a05760405162461bcd60e51b8152600401610a35906020808252600490820152636c6f636b60e01b604082015260600190565b6005805460ff191681556001600160a01b0383166000908152600c602052604090209081015463ffffffff16158015906110e65750600581015463ffffffff4281169116105b6111325760405162461bcd60e51b815260206004820152601960248201527f537461727454696d6520686173206e6f74207061737365642e000000000000006044820152606401610a35565b80546001600160a01b03161561118a5760405162461bcd60e51b815260206004820152600f60248201527f616c7265616479206372656174656400000000000000000000000000000000006044820152606401610a35565b600581015464010000000090046001600160a01b03166111ec5760405162461bcd60e51b815260206004820152601560248201527f7a65726f20696e697453717274507269636558393600000000000000000000006044820152606401610a35565b6009546008546005830154604051630b4c774160e11b81526001600160a01b0392831660048201528683166024820152600160c01b90910462ffffff1660448201526000929190911690631698ee8290606401602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614786565b90506001600160a01b03811661138157600954600854600584015460405163a167129560e01b81526001600160a01b0392831660048201528783166024820152600160c01b90910462ffffff166044820152600092919091169063a1671295906064016020604051808303816000875af1158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190614786565b90506001600160a01b03811661137e5760405162461bcd60e51b815260206004820152600f60248201527f637265617465506f6f6c206661696c00000000000000000000000000000000006044820152606401610a35565b90505b81546001600160a01b0382166001600160a01b0319909116811783556005830180547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160d81b17905560408051633850c7bd60e01b8152905160009291633850c7bd9160048083019260e09291908290030181865afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906147b3565b5050505050509050806001600160a01b031660000361150b57600583015460405163f637731d60e01b81526401000000009091046001600160a01b03908116600483015283169063f637731d90602401600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b505050506005830154604080516001600160a01b038881168252858116602083015264010000000090930490921682820152517fca9098798fa03760d7709c3305b3b049d2c71fa6e891a83a36fe90a15eeab7809181900360600190a15b604080516001600160a01b038088168252841660208201527ffb9092f7bd4a3c6c55439411fb56fe4d44878125340b674c6ab5b5dda38d0b1c910160405180910390a16000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906147b3565b5050505050509050806001600160a01b03166000036116135760405162461bcd60e51b815260206004820152601260248201527f7a65726f205f73717274507269636558393600000000000000000000000000006044820152606401610a35565b50506005805460ff1916600117905550505050565b6001600160a01b0382166000908152600c60205260409020600501548290600160d81b900460ff1661169c5760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a206e6f7420726561647920746f20437265617465506f6f6c00006044820152606401610a35565b81806000036116d25760405162461bcd60e51b81526020600482015260026024820152615a3160f01b6044820152606401610a35565b60055460ff1661170d5760405162461bcd60e51b8152600401610a35906020808252600490820152636c6f636b60e01b604082015260600190565b6005805460ff191690556008546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190614850565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038716906370a0823190602401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614850565b9050670de0b6b3a7640000821180156118125750670de0b6b3a764000081115b61185e5760405162461bcd60e51b815260206004820152601760248201527f62616c616e636520697320696e73756666696369656e740000000000000000006044820152606401610a35565b818511156118ae5760405162461bcd60e51b815260206004820152601960248201527f746f42616c616e636520697320696e73756666696369656e74000000000000006044820152606401610a35565b600a54600160c01b900460020b6000036118d857600a805462ffffff60c01b1916600160c31b1790555b600a54600160d81b900460020b60000361190257600a805462ffffff60d81b1916600560d91b1790555b600a54600160a01b900463ffffffff1660000361194157600a805463ffffffff60a01b1916747800000000000000000000000000000000000000001790555b6001600160a01b038681166000908152600c602090815260408083208151610120810183528154861680825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260059092015463ffffffff811660a0830152640100000000810490961660c0820152600160c01b860462ffffff1660e080830191909152600160d81b90960460ff1615156101008201528251633850c7bd60e01b815292519095859485949093633850c7bd9382820193929091908290030181865afa158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4291906147b3565b505050935050925092506000836001600160a01b031611611aa55760405162461bcd60e51b815260206004820152601760248201527f706f6f6c206973206e6f7420696e697469616c697a65640000000000000000006044820152606401610a35565b60018161ffff161115611b67578351600a54600091611ad091600160a01b900463ffffffff16612d8d565b90508260020b611ae7826103508860e00151612c04565b60020b13158015611b0d5750611b048161079f8760e00151612c04565b60020b8360020b125b611b655760405162461bcd60e51b8152602060048201526024808201527f49742773206e6f7420616c6c6f776564206368616e676564207469636b2072616044820152633733b29760e11b6064820152608401610a35565b505b600080600086600001516001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd29190614786565b6008549091508d906001600160a01b03808416911614611c6b57600854611c069087908f906001600160a01b031684611dac565b93508c925088841115611c5b5760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e42616c616e636520697320696e73756666696369656e74000000006044820152606401610a35565b611c66818486612f4c565b611ce5565b6008548d9450611c8890879086906001600160a01b031684611dac565b925088831115611cda5760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e42616c616e636520697320696e73756666696369656e74000000006044820152606401610a35565b611ce5818585612f4c565b600a54600090606490611d0290600160d81b900460020b82614869565b611d0c908761487c565b611d1691906148a9565b600a54909150600090606490611d3690600160d81b900460020b82614869565b611d40908761487c565b611d4a91906148a9565b6001600160a01b0384166000908152600c602052604081206004015491925003611d8057611d7b838787858561342e565b611d8d565b611d8d8387878585613812565b50506005805460ff191660011790555050505050505050505050505050565b6000611dba858585856139a7565b95945050505050565b600554829061010090046001600160a01b0316331480611e2057506001600160a01b038181166000908152600660205260409020541615801590611e2057506001600160a01b038181166000908152600660205260409020541633145b611e925760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610a35565b6009546001600160a01b031615801590611eb65750600a546001600160a01b031615155b8015611ecc57506008546001600160a01b031615155b611f185760405162461bcd60e51b815260206004820152601860248201527f5661756c743a206265666f726520736574556e697377617000000000000000006044820152606401610a35565b6001600160a01b0383166000908152600c602052604090206001015415611f815760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610a35565b815115801590611f945750602082015115155b8015611fa35750604082015115155b8015611fb25750606082015115155b8015611fc5575060a082015161ffff1615155b61205d5760405162461bcd60e51b815260206004820152605460248201527f7a65726f20746f74616c416c6c6f6361746564416d6f756e74206f7220746f7360448201527f5072696365206f7220746f6b656e5072696365206f7220696e6974537172745060648201527f72696365583936206f7220737461727454696d65000000000000000000000000608482015260a401610a35565b4263ffffffff16826080015163ffffffff16116120bc5760405162461bcd60e51b815260206004820152601460248201527f537461727454696d6520686173207061737365640000000000000000000000006044820152606401610a35565b60055482516120e0916001600160a01b038681169261010090920416903090613ab5565b6001600160a01b038084166000908152600c602090815260409182902085516001820181905591860151600282018190558684015160038301819055606088015160058401805460808b015160a08c0151600160c01b61ffff8216027fffffffffff000000ffffffffffffffffffffffffffffffffffffffff000000009b8616640100000000029b909b167fffffffffff0000000000000000000000000000000000000000000000000000009093169290921763ffffffff82161799909917909155955193967f060a95341b2743fc4109ee31674ef362aca6cdea36c46a5ed759920b83e244b096610f4b968c969095949391906001600160a01b03978816815260208101969096526040860194909452606085019290925263ffffffff16608084015290921660a082015261ffff9190911660c082015260e00190565b60006001600160a01b0382161580159061225457506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b61226433610c44565b6122a95760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610d7a565b6122dc33610c44565b6123215760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b6001600160a01b0381166123775760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610a35565b6001600160a01b03811633036123cf5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610a35565b6123f97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610d7a565b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610f59565b60008161243481620d89e7196148bd565b610989919061473a565b6001600160a01b038083166000908152600660205260409020548391161580159061248257506001600160a01b038181166000908152600660205260409020541633145b6124dc5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610a35565b6001600160a01b0383166000908152600c60205260409020600581015463ffffffff16421061254d5760405162461bcd60e51b815260206004820152601460248201527f537461727454696d6520686173207061737365640000000000000000000000006044820152606401610a35565b600581015463ffffffff8085169116036125a95760405162461bcd60e51b815260206004820152600e60248201527f73616d6520537461727454696d650000000000000000000000000000000000006044820152606401610a35565b60058101805463ffffffff191663ffffffff8516908117909155604080516001600160a01b038716815260208101929092527f1266d1525c8a4b88d83deeed8ccc3a233c359b7bd54f50c0b4ba71c4a330f5b59101610f4b565b60008180612614620d89e7196148f7565b61243491906148bd565b806001600160a01b03811661265a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b61266333610c44565b6126a85760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b6005546001600160a01b0380841661010090920416036126f35760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60008061273583612603565b600a5490915060009061275290600160c01b900460020b8561473a565b61275c9086614919565b90508060020b8260020b121561277457509050610989565b91506109899050565b61278633610c44565b6127cb5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008163ffffffff161161280a5760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a5463ffffffff808316600160a01b90920416036128545760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b61288333610c44565b6128c85760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008160020b136129045760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a54600282810b600160c01b909204900b0361294c5760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805462ffffff909216600160c01b0262ffffff60c01b19909216919091179055565b61297933610c44565b6129be5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b836001600160a01b0381166129fa5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612a365760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612a725760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612aae5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b6009546001600160a01b038981169116141580612ad95750600a546001600160a01b03888116911614155b80612af257506007546001600160a01b03878116911614155b80612b0b57506008546001600160a01b03868116911614155b612b405760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600980546001600160a01b038a81166001600160a01b03199283168117909355600a80548b83169084168117909155600780548b8416908516811790915560088054938b1693909416831790935560408051948552602085019190915283019190915260608201527f5f5458e04fbfd7e3d6d9563a2da2ea2a5b3a29c1303221569d209c8c673ceacc9060800160405180910390a15050505050505050565b600082815260046020526040902060010154612bfa81612c5e565b610d9f8383612d0a565b60008162ffffff16606403612c1b57506002919050565b8162ffffff166101f403612c315750600a919050565b8162ffffff16610bb803612c475750603c919050565b8162ffffff1661271003612c59575060c85b919050565b610a688133613bee565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610fe15760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cc63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610fe15760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff16600003612dca5760405162461bcd60e51b8152602060048201526002602482015261042560f41b6044820152606401610a35565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110612dff57612dff61493e565b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110612e2e57612e2e61493e565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd90612e72908590600401614954565b600060405180830381865afa158015612e8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612eb79190810190614a36565b509050600081600081518110612ecf57612ecf61493e565b602002602001015182600181518110612eea57612eea61493e565b6020026020010151612efc9190614b02565b9050612f0c600386900b82614b2f565b935060008160060b128015612f305750612f2a600386900b82614b64565b60060b15155b15612f435783612f3f81614b86565b9450505b50505092915050565b6008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190614850565b10156130065760405162461bcd60e51b815260206004820152601460248201527f746f7320697320696e73756666696369656e742e0000000000000000000000006044820152606401610a35565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130709190614850565b10156130be5760405162461bcd60e51b815260206004820152601660248201527f746f6b656e20697320696e73756666696369656e742e000000000000000000006044820152606401610a35565b600854600a54604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015291169063dd62ed3e90604401602060405180830381865afa158015613110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131349190614850565b82111561327157600854600a54604080516318160ddd60e01b815290516001600160a01b039384169363095ea7b393169184916318160ddd916004808201926020929091908290030181865afa158015613192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b69190614850565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132259190614ba9565b6132715760405162461bcd60e51b815260206004820152601060248201527f544f5320617070726f7665206661696c000000000000000000000000000000006044820152606401610a35565b600a54604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529084169063dd62ed3e90604401602060405180830381865afa1580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e59190614850565b811115610d9f57826001600160a01b031663095ea7b3600a60009054906101000a90046001600160a01b0316856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190614850565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156133be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e29190614ba9565b610d9f5760405162461bcd60e51b815260206004820152601260248201527f746f6b656e20617070726f7665206661696c00000000000000000000000000006044820152606401610a35565b6001600160a01b0385166000908152600c602052604090206004810154156134985760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479206d696e7465640000000000000000000000000000000000006044820152606401610a35565b60058101546000906134b590600160c01b900462ffffff16612c04565b60058301546134cf90600160c01b900462ffffff16612c04565b6134dd90620d89e7196148bd565b6134e7919061473a565b905060006135078360050160189054906101000a900462ffffff16612c04565b600584015461352190600160c01b900462ffffff16612c04565b61352e620d89e7196148f7565b61353891906148bd565b613542919061473a565b600a546040805161016081018083528754630dfe168160e01b90915291519394506000938493849384936001600160a01b0392831693638831645693919283921690630dfe168190610164808501916020918187030181865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d19190614786565b6001600160a01b031681526020018a60000160009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136589190614786565b6001600160a01b031681526020018a60050160189054906101000a900462ffffff1662ffffff1681526020018960020b81526020018860020b81526020018e81526020018d81526020018c81526020018b8152602001306001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016136dd9190614bc4565b6080604051808303816000875af11580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137209190614c88565b9350935093509350600084116137785760405162461bcd60e51b815260206004820152600c60248201527f7a65726f20746f6b656e496400000000000000000000000000000000000000006044820152606401610a35565b6004870184905586546040517e80a7e05c1e726da26ef60dc270a12c37b0bc54fc6adbc18d22f991976cf332916137fc918f916001600160a01b03169088908890889088906001600160a01b03968716815294909516602085015260408401929092526001600160801b03166060830152608082015260a081019190915260c00190565b60405180910390a1505050505050505050505050565b6001600160a01b0385166000908152600c60205260409020600481015461387b5760405162461bcd60e51b815260206004820152601460248201527f4974206973206e6f74206d696e746564207965740000000000000000000000006044820152606401610a35565b600a546040805160c08101825260048481015482526020820189815282840189815260608401898152608085018981524260a08701908152965163219f5d1760e01b815295519486019490945291516024850152516044840152516064830152516084820152905160a4820152600091829182916001600160a01b03169063219f5d179060c4016060604051808303816000875af1158015613921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139459190614cc6565b6004870154604080516001600160801b0386168152602081018590529081018390529396509194509250907e242840c59a1b38c7f01b50c3ba18ebd1a8f5b28cfc8b9fb894c4ea46696ba49060600160405180910390a2505050505050505050565b6000806139b386613c63565b90506001600160801b036001600160a01b03821611613a395760006139e16001600160a01b0383168061487c565b9050836001600160a01b0316856001600160a01b031610613a1957613a14600160c01b876001600160801b031683614083565b613a31565b613a3181876001600160801b0316600160c01b614083565b925050613aac565b6000613a586001600160a01b0383168068010000000000000000614083565b9050836001600160a01b0316856001600160a01b031610613a9057613a8b600160801b876001600160801b031683614083565b613aa8565b613aa881876001600160801b0316600160801b614083565b9250505b50949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691613b2e9190614d21565b6000604051808303816000865af19150503d8060008114613b6b576040519150601f19603f3d011682016040523d82523d6000602084013e613b70565b606091505b5091509150818015613b9a575080511580613b9a575080806020019051810190613b9a9190614ba9565b613be65760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610a35565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610fe157613c218161414b565b613c2c83602061415d565b604051602001613c3d929190614d3d565b60408051601f198184030181529082905262461bcd60e51b8252610a3591600401614dbe565b60008060008360020b12613c7a578260020b613c87565b8260020b613c8790614df1565b9050613c96620d89e7196148f7565b60020b811115613ccc5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610a35565b600081600116600003613ce357600160801b613cf5565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613d34576080613d2f826ffff97272373d413259a46990580e213a61487c565b901c90505b6004821615613d5e576080613d59826ffff2e50f5f656932ef12357cf3c7fdcc61487c565b901c90505b6008821615613d88576080613d83826fffe5caca7e10e4e61c3624eaa0941cd061487c565b901c90505b6010821615613db2576080613dad826fffcb9843d60f6159c9db58835c92664461487c565b901c90505b6020821615613ddc576080613dd7826fff973b41fa98c081472e6896dfb254c061487c565b901c90505b6040821615613e06576080613e01826fff2ea16466c96a3843ec78b326b5286161487c565b901c90505b6080821615613e30576080613e2b826ffe5dee046a99a2a811c461f1969c305361487c565b901c90505b610100821615613e5b576080613e56826ffcbe86c7900a88aedcffc83b479aa3a461487c565b901c90505b610200821615613e86576080613e81826ff987a7253ac413176f2b074cf7815e5461487c565b901c90505b610400821615613eb1576080613eac826ff3392b0822b70005940c7a398e4b70f361487c565b901c90505b610800821615613edc576080613ed7826fe7159475a2c29b7443b29c7fa6e889d961487c565b901c90505b611000821615613f07576080613f02826fd097f3bdfd2022b8845ad8f792aa582561487c565b901c90505b612000821615613f32576080613f2d826fa9f746462d870fdf8a65dc1f90e061e561487c565b901c90505b614000821615613f5d576080613f58826f70d869a156d2a1b890bb3df62baf32f761487c565b901c90505b618000821615613f88576080613f83826f31be135f97d08fd981231505542fcfa661487c565b901c90505b62010000821615613fb4576080613faf826f09aa508b5b7a84e1c677de54f3e99bc961487c565b901c90505b62020000821615613fdf576080613fda826e5d6af8dedb81196699c329225ee60461487c565b901c90505b62040000821615614009576080614004826d2216e584f5fa1ea926041bedfe9861487c565b901c90505b6208000082161561403157608061402c826b048a170391f7dc42444e8fa261487c565b901c90505b60008460020b131561404c57614049816000196148a9565b90505b61405b64010000000082614e0d565b1561406757600161406a565b60005b61407b9060ff16602083901c614e21565b949350505050565b600080821161409157600080fd5b600080600019858709858702925082811083820303915050806000036140bc57508290049050612254565b8084116140c857600080fd5b6000848688098084039381119092039190506000856140e981600019614869565b6140f4906001614e21565b16958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050509392505050565b60606109896001600160a01b03831660145b6060600061416c83600261487c565b614177906002614e21565b67ffffffffffffffff81111561418f5761418f6144d0565b6040519080825280601f01601f1916602001820160405280156141b9576020820181803683370190505b509050600360fc1b816000815181106141d4576141d461493e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106142035761420361493e565b60200101906001600160f81b031916908160001a905350600061422784600261487c565b614232906001614e21565b90505b60018111156142b7577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106142735761427361493e565b1a60f81b8282815181106142895761428961493e565b60200101906001600160f81b031916908160001a90535060049490941c936142b081614e34565b9050614235565b5083156122545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a35565b60006020828403121561431857600080fd5b81356001600160e01b03198116811461225457600080fd5b8060020b8114610a6857600080fd5b6000806040838503121561435257600080fd5b823561435d81614330565b9150602083013561436d81614330565b809150509250929050565b6001600160a01b0381168114610a6857600080fd5b60006020828403121561439f57600080fd5b813561225481614378565b600080604083850312156143bd57600080fd5b82356143c881614378565b9150602083013561436d81614378565b6000602082840312156143ea57600080fd5b5035919050565b60006020828403121561440357600080fd5b813561225481614330565b6000806040838503121561442157600080fd5b82359150602083013561436d81614378565b6000806040838503121561444657600080fd5b823561445181614378565b946020939093013593505050565b6001600160801b0381168114610a6857600080fd5b6000806000806080858703121561448a57600080fd5b843561449581614330565b935060208501356144a58161445f565b925060408501356144b581614378565b915060608501356144c581614378565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561450f5761450f6144d0565b604052919050565b803563ffffffff81168114612c5957600080fd5b61ffff81168114610a6857600080fd5b60008082840360e081121561454f57600080fd5b833561455a81614378565b925060c0601f198201121561456e57600080fd5b5060405160c0810181811067ffffffffffffffff82111715614592576145926144d0565b8060405250602084013581526040840135602082015260608401356040820152608084013560608201526145c860a08501614517565b608082015260c08401356145db8161452b565b60a0820152919491935090915050565b600080604083850312156145fe57600080fd5b823561460981614378565b915061461760208401614517565b90509250929050565b60006020828403121561463257600080fd5b61225482614517565b6000806000806080858703121561465157600080fd5b843561465c81614378565b935060208501356144a581614378565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516146d460c08401826001600160a01b03169052565b5060e08301516146eb60e084018262ffffff169052565b5061010083810151801515848301526109e3565b60006020828403121561471157600080fd5b813562ffffff8116811461225457600080fd5b634e487b7160e01b600052601160045260246000fd5b60008260020b8260020b028060020b915080821461475a5761475a614724565b5092915050565b600282810b9082900b03627fffff198112627fffff8213171561098957610989614724565b60006020828403121561479857600080fd5b815161225481614378565b80518015158114612c5957600080fd5b600080600080600080600060e0888a0312156147ce57600080fd5b87516147d981614378565b60208901519097506147ea81614330565b60408901519096506147fb8161452b565b606089015190955061480c8161452b565b608089015190945061481d8161452b565b60a089015190935060ff8116811461483457600080fd5b915061484260c089016147a3565b905092959891949750929550565b60006020828403121561486257600080fd5b5051919050565b8181038181111561098957610989614724565b808202811582820484141761098957610989614724565b634e487b7160e01b600052601260045260246000fd5b6000826148b8576148b8614893565b500490565b60008160020b8360020b806148d4576148d4614893565b627fffff198214600019821416156148ee576148ee614724565b90059392505050565b60008160020b627fffff19810361491057614910614724565b60000392915050565b600281810b9083900b01627fffff8113627fffff198212171561098957610989614724565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561499257835163ffffffff1683529284019291840191600101614970565b50909695505050505050565b600067ffffffffffffffff8211156149b8576149b86144d0565b5060051b60200190565b600082601f8301126149d357600080fd5b815160206149e86149e38361499e565b6144e6565b82815260059290921b84018101918181019086841115614a0757600080fd5b8286015b84811015614a2b578051614a1e81614378565b8352918301918301614a0b565b509695505050505050565b60008060408385031215614a4957600080fd5b825167ffffffffffffffff80821115614a6157600080fd5b818501915085601f830112614a7557600080fd5b81516020614a856149e38361499e565b82815260059290921b84018101918181019089841115614aa457600080fd5b948201945b83861015614ad25785518060060b8114614ac35760008081fd5b82529482019490820190614aa9565b91880151919650909350505080821115614aeb57600080fd5b50614af8858286016149c2565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff8213171561098957610989614724565b60008160060b8360060b80614b4657614b46614893565b667fffffffffffff198214600019821416156148ee576148ee614724565b60008260060b80614b7757614b77614893565b808360060b0791505092915050565b60008160020b627fffff198103614b9f57614b9f614724565b6000190192915050565b600060208284031215614bbb57600080fd5b612254826147a3565b81516001600160a01b0316815261016081016020830151614bf060208401826001600160a01b03169052565b506040830151614c07604084018262ffffff169052565b506060830151614c1c606084018260020b9052565b506080830151614c31608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614c77828501826001600160a01b03169052565b505061014092830151919092015290565b60008060008060808587031215614c9e57600080fd5b845193506020850151614cb08161445f565b6040860151606090960151949790965092505050565b600080600060608486031215614cdb57600080fd5b8351614ce68161445f565b602085015160409095015190969495509392505050565b60005b83811015614d18578181015183820152602001614d00565b50506000910152565b60008251614d33818460208701614cfd565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614d75816017850160208801614cfd565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614db2816028840160208801614cfd565b01602801949350505050565b6020815260008251806020840152614ddd816040850160208701614cfd565b601f01601f19169190910160400192915050565b6000600160ff1b8201614e0657614e06614724565b5060000390565b600082614e1c57614e1c614893565b500690565b8082018082111561098957610989614724565b600081614e4357614e43614724565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103155760003560e01c806370480275116101a7578063a22f84f0116100ee578063b9c56c8c11610097578063d547741f11610071578063d547741f1461082c578063dc861da61461083f578063ea8668151461094557600080fd5b8063b9c56c8c146107f3578063bef6dc8b14610806578063cc48b9471461081957600080fd5b8063b224f99f116100c8578063b224f99f146107a4578063b44a2722146107b7578063b911135f146107ca57600080fd5b8063a22f84f01461076b578063a41823431461077e578063aec137581461079157600080fd5b806389f395de116101505780639a7b5f111161012a5780639a7b5f111461067e5780639cbbbe8614610756578063a217fddf1461076357600080fd5b806389f395de1461061f57806391d1485414610632578063971c57cc1461066b57600080fd5b80637ca25184116101815780637ca25184146105b75780637fc46ba8146105e3578063826bd4bf1461060c57600080fd5b8063704802751461056a57806375829def1461057d57806375b238fc1461059057600080fd5b806336568abe1161026b57806350d2a27611610214578063550d01a3116101ee578063550d01a3146105275780635b5491821461054a57806363a8fd891461055d57600080fd5b806350d2a276146104bb57806351e8152a146104fc57806352351e851461050f57600080fd5b806343c57a271161024557806343c57a2714610481578063442bede61461049457806345a41148146104a757600080fd5b806336568abe1461044857806337c1cfa51461045b57806340c10f191461046e57600080fd5b8063248a9ca3116102cd5780632f2ff15d116102a75780632f2ff15d1461040e57806335b9ac661461042157806335d20f8a1461043457600080fd5b8063248a9ca3146103c557806324d7806c146103e85780632c00778a146103fb57600080fd5b80631785f53c116102fe5780631785f53c146103685780631e8948c31461037d578063229852461461039057600080fd5b806301ffc9a71461031a5780630f36edbf14610342575b600080fd5b61032d610328366004614306565b610958565b60405190151581526020015b60405180910390f35b61035561035036600461433f565b61098f565b60405160029190910b8152602001610339565b61037b61037636600461438d565b6109eb565b005b61037b61038b3660046143aa565b610a6b565b6103b77ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610339565b6103b76103d33660046143d8565b60009081526004602052604090206001015490565b61032d6103f636600461438d565b610c44565b61037b6104093660046143f1565b610c84565b61037b61041c36600461440e565b610d7a565b61037b61042f3660046143aa565b610da4565b600a5461035590600160d81b900460020b81565b61037b61045636600461440e565b610f59565b61037b61046936600461438d565b610fe5565b61037b61047c366004614433565b611628565b6103b761048f366004614474565b611dac565b61037b6104a236600461453b565b611dc3565b600a5461035590600160c01b900460020b81565b6104e46104c9366004614306565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610339565b61032d61050a3660046143aa565b61221e565b6005546104e49061010090046001600160a01b031681565b61032d61053536600461438d565b60026020526000908152604090205460ff1681565b6009546104e4906001600160a01b031681565b60005461032d9060ff1681565b61037b61057836600461438d565b61225b565b61037b61058b36600461438d565b6122d3565b6103b77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600a546105ce90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610339565b6104e46105f136600461438d565b6006602052600090815260409020546001600160a01b031681565b61035561061a3660046143f1565b612423565b6008546104e4906001600160a01b031681565b61032d61064036600461440e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61037b6106793660046145eb565b61243e565b6106f661068c36600461438d565b600c602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593949293919263ffffffff821691640100000000810490911690600160c01b810462ffffff1690600160d81b900460ff1689565b604080516001600160a01b039a8b16815260208101999099528801969096526060870194909452608086019290925263ffffffff1660a085015290931660c083015262ffffff90921660e082015290151561010082015261012001610339565b600b546103559060020b81565b6103b7600081565b6103556107793660046143f1565b612603565b61037b61078c36600461438d565b61261e565b61035561079f36600461433f565b612729565b61037b6107b2366004614620565b61277d565b600a546104e4906001600160a01b031681565b6104e46107d83660046143d8565b6001602052600090815260409020546001600160a01b031681565b61037b6108013660046143f1565b61287a565b61037b61081436600461463b565b612970565b6007546104e4906001600160a01b031681565b61037b61083a36600461440e565b612bdf565b61093861084d36600461438d565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039081166000908152600c6020908152604091829020825161012081018452815485168152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015463ffffffff811660a0830152640100000000810490921660c0820152600160c01b820462ffffff1660e0820152600160d81b90910460ff16151561010082015290565b604051610339919061466c565b6103556109533660046146ff565b612c04565b60006001600160e01b03198216637965db0b60e01b148061098957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008061099b83612423565b600a549091506000906109b890600160c01b900460020b8561473a565b6109c29086614761565b90508060020b8260020b12156109db5791506109899050565b509050610989565b505092915050565b6109f433610c44565b610a3e5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b60648201526084015b60405180910390fd5b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610f59565b50565b816001600160a01b038116610aa75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b816001600160a01b038116610ae35760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b6001600160a01b0380851660009081526006602052604090205485911615801590610b2757506001600160a01b038181166000908152600660205260409020541633145b610b815760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610a35565b6001600160a01b03858116600090815260066020526040902054818616911603610bd65760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610989565b610c8d33610c44565b610cd25760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008160020b13610d0e5760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a54600282810b600160d81b909204900b03610d565760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805462ffffff909216600160d81b0262ffffff60d81b19909216919091179055565b600082815260046020526040902060010154610d9581612c5e565b610d9f8383612c68565b505050565b816001600160a01b038116610de05760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b816001600160a01b038116610e1c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b60055461010090046001600160a01b031615801590610e4a575060055461010090046001600160a01b031633145b610e965760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610a35565b6001600160a01b03848116600090815260066020526040902054818516911603610eeb5760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a150505050565b6001600160a01b0381163314610fd75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610a35565b610fe18282612d0a565b5050565b6001600160a01b0381166000908152600c60205260409020600501548190600160d81b900460ff16156110655760405162461bcd60e51b815260206004820152602260248201527f5661756c743a20616c726561647920726561647920746f20437265617465506f6044820152611bdb60f21b6064820152608401610a35565b60055460ff166110a05760405162461bcd60e51b8152600401610a35906020808252600490820152636c6f636b60e01b604082015260600190565b6005805460ff191681556001600160a01b0383166000908152600c602052604090209081015463ffffffff16158015906110e65750600581015463ffffffff4281169116105b6111325760405162461bcd60e51b815260206004820152601960248201527f537461727454696d6520686173206e6f74207061737365642e000000000000006044820152606401610a35565b80546001600160a01b03161561118a5760405162461bcd60e51b815260206004820152600f60248201527f616c7265616479206372656174656400000000000000000000000000000000006044820152606401610a35565b600581015464010000000090046001600160a01b03166111ec5760405162461bcd60e51b815260206004820152601560248201527f7a65726f20696e697453717274507269636558393600000000000000000000006044820152606401610a35565b6009546008546005830154604051630b4c774160e11b81526001600160a01b0392831660048201528683166024820152600160c01b90910462ffffff1660448201526000929190911690631698ee8290606401602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614786565b90506001600160a01b03811661138157600954600854600584015460405163a167129560e01b81526001600160a01b0392831660048201528783166024820152600160c01b90910462ffffff166044820152600092919091169063a1671295906064016020604051808303816000875af1158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190614786565b90506001600160a01b03811661137e5760405162461bcd60e51b815260206004820152600f60248201527f637265617465506f6f6c206661696c00000000000000000000000000000000006044820152606401610a35565b90505b81546001600160a01b0382166001600160a01b0319909116811783556005830180547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160d81b17905560408051633850c7bd60e01b8152905160009291633850c7bd9160048083019260e09291908290030181865afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906147b3565b5050505050509050806001600160a01b031660000361150b57600583015460405163f637731d60e01b81526401000000009091046001600160a01b03908116600483015283169063f637731d90602401600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b505050506005830154604080516001600160a01b038881168252858116602083015264010000000090930490921682820152517fca9098798fa03760d7709c3305b3b049d2c71fa6e891a83a36fe90a15eeab7809181900360600190a15b604080516001600160a01b038088168252841660208201527ffb9092f7bd4a3c6c55439411fb56fe4d44878125340b674c6ab5b5dda38d0b1c910160405180910390a16000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906147b3565b5050505050509050806001600160a01b03166000036116135760405162461bcd60e51b815260206004820152601260248201527f7a65726f205f73717274507269636558393600000000000000000000000000006044820152606401610a35565b50506005805460ff1916600117905550505050565b6001600160a01b0382166000908152600c60205260409020600501548290600160d81b900460ff1661169c5760405162461bcd60e51b815260206004820152601e60248201527f5661756c743a206e6f7420726561647920746f20437265617465506f6f6c00006044820152606401610a35565b81806000036116d25760405162461bcd60e51b81526020600482015260026024820152615a3160f01b6044820152606401610a35565b60055460ff1661170d5760405162461bcd60e51b8152600401610a35906020808252600490820152636c6f636b60e01b604082015260600190565b6005805460ff191690556008546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190614850565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038716906370a0823190602401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614850565b9050670de0b6b3a7640000821180156118125750670de0b6b3a764000081115b61185e5760405162461bcd60e51b815260206004820152601760248201527f62616c616e636520697320696e73756666696369656e740000000000000000006044820152606401610a35565b818511156118ae5760405162461bcd60e51b815260206004820152601960248201527f746f42616c616e636520697320696e73756666696369656e74000000000000006044820152606401610a35565b600a54600160c01b900460020b6000036118d857600a805462ffffff60c01b1916600160c31b1790555b600a54600160d81b900460020b60000361190257600a805462ffffff60d81b1916600560d91b1790555b600a54600160a01b900463ffffffff1660000361194157600a805463ffffffff60a01b1916747800000000000000000000000000000000000000001790555b6001600160a01b038681166000908152600c602090815260408083208151610120810183528154861680825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260059092015463ffffffff811660a0830152640100000000810490961660c0820152600160c01b860462ffffff1660e080830191909152600160d81b90960460ff1615156101008201528251633850c7bd60e01b815292519095859485949093633850c7bd9382820193929091908290030181865afa158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4291906147b3565b505050935050925092506000836001600160a01b031611611aa55760405162461bcd60e51b815260206004820152601760248201527f706f6f6c206973206e6f7420696e697469616c697a65640000000000000000006044820152606401610a35565b60018161ffff161115611b67578351600a54600091611ad091600160a01b900463ffffffff16612d8d565b90508260020b611ae7826103508860e00151612c04565b60020b13158015611b0d5750611b048161079f8760e00151612c04565b60020b8360020b125b611b655760405162461bcd60e51b8152602060048201526024808201527f49742773206e6f7420616c6c6f776564206368616e676564207469636b2072616044820152633733b29760e11b6064820152608401610a35565b505b600080600086600001516001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd29190614786565b6008549091508d906001600160a01b03808416911614611c6b57600854611c069087908f906001600160a01b031684611dac565b93508c925088841115611c5b5760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e42616c616e636520697320696e73756666696369656e74000000006044820152606401610a35565b611c66818486612f4c565b611ce5565b6008548d9450611c8890879086906001600160a01b031684611dac565b925088831115611cda5760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e42616c616e636520697320696e73756666696369656e74000000006044820152606401610a35565b611ce5818585612f4c565b600a54600090606490611d0290600160d81b900460020b82614869565b611d0c908761487c565b611d1691906148a9565b600a54909150600090606490611d3690600160d81b900460020b82614869565b611d40908761487c565b611d4a91906148a9565b6001600160a01b0384166000908152600c602052604081206004015491925003611d8057611d7b838787858561342e565b611d8d565b611d8d8387878585613812565b50506005805460ff191660011790555050505050505050505050505050565b6000611dba858585856139a7565b95945050505050565b600554829061010090046001600160a01b0316331480611e2057506001600160a01b038181166000908152600660205260409020541615801590611e2057506001600160a01b038181166000908152600660205260409020541633145b611e925760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e6167657200000000000000000000000000000000000000006064820152608401610a35565b6009546001600160a01b031615801590611eb65750600a546001600160a01b031615155b8015611ecc57506008546001600160a01b031615155b611f185760405162461bcd60e51b815260206004820152601860248201527f5661756c743a206265666f726520736574556e697377617000000000000000006044820152606401610a35565b6001600160a01b0383166000908152600c602052604090206001015415611f815760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610a35565b815115801590611f945750602082015115155b8015611fa35750604082015115155b8015611fb25750606082015115155b8015611fc5575060a082015161ffff1615155b61205d5760405162461bcd60e51b815260206004820152605460248201527f7a65726f20746f74616c416c6c6f6361746564416d6f756e74206f7220746f7360448201527f5072696365206f7220746f6b656e5072696365206f7220696e6974537172745060648201527f72696365583936206f7220737461727454696d65000000000000000000000000608482015260a401610a35565b4263ffffffff16826080015163ffffffff16116120bc5760405162461bcd60e51b815260206004820152601460248201527f537461727454696d6520686173207061737365640000000000000000000000006044820152606401610a35565b60055482516120e0916001600160a01b038681169261010090920416903090613ab5565b6001600160a01b038084166000908152600c602090815260409182902085516001820181905591860151600282018190558684015160038301819055606088015160058401805460808b015160a08c0151600160c01b61ffff8216027fffffffffff000000ffffffffffffffffffffffffffffffffffffffff000000009b8616640100000000029b909b167fffffffffff0000000000000000000000000000000000000000000000000000009093169290921763ffffffff82161799909917909155955193967f060a95341b2743fc4109ee31674ef362aca6cdea36c46a5ed759920b83e244b096610f4b968c969095949391906001600160a01b03978816815260208101969096526040860194909452606085019290925263ffffffff16608084015290921660a082015261ffff9190911660c082015260e00190565b60006001600160a01b0382161580159061225457506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b61226433610c44565b6122a95760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610d7a565b6122dc33610c44565b6123215760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b6001600160a01b0381166123775760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610a35565b6001600160a01b03811633036123cf5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610a35565b6123f97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610d7a565b610a687fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610f59565b60008161243481620d89e7196148bd565b610989919061473a565b6001600160a01b038083166000908152600660205260409020548391161580159061248257506001600160a01b038181166000908152600660205260409020541633145b6124dc5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610a35565b6001600160a01b0383166000908152600c60205260409020600581015463ffffffff16421061254d5760405162461bcd60e51b815260206004820152601460248201527f537461727454696d6520686173207061737365640000000000000000000000006044820152606401610a35565b600581015463ffffffff8085169116036125a95760405162461bcd60e51b815260206004820152600e60248201527f73616d6520537461727454696d650000000000000000000000000000000000006044820152606401610a35565b60058101805463ffffffff191663ffffffff8516908117909155604080516001600160a01b038716815260208101929092527f1266d1525c8a4b88d83deeed8ccc3a233c359b7bd54f50c0b4ba71c4a330f5b59101610f4b565b60008180612614620d89e7196148f7565b61243491906148bd565b806001600160a01b03811661265a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b61266333610c44565b6126a85760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b6005546001600160a01b0380841661010090920416036126f35760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60008061273583612603565b600a5490915060009061275290600160c01b900460020b8561473a565b61275c9086614919565b90508060020b8260020b121561277457509050610989565b91506109899050565b61278633610c44565b6127cb5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008163ffffffff161161280a5760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a5463ffffffff808316600160a01b90920416036128545760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b61288333610c44565b6128c85760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b60008160020b136129045760405162461bcd60e51b8152600401610a35906020808252600490820152637a65726f60e01b604082015260600190565b600a54600282810b600160c01b909204900b0361294c5760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600a805462ffffff909216600160c01b0262ffffff60c01b19909216919091179055565b61297933610c44565b6129be5760405162461bcd60e51b81526020600482015260226024820152600080516020614e4c83398151915260448201526134b760f11b6064820152608401610a35565b836001600160a01b0381166129fa5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612a365760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612a725760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b836001600160a01b038116612aae5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610a35565b6009546001600160a01b038981169116141580612ad95750600a546001600160a01b03888116911614155b80612af257506007546001600160a01b03878116911614155b80612b0b57506008546001600160a01b03868116911614155b612b405760405162461bcd60e51b8152600401610a359060208082526004908201526373616d6560e01b604082015260600190565b600980546001600160a01b038a81166001600160a01b03199283168117909355600a80548b83169084168117909155600780548b8416908516811790915560088054938b1693909416831790935560408051948552602085019190915283019190915260608201527f5f5458e04fbfd7e3d6d9563a2da2ea2a5b3a29c1303221569d209c8c673ceacc9060800160405180910390a15050505050505050565b600082815260046020526040902060010154612bfa81612c5e565b610d9f8383612d0a565b60008162ffffff16606403612c1b57506002919050565b8162ffffff166101f403612c315750600a919050565b8162ffffff16610bb803612c475750603c919050565b8162ffffff1661271003612c59575060c85b919050565b610a688133613bee565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610fe15760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cc63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610fe15760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008163ffffffff16600003612dca5760405162461bcd60e51b8152602060048201526002602482015261042560f41b6044820152606401610a35565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110612dff57612dff61493e565b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110612e2e57612e2e61493e565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd90612e72908590600401614954565b600060405180830381865afa158015612e8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612eb79190810190614a36565b509050600081600081518110612ecf57612ecf61493e565b602002602001015182600181518110612eea57612eea61493e565b6020026020010151612efc9190614b02565b9050612f0c600386900b82614b2f565b935060008160060b128015612f305750612f2a600386900b82614b64565b60060b15155b15612f435783612f3f81614b86565b9450505b50505092915050565b6008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190614850565b10156130065760405162461bcd60e51b815260206004820152601460248201527f746f7320697320696e73756666696369656e742e0000000000000000000000006044820152606401610a35565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130709190614850565b10156130be5760405162461bcd60e51b815260206004820152601660248201527f746f6b656e20697320696e73756666696369656e742e000000000000000000006044820152606401610a35565b600854600a54604051636eb1769f60e11b81523060048201526001600160a01b03918216602482015291169063dd62ed3e90604401602060405180830381865afa158015613110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131349190614850565b82111561327157600854600a54604080516318160ddd60e01b815290516001600160a01b039384169363095ea7b393169184916318160ddd916004808201926020929091908290030181865afa158015613192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b69190614850565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132259190614ba9565b6132715760405162461bcd60e51b815260206004820152601060248201527f544f5320617070726f7665206661696c000000000000000000000000000000006044820152606401610a35565b600a54604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529084169063dd62ed3e90604401602060405180830381865afa1580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e59190614850565b811115610d9f57826001600160a01b031663095ea7b3600a60009054906101000a90046001600160a01b0316856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190614850565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156133be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e29190614ba9565b610d9f5760405162461bcd60e51b815260206004820152601260248201527f746f6b656e20617070726f7665206661696c00000000000000000000000000006044820152606401610a35565b6001600160a01b0385166000908152600c602052604090206004810154156134985760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479206d696e7465640000000000000000000000000000000000006044820152606401610a35565b60058101546000906134b590600160c01b900462ffffff16612c04565b60058301546134cf90600160c01b900462ffffff16612c04565b6134dd90620d89e7196148bd565b6134e7919061473a565b905060006135078360050160189054906101000a900462ffffff16612c04565b600584015461352190600160c01b900462ffffff16612c04565b61352e620d89e7196148f7565b61353891906148bd565b613542919061473a565b600a546040805161016081018083528754630dfe168160e01b90915291519394506000938493849384936001600160a01b0392831693638831645693919283921690630dfe168190610164808501916020918187030181865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d19190614786565b6001600160a01b031681526020018a60000160009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136589190614786565b6001600160a01b031681526020018a60050160189054906101000a900462ffffff1662ffffff1681526020018960020b81526020018860020b81526020018e81526020018d81526020018c81526020018b8152602001306001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016136dd9190614bc4565b6080604051808303816000875af11580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137209190614c88565b9350935093509350600084116137785760405162461bcd60e51b815260206004820152600c60248201527f7a65726f20746f6b656e496400000000000000000000000000000000000000006044820152606401610a35565b6004870184905586546040517e80a7e05c1e726da26ef60dc270a12c37b0bc54fc6adbc18d22f991976cf332916137fc918f916001600160a01b03169088908890889088906001600160a01b03968716815294909516602085015260408401929092526001600160801b03166060830152608082015260a081019190915260c00190565b60405180910390a1505050505050505050505050565b6001600160a01b0385166000908152600c60205260409020600481015461387b5760405162461bcd60e51b815260206004820152601460248201527f4974206973206e6f74206d696e746564207965740000000000000000000000006044820152606401610a35565b600a546040805160c08101825260048481015482526020820189815282840189815260608401898152608085018981524260a08701908152965163219f5d1760e01b815295519486019490945291516024850152516044840152516064830152516084820152905160a4820152600091829182916001600160a01b03169063219f5d179060c4016060604051808303816000875af1158015613921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139459190614cc6565b6004870154604080516001600160801b0386168152602081018590529081018390529396509194509250907e242840c59a1b38c7f01b50c3ba18ebd1a8f5b28cfc8b9fb894c4ea46696ba49060600160405180910390a2505050505050505050565b6000806139b386613c63565b90506001600160801b036001600160a01b03821611613a395760006139e16001600160a01b0383168061487c565b9050836001600160a01b0316856001600160a01b031610613a1957613a14600160c01b876001600160801b031683614083565b613a31565b613a3181876001600160801b0316600160c01b614083565b925050613aac565b6000613a586001600160a01b0383168068010000000000000000614083565b9050836001600160a01b0316856001600160a01b031610613a9057613a8b600160801b876001600160801b031683614083565b613aa8565b613aa881876001600160801b0316600160801b614083565b9250505b50949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b1790529151600092839290881691613b2e9190614d21565b6000604051808303816000865af19150503d8060008114613b6b576040519150601f19603f3d011682016040523d82523d6000602084013e613b70565b606091505b5091509150818015613b9a575080511580613b9a575080806020019051810190613b9a9190614ba9565b613be65760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610a35565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610fe157613c218161414b565b613c2c83602061415d565b604051602001613c3d929190614d3d565b60408051601f198184030181529082905262461bcd60e51b8252610a3591600401614dbe565b60008060008360020b12613c7a578260020b613c87565b8260020b613c8790614df1565b9050613c96620d89e7196148f7565b60020b811115613ccc5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610a35565b600081600116600003613ce357600160801b613cf5565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613d34576080613d2f826ffff97272373d413259a46990580e213a61487c565b901c90505b6004821615613d5e576080613d59826ffff2e50f5f656932ef12357cf3c7fdcc61487c565b901c90505b6008821615613d88576080613d83826fffe5caca7e10e4e61c3624eaa0941cd061487c565b901c90505b6010821615613db2576080613dad826fffcb9843d60f6159c9db58835c92664461487c565b901c90505b6020821615613ddc576080613dd7826fff973b41fa98c081472e6896dfb254c061487c565b901c90505b6040821615613e06576080613e01826fff2ea16466c96a3843ec78b326b5286161487c565b901c90505b6080821615613e30576080613e2b826ffe5dee046a99a2a811c461f1969c305361487c565b901c90505b610100821615613e5b576080613e56826ffcbe86c7900a88aedcffc83b479aa3a461487c565b901c90505b610200821615613e86576080613e81826ff987a7253ac413176f2b074cf7815e5461487c565b901c90505b610400821615613eb1576080613eac826ff3392b0822b70005940c7a398e4b70f361487c565b901c90505b610800821615613edc576080613ed7826fe7159475a2c29b7443b29c7fa6e889d961487c565b901c90505b611000821615613f07576080613f02826fd097f3bdfd2022b8845ad8f792aa582561487c565b901c90505b612000821615613f32576080613f2d826fa9f746462d870fdf8a65dc1f90e061e561487c565b901c90505b614000821615613f5d576080613f58826f70d869a156d2a1b890bb3df62baf32f761487c565b901c90505b618000821615613f88576080613f83826f31be135f97d08fd981231505542fcfa661487c565b901c90505b62010000821615613fb4576080613faf826f09aa508b5b7a84e1c677de54f3e99bc961487c565b901c90505b62020000821615613fdf576080613fda826e5d6af8dedb81196699c329225ee60461487c565b901c90505b62040000821615614009576080614004826d2216e584f5fa1ea926041bedfe9861487c565b901c90505b6208000082161561403157608061402c826b048a170391f7dc42444e8fa261487c565b901c90505b60008460020b131561404c57614049816000196148a9565b90505b61405b64010000000082614e0d565b1561406757600161406a565b60005b61407b9060ff16602083901c614e21565b949350505050565b600080821161409157600080fd5b600080600019858709858702925082811083820303915050806000036140bc57508290049050612254565b8084116140c857600080fd5b6000848688098084039381119092039190506000856140e981600019614869565b6140f4906001614e21565b16958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050509392505050565b60606109896001600160a01b03831660145b6060600061416c83600261487c565b614177906002614e21565b67ffffffffffffffff81111561418f5761418f6144d0565b6040519080825280601f01601f1916602001820160405280156141b9576020820181803683370190505b509050600360fc1b816000815181106141d4576141d461493e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106142035761420361493e565b60200101906001600160f81b031916908160001a905350600061422784600261487c565b614232906001614e21565b90505b60018111156142b7577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106142735761427361493e565b1a60f81b8282815181106142895761428961493e565b60200101906001600160f81b031916908160001a90535060049490941c936142b081614e34565b9050614235565b5083156122545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a35565b60006020828403121561431857600080fd5b81356001600160e01b03198116811461225457600080fd5b8060020b8114610a6857600080fd5b6000806040838503121561435257600080fd5b823561435d81614330565b9150602083013561436d81614330565b809150509250929050565b6001600160a01b0381168114610a6857600080fd5b60006020828403121561439f57600080fd5b813561225481614378565b600080604083850312156143bd57600080fd5b82356143c881614378565b9150602083013561436d81614378565b6000602082840312156143ea57600080fd5b5035919050565b60006020828403121561440357600080fd5b813561225481614330565b6000806040838503121561442157600080fd5b82359150602083013561436d81614378565b6000806040838503121561444657600080fd5b823561445181614378565b946020939093013593505050565b6001600160801b0381168114610a6857600080fd5b6000806000806080858703121561448a57600080fd5b843561449581614330565b935060208501356144a58161445f565b925060408501356144b581614378565b915060608501356144c581614378565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561450f5761450f6144d0565b604052919050565b803563ffffffff81168114612c5957600080fd5b61ffff81168114610a6857600080fd5b60008082840360e081121561454f57600080fd5b833561455a81614378565b925060c0601f198201121561456e57600080fd5b5060405160c0810181811067ffffffffffffffff82111715614592576145926144d0565b8060405250602084013581526040840135602082015260608401356040820152608084013560608201526145c860a08501614517565b608082015260c08401356145db8161452b565b60a0820152919491935090915050565b600080604083850312156145fe57600080fd5b823561460981614378565b915061461760208401614517565b90509250929050565b60006020828403121561463257600080fd5b61225482614517565b6000806000806080858703121561465157600080fd5b843561465c81614378565b935060208501356144a581614378565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516146d460c08401826001600160a01b03169052565b5060e08301516146eb60e084018262ffffff169052565b5061010083810151801515848301526109e3565b60006020828403121561471157600080fd5b813562ffffff8116811461225457600080fd5b634e487b7160e01b600052601160045260246000fd5b60008260020b8260020b028060020b915080821461475a5761475a614724565b5092915050565b600282810b9082900b03627fffff198112627fffff8213171561098957610989614724565b60006020828403121561479857600080fd5b815161225481614378565b80518015158114612c5957600080fd5b600080600080600080600060e0888a0312156147ce57600080fd5b87516147d981614378565b60208901519097506147ea81614330565b60408901519096506147fb8161452b565b606089015190955061480c8161452b565b608089015190945061481d8161452b565b60a089015190935060ff8116811461483457600080fd5b915061484260c089016147a3565b905092959891949750929550565b60006020828403121561486257600080fd5b5051919050565b8181038181111561098957610989614724565b808202811582820484141761098957610989614724565b634e487b7160e01b600052601260045260246000fd5b6000826148b8576148b8614893565b500490565b60008160020b8360020b806148d4576148d4614893565b627fffff198214600019821416156148ee576148ee614724565b90059392505050565b60008160020b627fffff19810361491057614910614724565b60000392915050565b600281810b9083900b01627fffff8113627fffff198212171561098957610989614724565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561499257835163ffffffff1683529284019291840191600101614970565b50909695505050505050565b600067ffffffffffffffff8211156149b8576149b86144d0565b5060051b60200190565b600082601f8301126149d357600080fd5b815160206149e86149e38361499e565b6144e6565b82815260059290921b84018101918181019086841115614a0757600080fd5b8286015b84811015614a2b578051614a1e81614378565b8352918301918301614a0b565b509695505050505050565b60008060408385031215614a4957600080fd5b825167ffffffffffffffff80821115614a6157600080fd5b818501915085601f830112614a7557600080fd5b81516020614a856149e38361499e565b82815260059290921b84018101918181019089841115614aa457600080fd5b948201945b83861015614ad25785518060060b8114614ac35760008081fd5b82529482019490820190614aa9565b91880151919650909350505080821115614aeb57600080fd5b50614af8858286016149c2565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff8213171561098957610989614724565b60008160060b8360060b80614b4657614b46614893565b667fffffffffffff198214600019821416156148ee576148ee614724565b60008260060b80614b7757614b77614893565b808360060b0791505092915050565b60008160020b627fffff198103614b9f57614b9f614724565b6000190192915050565b600060208284031215614bbb57600080fd5b612254826147a3565b81516001600160a01b0316815261016081016020830151614bf060208401826001600160a01b03169052565b506040830151614c07604084018262ffffff169052565b506060830151614c1c606084018260020b9052565b506080830151614c31608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614c77828501826001600160a01b03169052565b505061014092830151919092015290565b60008060008060808587031215614c9e57600080fd5b845193506020850151614cb08161445f565b6040860151606090960151949790965092505050565b600080600060608486031215614cdb57600080fd5b8351614ce68161445f565b602085015160409095015190969495509392505050565b60005b83811015614d18578181015183820152602001614d00565b50506000910152565b60008251614d33818460208701614cfd565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614d75816017850160208801614cfd565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614db2816028840160208801614cfd565b01602801949350505050565b6020815260008251806020840152614ddd816040850160208701614cfd565b601f01601f19169190910160400192915050565b6000600160ff1b8201614e0657614e06614724565b5060000390565b600082614e1c57614e1c614893565b500690565b8082018082111561098957610989614724565b600081614e4357614e43614724565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "InitialMintedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": false, + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": false, + "internalType": "uint256", + "name": "initialTosPrice", + "type": "uint256" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": false, + "internalType": "uint256", + "name": "initialTokenPrice", + "type": "uint256" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": false, + "internalType": "uint32", + "name": "startTime", + "type": "uint32" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": false, + "internalType": "uint160", + "name": "initSqrtPriceX96", + "type": "uint160" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } - } - }, - "version": 1 + { + "indexed": false, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "InitializedInitialLiquidityVault", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 8669, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 8673, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 8677, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 8681, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 5165, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "SetCreatedPool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 5167, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" }, { - "astId": 5171, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "indexed": false, + "internalType": "uint160", + "name": "inSqrtPriceX96", + "type": "uint160" + } + ], + "name": "SetPoolInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 6782, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "ton", - "offset": 0, - "slot": "7", - "type": "t_address" + "indexed": false, + "internalType": "uint32", + "name": "startTime", + "type": "uint32" + } + ], + "name": "SetStartTime", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_factory", + "type": "address" }, { - "astId": 6784, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "tos", - "offset": 0, - "slot": "8", - "type": "t_address" + "indexed": false, + "internalType": "address", + "name": "_npm", + "type": "address" }, { - "astId": 6786, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "uniswapV3Factory", - "offset": 0, - "slot": "9", - "type": "t_address" + "indexed": false, + "internalType": "address", + "name": "_ton", + "type": "address" }, { - "astId": 6788, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "nonfungiblePositionManager", - "offset": 0, - "slot": "10", - "type": "t_address" + "indexed": false, + "internalType": "address", + "name": "_tos", + "type": "address" + } + ], + "name": "SetUniswapInfo", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 6790, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "TWAP_PERIOD", - "offset": 20, - "slot": "10", - "type": "t_uint32" + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TWAP_PERIOD", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "_tick", + "type": "int24" }, { - "astId": 6792, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "acceptTickChangeInterval", - "offset": 24, - "slot": "10", - "type": "t_int24" + "internalType": "int24", + "name": "_tickSpacings", + "type": "int24" + } + ], + "name": "acceptMaxTick", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "_tick", + "type": "int24" }, { - "astId": 6794, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "acceptSlippagePrice", - "offset": 27, - "slot": "10", - "type": "t_int24" + "internalType": "int24", + "name": "_tickSpacings", + "type": "int24" + } + ], + "name": "acceptMinTick", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptSlippagePrice", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptTickChangeInterval", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickSpacings", + "type": "int24" + } + ], + "name": "getMaxTick", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickSpacings", + "type": "int24" + } + ], + "name": "getMiniTick", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amountIn", + "type": "uint128" }, { - "astId": 6796, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "tickSpacings", - "offset": 0, - "slot": "11", - "type": "t_int24" + "internalType": "address", + "name": "baseToken", + "type": "address" }, { - "astId": 6801, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "poolInfo", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_address,t_struct(PoolInfo)7970_storage)" + "internalType": "address", + "name": "quoteToken", + "type": "address" + } + ], + "name": "getQuoteAtTick", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "getTickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "tickSpacings", + "type": "int24" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "components": [ + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initSqrtPrice", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "startTime", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "fee", + "type": "uint16" + } + ], + "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", + "name": "params", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_int24": { - "encoding": "inplace", - "label": "int24", - "numberOfBytes": "3" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "tosAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonfungiblePositionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_address,t_struct(PoolInfo)7970_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibInitialLiquidityVault.PoolInfo)", - "numberOfBytes": "32", - "value": "t_struct(PoolInfo)7970_storage" + { + "internalType": "uint256", + "name": "initialTosPrice", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "initialTokenPrice", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "lpToken", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "startTime", + "type": "uint32" }, - "t_struct(PoolInfo)7970_storage": { - "encoding": "inplace", - "label": "struct LibInitialLiquidityVault.PoolInfo", - "members": [ - { - "astId": 7953, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "pool", - "offset": 0, - "slot": "0", - "type": "t_address" - }, + { + "internalType": "uint160", + "name": "initSqrtPriceX96", + "type": "uint160" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "bool", + "name": "boolReadyToCreatePool", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "_value", + "type": "int24" + } + ], + "name": "setAcceptSlippagePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "_interval", + "type": "int24" + } + ], + "name": "setAcceptTickChangeInterval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "setCreatePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_startTime", + "type": "uint32" + } + ], + "name": "setStartTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "value", + "type": "uint32" + } + ], + "name": "setTWAP_PERIOD", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolfactory", + "type": "address" + }, + { + "internalType": "address", + "name": "_npm", + "type": "address" + }, + { + "internalType": "address", + "name": "_ton", + "type": "address" + }, + { + "internalType": "address", + "name": "_tos", + "type": "address" + } + ], + "name": "setUniswapInfo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacings", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ton", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 7955, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "address", + "name": "pool", + "type": "address" }, { - "astId": 7957, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "initialTosPrice", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 7959, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "initialTokenPrice", - "offset": 0, - "slot": "3", - "type": "t_uint256" + "internalType": "uint256", + "name": "initialTosPrice", + "type": "uint256" }, { - "astId": 7961, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "lpToken", - "offset": 0, - "slot": "4", - "type": "t_uint256" + "internalType": "uint256", + "name": "initialTokenPrice", + "type": "uint256" }, { - "astId": 7963, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "startTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" + "internalType": "uint256", + "name": "lpToken", + "type": "uint256" }, { - "astId": 7965, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "initSqrtPriceX96", - "offset": 4, - "slot": "5", - "type": "t_uint160" + "internalType": "uint32", + "name": "startTime", + "type": "uint32" }, { - "astId": 7967, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "fee", - "offset": 24, - "slot": "5", - "type": "t_uint24" + "internalType": "uint160", + "name": "initSqrtPriceX96", + "type": "uint160" }, { - "astId": 7969, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "boolReadyToCreatePool", - "offset": 27, - "slot": "5", - "type": "t_bool" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" + "internalType": "uint24", + "name": "fee", + "type": "uint24" }, { - "astId": 18, - "contract": "contracts/L2/vaults/L2InitialLiquidityVault.sol:L2InitialLiquidityVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" + "internalType": "bool", + "name": "boolReadyToCreatePool", + "type": "bool" } ], - "numberOfBytes": "64" - }, - "t_uint160": { - "encoding": "inplace", - "label": "uint160", - "numberOfBytes": "20" - }, - "t_uint24": { - "encoding": "inplace", - "label": "uint24", - "numberOfBytes": "3" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + "internalType": "struct LibInitialLiquidityVault.PoolInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2InitialLiquidityVaultProxy.json b/contracts/data/tonstarter/abi/L2InitialLiquidityVaultProxy.json index 7829875..35a55f0 100644 --- a/contracts/data/tonstarter/abi/L2InitialLiquidityVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2InitialLiquidityVaultProxy.json @@ -1,1280 +1,769 @@ -{ - "address": "0xCaa2F1Dd477703B5531f26e3CD455340dF0B9aaf", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TWAP_PERIOD", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptSlippagePrice", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptTickChangeInterval", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonfungiblePositionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "poolInfo", - "outputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lpToken", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint160", - "name": "initSqrtPriceX96", - "type": "uint160" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - }, - { - "internalType": "bool", - "name": "boolReadyToCreatePool", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tickSpacings", - "outputs": [ - { - "internalType": "int24", - "name": "", - "type": "int24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ton", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x5c33faac6f5a1a128cc9e4f8ee1005ac509a7987b33b3a6fddf8603c9a53d640", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xCaa2F1Dd477703B5531f26e3CD455340dF0B9aaf", - "transactionIndex": 0, - "gasUsed": "1636130", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000020000400000088000000800000000000000000000000008000000000400000000008000000000000000000000000000040000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0da09fe0407b8d26e338501ffa719797d01a4bf63b7aae11086c39e996617d05", - "transactionHash": "0x5c33faac6f5a1a128cc9e4f8ee1005ac509a7987b33b3a6fddf8603c9a53d640", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 22631, - "transactionHash": "0x5c33faac6f5a1a128cc9e4f8ee1005ac509a7987b33b3a6fddf8603c9a53d640", - "address": "0xCaa2F1Dd477703B5531f26e3CD455340dF0B9aaf", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x0da09fe0407b8d26e338501ffa719797d01a4bf63b7aae11086c39e996617d05" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 22631, - "transactionHash": "0x5c33faac6f5a1a128cc9e4f8ee1005ac509a7987b33b3a6fddf8603c9a53d640", - "address": "0xCaa2F1Dd477703B5531f26e3CD455340dF0B9aaf", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x0da09fe0407b8d26e338501ffa719797d01a4bf63b7aae11086c39e996617d05" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 22631, - "cumulativeGasUsed": "1636130", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "1ed1c592115e49eafa413f74ea8d056d", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TWAP_PERIOD\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptSlippagePrice\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTickChangeInterval\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonfungiblePositionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lpToken\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint160\",\"name\":\"initSqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"boolReadyToCreatePool\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacings\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ton\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tos\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV3Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol\":\"L2InitialLiquidityVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\nimport \\\"./L2InitialLiquidityVaultStorage.sol\\\";\\n\\ncontract L2InitialLiquidityVaultProxy is Proxy, L2CustomVaultBaseStorage, L2InitialLiquidityVaultStorage\\n{\\n\\n}\\n\",\"keccak256\":\"0xc71f6aeaa42a59c55a42c0e7059b09b42f1f1eaeec701d1933657fb10db76a6a\",\"license\":\"Unlicense\"},\"contracts/L2/vaults/L2InitialLiquidityVaultStorage.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibInitialLiquidityVault } from \\\"../../libraries/LibInitialLiquidityVault.sol\\\";\\n\\ncontract L2InitialLiquidityVaultStorage {\\n uint256 constant INITIAL_PRICE_DIV = 1e18;\\n\\n address public ton; // ton token\\n address public tos; // tos token\\n\\n address public uniswapV3Factory;\\n address public nonfungiblePositionManager;\\n uint32 public TWAP_PERIOD;\\n // int24 public tickIntervalMinimum;\\n int24 public acceptTickChangeInterval;\\n int24 public acceptSlippagePrice;\\n int24 public tickSpacings ;\\n\\n // l2token - PoolInfo\\n mapping(address => LibInitialLiquidityVault.PoolInfo) public poolInfo;\\n\\n}\\n\",\"keccak256\":\"0xb24af5edd294a876d7d1f76592989fc681a7b2cc5660e003f4c766b87c797529\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibInitialLiquidityVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibInitialLiquidityVault\\n */\\nlibrary LibInitialLiquidityVault {\\n\\n struct PoolInfo {\\n address pool;\\n uint256 totalAllocatedAmount;\\n uint256 initialTosPrice;\\n uint256 initialTokenPrice;\\n uint256 lpToken;\\n uint32 startTime;\\n uint160 initSqrtPriceX96;\\n uint24 fee;\\n bool boolReadyToCreatePool;\\n }\\n}\",\"keccak256\":\"0x18b8629b535e46d7ba9c91e96134107df92ccd8d228a49026bfcf662765bd9b4\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001cb1833981519152806200005b565b6200005560008051602062001cb183398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611b47806200016a6000396000f3fe6080604052600436106102535760003560e01c806370480275116101385780638d4fdb40116100b0578063a217fddf1161007f578063b911135f11610064578063b911135f146108bc578063cc48b947146108f2578063d547741f14610912576102a5565b8063a217fddf14610887578063b44a27221461089c576102a5565b80638d4fdb401461072257806391d14854146107425780639a7b5f11146107885780639cbbbe861461086d576102a5565b80637cb00d25116101075780637fc46ba8116100ec5780637fc46ba8146106ac57806389f395de146106e25780638b8f4a6514610702576102a5565b80637cb00d251461066c5780637cd5f6631461068c576102a5565b806370480275146105ae57806375829def146105ce57806375b238fc146105ee5780637ca2518414610622576102a5565b806345a41148116101cb578063550d01a31161019a5780635c60da1b1161017f5780635c60da1b1461052e5780635cc797d81461057457806363a8fd8914610594576102a5565b8063550d01a3146104de5780635b5491821461050e576102a5565b806345a411481461042a5780634a5df50f1461044b57806350d2a2761461046b57806352351e85146104b9576102a5565b806324d7806c1161022257806335d20f8a1161020757806335d20f8a146103b657806336568abe146103ea5780633659cfe61461040a576102a5565b806324d7806c146103765780632f2ff15d14610396576102a5565b806301ffc9a7146102af5780631785f53c146102e45780632298524614610304578063248a9ca314610346576102a5565b366102a55760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6102ad610932565b005b3480156102bb57600080fd5b506102cf6102ca3660046117f9565b6109db565b60405190151581526020015b60405180910390f35b3480156102f057600080fd5b506102ad6102ff36600461183a565b610a12565b34801561031057600080fd5b506103387ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102db565b34801561035257600080fd5b50610338610361366004611855565b60009081526004602052604090206001015490565b34801561038257600080fd5b506102cf61039136600461183a565b610a8d565b3480156103a257600080fd5b506102ad6103b136600461186e565b610acd565b3480156103c257600080fd5b50600a546103d790600160d81b900460020b81565b60405160029190910b81526020016102db565b3480156103f657600080fd5b506102ad61040536600461186e565b610af2565b34801561041657600080fd5b506102ad61042536600461183a565b610b7e565b34801561043657600080fd5b50600a546103d790600160c01b900460020b81565b34801561045757600080fd5b506102ad61046636600461189a565b610cd7565b34801561047757600080fd5b506104a16104863660046117f9565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102db565b3480156104c557600080fd5b506005546104a19061010090046001600160a01b031681565b3480156104ea57600080fd5b506102cf6104f936600461183a565b60026020526000908152604090205460ff1681565b34801561051a57600080fd5b506009546104a1906001600160a01b031681565b34801561053a57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166104a1565b34801561058057600080fd5b506102ad61058f36600461192e565b610f84565b3480156105a057600080fd5b506000546102cf9060ff1681565b3480156105ba57600080fd5b506102ad6105c936600461183a565b610fdc565b3480156105da57600080fd5b506102ad6105e936600461183a565b611054565b3480156105fa57600080fd5b506103387fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561062e57600080fd5b50600a546106579074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102db565b34801561067857600080fd5b506102ad610687366004611958565b6111a4565b34801561069857600080fd5b506102ad6106a7366004611973565b611205565b3480156106b857600080fd5b506104a16106c736600461183a565b6006602052600090815260409020546001600160a01b031681565b3480156106ee57600080fd5b506008546104a1906001600160a01b031681565b34801561070e57600080fd5b506104a161071d366004611855565b61125e565b34801561072e57600080fd5b506104a161073d3660046117f9565b61127b565b34801561074e57600080fd5b506102cf61075d36600461186e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561079457600080fd5b5061080d6107a336600461183a565b600c602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593949293919263ffffffff821691640100000000810490911690600160c01b810462ffffff1690600160d81b900460ff1689565b604080516001600160a01b039a8b16815260208101999099528801969096526060870194909452608086019290925263ffffffff1660a085015290931660c083015262ffffff90921660e0820152901515610100820152610120016102db565b34801561087957600080fd5b50600b546103d79060020b81565b34801561089357600080fd5b50610338600081565b3480156108a857600080fd5b50600a546104a1906001600160a01b031681565b3480156108c857600080fd5b506104a16108d7366004611855565b6001602052600090815260409020546001600160a01b031681565b3480156108fe57600080fd5b506007546104a1906001600160a01b031681565b34801561091e57600080fd5b506102ad61092d36600461186e565b611377565b60006109496000356001600160e01b03191661127b565b90506001600160a01b03811615801590610966575060005460ff16155b6109b25760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161029c565b3660008037600080366000845af43d6000803e8080156109d1573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610a0c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610a1b33610a8d565b610a605760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610af2565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610a0c565b600082815260046020526040902060010154610ae88161139c565b6109d683836113a6565b6001600160a01b0381163314610b705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161029c565b610b7a8282611448565b5050565b610b8733610a8d565b610bcc5760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6001600160a01b038116610c225760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161029c565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610c935760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161029c565b610ca081600060016114cb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610ce033610a8d565b610d255760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b81610d725760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161029c565b6001600160a01b03811660009081526002602052604090205460ff16610dda5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161029c565b60005b82811015610f7e57816001600160a01b031660036000868685818110610e0557610e056119a6565b9050602002016020810190610e1a91906117f9565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161029c565b8160036000868685818110610ea257610ea26119a6565b9050602002016020810190610eb791906117f9565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610f0c57610f0c6119a6565b9050602002016020810190610f2191906117f9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610f76816119d2565b915050610ddd565b50505050565b610f8d33610a8d565b610fd25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610b7a8282611563565b610fe533610a8d565b61102a5760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610acd565b61105d33610a8d565b6110a25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6001600160a01b0381166110f85760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161029c565b6001600160a01b03811633036111505760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161029c565b61117a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610acd565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610af2565b6111ad33610a8d565b6111f25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6000805460ff1916911515919091179055565b61120e33610a8d565b6112535760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6109d68383836114cb565b6000818152600160205260408120546001600160a01b0316610a0c565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112db5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561133957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546113928161139c565b6109d68383611448565b610a8a81336115c2565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610b7a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114043390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610b7a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6115225760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161029c565b801561155d576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6109d683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610b7a576115f581611637565b611600836020611649565b604051602001611611929190611a0f565b60408051601f198184030181529082905262461bcd60e51b825261029c91600401611a90565b6060610a0c6001600160a01b03831660145b60606000611658836002611ac3565b611663906002611ada565b67ffffffffffffffff81111561167b5761167b611aed565b6040519080825280601f01601f1916602001820160405280156116a5576020820181803683370190505b509050600360fc1b816000815181106116c0576116c06119a6565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106116ef576116ef6119a6565b60200101906001600160f81b031916908160001a9053506000611713846002611ac3565b61171e906001611ada565b90505b60018111156117a3577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061175f5761175f6119a6565b1a60f81b828281518110611775576117756119a6565b60200101906001600160f81b031916908160001a90535060049490941c9361179c81611b03565b9050611721565b5083156117f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161029c565b9392505050565b60006020828403121561180b57600080fd5b81356001600160e01b0319811681146117f257600080fd5b80356001600160a01b038116811461137257600080fd5b60006020828403121561184c57600080fd5b6117f282611823565b60006020828403121561186757600080fd5b5035919050565b6000806040838503121561188157600080fd5b8235915061189160208401611823565b90509250929050565b6000806000604084860312156118af57600080fd5b833567ffffffffffffffff808211156118c757600080fd5b818601915086601f8301126118db57600080fd5b8135818111156118ea57600080fd5b8760208260051b85010111156118ff57600080fd5b6020928301955093506119159186019050611823565b90509250925092565b8035801515811461137257600080fd5b6000806040838503121561194157600080fd5b61194a83611823565b91506118916020840161191e565b60006020828403121561196a57600080fd5b6117f28261191e565b60008060006060848603121561198857600080fd5b61199184611823565b9250602084013591506119156040850161191e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016119e4576119e46119bc565b5060010190565b60005b83811015611a065781810151838201526020016119ee565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611a478160178501602088016119eb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611a848160288401602088016119eb565b01602801949350505050565b6020815260008251806020840152611aaf8160408501602087016119eb565b601f01601f19169190910160400192915050565b8082028115828204841417610a0c57610a0c6119bc565b80820180821115610a0c57610a0c6119bc565b634e487b7160e01b600052604160045260246000fd5b600081611b1257611b126119bc565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106102535760003560e01c806370480275116101385780638d4fdb40116100b0578063a217fddf1161007f578063b911135f11610064578063b911135f146108bc578063cc48b947146108f2578063d547741f14610912576102a5565b8063a217fddf14610887578063b44a27221461089c576102a5565b80638d4fdb401461072257806391d14854146107425780639a7b5f11146107885780639cbbbe861461086d576102a5565b80637cb00d25116101075780637fc46ba8116100ec5780637fc46ba8146106ac57806389f395de146106e25780638b8f4a6514610702576102a5565b80637cb00d251461066c5780637cd5f6631461068c576102a5565b806370480275146105ae57806375829def146105ce57806375b238fc146105ee5780637ca2518414610622576102a5565b806345a41148116101cb578063550d01a31161019a5780635c60da1b1161017f5780635c60da1b1461052e5780635cc797d81461057457806363a8fd8914610594576102a5565b8063550d01a3146104de5780635b5491821461050e576102a5565b806345a411481461042a5780634a5df50f1461044b57806350d2a2761461046b57806352351e85146104b9576102a5565b806324d7806c1161022257806335d20f8a1161020757806335d20f8a146103b657806336568abe146103ea5780633659cfe61461040a576102a5565b806324d7806c146103765780632f2ff15d14610396576102a5565b806301ffc9a7146102af5780631785f53c146102e45780632298524614610304578063248a9ca314610346576102a5565b366102a55760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6102ad610932565b005b3480156102bb57600080fd5b506102cf6102ca3660046117f9565b6109db565b60405190151581526020015b60405180910390f35b3480156102f057600080fd5b506102ad6102ff36600461183a565b610a12565b34801561031057600080fd5b506103387ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102db565b34801561035257600080fd5b50610338610361366004611855565b60009081526004602052604090206001015490565b34801561038257600080fd5b506102cf61039136600461183a565b610a8d565b3480156103a257600080fd5b506102ad6103b136600461186e565b610acd565b3480156103c257600080fd5b50600a546103d790600160d81b900460020b81565b60405160029190910b81526020016102db565b3480156103f657600080fd5b506102ad61040536600461186e565b610af2565b34801561041657600080fd5b506102ad61042536600461183a565b610b7e565b34801561043657600080fd5b50600a546103d790600160c01b900460020b81565b34801561045757600080fd5b506102ad61046636600461189a565b610cd7565b34801561047757600080fd5b506104a16104863660046117f9565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102db565b3480156104c557600080fd5b506005546104a19061010090046001600160a01b031681565b3480156104ea57600080fd5b506102cf6104f936600461183a565b60026020526000908152604090205460ff1681565b34801561051a57600080fd5b506009546104a1906001600160a01b031681565b34801561053a57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166104a1565b34801561058057600080fd5b506102ad61058f36600461192e565b610f84565b3480156105a057600080fd5b506000546102cf9060ff1681565b3480156105ba57600080fd5b506102ad6105c936600461183a565b610fdc565b3480156105da57600080fd5b506102ad6105e936600461183a565b611054565b3480156105fa57600080fd5b506103387fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561062e57600080fd5b50600a546106579074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102db565b34801561067857600080fd5b506102ad610687366004611958565b6111a4565b34801561069857600080fd5b506102ad6106a7366004611973565b611205565b3480156106b857600080fd5b506104a16106c736600461183a565b6006602052600090815260409020546001600160a01b031681565b3480156106ee57600080fd5b506008546104a1906001600160a01b031681565b34801561070e57600080fd5b506104a161071d366004611855565b61125e565b34801561072e57600080fd5b506104a161073d3660046117f9565b61127b565b34801561074e57600080fd5b506102cf61075d36600461186e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561079457600080fd5b5061080d6107a336600461183a565b600c602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593949293919263ffffffff821691640100000000810490911690600160c01b810462ffffff1690600160d81b900460ff1689565b604080516001600160a01b039a8b16815260208101999099528801969096526060870194909452608086019290925263ffffffff1660a085015290931660c083015262ffffff90921660e0820152901515610100820152610120016102db565b34801561087957600080fd5b50600b546103d79060020b81565b34801561089357600080fd5b50610338600081565b3480156108a857600080fd5b50600a546104a1906001600160a01b031681565b3480156108c857600080fd5b506104a16108d7366004611855565b6001602052600090815260409020546001600160a01b031681565b3480156108fe57600080fd5b506007546104a1906001600160a01b031681565b34801561091e57600080fd5b506102ad61092d36600461186e565b611377565b60006109496000356001600160e01b03191661127b565b90506001600160a01b03811615801590610966575060005460ff16155b6109b25760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161029c565b3660008037600080366000845af43d6000803e8080156109d1573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610a0c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610a1b33610a8d565b610a605760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610af2565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610a0c565b600082815260046020526040902060010154610ae88161139c565b6109d683836113a6565b6001600160a01b0381163314610b705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161029c565b610b7a8282611448565b5050565b610b8733610a8d565b610bcc5760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6001600160a01b038116610c225760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f00000000000000000000000000000000000000604482015260640161029c565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610c935760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161029c565b610ca081600060016114cb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610ce033610a8d565b610d255760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b81610d725760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161029c565b6001600160a01b03811660009081526002602052604090205460ff16610dda5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c6976650000000000000000604482015260640161029c565b60005b82811015610f7e57816001600160a01b031660036000868685818110610e0557610e056119a6565b9050602002016020810190610e1a91906117f9565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161029c565b8160036000868685818110610ea257610ea26119a6565b9050602002016020810190610eb791906117f9565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610f0c57610f0c6119a6565b9050602002016020810190610f2191906117f9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610f76816119d2565b915050610ddd565b50505050565b610f8d33610a8d565b610fd25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610b7a8282611563565b610fe533610a8d565b61102a5760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610acd565b61105d33610a8d565b6110a25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6001600160a01b0381166110f85760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640161029c565b6001600160a01b03811633036111505760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640161029c565b61117a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610acd565b610a8a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610af2565b6111ad33610a8d565b6111f25760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6000805460ff1916911515919091179055565b61120e33610a8d565b6112535760405162461bcd60e51b81526020600482015260226024820152600080516020611b1b83398151915260448201526134b760f11b606482015260840161029c565b6109d68383836114cb565b6000818152600160205260408120546001600160a01b0316610a0c565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112db5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561133957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546113928161139c565b6109d68383611448565b610a8a81336115c2565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610b7a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114043390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610b7a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6115225760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e747261637420616464726573730000000000604482015260640161029c565b801561155d576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6109d683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610b7a576115f581611637565b611600836020611649565b604051602001611611929190611a0f565b60408051601f198184030181529082905262461bcd60e51b825261029c91600401611a90565b6060610a0c6001600160a01b03831660145b60606000611658836002611ac3565b611663906002611ada565b67ffffffffffffffff81111561167b5761167b611aed565b6040519080825280601f01601f1916602001820160405280156116a5576020820181803683370190505b509050600360fc1b816000815181106116c0576116c06119a6565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106116ef576116ef6119a6565b60200101906001600160f81b031916908160001a9053506000611713846002611ac3565b61171e906001611ada565b90505b60018111156117a3577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061175f5761175f6119a6565b1a60f81b828281518110611775576117756119a6565b60200101906001600160f81b031916908160001a90535060049490941c9361179c81611b03565b9050611721565b5083156117f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161029c565b9392505050565b60006020828403121561180b57600080fd5b81356001600160e01b0319811681146117f257600080fd5b80356001600160a01b038116811461137257600080fd5b60006020828403121561184c57600080fd5b6117f282611823565b60006020828403121561186757600080fd5b5035919050565b6000806040838503121561188157600080fd5b8235915061189160208401611823565b90509250929050565b6000806000604084860312156118af57600080fd5b833567ffffffffffffffff808211156118c757600080fd5b818601915086601f8301126118db57600080fd5b8135818111156118ea57600080fd5b8760208260051b85010111156118ff57600080fd5b6020928301955093506119159186019050611823565b90509250925092565b8035801515811461137257600080fd5b6000806040838503121561194157600080fd5b61194a83611823565b91506118916020840161191e565b60006020828403121561196a57600080fd5b6117f28261191e565b60008060006060848603121561198857600080fd5b61199184611823565b9250602084013591506119156040850161191e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016119e4576119e46119bc565b5060010190565b60005b83811015611a065781810151838201526020016119ee565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611a478160178501602088016119eb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611a848160288401602088016119eb565b01602801949350505050565b6020815260008251806020840152611aaf8160408501602087016119eb565b601f01601f19169190910160400192915050565b8082028115828204841417610a0c57610a0c6119bc565b80820180821115610a0c57610a0c6119bc565b634e487b7160e01b600052604160045260246000fd5b600081611b1257611b126119bc565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 7441, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 7445, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 7449, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 7453, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 3479, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 3481, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 3485, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ { - "astId": 5109, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "ton", - "offset": 0, - "slot": "7", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TWAP_PERIOD", + "outputs": [ { - "astId": 5111, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "tos", - "offset": 0, - "slot": "8", - "type": "t_address" - }, + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptSlippagePrice", + "outputs": [ { - "astId": 5113, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "uniswapV3Factory", - "offset": 0, - "slot": "9", - "type": "t_address" - }, + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptTickChangeInterval", + "outputs": [ { - "astId": 5115, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "nonfungiblePositionManager", - "offset": 0, - "slot": "10", - "type": "t_address" - }, + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5117, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "TWAP_PERIOD", - "offset": 20, - "slot": "10", - "type": "t_uint32" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "astId": 5119, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "acceptTickChangeInterval", - "offset": 24, - "slot": "10", - "type": "t_int24" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ { - "astId": 5121, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "acceptSlippagePrice", - "offset": 27, - "slot": "10", - "type": "t_int24" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5123, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "tickSpacings", - "offset": 0, - "slot": "11", - "type": "t_int24" - }, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ { - "astId": 5128, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "poolInfo", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_address,t_struct(PoolInfo)6383_storage)" + "internalType": "address", + "name": "impl", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nonfungiblePositionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_int24": { - "encoding": "inplace", - "label": "int24", - "numberOfBytes": "3" + { + "internalType": "uint256", + "name": "initialTosPrice", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "initialTokenPrice", + "type": "uint256" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "lpToken", + "type": "uint256" }, - "t_mapping(t_address,t_struct(PoolInfo)6383_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibInitialLiquidityVault.PoolInfo)", - "numberOfBytes": "32", - "value": "t_struct(PoolInfo)6383_storage" + { + "internalType": "uint32", + "name": "startTime", + "type": "uint32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint160", + "name": "initSqrtPriceX96", + "type": "uint160" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "boolReadyToCreatePool", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_struct(PoolInfo)6383_storage": { - "encoding": "inplace", - "label": "struct LibInitialLiquidityVault.PoolInfo", - "members": [ - { - "astId": 6366, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "pool", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6368, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6370, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "initialTosPrice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6372, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "initialTokenPrice", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 6374, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "lpToken", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6376, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "startTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 6378, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "initSqrtPriceX96", - "offset": 4, - "slot": "5", - "type": "t_uint160" - }, - { - "astId": 6380, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "fee", - "offset": 24, - "slot": "5", - "type": "t_uint24" - }, - { - "astId": 6382, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "boolReadyToCreatePool", - "offset": 27, - "slot": "5", - "type": "t_bool" - } - ], - "numberOfBytes": "192" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2InitialLiquidityVaultProxy.sol:L2InitialLiquidityVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_uint160": { - "encoding": "inplace", - "label": "uint160", - "numberOfBytes": "20" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_uint24": { - "encoding": "inplace", - "label": "uint24", - "numberOfBytes": "3" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacings", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ton", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2LpRewardVault.json b/contracts/data/tonstarter/abi/L2LpRewardVault.json index a4fe830..90067d1 100644 --- a/contracts/data/tonstarter/abi/L2LpRewardVault.json +++ b/contracts/data/tonstarter/abi/L2LpRewardVault.json @@ -1,1480 +1,1055 @@ -{ - "address": "0xb161113b042e560dC01AAd5001aA95C32eE6A046", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "ChangedRecipient", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "indexed": false, - "internalType": "struct LibPool.PoolInfo", - "name": "paramPoolInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "indexed": false, - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "parmas", - "type": "tuple" - } - ], - "name": "InitializedL2LpRewardVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "availableClaimAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "changeRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "_fee", - "type": "uint24" - } - ], - "name": "computeAddress", - "outputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "getCurrentRound", - "outputs": [ - { - "internalType": "uint256", - "name": "round", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "_fee", - "type": "uint24" - } - ], - "name": "getPoolAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "internalType": "struct LibPool.PoolInfo", - "name": "paramPoolInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "poolInfo", - "outputs": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pool_init_code_hash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "recipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_hash", - "type": "bytes32" - } - ], - "name": "setPoolInitCodeHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_factory", - "type": "address" - } - ], - "name": "setUniswapV3Factory", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "internalType": "struct LibScheduleVault.VaultInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb08d6e223da960645d449d48b0de1e60b23542ef2d48bb13fbf9b2bfe6df1c5b", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xb161113b042e560dC01AAd5001aA95C32eE6A046", - "transactionIndex": 0, - "gasUsed": "2523667", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x225b5746d403f1c9c1fa11a7040798b9a597ac386cfa26962e9dc4479b29dacc", - "transactionHash": "0xb08d6e223da960645d449d48b0de1e60b23542ef2d48bb13fbf9b2bfe6df1c5b", - "logs": [], - "blockNumber": 23811, - "cumulativeGasUsed": "2523667", - "status": 1, - "byzantium": true +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "ChangedRecipient", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "8d54b7ccf656d356eaa1331bf80029c5", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"ChangedRecipient\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"indexed\":false,\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"paramPoolInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"parmas\",\"type\":\"tuple\"}],\"name\":\"InitializedL2LpRewardVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"availableClaimAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"changeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"}],\"name\":\"computeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"}],\"name\":\"getPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"paramPoolInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool_init_code_hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"setPoolInitCodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"name\":\"setUniswapV3Factory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV3Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"internalType\":\"struct LibScheduleVault.VaultInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vaults that anybody claim according to a schedule\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2LpRewardVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2LpRewardVault.sol\":\"L2LpRewardVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2LpRewardVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2LpRewardVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/LibProject.sol\\\";\\nimport \\\"../../libraries/LibPool.sol\\\";\\n\\n// import \\\"hardhat/console.sol\\\";\\n\\ninterface IUniswapV3Factory {\\n function getPool(address token0, address token1, uint24 _fee) external view returns(address);\\n}\\n\\n/**\\n * @title L2LpRewardVault\\n * @dev Vaults that anybody claim according to a schedule\\n */\\ncontract L2LpRewardVault is L2CustomVaultBase, L2LpRewardVaultStorage {\\n using SafeERC20 for IERC20;\\n\\n event InitializedL2LpRewardVault(\\n address l2Token,\\n LibPool.PoolInfo paramPoolInfo,\\n LibProject.InitalParameterScheduleVault parmas\\n );\\n event ClaimedInVault(address l2Token, address pool, address to, uint256 amount);\\n event ChangedRecipient(address _recipient);\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n function setPoolInitCodeHash(bytes32 _hash) external onlyOwner {\\n require(pool_init_code_hash != _hash, \\\"same\\\");\\n pool_init_code_hash = _hash;\\n }\\n\\n function setUniswapV3Factory(address _factory) external nonZeroAddress(_factory) onlyOwner {\\n require(uniswapV3Factory != _factory, \\\"same\\\");\\n uniswapV3Factory = _factory;\\n }\\n\\n function changeRecipient(address _recipient) external onlyOwner {\\n require(recipient != _recipient, \\\"same\\\");\\n recipient = _recipient;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function initialize(\\n address l2Token,\\n LibPool.PoolInfo memory paramPoolInfo,\\n LibProject.InitalParameterScheduleVault memory params\\n )\\n external onlyL2ProjectManagerOrVaultAdmin(l2Token)\\n {\\n\\n require(params.firstClaimTime > block.number, \\\"first claim time passed\\\");\\n require(params.totalAllocatedAmount != 0 && params.totalClaimCount != 0 && params.roundIntervalTime != 0, \\\"wrong value\\\");\\n if (params.totalClaimCount > 1) require(params.secondClaimTime > params.firstClaimTime, \\\"wrong the second claim time\\\");\\n require(params.totalAllocatedAmount > params.firstClaimAmount, \\\"wrong the first claim amount\\\");\\n\\n address pool = getPoolAddress(paramPoolInfo.token0, paramPoolInfo.token1, paramPoolInfo.fee);\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][pool];\\n require(info.totalAllocatedAmount == 0, \\\"already initialized\\\");\\n\\n LibPool.PoolInfo memory pInfo = paramPoolInfo;\\n if(pInfo.token0 > pInfo.token1) {\\n pInfo.token0 = paramPoolInfo.token1;\\n pInfo.token1 = paramPoolInfo.token0;\\n }\\n poolInfo[pool] = pInfo;\\n\\n LibScheduleVault.VaultInfo memory data = LibScheduleVault.VaultInfo({\\n claimer: params.claimer,\\n totalAllocatedAmount: params.totalAllocatedAmount,\\n totalClaimCount: params.totalClaimCount,\\n totalClaimedAmount: 0,\\n firstClaimAmount: params.firstClaimAmount,\\n firstClaimTime: params.firstClaimTime,\\n secondClaimTime: params.secondClaimTime,\\n roundInterval: params.roundIntervalTime,\\n latestClaimedRound: 0\\n });\\n vaultInfo[l2Token][pool] = data;\\n\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), params.totalAllocatedAmount);\\n\\n emit InitializedL2LpRewardVault(l2Token, paramPoolInfo, params);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n function claim(address l2Token, address pool)\\n external nonZeroAddress(l2Token) nonZeroAddress(pool)\\n {\\n require(recipient != address(0), \\\"zero recipient\\\");\\n\\n uint256 amount = _availableClaimAmount(l2Token, pool);\\n require(amount != 0, \\\"no claimable amount\\\");\\n require(amount <= IERC20(l2Token).balanceOf(address(this)), 'insufficient balance');\\n\\n vaultInfo[l2Token][pool].totalClaimedAmount += amount;\\n\\n IERC20(l2Token).safeTransfer(recipient, amount);\\n\\n emit ClaimedInVault(l2Token, pool, recipient, amount);\\n }\\n\\n\\n /* ========== VIEW ========== */\\n\\n function viewVaultInfo(address l2Token, address pool) external view returns (LibScheduleVault.VaultInfo memory){\\n\\n return vaultInfo[l2Token][pool];\\n\\n }\\n\\n function getCurrentRound(address l2Token, address pool) public view returns (uint256 round){\\n\\n return _getCurrentRound(l2Token, pool);\\n }\\n\\n function availableClaimAmount(address l2Token, address pool) public view returns (uint256 amount){\\n\\n return _availableClaimAmount(l2Token, pool);\\n }\\n\\n /* === ======= internal ========== */\\n\\n function _getCurrentRound(address l2Token, address pool) internal view returns (uint256 round){\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][pool];\\n if(info.firstClaimTime != 0 && info.firstClaimTime <= block.timestamp && block.timestamp < info.secondClaimTime) {\\n round = 1;\\n } else if(info.secondClaimTime <= block.timestamp) {\\n round = (block.timestamp - uint256(info.secondClaimTime)) / uint256(info.roundInterval) + 2;\\n }\\n if (round > info.totalClaimCount) round = info.totalClaimCount;\\n }\\n\\n function _availableClaimAmount(address l2Token, address pool) internal view returns (uint256 amount){\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][pool];\\n uint256 curRound = _getCurrentRound(l2Token, pool);\\n\\n if(info.latestClaimedRound < curRound) {\\n if (curRound == 1) {\\n amount = info.firstClaimAmount - info.totalClaimedAmount;\\n } else if (curRound < info.totalClaimCount) {\\n amount = (info.firstClaimAmount + ((info.totalAllocatedAmount - info.firstClaimAmount)/(info.totalClaimCount-1) * (curRound -1))) - info.totalClaimedAmount;\\n } else {\\n amount = info.totalAllocatedAmount - info.totalClaimedAmount;\\n }\\n }\\n }\\n\\n function getPoolAddress(address token0, address token1, uint24 _fee) public view returns(address) {\\n if(token0 < token1) return computeAddress(uniswapV3Factory, token0, token1, _fee);\\n else return computeAddress(uniswapV3Factory, token1, token0, _fee);\\n }\\n\\n function computeAddress(address factory, address token0, address token1, uint24 _fee) public view returns (address pool) {\\n require(token0 < token1);\\n pool = address(\\n uint160(\\n uint256(\\n keccak256(\\n abi.encodePacked(\\n hex'ff',\\n factory,\\n keccak256(abi.encode(token0, token1, _fee)),\\n pool_init_code_hash\\n )\\n )\\n ))\\n );\\n }\\n}\",\"keccak256\":\"0xc472ef03d935eeb9ee887e5074c50a5caaea406998cb13200e85377fd18814e7\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2LpRewardVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\nimport { LibPool } from \\\"../../libraries/LibPool.sol\\\";\\n\\n/**\\n * @title L2LpRewardVaultStorage\\n * @dev\\n */\\ncontract L2LpRewardVaultStorage {\\n bytes32 public pool_init_code_hash;\\n address public uniswapV3Factory;\\n address public recipient;\\n\\n // l2token - pool address - VaultInfo\\n mapping(address => mapping(address => LibScheduleVault.VaultInfo)) public vaultInfo;\\n\\n // pool - pool info\\n mapping(address => LibPool.PoolInfo) public poolInfo;\\n\\n}\",\"keccak256\":\"0xdeaac9ee8971829cc9fd6e5310ddbe4ee37ad98cc198ccc6e54ca8836b3975cf\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibPool.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibPool {\\n\\n struct PoolInfo {\\n address token0;\\n address token1;\\n uint24 fee;\\n }\\n}\",\"keccak256\":\"0x4f96e027ec71a0666159676b2426fbb90bd9de37076c03e225e533df8ff30ab5\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./LibPool.sol\\\";\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardTonTosPoolParams;\\n InitalParameterLiquidityRewardVault rewardProjectTosPoolParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n LibPool.PoolInfo poolParams;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardTonTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.rewardProjectTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xd8c5a8879bdd5dc951780ada0df1f57ef0007fd65dd1ddefd6ddaf98f839091c\",\"license\":\"MIT\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b50612c548061002d6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806366d003ac116101605780639a7b5f11116100d8578063d547741f1161008c578063df1a026211610071578063df1a026214610772578063e2cfcfee1461077b578063fb3008841461078e57600080fd5b8063d547741f1461074c578063de03b9c61461075f57600080fd5b8063a4182343116100bd578063a4182343146106fd578063b911135f14610710578063d4c353f61461073957600080fd5b80639a7b5f1114610677578063a217fddf146106f557600080fd5b806375b238fc1161012f5780638716c5ff116101145780638716c5ff1461061857806391d148541461062b57806392c2bcb41461066457600080fd5b806375b238fc146105c85780637fc46ba8146105ef57600080fd5b806366d003ac1461057c578063696d62831461058f57806370480275146105a257806375829def146105b557600080fd5b80632f2ff15d1161020e57806352351e85116101c257806358081362116101a757806358081362146104535780635b5491821461055c57806363a8fd891461056f57600080fd5b806352351e8514610418578063550d01a31461043057600080fd5b806336568abe116101f357806336568abe146103b157806350d2a276146103c457806351e8152a1461040557600080fd5b80632f2ff15d1461038b57806335b9ac661461039e57600080fd5b806321c0b3421161026557806323d572551161024a57806323d5725514610342578063248a9ca31461035557806324d7806c1461037857600080fd5b806321c0b342146102fa578063229852461461030d57600080fd5b806301ffc9a7146102975780631785f53c146102bf57806317bc6a72146102d45780631e8948c3146102e7575b600080fd5b6102aa6102a53660046126df565b610869565b60405190151581526020015b60405180910390f35b6102d26102cd366004612725565b6108a0565b005b6102d26102e23660046127e5565b610932565b6102d26102f53660046128db565b611055565b6102d26103083660046128db565b61122f565b6103347ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102b6565b6103346103503660046128db565b6114c1565b61033461036336600461290e565b60009081526004602052604090206001015490565b6102aa610386366004612725565b6114d4565b6102d2610399366004612927565b611514565b6102d26103ac3660046128db565b61153e565b6102d26103bf366004612927565b6116f2565b6103ed6103d23660046126df565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b6565b6102aa6104133660046128db565b61177e565b6005546103ed9061010090046001600160a01b031681565b6102aa61043e366004612725565b60026020526000908152604090205460ff1681565b61054f6104613660046128db565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152600a602090815260408083209385168352928152908290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b6040516102b6919061294a565b6008546103ed906001600160a01b031681565b6000546102aa9060ff1681565b6009546103ed906001600160a01b031681565b6103ed61059d3660046129df565b6117b6565b6102d26105b0366004612725565b611809565b6102d26105c3366004612725565b611893565b6103347fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103ed6105fd366004612725565b6006602052600090815260409020546001600160a01b031681565b6103ed610626366004612a22565b6119f5565b6102aa610639366004612927565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102d2610672366004612725565b611ad9565b6106ca610685366004612725565b600b60205260009081526040902080546001909101546001600160a01b039182169181169074010000000000000000000000000000000000000000900462ffffff1683565b604080516001600160a01b03948516815293909216602084015262ffffff16908201526060016102b6565b610334600081565b6102d261070b366004612725565b611ba1565b6103ed61071e36600461290e565b6001602052600090815260409020546001600160a01b031681565b6103346107473660046128db565b611cbe565b6102d261075a366004612927565b611cca565b6102d261076d36600461290e565b611cef565b61033460075481565b6102d2610789366004612725565b611d8e565b61080c61079c3660046128db565b600a6020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e084015216610100820152610120016102b6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a9336114d4565b6109055760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826116f2565b50565b600554839061010090046001600160a01b031633148061098f57506001600160a01b03818116600090815260066020526040902054161580159061098f57506001600160a01b038181166000908152600660205260409020541633145b610a015760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e61676572000000000000000000000000000000000000000060648201526084016108fc565b43826080015163ffffffff1611610a5a5760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d652070617373656400000000000000000060448201526064016108fc565b602082015115801590610a705750604082015115155b8015610a85575060c082015163ffffffff1615155b610ad15760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c756500000000000000000000000000000000000000000060448201526064016108fc565b600182604001511115610b4157816080015163ffffffff168260a0015163ffffffff1611610b415760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d65000000000060448201526064016108fc565b8160600151826020015111610b985760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e740000000060448201526064016108fc565b6000610bb18460000151856020015186604001516117b6565b6001600160a01b038087166000908152600a602090815260408083208486168452825291829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529192509015610ca35760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a65640000000000000000000000000060448201526064016108fc565b6020850151855186916001600160a01b0390811691161115610cda576020808701516001600160a01b039081168352875116908201525b80600b6000856001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548162ffffff021916908362ffffff160217905550905050600060405180610120016040528087600001516001600160a01b0316815260200187602001518152602001876040015181526020016000815260200187606001518152602001876080015163ffffffff1681526020018760a0015163ffffffff1681526020018760c0015163ffffffff168152602001600063ffffffff16815250905080600a60008a6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050610f7c600560019054906101000a90046001600160a01b03163088602001518b6001600160a01b0316611e93909392919063ffffffff16565b7f3e0f1f8a92a71cfd434170048e2567157a5a7c70b06b04ba1f05bc575e331424888888604051611043939291906000610160820190506001600160a01b03808616835280855116602084015280602086015116604084015262ffffff604086015116606084015280845116608084015250602083015160a0830152604083015160c0830152606083015160e0830152608083015163ffffffff8082166101008501528060a0860151166101208501528060c0860151166101408501525050949350505050565b60405180910390a15050505050505050565b816001600160a01b0381166110915760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166110cd5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b6001600160a01b038085166000908152600660205260409020548591161580159061111157506001600160a01b038181166000908152600660205260409020541633145b61116b5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b60648201526084016108fc565b6001600160a01b038581166000908152600660205260409020548186169116036111c05760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b816001600160a01b03811661126b5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166112a75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b6009546001600160a01b03166112ff5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f20726563697069656e7400000000000000000000000000000000000060448201526064016108fc565b600061130b8585611fb7565b90508060000361135d5760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e740000000000000000000000000060448201526064016108fc565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c59190612a76565b8111156114145760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e636500000000000000000000000060448201526064016108fc565b6001600160a01b038086166000908152600a602090815260408083209388168352929052908120600301805483929061144e908490612aa5565b909155505060095461146d906001600160a01b03878116911683612124565b600954604080516001600160a01b038089168252808816602083015290921690820152606081018290527ffa057f6b08b5176e23c6ef9a28291857d66f15bbabda1c320ac8c2e4d5de1ff190608001611220565b60006114cd838361223f565b9392505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661089a565b60008281526004602052604090206001015461152f81612380565b611539838361238a565b505050565b816001600160a01b03811661157a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166115b65760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b60055461010090046001600160a01b0316158015906115e4575060055461010090046001600160a01b031633145b6116305760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e61676572000060448201526064016108fc565b6001600160a01b038481166000908152600660205260409020548185169116036116855760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b03811633146117705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108fc565b61177a828261242c565b5050565b60006001600160a01b038216158015906114cd5750506001600160a01b03918216600090815260066020526040902054821691161490565b6000826001600160a01b0316846001600160a01b031610156117f1576008546117ea906001600160a01b03168585856119f5565b90506114cd565b6008546117ea906001600160a01b03168486856119f5565b611812336114d4565b6118695760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282611514565b61189c336114d4565b6118f35760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6001600160a01b0381166119495760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016108fc565b6001600160a01b03811633036119a15760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016108fc565b6119cb7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282611514565b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336116f2565b6000826001600160a01b0316846001600160a01b031610611a1557600080fd5b604080516001600160a01b03808716602083015285169181019190915262ffffff83166060820152859060800160405160208183030381529060405280519060200120600754604051602001611ab8939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b611ae2336114d4565b611b395760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6009546001600160a01b03808316911603611b7f5760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b038116611bdd5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b611be6336114d4565b611c3d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6005546001600160a01b038084166101009092041603611c885760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60006114cd8383611fb7565b600082815260046020526040902060010154611ce581612380565b611539838361242c565b611cf8336114d4565b611d4f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b8060075403611d895760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b600755565b806001600160a01b038116611dca5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b611dd3336114d4565b611e2a5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6008546001600160a01b03808416911603611e705760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611ef79190612adc565b6000604051808303816000865af19150503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b5091509150818015611f63575080511580611f63575080806020019051810190611f639190612af8565b611faf5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016108fc565b505050505050565b6001600160a01b038083166000908152600a60209081526040808320858516845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152908161205f858561223f565b90508082610100015163ffffffff16101561211c578060010361209757816060015182608001516120909190612b1a565b925061211c565b81604001518110156121055760608201516120b3600183612b1a565b600184604001516120c49190612b1a565b846080015185602001516120d89190612b1a565b6120e29190612b2d565b6120ec9190612b4f565b83608001516120fb9190612aa5565b6120909190612b1a565b816060015182602001516121199190612b1a565b92505b505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121809190612adc565b6000604051808303816000865af19150503d80600081146121bd576040519150601f19603f3d011682016040523d82523d6000602084013e6121c2565b606091505b50915091508180156121ec5750805115806121ec5750808060200190518101906121ec9190612af8565b6122385760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016108fc565b5050505050565b6001600160a01b038083166000908152600a60209081526040808320858516845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b90920416610100840152909190158015906122f85750428160a0015163ffffffff1611155b801561230d57508060c0015163ffffffff1642105b1561231b5760019150612365565b428160c0015163ffffffff1611612365578060e0015163ffffffff168160c0015163ffffffff164261234d9190612b1a565b6123579190612b2d565b612362906002612aa5565b91505b806040015182111561237957806040015191505b5092915050565b61092f81336124af565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661177a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556123e83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff161561177a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661177a576124e281612524565b6124ed836020612536565b6040516020016124fe929190612b66565b60408051601f198184030181529082905262461bcd60e51b82526108fc91600401612be7565b606061089a6001600160a01b03831660145b60606000612545836002612b4f565b612550906002612aa5565b67ffffffffffffffff81111561256857612568612740565b6040519080825280601f01601f191660200182016040528015612592576020820181803683370190505b509050600360fc1b816000815181106125ad576125ad612c1a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106125dc576125dc612c1a565b60200101906001600160f81b031916908160001a9053506000612600846002612b4f565b61260b906001612aa5565b90505b6001811115612690577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061264c5761264c612c1a565b1a60f81b82828151811061266257612662612c1a565b60200101906001600160f81b031916908160001a90535060049490941c9361268981612c30565b905061260e565b5083156114cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108fc565b6000602082840312156126f157600080fd5b81356001600160e01b0319811681146114cd57600080fd5b80356001600160a01b038116811461272057600080fd5b919050565b60006020828403121561273757600080fd5b6114cd82612709565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561278757634e487b7160e01b600052604160045260246000fd5b60405290565b60405160e0810167ffffffffffffffff8111828210171561278757634e487b7160e01b600052604160045260246000fd5b803562ffffff8116811461272057600080fd5b803563ffffffff8116811461272057600080fd5b60008060008385036101608112156127fc57600080fd5b61280585612709565b93506060601f198201121561281957600080fd5b612821612756565b61282d60208701612709565b815261283b60408701612709565b602082015261284c606087016127be565b6040820152925060e0607f198201121561286557600080fd5b5061286e61278d565b61287a60808601612709565b815260a0850135602082015260c0850135604082015260e085013560608201526128a761010086016127d1565b60808201526128b961012086016127d1565b60a08201526128cb61014086016127d1565b60c0820152809150509250925092565b600080604083850312156128ee57600080fd5b6128f783612709565b915061290560208401612709565b90509250929050565b60006020828403121561292057600080fd5b5035919050565b6000806040838503121561293a57600080fd5b8235915061290560208401612709565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516129af60c084018263ffffffff169052565b5060e08301516129c760e084018263ffffffff169052565b506101008381015163ffffffff81168483015261211c565b6000806000606084860312156129f457600080fd5b6129fd84612709565b9250612a0b60208501612709565b9150612a19604085016127be565b90509250925092565b60008060008060808587031215612a3857600080fd5b612a4185612709565b9350612a4f60208601612709565b9250612a5d60408601612709565b9150612a6b606086016127be565b905092959194509250565b600060208284031215612a8857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089a5761089a612a8f565b60005b83811015612ad3578181015183820152602001612abb565b50506000910152565b60008251612aee818460208701612ab8565b9190910192915050565b600060208284031215612b0a57600080fd5b815180151581146114cd57600080fd5b8181038181111561089a5761089a612a8f565b600082612b4a57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761089a5761089a612a8f565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b9e816017850160208801612ab8565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612bdb816028840160208801612ab8565b01602801949350505050565b6020815260008251806020840152612c06816040850160208701612ab8565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b600081612c3f57612c3f612a8f565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c806366d003ac116101605780639a7b5f11116100d8578063d547741f1161008c578063df1a026211610071578063df1a026214610772578063e2cfcfee1461077b578063fb3008841461078e57600080fd5b8063d547741f1461074c578063de03b9c61461075f57600080fd5b8063a4182343116100bd578063a4182343146106fd578063b911135f14610710578063d4c353f61461073957600080fd5b80639a7b5f1114610677578063a217fddf146106f557600080fd5b806375b238fc1161012f5780638716c5ff116101145780638716c5ff1461061857806391d148541461062b57806392c2bcb41461066457600080fd5b806375b238fc146105c85780637fc46ba8146105ef57600080fd5b806366d003ac1461057c578063696d62831461058f57806370480275146105a257806375829def146105b557600080fd5b80632f2ff15d1161020e57806352351e85116101c257806358081362116101a757806358081362146104535780635b5491821461055c57806363a8fd891461056f57600080fd5b806352351e8514610418578063550d01a31461043057600080fd5b806336568abe116101f357806336568abe146103b157806350d2a276146103c457806351e8152a1461040557600080fd5b80632f2ff15d1461038b57806335b9ac661461039e57600080fd5b806321c0b3421161026557806323d572551161024a57806323d5725514610342578063248a9ca31461035557806324d7806c1461037857600080fd5b806321c0b342146102fa578063229852461461030d57600080fd5b806301ffc9a7146102975780631785f53c146102bf57806317bc6a72146102d45780631e8948c3146102e7575b600080fd5b6102aa6102a53660046126df565b610869565b60405190151581526020015b60405180910390f35b6102d26102cd366004612725565b6108a0565b005b6102d26102e23660046127e5565b610932565b6102d26102f53660046128db565b611055565b6102d26103083660046128db565b61122f565b6103347ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102b6565b6103346103503660046128db565b6114c1565b61033461036336600461290e565b60009081526004602052604090206001015490565b6102aa610386366004612725565b6114d4565b6102d2610399366004612927565b611514565b6102d26103ac3660046128db565b61153e565b6102d26103bf366004612927565b6116f2565b6103ed6103d23660046126df565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b6565b6102aa6104133660046128db565b61177e565b6005546103ed9061010090046001600160a01b031681565b6102aa61043e366004612725565b60026020526000908152604090205460ff1681565b61054f6104613660046128db565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152600a602090815260408083209385168352928152908290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015290565b6040516102b6919061294a565b6008546103ed906001600160a01b031681565b6000546102aa9060ff1681565b6009546103ed906001600160a01b031681565b6103ed61059d3660046129df565b6117b6565b6102d26105b0366004612725565b611809565b6102d26105c3366004612725565b611893565b6103347fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103ed6105fd366004612725565b6006602052600090815260409020546001600160a01b031681565b6103ed610626366004612a22565b6119f5565b6102aa610639366004612927565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102d2610672366004612725565b611ad9565b6106ca610685366004612725565b600b60205260009081526040902080546001909101546001600160a01b039182169181169074010000000000000000000000000000000000000000900462ffffff1683565b604080516001600160a01b03948516815293909216602084015262ffffff16908201526060016102b6565b610334600081565b6102d261070b366004612725565b611ba1565b6103ed61071e36600461290e565b6001602052600090815260409020546001600160a01b031681565b6103346107473660046128db565b611cbe565b6102d261075a366004612927565b611cca565b6102d261076d36600461290e565b611cef565b61033460075481565b6102d2610789366004612725565b611d8e565b61080c61079c3660046128db565b600a6020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e084015216610100820152610120016102b6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a9336114d4565b6109055760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826116f2565b50565b600554839061010090046001600160a01b031633148061098f57506001600160a01b03818116600090815260066020526040902054161580159061098f57506001600160a01b038181166000908152600660205260409020541633145b610a015760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201527f6f6a6563744d616e61676572000000000000000000000000000000000000000060648201526084016108fc565b43826080015163ffffffff1611610a5a5760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d652070617373656400000000000000000060448201526064016108fc565b602082015115801590610a705750604082015115155b8015610a85575060c082015163ffffffff1615155b610ad15760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c756500000000000000000000000000000000000000000060448201526064016108fc565b600182604001511115610b4157816080015163ffffffff168260a0015163ffffffff1611610b415760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d65000000000060448201526064016108fc565b8160600151826020015111610b985760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e740000000060448201526064016108fc565b6000610bb18460000151856020015186604001516117b6565b6001600160a01b038087166000908152600a602090815260408083208486168452825291829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529192509015610ca35760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a65640000000000000000000000000060448201526064016108fc565b6020850151855186916001600160a01b0390811691161115610cda576020808701516001600160a01b039081168352875116908201525b80600b6000856001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548162ffffff021916908362ffffff160217905550905050600060405180610120016040528087600001516001600160a01b0316815260200187602001518152602001876040015181526020016000815260200187606001518152602001876080015163ffffffff1681526020018760a0015163ffffffff1681526020018760c0015163ffffffff168152602001600063ffffffff16815250905080600a60008a6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050610f7c600560019054906101000a90046001600160a01b03163088602001518b6001600160a01b0316611e93909392919063ffffffff16565b7f3e0f1f8a92a71cfd434170048e2567157a5a7c70b06b04ba1f05bc575e331424888888604051611043939291906000610160820190506001600160a01b03808616835280855116602084015280602086015116604084015262ffffff604086015116606084015280845116608084015250602083015160a0830152604083015160c0830152606083015160e0830152608083015163ffffffff8082166101008501528060a0860151166101208501528060c0860151166101408501525050949350505050565b60405180910390a15050505050505050565b816001600160a01b0381166110915760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166110cd5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b6001600160a01b038085166000908152600660205260409020548591161580159061111157506001600160a01b038181166000908152600660205260409020541633145b61116b5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b60648201526084016108fc565b6001600160a01b038581166000908152600660205260409020548186169116036111c05760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a402619391015b60405180910390a15050505050565b816001600160a01b03811661126b5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166112a75760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b6009546001600160a01b03166112ff5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f20726563697069656e7400000000000000000000000000000000000060448201526064016108fc565b600061130b8585611fb7565b90508060000361135d5760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e740000000000000000000000000060448201526064016108fc565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c59190612a76565b8111156114145760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e636500000000000000000000000060448201526064016108fc565b6001600160a01b038086166000908152600a602090815260408083209388168352929052908120600301805483929061144e908490612aa5565b909155505060095461146d906001600160a01b03878116911683612124565b600954604080516001600160a01b038089168252808816602083015290921690820152606081018290527ffa057f6b08b5176e23c6ef9a28291857d66f15bbabda1c320ac8c2e4d5de1ff190608001611220565b60006114cd838361223f565b9392505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661089a565b60008281526004602052604090206001015461152f81612380565b611539838361238a565b505050565b816001600160a01b03811661157a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b816001600160a01b0381166115b65760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b60055461010090046001600160a01b0316158015906115e4575060055461010090046001600160a01b031633145b6116305760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e61676572000060448201526064016108fc565b6001600160a01b038481166000908152600660205260409020548185169116036116855760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b03811633146117705760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108fc565b61177a828261242c565b5050565b60006001600160a01b038216158015906114cd5750506001600160a01b03918216600090815260066020526040902054821691161490565b6000826001600160a01b0316846001600160a01b031610156117f1576008546117ea906001600160a01b03168585856119f5565b90506114cd565b6008546117ea906001600160a01b03168486856119f5565b611812336114d4565b6118695760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282611514565b61189c336114d4565b6118f35760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6001600160a01b0381166119495760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016108fc565b6001600160a01b03811633036119a15760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016108fc565b6119cb7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282611514565b61092f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336116f2565b6000826001600160a01b0316846001600160a01b031610611a1557600080fd5b604080516001600160a01b03808716602083015285169181019190915262ffffff83166060820152859060800160405160208183030381529060405280519060200120600754604051602001611ab8939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b611ae2336114d4565b611b395760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6009546001600160a01b03808316911603611b7f5760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b038116611bdd5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b611be6336114d4565b611c3d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6005546001600160a01b038084166101009092041603611c885760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60006114cd8383611fb7565b600082815260046020526040902060010154611ce581612380565b611539838361242c565b611cf8336114d4565b611d4f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b8060075403611d895760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b600755565b806001600160a01b038116611dca5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016108fc565b611dd3336114d4565b611e2a5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016108fc565b6008546001600160a01b03808416911603611e705760405162461bcd60e51b81526004016108fc9060208082526004908201526373616d6560e01b604082015260600190565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611ef79190612adc565b6000604051808303816000865af19150503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b5091509150818015611f63575080511580611f63575080806020019051810190611f639190612af8565b611faf5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016108fc565b505050505050565b6001600160a01b038083166000908152600a60209081526040808320858516845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152908161205f858561223f565b90508082610100015163ffffffff16101561211c578060010361209757816060015182608001516120909190612b1a565b925061211c565b81604001518110156121055760608201516120b3600183612b1a565b600184604001516120c49190612b1a565b846080015185602001516120d89190612b1a565b6120e29190612b2d565b6120ec9190612b4f565b83608001516120fb9190612aa5565b6120909190612b1a565b816060015182602001516121199190612b1a565b92505b505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121809190612adc565b6000604051808303816000865af19150503d80600081146121bd576040519150601f19603f3d011682016040523d82523d6000602084013e6121c2565b606091505b50915091508180156121ec5750805115806121ec5750808060200190518101906121ec9190612af8565b6122385760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016108fc565b5050505050565b6001600160a01b038083166000908152600a60209081526040808320858516845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b90920416610100840152909190158015906122f85750428160a0015163ffffffff1611155b801561230d57508060c0015163ffffffff1642105b1561231b5760019150612365565b428160c0015163ffffffff1611612365578060e0015163ffffffff168160c0015163ffffffff164261234d9190612b1a565b6123579190612b2d565b612362906002612aa5565b91505b806040015182111561237957806040015191505b5092915050565b61092f81336124af565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661177a5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556123e83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff161561177a5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661177a576124e281612524565b6124ed836020612536565b6040516020016124fe929190612b66565b60408051601f198184030181529082905262461bcd60e51b82526108fc91600401612be7565b606061089a6001600160a01b03831660145b60606000612545836002612b4f565b612550906002612aa5565b67ffffffffffffffff81111561256857612568612740565b6040519080825280601f01601f191660200182016040528015612592576020820181803683370190505b509050600360fc1b816000815181106125ad576125ad612c1a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106125dc576125dc612c1a565b60200101906001600160f81b031916908160001a9053506000612600846002612b4f565b61260b906001612aa5565b90505b6001811115612690577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061264c5761264c612c1a565b1a60f81b82828151811061266257612662612c1a565b60200101906001600160f81b031916908160001a90535060049490941c9361268981612c30565b905061260e565b5083156114cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108fc565b6000602082840312156126f157600080fd5b81356001600160e01b0319811681146114cd57600080fd5b80356001600160a01b038116811461272057600080fd5b919050565b60006020828403121561273757600080fd5b6114cd82612709565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561278757634e487b7160e01b600052604160045260246000fd5b60405290565b60405160e0810167ffffffffffffffff8111828210171561278757634e487b7160e01b600052604160045260246000fd5b803562ffffff8116811461272057600080fd5b803563ffffffff8116811461272057600080fd5b60008060008385036101608112156127fc57600080fd5b61280585612709565b93506060601f198201121561281957600080fd5b612821612756565b61282d60208701612709565b815261283b60408701612709565b602082015261284c606087016127be565b6040820152925060e0607f198201121561286557600080fd5b5061286e61278d565b61287a60808601612709565b815260a0850135602082015260c0850135604082015260e085013560608201526128a761010086016127d1565b60808201526128b961012086016127d1565b60a08201526128cb61014086016127d1565b60c0820152809150509250925092565b600080604083850312156128ee57600080fd5b6128f783612709565b915061290560208401612709565b90509250929050565b60006020828403121561292057600080fd5b5035919050565b6000806040838503121561293a57600080fd5b8235915061290560208401612709565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c08301516129af60c084018263ffffffff169052565b5060e08301516129c760e084018263ffffffff169052565b506101008381015163ffffffff81168483015261211c565b6000806000606084860312156129f457600080fd5b6129fd84612709565b9250612a0b60208501612709565b9150612a19604085016127be565b90509250925092565b60008060008060808587031215612a3857600080fd5b612a4185612709565b9350612a4f60208601612709565b9250612a5d60408601612709565b9150612a6b606086016127be565b905092959194509250565b600060208284031215612a8857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089a5761089a612a8f565b60005b83811015612ad3578181015183820152602001612abb565b50506000910152565b60008251612aee818460208701612ab8565b9190910192915050565b600060208284031215612b0a57600080fd5b815180151581146114cd57600080fd5b8181038181111561089a5761089a612a8f565b600082612b4a57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761089a5761089a612a8f565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b9e816017850160208801612ab8565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612bdb816028840160208801612ab8565b01602801949350505050565b6020815260008251806020840152612c06816040850160208701612ab8565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b600081612c3f57612c3f612a8f565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "details": "Vaults that anybody claim according to a schedule", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } + ], + "name": "ClaimedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "indexed": false, + "internalType": "struct LibPool.PoolInfo", + "name": "paramPoolInfo", + "type": "tuple" }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "indexed": false, + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "parmas", + "type": "tuple" + } + ], + "name": "InitializedL2LpRewardVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" } - }, - "title": "L2LpRewardVault", - "version": 1 + ], + "name": "SetVaultAdmin", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" }, - "storageLayout": { - "storage": [ - { - "astId": 13268, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 13272, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "availableClaimAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "changeRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 13276, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "factory", + "type": "address" }, { - "astId": 13280, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "internalType": "address", + "name": "token0", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "internalType": "address", + "name": "token1", + "type": "address" }, { - "astId": 8566, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "computeAddress", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 8568, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getCurrentRound", + "outputs": [ + { + "internalType": "uint256", + "name": "round", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" }, { - "astId": 8572, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "token1", + "type": "address" }, { - "astId": 10880, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "pool_init_code_hash", - "offset": 0, - "slot": "7", - "type": "t_bytes32" + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "getPoolAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 10882, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "uniswapV3Factory", - "offset": 0, - "slot": "8", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 10884, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "recipient", - "offset": 0, - "slot": "9", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 10891, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "vaultInfo", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_mapping(t_address,t_struct(VaultInfo)12723_storage))" + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "internalType": "struct LibPool.PoolInfo", + "name": "paramPoolInfo", + "type": "tuple" }, { - "astId": 10896, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "poolInfo", - "offset": 0, - "slot": "11", - "type": "t_mapping(t_address,t_struct(PoolInfo)12211_storage)" + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "token1", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pool_init_code_hash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "recipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "setPoolInitCodeHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + } + ], + "name": "setUniswapV3Factory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_mapping(t_address,t_mapping(t_address,t_struct(VaultInfo)12723_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => struct LibScheduleVault.VaultInfo))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_struct(VaultInfo)12723_storage)" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_mapping(t_address,t_struct(PoolInfo)12211_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibPool.PoolInfo)", - "numberOfBytes": "32", - "value": "t_struct(PoolInfo)12211_storage" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" }, - "t_mapping(t_address,t_struct(VaultInfo)12723_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)12723_storage" + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_struct(PoolInfo)12211_storage": { - "encoding": "inplace", - "label": "struct LibPool.PoolInfo", - "members": [ - { - "astId": 12206, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "token0", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 12208, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "token1", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 12210, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "fee", - "offset": 20, - "slot": "1", - "type": "t_uint24" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_struct(VaultInfo)12723_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 12706, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" + "internalType": "address", + "name": "claimer", + "type": "address" }, { - "astId": 12708, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 12710, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, { - "astId": 12712, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, { - "astId": 12714, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, { - "astId": 12716, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, { - "astId": 12718, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, { - "astId": 12720, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, { - "astId": 12722, - "contract": "contracts/L2/vaults/L2LpRewardVault.sol:L2LpRewardVault", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } ], - "numberOfBytes": "192" - }, - "t_uint24": { - "encoding": "inplace", - "label": "uint24", - "numberOfBytes": "3" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + "internalType": "struct LibScheduleVault.VaultInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2LpRewardVaultProxy.json b/contracts/data/tonstarter/abi/L2LpRewardVaultProxy.json index 89dc25a..4708a63 100644 --- a/contracts/data/tonstarter/abi/L2LpRewardVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2LpRewardVaultProxy.json @@ -1,1253 +1,738 @@ -{ - "address": "0x1F9Da608a82742b5a895A62522c7b7f333ECB06c", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "poolInfo", - "outputs": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pool_init_code_hash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "recipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xcf54fea029cc497b36be28040c7d6fd6e61047ba78644b2376ccc0e51b5befd6", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x1F9Da608a82742b5a895A62522c7b7f333ECB06c", - "transactionIndex": 0, - "gasUsed": "1606300", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000004000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000024000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa363bfe88d371f71ca1024bf53f78f079d388f5bce89ccdc311b36a3c3f4f1f9", - "transactionHash": "0xcf54fea029cc497b36be28040c7d6fd6e61047ba78644b2376ccc0e51b5befd6", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23812, - "transactionHash": "0xcf54fea029cc497b36be28040c7d6fd6e61047ba78644b2376ccc0e51b5befd6", - "address": "0x1F9Da608a82742b5a895A62522c7b7f333ECB06c", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0xa363bfe88d371f71ca1024bf53f78f079d388f5bce89ccdc311b36a3c3f4f1f9" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 23812, - "transactionHash": "0xcf54fea029cc497b36be28040c7d6fd6e61047ba78644b2376ccc0e51b5befd6", - "address": "0x1F9Da608a82742b5a895A62522c7b7f333ECB06c", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xa363bfe88d371f71ca1024bf53f78f079d388f5bce89ccdc311b36a3c3f4f1f9" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 23812, - "cumulativeGasUsed": "1606300", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "3b76e847adc1851ad681620932528e93", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool_init_code_hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV3Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2LpRewardVaultProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2LpRewardVaultProxy.sol\":\"L2LpRewardVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBaseProxy\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x32dc8c79ba6a7d1d3270e56c38f85745c20e844dc353cbe0b2bc03e72e95e487\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2LpRewardVaultProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBaseProxy.sol\\\";\\nimport { L2LpRewardVaultStorage } from \\\"./L2LpRewardVaultStorage.sol\\\";\\n\\n/**\\n * @title L2LpRewardVaultProxy\\n * @dev\\n */\\ncontract L2LpRewardVaultProxy is L2CustomVaultBaseProxy, L2LpRewardVaultStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x86c4db43482a33849bdccbd52b52f830fbb8529050ed20346ce5782c2ea697cd\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2LpRewardVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n\\nimport { LibPool } from \\\"../../libraries/LibPool.sol\\\";\\n\\n/**\\n * @title L2LpRewardVaultStorage\\n * @dev\\n */\\ncontract L2LpRewardVaultStorage {\\n bytes32 public pool_init_code_hash;\\n address public uniswapV3Factory;\\n address public recipient;\\n\\n // l2token - pool address - VaultInfo\\n mapping(address => mapping(address => LibScheduleVault.VaultInfo)) public vaultInfo;\\n\\n // pool - pool info\\n mapping(address => LibPool.PoolInfo) public poolInfo;\\n\\n}\",\"keccak256\":\"0xdeaac9ee8971829cc9fd6e5310ddbe4ee37ad98cc198ccc6e54ca8836b3975cf\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibPool.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibPool {\\n\\n struct PoolInfo {\\n address token0;\\n address token1;\\n uint24 fee;\\n }\\n}\",\"keccak256\":\"0x4f96e027ec71a0666159676b2426fbb90bd9de37076c03e225e533df8ff30ab5\",\"license\":\"MIT\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001c28833981519152806200005b565b6200005560008051602062001c2883398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611abe806200016a6000396000f3fe6080604052600436106101e75760003560e01c806366d003ac116101025780638d4fdb4011610095578063b911135f11610064578063b911135f1461071d578063d547741f14610753578063df1a026214610773578063fb3008841461078957610239565b80638d4fdb401461061757806391d14854146106375780639a7b5f111461067d578063a217fddf1461070857610239565b80637cb00d25116100d15780637cb00d25146105815780637cd5f663146105a15780637fc46ba8146105c15780638b8f4a65146105f757610239565b806366d003ac146104ed578063704802751461050d57806375829def1461052d57806375b238fc1461054d57610239565b80634a5df50f1161017a5780635b549182116101495780635b5491821461044d5780635c60da1b1461046d5780635cc797d8146104b357806363a8fd89146104d357610239565b80634a5df50f1461038a57806350d2a276146103aa57806352351e85146103f8578063550d01a31461041d57610239565b806324d7806c116101b657806324d7806c1461030a5780632f2ff15d1461032a57806336568abe1461034a5780633659cfe61461036a57610239565b806301ffc9a7146102435780631785f53c146102785780632298524614610298578063248a9ca3146102da57610239565b366102395760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61024161087f565b005b34801561024f57600080fd5b5061026361025e366004611746565b610928565b60405190151581526020015b60405180910390f35b34801561028457600080fd5b50610241610293366004611787565b61095f565b3480156102a457600080fd5b506102cc7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161026f565b3480156102e657600080fd5b506102cc6102f53660046117a2565b60009081526004602052604090206001015490565b34801561031657600080fd5b50610263610325366004611787565b6109da565b34801561033657600080fd5b506102416103453660046117bb565b610a1a565b34801561035657600080fd5b506102416103653660046117bb565b610a3f565b34801561037657600080fd5b50610241610385366004611787565b610acb565b34801561039657600080fd5b506102416103a53660046117e7565b610c24565b3480156103b657600080fd5b506103e06103c5366004611746565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b34801561040457600080fd5b506005546103e09061010090046001600160a01b031681565b34801561042957600080fd5b50610263610438366004611787565b60026020526000908152604090205460ff1681565b34801561045957600080fd5b506008546103e0906001600160a01b031681565b34801561047957600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103e0565b3480156104bf57600080fd5b506102416104ce36600461187b565b610ed1565b3480156104df57600080fd5b506000546102639060ff1681565b3480156104f957600080fd5b506009546103e0906001600160a01b031681565b34801561051957600080fd5b50610241610528366004611787565b610f29565b34801561053957600080fd5b50610241610548366004611787565b610fa1565b34801561055957600080fd5b506102cc7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561058d57600080fd5b5061024161059c3660046118a5565b6110f1565b3480156105ad57600080fd5b506102416105bc3660046118c0565b611152565b3480156105cd57600080fd5b506103e06105dc366004611787565b6006602052600090815260409020546001600160a01b031681565b34801561060357600080fd5b506103e06106123660046117a2565b6111ab565b34801561062357600080fd5b506103e0610632366004611746565b6111c8565b34801561064357600080fd5b506102636106523660046117bb565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561068957600080fd5b506106dd610698366004611787565b600b60205260009081526040902080546001909101546001600160a01b039182169181169074010000000000000000000000000000000000000000900462ffffff1683565b604080516001600160a01b03948516815293909216602084015262ffffff169082015260600161026f565b34801561071457600080fd5b506102cc600081565b34801561072957600080fd5b506103e06107383660046117a2565b6001602052600090815260409020546001600160a01b031681565b34801561075f57600080fd5b5061024161076e3660046117bb565b6112c4565b34801561077f57600080fd5b506102cc60075481565b34801561079557600080fd5b506108226107a43660046118f3565b600a6020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161026f565b60006108966000356001600160e01b0319166111c8565b90506001600160a01b038116158015906108b3575060005460ff16155b6108ff5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610230565b3660008037600080366000845af43d6000803e80801561091e573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061095957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610968336109da565b6109ad5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a3f565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610959565b600082815260046020526040902060010154610a35816112e9565b61092383836112f3565b6001600160a01b0381163314610abd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610230565b610ac78282611395565b5050565b610ad4336109da565b610b195760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6001600160a01b038116610b6f5760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610230565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610be05760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610230565b610bed8160006001611418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c2d336109da565b610c725760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b81610cbf5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610230565b6001600160a01b03811660009081526002602052604090205460ff16610d275760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610230565b60005b82811015610ecb57816001600160a01b031660036000868685818110610d5257610d5261191d565b9050602002016020810190610d679190611746565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610dd85760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610230565b8160036000868685818110610def57610def61191d565b9050602002016020810190610e049190611746565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610e5957610e5961191d565b9050602002016020810190610e6e9190611746565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610ec381611949565b915050610d2a565b50505050565b610eda336109da565b610f1f5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b610ac782826114b0565b610f32336109da565b610f775760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1a565b610faa336109da565b610fef5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6001600160a01b0381166110455760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610230565b6001600160a01b038116330361109d5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610230565b6110c77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1a565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610a3f565b6110fa336109da565b61113f5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6000805460ff1916911515919091179055565b61115b336109da565b6111a05760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b610923838383611418565b6000818152600160205260408120546001600160a01b0316610959565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112285750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561128657506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546112df816112e9565b6109238383611395565b6109d7813361150f565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac75760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113513390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610ac75760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b61146f5760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610230565b80156114aa576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61092383825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac75761154281611584565b61154d836020611596565b60405160200161155e929190611986565b60408051601f198184030181529082905262461bcd60e51b825261023091600401611a07565b60606109596001600160a01b03831660145b606060006115a5836002611a3a565b6115b0906002611a51565b67ffffffffffffffff8111156115c8576115c8611a64565b6040519080825280601f01601f1916602001820160405280156115f2576020820181803683370190505b509050600360fc1b8160008151811061160d5761160d61191d565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061163c5761163c61191d565b60200101906001600160f81b031916908160001a9053506000611660846002611a3a565b61166b906001611a51565b90505b60018111156116f0577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106116ac576116ac61191d565b1a60f81b8282815181106116c2576116c261191d565b60200101906001600160f81b031916908160001a90535060049490941c936116e981611a7a565b905061166e565b50831561173f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610230565b9392505050565b60006020828403121561175857600080fd5b81356001600160e01b03198116811461173f57600080fd5b80356001600160a01b03811681146112bf57600080fd5b60006020828403121561179957600080fd5b61173f82611770565b6000602082840312156117b457600080fd5b5035919050565b600080604083850312156117ce57600080fd5b823591506117de60208401611770565b90509250929050565b6000806000604084860312156117fc57600080fd5b833567ffffffffffffffff8082111561181457600080fd5b818601915086601f83011261182857600080fd5b81358181111561183757600080fd5b8760208260051b850101111561184c57600080fd5b6020928301955093506118629186019050611770565b90509250925092565b803580151581146112bf57600080fd5b6000806040838503121561188e57600080fd5b61189783611770565b91506117de6020840161186b565b6000602082840312156118b757600080fd5b61173f8261186b565b6000806000606084860312156118d557600080fd5b6118de84611770565b9250602084013591506118626040850161186b565b6000806040838503121561190657600080fd5b61190f83611770565b91506117de60208401611770565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161195b5761195b611933565b5060010190565b60005b8381101561197d578181015183820152602001611965565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516119be816017850160208801611962565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516119fb816028840160208801611962565b01602801949350505050565b6020815260008251806020840152611a26816040850160208701611962565b601f01601f19169190910160400192915050565b808202811582820484141761095957610959611933565b8082018082111561095957610959611933565b634e487b7160e01b600052604160045260246000fd5b600081611a8957611a89611933565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101e75760003560e01c806366d003ac116101025780638d4fdb4011610095578063b911135f11610064578063b911135f1461071d578063d547741f14610753578063df1a026214610773578063fb3008841461078957610239565b80638d4fdb401461061757806391d14854146106375780639a7b5f111461067d578063a217fddf1461070857610239565b80637cb00d25116100d15780637cb00d25146105815780637cd5f663146105a15780637fc46ba8146105c15780638b8f4a65146105f757610239565b806366d003ac146104ed578063704802751461050d57806375829def1461052d57806375b238fc1461054d57610239565b80634a5df50f1161017a5780635b549182116101495780635b5491821461044d5780635c60da1b1461046d5780635cc797d8146104b357806363a8fd89146104d357610239565b80634a5df50f1461038a57806350d2a276146103aa57806352351e85146103f8578063550d01a31461041d57610239565b806324d7806c116101b657806324d7806c1461030a5780632f2ff15d1461032a57806336568abe1461034a5780633659cfe61461036a57610239565b806301ffc9a7146102435780631785f53c146102785780632298524614610298578063248a9ca3146102da57610239565b366102395760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b61024161087f565b005b34801561024f57600080fd5b5061026361025e366004611746565b610928565b60405190151581526020015b60405180910390f35b34801561028457600080fd5b50610241610293366004611787565b61095f565b3480156102a457600080fd5b506102cc7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161026f565b3480156102e657600080fd5b506102cc6102f53660046117a2565b60009081526004602052604090206001015490565b34801561031657600080fd5b50610263610325366004611787565b6109da565b34801561033657600080fd5b506102416103453660046117bb565b610a1a565b34801561035657600080fd5b506102416103653660046117bb565b610a3f565b34801561037657600080fd5b50610241610385366004611787565b610acb565b34801561039657600080fd5b506102416103a53660046117e7565b610c24565b3480156103b657600080fd5b506103e06103c5366004611746565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b34801561040457600080fd5b506005546103e09061010090046001600160a01b031681565b34801561042957600080fd5b50610263610438366004611787565b60026020526000908152604090205460ff1681565b34801561045957600080fd5b506008546103e0906001600160a01b031681565b34801561047957600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103e0565b3480156104bf57600080fd5b506102416104ce36600461187b565b610ed1565b3480156104df57600080fd5b506000546102639060ff1681565b3480156104f957600080fd5b506009546103e0906001600160a01b031681565b34801561051957600080fd5b50610241610528366004611787565b610f29565b34801561053957600080fd5b50610241610548366004611787565b610fa1565b34801561055957600080fd5b506102cc7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561058d57600080fd5b5061024161059c3660046118a5565b6110f1565b3480156105ad57600080fd5b506102416105bc3660046118c0565b611152565b3480156105cd57600080fd5b506103e06105dc366004611787565b6006602052600090815260409020546001600160a01b031681565b34801561060357600080fd5b506103e06106123660046117a2565b6111ab565b34801561062357600080fd5b506103e0610632366004611746565b6111c8565b34801561064357600080fd5b506102636106523660046117bb565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561068957600080fd5b506106dd610698366004611787565b600b60205260009081526040902080546001909101546001600160a01b039182169181169074010000000000000000000000000000000000000000900462ffffff1683565b604080516001600160a01b03948516815293909216602084015262ffffff169082015260600161026f565b34801561071457600080fd5b506102cc600081565b34801561072957600080fd5b506103e06107383660046117a2565b6001602052600090815260409020546001600160a01b031681565b34801561075f57600080fd5b5061024161076e3660046117bb565b6112c4565b34801561077f57600080fd5b506102cc60075481565b34801561079557600080fd5b506108226107a43660046118f3565b600a6020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e0840152166101008201526101200161026f565b60006108966000356001600160e01b0319166111c8565b90506001600160a01b038116158015906108b3575060005460ff16155b6108ff5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610230565b3660008037600080366000845af43d6000803e80801561091e573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061095957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610968336109da565b6109ad5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a3f565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610959565b600082815260046020526040902060010154610a35816112e9565b61092383836112f3565b6001600160a01b0381163314610abd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610230565b610ac78282611395565b5050565b610ad4336109da565b610b195760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6001600160a01b038116610b6f5760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610230565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610be05760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610230565b610bed8160006001611418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c2d336109da565b610c725760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b81610cbf5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610230565b6001600160a01b03811660009081526002602052604090205460ff16610d275760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610230565b60005b82811015610ecb57816001600160a01b031660036000868685818110610d5257610d5261191d565b9050602002016020810190610d679190611746565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610dd85760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610230565b8160036000868685818110610def57610def61191d565b9050602002016020810190610e049190611746565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610e5957610e5961191d565b9050602002016020810190610e6e9190611746565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610ec381611949565b915050610d2a565b50505050565b610eda336109da565b610f1f5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b610ac782826114b0565b610f32336109da565b610f775760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1a565b610faa336109da565b610fef5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6001600160a01b0381166110455760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610230565b6001600160a01b038116330361109d5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610230565b6110c77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1a565b6109d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610a3f565b6110fa336109da565b61113f5760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b6000805460ff1916911515919091179055565b61115b336109da565b6111a05760405162461bcd60e51b81526020600482015260226024820152600080516020611a9283398151915260448201526134b760f11b6064820152608401610230565b610923838383611418565b6000818152600160205260408120546001600160a01b0316610959565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112285750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561128657506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546112df816112e9565b6109238383611395565b6109d7813361150f565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac75760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113513390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610ac75760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b61146f5760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610230565b80156114aa576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61092383825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac75761154281611584565b61154d836020611596565b60405160200161155e929190611986565b60408051601f198184030181529082905262461bcd60e51b825261023091600401611a07565b60606109596001600160a01b03831660145b606060006115a5836002611a3a565b6115b0906002611a51565b67ffffffffffffffff8111156115c8576115c8611a64565b6040519080825280601f01601f1916602001820160405280156115f2576020820181803683370190505b509050600360fc1b8160008151811061160d5761160d61191d565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061163c5761163c61191d565b60200101906001600160f81b031916908160001a9053506000611660846002611a3a565b61166b906001611a51565b90505b60018111156116f0577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106116ac576116ac61191d565b1a60f81b8282815181106116c2576116c261191d565b60200101906001600160f81b031916908160001a90535060049490941c936116e981611a7a565b905061166e565b50831561173f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610230565b9392505050565b60006020828403121561175857600080fd5b81356001600160e01b03198116811461173f57600080fd5b80356001600160a01b03811681146112bf57600080fd5b60006020828403121561179957600080fd5b61173f82611770565b6000602082840312156117b457600080fd5b5035919050565b600080604083850312156117ce57600080fd5b823591506117de60208401611770565b90509250929050565b6000806000604084860312156117fc57600080fd5b833567ffffffffffffffff8082111561181457600080fd5b818601915086601f83011261182857600080fd5b81358181111561183757600080fd5b8760208260051b850101111561184c57600080fd5b6020928301955093506118629186019050611770565b90509250925092565b803580151581146112bf57600080fd5b6000806040838503121561188e57600080fd5b61189783611770565b91506117de6020840161186b565b6000602082840312156118b757600080fd5b61173f8261186b565b6000806000606084860312156118d557600080fd5b6118de84611770565b9250602084013591506118626040850161186b565b6000806040838503121561190657600080fd5b61190f83611770565b91506117de60208401611770565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161195b5761195b611933565b5060010190565b60005b8381101561197d578181015183820152602001611965565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516119be816017850160208801611962565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516119fb816028840160208801611962565b01602801949350505050565b6020815260008251806020840152611a26816040850160208701611962565b601f01601f19169190910160400192915050565b808202811582820484141761095957610959611933565b8082018082111561095957610959611933565b634e487b7160e01b600052604160045260246000fd5b600081611a8957611a89611933565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2LpRewardVaultProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 4139, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 4143, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 4147, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 4151, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 1978, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 1980, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 1984, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ { - "astId": 2789, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "pool_init_code_hash", - "offset": 0, - "slot": "7", - "type": "t_bytes32" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 2791, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "uniswapV3Factory", - "offset": 0, - "slot": "8", - "type": "t_address" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ { - "astId": 2793, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "recipient", - "offset": 0, - "slot": "9", - "type": "t_address" + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2800, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "vaultInfo", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_mapping(t_address,t_struct(VaultInfo)3594_storage))" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2805, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "poolInfo", - "offset": 0, - "slot": "11", - "type": "t_mapping(t_address,t_struct(PoolInfo)3090_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "token1", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pool_init_code_hash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "recipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_address,t_mapping(t_address,t_struct(VaultInfo)3594_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => struct LibScheduleVault.VaultInfo))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_struct(VaultInfo)3594_storage)" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_address,t_struct(PoolInfo)3090_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibPool.PoolInfo)", - "numberOfBytes": "32", - "value": "t_struct(PoolInfo)3090_storage" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_address,t_struct(VaultInfo)3594_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)3594_storage" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_struct(PoolInfo)3090_storage": { - "encoding": "inplace", - "label": "struct LibPool.PoolInfo", - "members": [ - { - "astId": 3085, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "token0", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 3087, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "token1", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 3089, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "fee", - "offset": 20, - "slot": "1", - "type": "t_uint24" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(VaultInfo)3594_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ - { - "astId": 3577, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 3579, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 3581, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3583, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 3585, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 3587, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3589, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3591, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 3593, - "contract": "contracts/L2/vaults/L2LpRewardVaultProxy.sol:L2LpRewardVaultProxy", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" - } - ], - "numberOfBytes": "192" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_uint24": { - "encoding": "inplace", - "label": "uint24", - "numberOfBytes": "3" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2NonScheduleVault.json b/contracts/data/tonstarter/abi/L2NonScheduleVault.json index 997894b..c8eadad 100644 --- a/contracts/data/tonstarter/abi/L2NonScheduleVault.json +++ b/contracts/data/tonstarter/abi/L2NonScheduleVault.json @@ -1,1017 +1,720 @@ -{ - "address": "0x191864367707CaE5bA218D6779d4883Eed078Dd2", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "newClaimer", - "type": "address" - } - ], - "name": "ChangedClaimer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - } - ], - "name": "InitializedL2NonScheduleVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "address", - "name": "_newClaimer", - "type": "address" - } - ], - "name": "changeClaimer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_totalAllocatedAmount", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - } - ], - "internalType": "struct LibNonScheduleVault.VaultInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xd6f6fd386019c984f7e9f35e9068730a674da97a15c4d7f6e3ade63354a3c3f2", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x191864367707CaE5bA218D6779d4883Eed078Dd2", - "transactionIndex": 0, - "gasUsed": "1907053", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe8568214d0036c5988cb14513e504927aff778bd48022b05e7282b503f41d499", - "transactionHash": "0xd6f6fd386019c984f7e9f35e9068730a674da97a15c4d7f6e3ade63354a3c3f2", - "logs": [], - "blockNumber": 22637, - "cumulativeGasUsed": "1907053", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a3d458828a1932a50e4175124b65d2fd", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newClaimer\",\"type\":\"address\"}],\"name\":\"ChangedClaimer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"}],\"name\":\"InitializedL2NonScheduleVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_newClaimer\",\"type\":\"address\"}],\"name\":\"changeClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_totalAllocatedAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct LibNonScheduleVault.VaultInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vault that claims when the Vault admin wants it\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2NonScheduleVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2NonScheduleVault.sol\":\"L2NonScheduleVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2NonScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2NonScheduleVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\n/**\\n * @title L2NonScheduleVault\\n * @dev Vault that claims when the Vault admin wants it\\n */\\ncontract L2NonScheduleVault is L2CustomVaultBase, L2NonScheduleVaultStorage {\\n using SafeERC20 for IERC20;\\n\\n event InitializedL2NonScheduleVault(\\n address l2Token,\\n string name,\\n address claimer,\\n uint256 totalAllocatedAmount\\n );\\n\\n event ClaimedInVault(address l2Token, string name, address to, uint256 amount);\\n event ChangedClaimer(address l2Token, string name, address newClaimer);\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n function initialize (\\n address l2Token,\\n string memory vaultName,\\n address claimer,\\n uint256 _totalAllocatedAmount\\n )\\n external\\n onlyL2ProjectManagerOrVaultAdmin(l2Token)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n require(_totalAllocatedAmount != 0 && claimer != address(0), \\\"zero value\\\");\\n\\n LibNonScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n require(info.totalAllocatedAmount == 0, \\\"already initialized\\\");\\n vaultInfo[l2Token][nameKey].totalAllocatedAmount = _totalAllocatedAmount;\\n vaultInfo[l2Token][nameKey].claimer = claimer;\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), _totalAllocatedAmount);\\n\\n emit InitializedL2NonScheduleVault(l2Token, vaultName, claimer, _totalAllocatedAmount);\\n }\\n\\n function changeClaimer(\\n address l2Token,\\n string memory vaultName,\\n address _newClaimer\\n ) external onlyL2ProjectManagerOrVaultAdmin(l2Token) nonZeroAddress(l2Token) nonZeroAddress(_newClaimer)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n LibNonScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n require(info.totalAllocatedAmount != 0, \\\"not initialized\\\");\\n\\n require(info.claimer != _newClaimer, \\\"same\\\");\\n vaultInfo[l2Token][nameKey].claimer = _newClaimer;\\n emit ChangedClaimer(l2Token, vaultName, _newClaimer);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n function claim(address l2Token, string memory vaultName, uint256 amount)\\n external onlyVaultAdminOfToken(l2Token) nonZeroAddress(l2Token) nonZero(amount)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n\\n LibNonScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n\\n require(info.claimer != address(0), \\\"no claimer\\\");\\n require(amount <= (info.totalAllocatedAmount - info.totalClaimedAmount)\\n && amount <= IERC20(l2Token).balanceOf(address(this)), \\\"insufficient balance\\\");\\n\\n vaultInfo[l2Token][nameKey].totalClaimedAmount += amount;\\n\\n IERC20(l2Token).safeTransfer(info.claimer, amount);\\n emit ClaimedInVault(l2Token, vaultName, info.claimer, amount);\\n }\\n\\n /* ========== VIEW ========== */\\n\\n function viewVaultInfo(address l2Token, string memory vaultName) external view returns (LibNonScheduleVault.VaultInfo memory){\\n\\n return vaultInfo[l2Token][keccak256(bytes(vaultName))];\\n\\n }\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xce0f1c170396d1216d08ee3e77e0a4c08d45d965e234652777828a450c6ced3c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2NonScheduleVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibNonScheduleVault } from \\\"../../libraries/LibNonScheduleVault.sol\\\";\\n/**\\n * @title L2NonScheduleVaultStorage\\n * @dev\\n */\\ncontract L2NonScheduleVaultStorage {\\n\\n // l2token - keccak256 (vault name) - LibNonScheduleVault.VaultInfo\\n mapping(address => mapping(bytes32 => LibNonScheduleVault.VaultInfo)) public vaultInfo;\\n\\n\\n}\",\"keccak256\":\"0x448dfea946b199079550d43f1f56e47a349668b74cc0a91af53ed1bd8f5c25d6\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibNonScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibNonScheduleVault\\n */\\nlibrary LibNonScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimedAmount; // Total amount claimed\\n }\\n}\",\"keccak256\":\"0xd616ab13a950a4b9171a33b22c139766c06f90c4edd813e7e0280ef83d068810\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b506121268061002d6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063550d01a3116100f957806391d1485411610097578063b40d735011610071578063b40d735014610487578063b911135f146104f0578063d547741f14610519578063d8f1ef241461052c57600080fd5b806391d1485414610433578063a217fddf1461046c578063a41823431461047457600080fd5b806375829def116100d357806375829def146103bd57806375b238fc146103d05780637d601b92146103f75780637fc46ba81461040a57600080fd5b8063550d01a31461037a57806363a8fd891461039d57806370480275146103aa57600080fd5b806324d7806c1161016657806336568abe1161014057806336568abe146102fb57806350d2a2761461030e57806351e8152a1461034f57806352351e851461036257600080fd5b806324d7806c146102c25780632f2ff15d146102d557806335b9ac66146102e857600080fd5b80631785f53c116101a25780631785f53c146102445780631e8948c314610257578063229852461461026a578063248a9ca31461029f57600080fd5b806301ffc9a7146101c9578063021a4405146101f15780630eb76bd314610206575b600080fd5b6101dc6101d7366004611bed565b61053f565b60405190151581526020015b60405180910390f35b6102046101ff366004611cd6565b610576565b005b610219610214366004611d3c565b6107bf565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016101e8565b610204610252366004611d8a565b610840565b610204610265366004611da5565b6108cd565b6102917ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016101e8565b6102916102ad366004611dd8565b60009081526004602052604090206001015490565b6101dc6102d0366004611d8a565b610aa6565b6102046102e3366004611df1565b610ae6565b6102046102f6366004611da5565b610b10565b610204610309366004611df1565b610cc4565b61033761031c366004611bed565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b6101dc61035d366004611da5565b610d50565b6005546103379061010090046001600160a01b031681565b6101dc610388366004611d8a565b60026020526000908152604090205460ff1681565b6000546101dc9060ff1681565b6102046103b8366004611d8a565b610d8d565b6102046103cb366004611d8a565b610e17565b6102917fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610204610405366004611e14565b610f79565b610337610418366004611d8a565b6006602052600090815260409020546001600160a01b031681565b6101dc610441366004611df1565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610291600081565b610204610482366004611d8a565b611213565b6104cb610495366004611e72565b60076020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016101e8565b6103376104fe366004611dd8565b6001602052600090815260409020546001600160a01b031681565b610204610527366004611df1565b611330565b61020461053a366004611e9c565b611355565b60006001600160e01b03198216637965db0b60e01b148061057057506301ffc9a760e01b6001600160e01b03198316145b92915050565b600554849061010090046001600160a01b03163314806105d357506001600160a01b0381811660009081526006602052604090205416158015906105d357506001600160a01b038181166000908152600660205260409020541633145b6106395760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b60648201526084015b60405180910390fd5b83516020850120821580159061065757506001600160a01b03841615155b6106905760405162461bcd60e51b815260206004820152600a6024820152697a65726f2076616c756560b01b6044820152606401610630565b6001600160a01b03808716600090815260076020908152604080832085845282529182902082516060810184528154909416845260018101549184018290526002015491830191909152156107275760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610630565b6001600160a01b03878116600081815260076020908152604080832087845290915290206001810187905580546001600160a01b0319168884161790556005546107799261010090910416308761164f565b7fd9b8784b343080b1912ed7647b9c5a961bcc1769d71a89569c1ee0249b540cfa878787876040516107ae9493929190611f43565b60405180910390a150505050505050565b6107ec604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b506001600160a01b0380831660009081526007602090815260408083208551868401208452825291829020825160608101845281549094168452600181015491840191909152600201549082015292915050565b61084933610aa6565b6108a05760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610cc4565b50565b816001600160a01b0381166109095760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b816001600160a01b0381166109455760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b6001600160a01b038085166000908152600660205260409020548591161580159061098957506001600160a01b038181166000908152600660205260409020541633145b6109e35760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610630565b6001600160a01b03858116600090815260066020526040902054818616911603610a385760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610570565b600082815260046020526040902060010154610b0181611773565b610b0b838361177d565b505050565b816001600160a01b038116610b4c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b816001600160a01b038116610b885760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b60055461010090046001600160a01b031615801590610bb6575060055461010090046001600160a01b031633145b610c025760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610630565b6001600160a01b03848116600090815260066020526040902054818516911603610c575760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b0381163314610d425760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610630565b610d4c828261181f565b5050565b60006001600160a01b03821615801590610d8657506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b610d9633610aa6565b610ded5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ae6565b610e2033610aa6565b610e775760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6001600160a01b038116610ecd5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610630565b6001600160a01b0381163303610f255760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610630565b610f4f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ae6565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610cc4565b600554839061010090046001600160a01b0316331480610fd657506001600160a01b038181166000908152600660205260409020541615801590610fd657506001600160a01b038181166000908152600660205260409020541633145b6110375760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610630565b836001600160a01b0381166110735760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b826001600160a01b0381166110af5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b84516020808701919091206001600160a01b038089166000908152600784526040808220848352855280822081516060810183528154909416845260018101549584018690526002015490830152919290910361114e5760405162461bcd60e51b815260206004820152600f60248201527f6e6f7420696e697469616c697a656400000000000000000000000000000000006044820152606401610630565b80516001600160a01b038088169116036111935760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0388811660009081526007602090815260408083208684529091529081902080546001600160a01b03191692891692909217909155517fca06a665ab96328b2df1007b733fb1aa10ae76d39bea810da47a66f7a8c2dee090611201908a908a908a90611f78565b60405180910390a15050505050505050565b806001600160a01b03811661124f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b61125833610aa6565b6112af5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6005546001600160a01b0380841661010090920416036112fa5760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60008281526004602052604090206001015461134b81611773565b610b0b838361181f565b6001600160a01b038084166000908152600660205260409020548491161580159061139957506001600160a01b038181166000908152600660205260409020541633145b6113f35760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610630565b836001600160a01b03811661142f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b82806000036114655760405162461bcd60e51b81526020600482015260026024820152615a3160f01b6044820152606401610630565b84516020808701919091206001600160a01b03808916600090815260078452604080822084835285529081902081516060810183528154909316808452600182015495840195909552600201549082015290916114f15760405162461bcd60e51b815260206004820152600a60248201526937379031b630b4b6b2b960b11b6044820152606401610630565b806040015181602001516115059190611fc4565b861115801561157b57506040516370a0823160e01b81523060048201526001600160a01b038916906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190611fd7565b8611155b6115c75760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610630565b6001600160a01b0388166000908152600760209081526040808320858452909152812060020180548892906115fd908490611ff0565b90915550508051611619906001600160a01b038a1690886118a2565b80516040517fca22eeecfd9befea639efcc7bc0f6d548698260714f080f97a29487ca7362de891611201918b918b918b90611f43565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916116b39190612003565b6000604051808303816000865af19150503d80600081146116f0576040519150601f19603f3d011682016040523d82523d6000602084013e6116f5565b606091505b509150915081801561171f57508051158061171f57508080602001905181019061171f919061201f565b61176b5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610630565b505050505050565b6108ca81336119bd565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610d4c5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117db3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610d4c5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916118fe9190612003565b6000604051808303816000865af19150503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b509150915081801561196a57508051158061196a57508080602001905181019061196a919061201f565b6119b65760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610630565b5050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610d4c576119f081611a32565b6119fb836020611a44565b604051602001611a0c929190612041565b60408051601f198184030181529082905262461bcd60e51b8252610630916004016120c2565b60606105706001600160a01b03831660145b60606000611a538360026120d5565b611a5e906002611ff0565b67ffffffffffffffff811115611a7657611a76611c33565b6040519080825280601f01601f191660200182016040528015611aa0576020820181803683370190505b509050600360fc1b81600081518110611abb57611abb6120ec565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611aea57611aea6120ec565b60200101906001600160f81b031916908160001a9053506000611b0e8460026120d5565b611b19906001611ff0565b90505b6001811115611b9e577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611b5a57611b5a6120ec565b1a60f81b828281518110611b7057611b706120ec565b60200101906001600160f81b031916908160001a90535060049490941c93611b9781612102565b9050611b1c565b508315610d865760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610630565b600060208284031215611bff57600080fd5b81356001600160e01b031981168114610d8657600080fd5b80356001600160a01b0381168114611c2e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611c5a57600080fd5b813567ffffffffffffffff80821115611c7557611c75611c33565b604051601f8301601f19908116603f01168101908282118183101715611c9d57611c9d611c33565b81604052838152866020858801011115611cb657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215611cec57600080fd5b611cf585611c17565b9350602085013567ffffffffffffffff811115611d1157600080fd5b611d1d87828801611c49565b935050611d2c60408601611c17565b9396929550929360600135925050565b60008060408385031215611d4f57600080fd5b611d5883611c17565b9150602083013567ffffffffffffffff811115611d7457600080fd5b611d8085828601611c49565b9150509250929050565b600060208284031215611d9c57600080fd5b610d8682611c17565b60008060408385031215611db857600080fd5b611dc183611c17565b9150611dcf60208401611c17565b90509250929050565b600060208284031215611dea57600080fd5b5035919050565b60008060408385031215611e0457600080fd5b82359150611dcf60208401611c17565b600080600060608486031215611e2957600080fd5b611e3284611c17565b9250602084013567ffffffffffffffff811115611e4e57600080fd5b611e5a86828701611c49565b925050611e6960408501611c17565b90509250925092565b60008060408385031215611e8557600080fd5b611e8e83611c17565b946020939093013593505050565b600080600060608486031215611eb157600080fd5b611eba84611c17565b9250602084013567ffffffffffffffff811115611ed657600080fd5b611ee286828701611c49565b925050604084013590509250925092565b60005b83811015611f0e578181015183820152602001611ef6565b50506000910152565b60008151808452611f2f816020860160208601611ef3565b601f01601f19169290920160200192915050565b60006001600160a01b03808716835260806020840152611f666080840187611f17565b94166040830152506060015292915050565b60006001600160a01b03808616835260606020840152611f9b6060840186611f17565b9150808416604084015250949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561057057610570611fae565b600060208284031215611fe957600080fd5b5051919050565b8082018082111561057057610570611fae565b60008251612015818460208701611ef3565b9190910192915050565b60006020828403121561203157600080fd5b81518015158114610d8657600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612079816017850160208801611ef3565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516120b6816028840160208801611ef3565b01602801949350505050565b602081526000610d866020830184611f17565b808202811582820484141761057057610570611fae565b634e487b7160e01b600052603260045260246000fd5b60008161211157612111611fae565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063550d01a3116100f957806391d1485411610097578063b40d735011610071578063b40d735014610487578063b911135f146104f0578063d547741f14610519578063d8f1ef241461052c57600080fd5b806391d1485414610433578063a217fddf1461046c578063a41823431461047457600080fd5b806375829def116100d357806375829def146103bd57806375b238fc146103d05780637d601b92146103f75780637fc46ba81461040a57600080fd5b8063550d01a31461037a57806363a8fd891461039d57806370480275146103aa57600080fd5b806324d7806c1161016657806336568abe1161014057806336568abe146102fb57806350d2a2761461030e57806351e8152a1461034f57806352351e851461036257600080fd5b806324d7806c146102c25780632f2ff15d146102d557806335b9ac66146102e857600080fd5b80631785f53c116101a25780631785f53c146102445780631e8948c314610257578063229852461461026a578063248a9ca31461029f57600080fd5b806301ffc9a7146101c9578063021a4405146101f15780630eb76bd314610206575b600080fd5b6101dc6101d7366004611bed565b61053f565b60405190151581526020015b60405180910390f35b6102046101ff366004611cd6565b610576565b005b610219610214366004611d3c565b6107bf565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016101e8565b610204610252366004611d8a565b610840565b610204610265366004611da5565b6108cd565b6102917ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016101e8565b6102916102ad366004611dd8565b60009081526004602052604090206001015490565b6101dc6102d0366004611d8a565b610aa6565b6102046102e3366004611df1565b610ae6565b6102046102f6366004611da5565b610b10565b610204610309366004611df1565b610cc4565b61033761031c366004611bed565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b6101dc61035d366004611da5565b610d50565b6005546103379061010090046001600160a01b031681565b6101dc610388366004611d8a565b60026020526000908152604090205460ff1681565b6000546101dc9060ff1681565b6102046103b8366004611d8a565b610d8d565b6102046103cb366004611d8a565b610e17565b6102917fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610204610405366004611e14565b610f79565b610337610418366004611d8a565b6006602052600090815260409020546001600160a01b031681565b6101dc610441366004611df1565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610291600081565b610204610482366004611d8a565b611213565b6104cb610495366004611e72565b60076020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016101e8565b6103376104fe366004611dd8565b6001602052600090815260409020546001600160a01b031681565b610204610527366004611df1565b611330565b61020461053a366004611e9c565b611355565b60006001600160e01b03198216637965db0b60e01b148061057057506301ffc9a760e01b6001600160e01b03198316145b92915050565b600554849061010090046001600160a01b03163314806105d357506001600160a01b0381811660009081526006602052604090205416158015906105d357506001600160a01b038181166000908152600660205260409020541633145b6106395760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b60648201526084015b60405180910390fd5b83516020850120821580159061065757506001600160a01b03841615155b6106905760405162461bcd60e51b815260206004820152600a6024820152697a65726f2076616c756560b01b6044820152606401610630565b6001600160a01b03808716600090815260076020908152604080832085845282529182902082516060810184528154909416845260018101549184018290526002015491830191909152156107275760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610630565b6001600160a01b03878116600081815260076020908152604080832087845290915290206001810187905580546001600160a01b0319168884161790556005546107799261010090910416308761164f565b7fd9b8784b343080b1912ed7647b9c5a961bcc1769d71a89569c1ee0249b540cfa878787876040516107ae9493929190611f43565b60405180910390a150505050505050565b6107ec604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b506001600160a01b0380831660009081526007602090815260408083208551868401208452825291829020825160608101845281549094168452600181015491840191909152600201549082015292915050565b61084933610aa6565b6108a05760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610cc4565b50565b816001600160a01b0381166109095760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b816001600160a01b0381166109455760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b6001600160a01b038085166000908152600660205260409020548591161580159061098957506001600160a01b038181166000908152600660205260409020541633145b6109e35760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610630565b6001600160a01b03858116600090815260066020526040902054818616911603610a385760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff16610570565b600082815260046020526040902060010154610b0181611773565b610b0b838361177d565b505050565b816001600160a01b038116610b4c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b816001600160a01b038116610b885760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b60055461010090046001600160a01b031615801590610bb6575060055461010090046001600160a01b031633145b610c025760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610630565b6001600160a01b03848116600090815260066020526040902054818516911603610c575760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b0381163314610d425760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610630565b610d4c828261181f565b5050565b60006001600160a01b03821615801590610d8657506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b610d9633610aa6565b610ded5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ae6565b610e2033610aa6565b610e775760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6001600160a01b038116610ecd5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610630565b6001600160a01b0381163303610f255760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610630565b610f4f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ae6565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610cc4565b600554839061010090046001600160a01b0316331480610fd657506001600160a01b038181166000908152600660205260409020541615801590610fd657506001600160a01b038181166000908152600660205260409020541633145b6110375760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610630565b836001600160a01b0381166110735760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b826001600160a01b0381166110af5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b84516020808701919091206001600160a01b038089166000908152600784526040808220848352855280822081516060810183528154909416845260018101549584018690526002015490830152919290910361114e5760405162461bcd60e51b815260206004820152600f60248201527f6e6f7420696e697469616c697a656400000000000000000000000000000000006044820152606401610630565b80516001600160a01b038088169116036111935760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0388811660009081526007602090815260408083208684529091529081902080546001600160a01b03191692891692909217909155517fca06a665ab96328b2df1007b733fb1aa10ae76d39bea810da47a66f7a8c2dee090611201908a908a908a90611f78565b60405180910390a15050505050505050565b806001600160a01b03811661124f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b61125833610aa6565b6112af5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610630565b6005546001600160a01b0380841661010090920416036112fa5760405162461bcd60e51b81526004016106309060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60008281526004602052604090206001015461134b81611773565b610b0b838361181f565b6001600160a01b038084166000908152600660205260409020548491161580159061139957506001600160a01b038181166000908152600660205260409020541633145b6113f35760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610630565b836001600160a01b03811661142f5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610630565b82806000036114655760405162461bcd60e51b81526020600482015260026024820152615a3160f01b6044820152606401610630565b84516020808701919091206001600160a01b03808916600090815260078452604080822084835285529081902081516060810183528154909316808452600182015495840195909552600201549082015290916114f15760405162461bcd60e51b815260206004820152600a60248201526937379031b630b4b6b2b960b11b6044820152606401610630565b806040015181602001516115059190611fc4565b861115801561157b57506040516370a0823160e01b81523060048201526001600160a01b038916906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190611fd7565b8611155b6115c75760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610630565b6001600160a01b0388166000908152600760209081526040808320858452909152812060020180548892906115fd908490611ff0565b90915550508051611619906001600160a01b038a1690886118a2565b80516040517fca22eeecfd9befea639efcc7bc0f6d548698260714f080f97a29487ca7362de891611201918b918b918b90611f43565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916116b39190612003565b6000604051808303816000865af19150503d80600081146116f0576040519150601f19603f3d011682016040523d82523d6000602084013e6116f5565b606091505b509150915081801561171f57508051158061171f57508080602001905181019061171f919061201f565b61176b5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610630565b505050505050565b6108ca81336119bd565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610d4c5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117db3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610d4c5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916118fe9190612003565b6000604051808303816000865af19150503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b509150915081801561196a57508051158061196a57508080602001905181019061196a919061201f565b6119b65760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610630565b5050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610d4c576119f081611a32565b6119fb836020611a44565b604051602001611a0c929190612041565b60408051601f198184030181529082905262461bcd60e51b8252610630916004016120c2565b60606105706001600160a01b03831660145b60606000611a538360026120d5565b611a5e906002611ff0565b67ffffffffffffffff811115611a7657611a76611c33565b6040519080825280601f01601f191660200182016040528015611aa0576020820181803683370190505b509050600360fc1b81600081518110611abb57611abb6120ec565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611aea57611aea6120ec565b60200101906001600160f81b031916908160001a9053506000611b0e8460026120d5565b611b19906001611ff0565b90505b6001811115611b9e577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611b5a57611b5a6120ec565b1a60f81b828281518110611b7057611b706120ec565b60200101906001600160f81b031916908160001a90535060049490941c93611b9781612102565b9050611b1c565b508315610d865760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610630565b600060208284031215611bff57600080fd5b81356001600160e01b031981168114610d8657600080fd5b80356001600160a01b0381168114611c2e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611c5a57600080fd5b813567ffffffffffffffff80821115611c7557611c75611c33565b604051601f8301601f19908116603f01168101908282118183101715611c9d57611c9d611c33565b81604052838152866020858801011115611cb657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215611cec57600080fd5b611cf585611c17565b9350602085013567ffffffffffffffff811115611d1157600080fd5b611d1d87828801611c49565b935050611d2c60408601611c17565b9396929550929360600135925050565b60008060408385031215611d4f57600080fd5b611d5883611c17565b9150602083013567ffffffffffffffff811115611d7457600080fd5b611d8085828601611c49565b9150509250929050565b600060208284031215611d9c57600080fd5b610d8682611c17565b60008060408385031215611db857600080fd5b611dc183611c17565b9150611dcf60208401611c17565b90509250929050565b600060208284031215611dea57600080fd5b5035919050565b60008060408385031215611e0457600080fd5b82359150611dcf60208401611c17565b600080600060608486031215611e2957600080fd5b611e3284611c17565b9250602084013567ffffffffffffffff811115611e4e57600080fd5b611e5a86828701611c49565b925050611e6960408501611c17565b90509250925092565b60008060408385031215611e8557600080fd5b611e8e83611c17565b946020939093013593505050565b600080600060608486031215611eb157600080fd5b611eba84611c17565b9250602084013567ffffffffffffffff811115611ed657600080fd5b611ee286828701611c49565b925050604084013590509250925092565b60005b83811015611f0e578181015183820152602001611ef6565b50506000910152565b60008151808452611f2f816020860160208601611ef3565b601f01601f19169290920160200192915050565b60006001600160a01b03808716835260806020840152611f666080840187611f17565b94166040830152506060015292915050565b60006001600160a01b03808616835260606020840152611f9b6060840186611f17565b9150808416604084015250949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561057057610570611fae565b600060208284031215611fe957600080fd5b5051919050565b8082018082111561057057610570611fae565b60008251612015818460208701611ef3565b9190910192915050565b60006020828403121561203157600080fd5b81518015158114610d8657600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612079816017850160208801611ef3565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516120b6816028840160208801611ef3565b01602801949350505050565b602081526000610d866020830184611f17565b808202811582820484141761057057610570611fae565b634e487b7160e01b600052603260045260246000fd5b60008161211157612111611fae565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "details": "Vault that claims when the Vault admin wants it", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." - }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } - } - }, - "title": "L2NonScheduleVault", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 8669, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 8673, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" - }, - { - "astId": 8677, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 8681, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, - { - "astId": 24, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, - { - "astId": 5165, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, - { - "astId": 5167, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" - }, - { - "astId": 5171, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 7145, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)7981_storage))" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)7981_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(bytes32 => struct LibNonScheduleVault.VaultInfo))", - "numberOfBytes": "32", - "value": "t_mapping(t_bytes32,t_struct(VaultInfo)7981_storage)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" - }, - "t_mapping(t_bytes32,t_struct(VaultInfo)7981_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct LibNonScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)7981_storage" - }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "newClaimer", + "type": "address" + } + ], + "name": "ChangedClaimer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ClaimedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + } + ], + "name": "InitializedL2NonScheduleVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "internalType": "address", + "name": "_newClaimer", + "type": "address" + } + ], + "name": "changeClaimer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_struct(VaultInfo)7981_storage": { - "encoding": "inplace", - "label": "struct LibNonScheduleVault.VaultInfo", - "members": [ + { + "internalType": "uint256", + "name": "_totalAllocatedAmount", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "string", + "name": "vaultName", + "type": "string" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 7976, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" + "internalType": "address", + "name": "claimer", + "type": "address" }, { - "astId": 7978, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 7980, - "contract": "contracts/L2/vaults/L2NonScheduleVault.sol:L2NonScheduleVault", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" } ], - "numberOfBytes": "96" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + "internalType": "struct LibNonScheduleVault.VaultInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2ProjectManager.json b/contracts/data/tonstarter/abi/L2ProjectManager.json index e85aba5..9669786 100644 --- a/contracts/data/tonstarter/abi/L2ProjectManager.json +++ b/contracts/data/tonstarter/abi/L2ProjectManager.json @@ -1,2226 +1,1801 @@ -{ - "address": "0xf30eB9f0D6B152f09DEcbED5e46D3f25314ecb7e", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "name": "CreatedL2Project", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalAmount", - "type": "uint256" - } - ], - "name": "DistributedL2Token", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "name": "createL2Project", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalAmount", - "type": "uint256" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "stosTier1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier2", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier3", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier4", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier1Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier2Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier3Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier4Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "total1roundSaleAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "total2roundSaleAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "saleTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "payTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "hardcapAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "changeTOSPercent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "startWhiteTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endWhiteTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start1roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end1roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "snapshotTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start2roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end2roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "claimCounts", - "type": "uint256" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSaleVault", - "name": "vaultParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[]", - "name": "claimTimes", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "claimPercents", - "type": "uint256[]" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSaleClaim", - "name": "claimParams", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSale", - "name": "publicSaleParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initSqrtPrice", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "fee", - "type": "uint16" - } - ], - "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", - "name": "initialVaultParams", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "internalType": "struct LibPool.PoolInfo", - "name": "poolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", - "name": "rewardTonTosPoolParams", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "internalType": "struct LibPool.PoolInfo", - "name": "poolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", - "name": "rewardProjectTosPoolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "tosAirdropParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "tonAirdropParams", - "type": "tuple" - } - ], - "internalType": "struct LibProject.TokamakVaults", - "name": "tokamakVaults", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterSchedule[]", - "name": "customScheduleVaults", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - } - ], - "internalType": "struct LibProject.InitalParameterNonScheduleVault[]", - "name": "customNonScheduleVaults", - "type": "tuple[]" - } - ], - "name": "distributesL2Token", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalAmount", - "type": "uint256" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "stosTier1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier2", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier3", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stosTier4", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier1Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier2Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier3Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tier4Percents", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "total1roundSaleAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "total2roundSaleAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "saleTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "payTokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "hardcapAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "changeTOSPercent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "startWhiteTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endWhiteTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start1roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end1roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "snapshotTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start2roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end2roundTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "claimCounts", - "type": "uint256" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSaleVault", - "name": "vaultParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[]", - "name": "claimTimes", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "claimPercents", - "type": "uint256[]" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSaleClaim", - "name": "claimParams", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterPublicSale", - "name": "publicSaleParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initSqrtPrice", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "startTime", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "fee", - "type": "uint16" - } - ], - "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", - "name": "initialVaultParams", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "internalType": "struct LibPool.PoolInfo", - "name": "poolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", - "name": "rewardTonTosPoolParams", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - } - ], - "internalType": "struct LibPool.PoolInfo", - "name": "poolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", - "name": "rewardProjectTosPoolParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "tosAirdropParams", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "tonAirdropParams", - "type": "tuple" - } - ], - "internalType": "struct LibProject.TokamakVaults", - "name": "tokamakVaults", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "internalType": "struct LibProject.InitalParameterSchedule[]", - "name": "customScheduleVaults", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - } - ], - "internalType": "struct LibProject.InitalParameterNonScheduleVault[]", - "name": "customNonScheduleVaults", - "type": "tuple[]" - } - ], - "name": "distributesL2TokenOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialLiquidityVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2CrossDomainMessenger", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2TokenFactory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "liquidityRewardVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonScheduleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "projects", - "outputs": [ - { - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "publicSaleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "scheduleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1ProjectManager", - "type": "address" - } - ], - "name": "setL1ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2CrossDomainMessenger", - "type": "address" - } - ], - "name": "setL2CrossDomainMessenger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2TokenFactory", - "type": "address" - } - ], - "name": "setL2TokenFactory", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "publicSale", - "type": "address" - }, - { - "internalType": "address", - "name": "initialLiquidity", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidityReward", - "type": "address" - }, - { - "internalType": "address", - "name": "tonAirdrop", - "type": "address" - }, - { - "internalType": "address", - "name": "tosAirdrop", - "type": "address" - }, - { - "internalType": "address", - "name": "_scheduleVault", - "type": "address" - }, - { - "internalType": "address", - "name": "_nonScheduleVault", - "type": "address" - } - ], - "name": "setTokamakVaults", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "tokenMaps", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tonAirdropVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tosAirdropVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2token", - "type": "address" - } - ], - "name": "viewProject", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "internalType": "struct LibProject.L2ProjectInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x8aa23f5a638476066ee06bb6e05e447ef389cdd6f08e71fe9c18c83cd39e6cee", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xf30eB9f0D6B152f09DEcbED5e46D3f25314ecb7e", - "transactionIndex": 0, - "gasUsed": "3603487", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020004400002088000000800000000000000000000000008000000000400000000000000000000000000000000000000010000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x20935d550e8e20e35d55f84a48060a6ff80deca536827ff064c3bfabbbd86bec", - "transactionHash": "0x8aa23f5a638476066ee06bb6e05e447ef389cdd6f08e71fe9c18c83cd39e6cee", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23808, - "transactionHash": "0x8aa23f5a638476066ee06bb6e05e447ef389cdd6f08e71fe9c18c83cd39e6cee", - "address": "0xf30eB9f0D6B152f09DEcbED5e46D3f25314ecb7e", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x20935d550e8e20e35d55f84a48060a6ff80deca536827ff064c3bfabbbd86bec" +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" }, { - "transactionIndex": 0, - "blockNumber": 23808, - "transactionHash": "0x8aa23f5a638476066ee06bb6e05e447ef389cdd6f08e71fe9c18c83cd39e6cee", - "address": "0xf30eB9f0D6B152f09DEcbED5e46D3f25314ecb7e", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x20935d550e8e20e35d55f84a48060a6ff80deca536827ff064c3bfabbbd86bec" - } - ], - "blockNumber": 23808, - "cumulativeGasUsed": "3603487", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 9, - "solcInputHash": "8d54b7ccf656d356eaa1331bf80029c5", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"name\":\"CreatedL2Project\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"}],\"name\":\"DistributedL2Token\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"name\":\"createL2Project\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stosTier1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier4\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier1Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier2Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier3Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier4Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total1roundSaleAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total2roundSaleAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"saleTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hardcapAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"changeTOSPercent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startWhiteTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endWhiteTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start1roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end1roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"snapshotTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start2roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end2roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimCounts\",\"type\":\"uint256\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSaleVault\",\"name\":\"vaultParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"claimTimes\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimPercents\",\"type\":\"uint256[]\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSaleClaim\",\"name\":\"claimParams\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSale\",\"name\":\"publicSaleParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initSqrtPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"fee\",\"type\":\"uint16\"}],\"internalType\":\"struct LibProject.InitalParameterInitialLiquidityVault\",\"name\":\"initialVaultParams\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"poolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterLiquidityRewardVault\",\"name\":\"rewardTonTosPoolParams\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"poolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterLiquidityRewardVault\",\"name\":\"rewardProjectTosPoolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"tosAirdropParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"tonAirdropParams\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.TokamakVaults\",\"name\":\"tokamakVaults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterSchedule[]\",\"name\":\"customScheduleVaults\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct LibProject.InitalParameterNonScheduleVault[]\",\"name\":\"customNonScheduleVaults\",\"type\":\"tuple[]\"}],\"name\":\"distributesL2Token\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stosTier1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stosTier4\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier1Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier2Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier3Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tier4Percents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total1roundSaleAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total2roundSaleAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"saleTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payTokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hardcapAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"changeTOSPercent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startWhiteTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endWhiteTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start1roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end1roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"snapshotTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start2roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end2roundTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimCounts\",\"type\":\"uint256\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSaleVault\",\"name\":\"vaultParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"claimTimes\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimPercents\",\"type\":\"uint256[]\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSaleClaim\",\"name\":\"claimParams\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterPublicSale\",\"name\":\"publicSaleParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tosPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initSqrtPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startTime\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"fee\",\"type\":\"uint16\"}],\"internalType\":\"struct LibProject.InitalParameterInitialLiquidityVault\",\"name\":\"initialVaultParams\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"poolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterLiquidityRewardVault\",\"name\":\"rewardTonTosPoolParams\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"internalType\":\"struct LibPool.PoolInfo\",\"name\":\"poolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterLiquidityRewardVault\",\"name\":\"rewardProjectTosPoolParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"tosAirdropParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"tonAirdropParams\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.TokamakVaults\",\"name\":\"tokamakVaults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"internalType\":\"struct LibProject.InitalParameterSchedule[]\",\"name\":\"customScheduleVaults\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct LibProject.InitalParameterNonScheduleVault[]\",\"name\":\"customNonScheduleVaults\",\"type\":\"tuple[]\"}],\"name\":\"distributesL2TokenOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialLiquidityVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2TokenFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityRewardVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonScheduleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"projects\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicSaleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scheduleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1ProjectManager\",\"type\":\"address\"}],\"name\":\"setL1ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2CrossDomainMessenger\",\"type\":\"address\"}],\"name\":\"setL2CrossDomainMessenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2TokenFactory\",\"type\":\"address\"}],\"name\":\"setL2TokenFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"publicSale\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialLiquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityReward\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tonAirdrop\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tosAirdrop\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_scheduleVault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_nonScheduleVault\",\"type\":\"address\"}],\"name\":\"setTokamakVaults\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMaps\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tonAirdropVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tosAirdropVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2token\",\"type\":\"address\"}],\"name\":\"viewProject\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"internalType\":\"struct LibProject.L2ProjectInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"createL2Project(address,address,address,string)\":{\"details\":\"\\ud504\\ub85c\\uc81d\\ud2b8 \\ucd94\\uac00\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setL1ProjectManager(address)\":{\"details\":\"l1ProjectManager \\uc8fc\\uc18c \\uc124\\uc815\"},\"setL2CrossDomainMessenger(address)\":{\"details\":\"l2CrossDomainMessenger \\uc8fc\\uc18c \\uc124\\uc815\"},\"setL2TokenFactory(address)\":{\"details\":\"l2TokenFactory \\uc8fc\\uc18c \\uc124\\uc815\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2ProjectManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/L2ProjectManager.sol\":\"L2ProjectManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/L2ProjectManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\nimport \\\"./L2ProjectManagerStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\nimport \\\"../libraries/LibProject.sol\\\";\\nimport \\\"../libraries/SafeERC20.sol\\\";\\n\\n// import \\\"hardhat/console.sol\\\";\\n\\ninterface IL2CrossDomainMessenger {\\n function xDomainMessageSender() external view returns (address);\\n}\\n\\ninterface IL2CustomVaultBase {\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n ) external;\\n\\n function isVaultAdmin(address l2Token, address account) external view returns (bool);\\n function l2ProjectManager() external view returns (address);\\n}\\n\\ninterface IL2PublicSaleVault {\\n function vaultInitialize(\\n address l2Token,\\n LibProject.InitalParameterPublicSaleVault memory vaultParams,\\n LibProject.InitalParameterPublicSaleClaim memory claimParams\\n ) external;\\n}\\n\\ninterface IL2InitialLiquidityVault {\\n function initialize(\\n address l2Token,\\n LibProject.InitalParameterInitialLiquidityVault memory params\\n ) external;\\n}\\n\\ninterface IL2LiquidityRewardVault {\\n function initialize(\\n address l2Token,\\n LibPool.PoolInfo memory poolParams,\\n LibProject.InitalParameterScheduleVault memory params\\n ) external;\\n}\\n\\ninterface IL2ScheduleVault {\\n function initialize(\\n address l2Token,\\n string memory vaultName,\\n LibProject.InitalParameterScheduleVault memory params\\n ) external;\\n}\\n\\ninterface IL2NonScheduleVault {\\n function initialize(\\n address l2Token,\\n string memory vaultName,\\n address claimer,\\n uint256 totalAllocatedAmount\\n ) external;\\n}\\n\\ninterface IL2AirdropVault {\\n function initialize(\\n address l2Token,\\n LibProject.InitalParameterScheduleVault memory params\\n ) external;\\n}\\n\\n\\n/**\\n * @title L2ProjectManager\\n * @dev\\n */\\ncontract L2ProjectManager is ProxyStorage, AccessibleCommon, L2ProjectManagerStorage {\\n using SafeERC20 for IERC20;\\n\\n modifier onlyL2TokenFactory() {\\n require(l2TokenFactory != address(0) && msg.sender == l2TokenFactory, \\\"caller is not l2TokenFactory\\\");\\n _;\\n }\\n\\n modifier onlyMessengerAndL1ProjectManager() {\\n require(msg.sender == l2CrossDomainMessenger &&\\n IL2CrossDomainMessenger(l2CrossDomainMessenger).xDomainMessageSender() == l1ProjectManager,\\n \\\"not onlyMessengerAndL1ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n event CreatedL2Project(address indexed l1Token, address indexed l2Token, address projectOwner, string projectName);\\n event DistributedL2Token(\\n address l1Token,\\n address l2Token,\\n uint256 projectId,\\n uint256 totalAmount\\n );\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor() {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @dev l1ProjectManager \\uc8fc\\uc18c \\uc124\\uc815\\n function setL1ProjectManager(address _l1ProjectManager)\\n external nonZeroAddress(_l1ProjectManager) onlyOwner\\n {\\n require(l1ProjectManager != _l1ProjectManager, \\\"same\\\");\\n l1ProjectManager = _l1ProjectManager;\\n }\\n\\n /// @dev l2TokenFactory \\uc8fc\\uc18c \\uc124\\uc815\\n function setL2TokenFactory(address _l2TokenFactory)\\n external nonZeroAddress(_l2TokenFactory) onlyOwner\\n {\\n require(l2TokenFactory != _l2TokenFactory, \\\"same\\\");\\n l2TokenFactory = _l2TokenFactory;\\n }\\n\\n /// @dev l2CrossDomainMessenger \\uc8fc\\uc18c \\uc124\\uc815\\n function setL2CrossDomainMessenger(address _l2CrossDomainMessenger)\\n external nonZeroAddress(_l2CrossDomainMessenger) onlyOwner\\n {\\n require(l2CrossDomainMessenger != _l2CrossDomainMessenger, \\\"same\\\");\\n l2CrossDomainMessenger = _l2CrossDomainMessenger;\\n }\\n\\n function setTokamakVaults(\\n address publicSale,\\n address initialLiquidity,\\n address liquidityReward,\\n address tonAirdrop,\\n address tosAirdrop,\\n address _scheduleVault,\\n address _nonScheduleVault\\n )\\n external onlyOwner\\n // nonZeroAddress(publicSale)\\n nonZeroAddress(initialLiquidity)\\n nonZeroAddress(liquidityReward)\\n nonZeroAddress(tosAirdrop)\\n nonZeroAddress(tonAirdrop)\\n nonZeroAddress(_scheduleVault)\\n nonZeroAddress(_nonScheduleVault)\\n {\\n // require(scheduleVault == address(0), \\\"already set\\\");\\n // require(\\n // publicSaleVault != publicSale ||\\n // initialLiquidityVault != initialLiquidity ||\\n // liquidityRewardVault != liquidityReward ||\\n // tonAirdropVault != tonAirdrop ||\\n // tosAirdropVault != tosAirdrop\\n // , \\\"same\\\");\\n\\n publicSaleVault = publicSale;\\n initialLiquidityVault = initialLiquidity;\\n liquidityRewardVault = liquidityReward;\\n tonAirdropVault = tonAirdrop;\\n tosAirdropVault = tosAirdrop;\\n scheduleVault = _scheduleVault;\\n nonScheduleVault = _nonScheduleVault;\\n }\\n\\n /* ========== only L2TokenFactory ========== */\\n\\n /// @dev \\ud504\\ub85c\\uc81d\\ud2b8 \\ucd94\\uac00\\n function createL2Project(\\n address projectOwner,\\n address l1Token,\\n address l2Token,\\n string calldata projectName\\n )\\n external onlyL2TokenFactory\\n {\\n require(bytes(projectName).length != 0, \\\"projectName is null\\\");\\n require(projects[l2Token].l1Token == address(0), \\\"already added\\\");\\n projects[l2Token] = LibProject.L2ProjectInfo({\\n projectId: 0,\\n projectOwner: projectOwner,\\n l1Token : l1Token,\\n l2Token : l2Token,\\n projectName : projectName\\n });\\n tokenMaps[l1Token] = l2Token;\\n emit CreatedL2Project(l1Token, l2Token, projectOwner, projectName);\\n }\\n\\n /* ========== only L2CrossDomainMessengerAndL1ProjectManager ========== */\\n\\n function _approveVaults(address l2Token, address vault, uint256 amount) internal {\\n\\n // uint256 allowance = IERC20(l2Token).allowance(address(this), vault);\\n\\n if (vault != address(0) && amount != 0 && IERC20(l2Token).allowance(address(this), vault) < amount) {\\n\\n IERC20(l2Token).approve(vault, amount);\\n }\\n }\\n\\n function distributesL2TokenOwner(\\n address l1Token,\\n address l2Token,\\n uint256 projectId,\\n uint256 totalAmount,\\n LibProject.TokamakVaults memory tokamakVaults,\\n LibProject.InitalParameterSchedule[] memory customScheduleVaults,\\n LibProject.InitalParameterNonScheduleVault[] memory customNonScheduleVaults\\n )\\n external\\n nonZeroAddress(l1Token)\\n nonZeroAddress(l2Token)\\n nonZero(projectId) nonZero(totalAmount)\\n {\\n require(projects[l2Token].projectOwner == msg.sender, \\\"not projectOwner\\\");\\n\\n _distributesL2Token(\\n l1Token, l2Token, projectId, totalAmount,\\n tokamakVaults, customScheduleVaults, customNonScheduleVaults\\n );\\n }\\n\\n function distributesL2Token(\\n address l1Token,\\n address l2Token,\\n uint256 projectId,\\n uint256 totalAmount,\\n LibProject.TokamakVaults memory tokamakVaults,\\n LibProject.InitalParameterSchedule[] memory customScheduleVaults,\\n LibProject.InitalParameterNonScheduleVault[] memory customNonScheduleVaults\\n )\\n external onlyMessengerAndL1ProjectManager\\n nonZeroAddress(l1Token)\\n nonZeroAddress(l2Token)\\n nonZero(projectId) nonZero(totalAmount)\\n {\\n _distributesL2Token(\\n l1Token, l2Token, projectId, totalAmount,\\n tokamakVaults, customScheduleVaults, customNonScheduleVaults\\n );\\n }\\n\\n function _distributesL2Token(\\n address l1Token,\\n address l2Token,\\n uint256 projectId,\\n uint256 totalAmount,\\n LibProject.TokamakVaults memory tokamakVaults,\\n LibProject.InitalParameterSchedule[] memory customScheduleVaults,\\n LibProject.InitalParameterNonScheduleVault[] memory customNonScheduleVaults\\n ) internal {\\n LibProject.L2ProjectInfo memory info = projects[l2Token];\\n\\n require(info.l1Token == l1Token, \\\"not matched l1Token\\\");\\n require(info.l2Token == l2Token, \\\"not matched l2Token\\\");\\n\\n uint256 publicTotal = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n + tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount;\\n\\n uint256 total = publicTotal +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardTonTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.rewardProjectTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n uint256 totalCustomSchedule = 0;\\n uint256 totalNonCustomSchedule = 0;\\n\\n for (uint256 i = 0; i < customScheduleVaults.length; i++)\\n totalCustomSchedule += customScheduleVaults[i].params.totalAllocatedAmount;\\n\\n for (uint256 j = 0; j < customNonScheduleVaults.length; j++)\\n totalNonCustomSchedule += customNonScheduleVaults[j].totalAllocatedAmount;\\n\\n total += (totalCustomSchedule + totalNonCustomSchedule);\\n\\n require(total == totalAmount, \\\"not matched totalAmount\\\");\\n require(totalAmount <= IERC20(l2Token).balanceOf(address(this)), \\\"insufficient balance\\\");\\n\\n projects[info.l2Token].projectId = projectId;\\n _approveVaults(info.l2Token, publicSaleVault, publicTotal);\\n _approveVaults(info.l2Token, initialLiquidityVault, tokamakVaults.initialVaultParams.totalAllocatedAmount);\\n _approveVaults(info.l2Token, liquidityRewardVault,\\n tokamakVaults.rewardTonTosPoolParams.params.totalAllocatedAmount + tokamakVaults.rewardProjectTosPoolParams.params.totalAllocatedAmount );\\n _approveVaults(info.l2Token, tonAirdropVault, tokamakVaults.tonAirdropParams.totalAllocatedAmount);\\n _approveVaults(info.l2Token, tosAirdropVault, tokamakVaults.tosAirdropParams.totalAllocatedAmount);\\n\\n if (publicTotal != 0) {\\n IL2CustomVaultBase(publicSaleVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n IL2PublicSaleVault(publicSaleVault).vaultInitialize(\\n info.l2Token,\\n tokamakVaults.publicSaleParams.vaultParams,\\n tokamakVaults.publicSaleParams.claimParams\\n );\\n }\\n\\n if (tokamakVaults.initialVaultParams.totalAllocatedAmount != 0) {\\n\\n if(!IL2CustomVaultBase(initialLiquidityVault).isVaultAdmin(info.l2Token, info.projectOwner)) IL2CustomVaultBase(initialLiquidityVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n IL2InitialLiquidityVault(initialLiquidityVault).initialize(\\n info.l2Token,\\n tokamakVaults.initialVaultParams);\\n }\\n\\n\\n if (tokamakVaults.rewardTonTosPoolParams.params.totalAllocatedAmount != 0) {\\n if(!IL2CustomVaultBase(liquidityRewardVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(liquidityRewardVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n LibProject.InitalParameterLiquidityRewardVault memory rewardParams = tokamakVaults.rewardTonTosPoolParams;\\n\\n IL2LiquidityRewardVault(liquidityRewardVault).initialize(\\n l2Token,\\n rewardParams.poolParams,\\n rewardParams.params);\\n }\\n\\n if (tokamakVaults.rewardProjectTosPoolParams.params.totalAllocatedAmount != 0) {\\n if(!IL2CustomVaultBase(liquidityRewardVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(liquidityRewardVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n LibProject.InitalParameterLiquidityRewardVault memory rewardParams = tokamakVaults.rewardProjectTosPoolParams;\\n\\n IL2LiquidityRewardVault(liquidityRewardVault).initialize(\\n l2Token,\\n rewardParams.poolParams,\\n rewardParams.params);\\n }\\n\\n if (tokamakVaults.tosAirdropParams.totalAllocatedAmount != 0) {\\n if(!IL2CustomVaultBase(tosAirdropVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(tosAirdropVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n IL2AirdropVault(tosAirdropVault).initialize(\\n info.l2Token,\\n tokamakVaults.tosAirdropParams);\\n }\\n\\n if (tokamakVaults.tonAirdropParams.totalAllocatedAmount != 0) {\\n if(!IL2CustomVaultBase(tonAirdropVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(tonAirdropVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n IL2AirdropVault(tonAirdropVault).initialize(\\n info.l2Token,\\n tokamakVaults.tonAirdropParams);\\n }\\n\\n uint256 projectId_ = projectId;\\n if (totalCustomSchedule != 0) {\\n if(!IL2CustomVaultBase(scheduleVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(scheduleVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n for (uint256 i = 0; i < customScheduleVaults.length; i++){\\n LibProject.InitalParameterSchedule memory params = customScheduleVaults[i];\\n\\n _approveVaults(info.l2Token, scheduleVault, params.params.totalAllocatedAmount);\\n\\n IL2ScheduleVault(scheduleVault).initialize(\\n info.l2Token,\\n params.vaultName,\\n params.params);\\n }\\n }\\n\\n if (totalNonCustomSchedule != 0) {\\n if(!IL2CustomVaultBase(nonScheduleVault).isVaultAdmin(info.l2Token, info.projectOwner))\\n IL2CustomVaultBase(nonScheduleVault).setVaultAdmin(info.l2Token, info.projectOwner);\\n\\n for (uint256 i = 0; i < customNonScheduleVaults.length; i++){\\n LibProject.InitalParameterNonScheduleVault memory params = customNonScheduleVaults[i];\\n _approveVaults(info.l2Token, nonScheduleVault, params.totalAllocatedAmount);\\n\\n IL2NonScheduleVault(nonScheduleVault).initialize(\\n info.l2Token,\\n params.vaultName,\\n params.claimer,\\n params.totalAllocatedAmount );\\n }\\n }\\n\\n emit DistributedL2Token(info.l1Token, info.l2Token, projectId_, total);\\n }\\n\\n\\n /* ========== Anyone can execute ========== */\\n\\n /* ========== VIEW ========== */\\n\\n function viewProject(address l2token) external view returns (LibProject.L2ProjectInfo memory) {\\n return projects[l2token];\\n }\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x4fa444c295bb0e4ad9593afc9af59994711c47dba453e72f6cc9c5ce788bb087\",\"license\":\"MIT\"},\"contracts/L2/L2ProjectManagerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\nimport { LibProject } from \\\"../libraries/LibProject.sol\\\";\\n\\n/**\\n * @title L2ProjectManagerStorage\\n * @dev\\n */\\ncontract L2ProjectManagerStorage {\\n\\n bool internal free = true;\\n address public l1ProjectManager;\\n address public l2TokenFactory;\\n address public l2CrossDomainMessenger;\\n\\n // \\ud1a0\\ud070\\ubcc4\\ub85c \\ub300\\ud45c\\ub418\\ub294 \\ubcfc\\ud2b8\\n address public publicSaleVault;\\n address public initialLiquidityVault;\\n address public liquidityRewardVault;\\n address public tonAirdropVault;\\n address public tosAirdropVault;\\n\\n address public scheduleVault; // customScheduleVault\\n address public nonScheduleVault; // customNonScheduleVault\\n\\n // l2token - L2ProjectInfo\\n mapping(address => LibProject.L2ProjectInfo) public projects;\\n\\n // l1token - l2token\\n mapping(address => address) public tokenMaps;\\n\\n}\\n\",\"keccak256\":\"0x809825dcd965f575234470617a615db4435af4d640ee2f6660f0f6cdb24a846c\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibPool.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibPool {\\n\\n struct PoolInfo {\\n address token0;\\n address token1;\\n uint24 fee;\\n }\\n}\",\"keccak256\":\"0x4f96e027ec71a0666159676b2426fbb90bd9de37076c03e225e533df8ff30ab5\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./LibPool.sol\\\";\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardTonTosPoolParams;\\n InitalParameterLiquidityRewardVault rewardProjectTosPoolParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n LibPool.PoolInfo poolParams;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardTonTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.rewardProjectTosPoolParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xd8c5a8879bdd5dc951780ada0df1f57ef0007fd65dd1ddefd6ddaf98f839091c\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062004047833981519152806200005b565b620000556000805160206200404783398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613edd806200016a6000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c806374a9f5c111610160578063c519eeac116100d8578063e748849b1161008c578063eddd5e8211610071578063eddd5e8214610601578063f1a6cc6314610614578063fbef005a1461062757600080fd5b8063e748849b146105ce578063eca7b836146105ee57600080fd5b8063c5b53e68116100bd578063c5b53e681461057f578063d547741f146105a8578063dfb28354146105bb57600080fd5b8063c519eeac14610559578063c51c773a1461056c57600080fd5b80638d96ff301161012f578063a217fddf11610114578063a217fddf14610515578063b911135f1461051d578063bb3f397a1461054657600080fd5b80638d96ff30146104c957806391d14854146104dc57600080fd5b806374a9f5c11461045357806375829def1461046b57806375b238fc1461047e578063840e78fd146104a557600080fd5b8063425d7058116101f35780635f214430116101c25780636e53f427116101a75780636e53f4271461041a5780636e6e85731461042d578063704802751461044057600080fd5b80635f214430146103fa57806363a8fd891461040d57600080fd5b8063425d7058146103885780634bc4447b1461039b57806350d2a276146103ae578063550d01a3146103d757600080fd5b806324d7806c1161024a5780632c8917c81161022f5780632c8917c81461034f5780632f2ff15d1461036257806336568abe1461037557600080fd5b806324d7806c146103115780632966c4dd1461032457600080fd5b806301ffc9a71461027c5780631785f53c146102a457806322985246146102b9578063248a9ca3146102ee575b600080fd5b61028f61028a366004612d50565b61063a565b60405190151581526020015b60405180910390f35b6102b76102b2366004612d8f565b610671565b005b6102e07ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161029b565b6102e06102fc366004612dac565b60009081526004602052604090206001015490565b61028f61031f366004612d8f565b610703565b600a54610337906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b600854610337906001600160a01b031681565b6102b7610370366004612dc5565b610743565b6102b7610383366004612dc5565b61076d565b6102b7610396366004612df5565b6107f9565b6102b76103a9366004612d8f565b610a8d565b6103376103bc366004612d50565b6003602052600090815260409020546001600160a01b031681565b61028f6103e5366004612d8f565b60026020526000908152604090205460ff1681565b6102b7610408366004612d8f565b610b92565b60005461028f9060ff1681565b600b54610337906001600160a01b031681565b600e54610337906001600160a01b031681565b6102b761044e366004612d8f565b610caf565b6005546103379061010090046001600160a01b031681565b6102b7610479366004612d8f565b610d39565b6102e07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6104b86104b3366004612d8f565b610e9b565b60405161029b959493929190612eed565b6102b76104d73660046136a0565b610f62565b61028f6104ea366004612dc5565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102e0600081565b61033761052b366004612dac565b6001602052600090815260409020546001600160a01b031681565b6102b7610554366004612d8f565b611154565b600d54610337906001600160a01b031681565b600954610337906001600160a01b031681565b61033761058d366004612d8f565b6010602052600090815260409020546001600160a01b031681565b6102b76105b6366004612dc5565b611259565b6102b76105c9366004613761565b61127e565b6105e16105dc366004612d8f565b6114cb565b60405161029b91906137f7565b600c54610337906001600160a01b031681565b600654610337906001600160a01b031681565b6102b76106223660046136a0565b611608565b600754610337906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061066b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61067a33610703565b6106d65760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261076d565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661066b565b60008281526004602052604090206001015461075e81611758565b6107688383611762565b505050565b6001600160a01b03811633146107eb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106cd565b6107f58282611804565b5050565b6006546001600160a01b03161580159061081d57506006546001600160a01b031633145b6108695760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206973206e6f74206c32546f6b656e466163746f72790000000060448201526064016106cd565b60008190036108ba5760405162461bcd60e51b815260206004820152601360248201527f70726f6a6563744e616d65206973206e756c6c0000000000000000000000000060448201526064016106cd565b6001600160a01b038381166000908152600f602052604090206002015416156109255760405162461bcd60e51b815260206004820152600d60248201527f616c72656164792061646465640000000000000000000000000000000000000060448201526064016106cd565b6040518060a0016040528060008152602001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038087168252600f602090815260409283902085518155908501516001820180549184166001600160a01b031992831617905592850151600282018054918416918516919091179055606085015160038201805491909316931692909217905560808301519091506004820190610a1a90826138db565b5050506001600160a01b038481166000818152601060205260409081902080546001600160a01b0319169387169384179055517f665c02e22efe28364a081a633646b8db53de75e45491bbd51cb302f6e1ab3a2190610a7e9089908790879061399b565b60405180910390a35050505050565b806001600160a01b038116610ac95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b610ad233610703565b610b295760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6007546001600160a01b03808416911603610b6f5760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b038116610bce5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b610bd733610703565b610c2e5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6005546001600160a01b038084166101009092041603610c795760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b610cb833610703565b610d0f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610743565b610d4233610703565b610d995760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6001600160a01b038116610def5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016106cd565b6001600160a01b0381163303610e475760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016106cd565b610e717fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610743565b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec423361076d565b600f602052600090815260409020805460018201546002830154600384015460048501805494956001600160a01b03948516959385169490921692610edf90613853565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b90613853565b8015610f585780601f10610f2d57610100808354040283529160200191610f58565b820191906000526020600020905b815481529060010190602001808311610f3b57829003601f168201915b5050505050905085565b6007546001600160a01b031633148015610ffc575060055460075460408051636e296e4560e01b815290516101009093046001600160a01b0390811693921691636e296e45916004808201926020929091908290030181865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906139da565b6001600160a01b0316145b6110545760405162461bcd60e51b8152602060048201526024808201527f6e6f74206f6e6c794d657373656e676572416e644c3150726f6a6563744d616e60448201526330b3b2b960e11b60648201526084016106cd565b866001600160a01b0381166110905760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166110cc5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b86806000036111025760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b86806000036111385760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b6111478b8b8b8b8b8b8b611887565b5050505050505050505050565b806001600160a01b0381166111905760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b61119933610703565b6111f05760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6006546001600160a01b038084169116036112365760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526004602052604090206001015461127481611758565b6107688383611804565b61128733610703565b6112de5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b856001600160a01b03811661131a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b0381166113565760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b846001600160a01b0381166113925760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166113ce5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b03811661140a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b0381166114465760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b5050600880546001600160a01b03199081166001600160a01b039d8e16179091556009805482169b8d169b909b17909a555050600a80548916978a169790971790965550600b8054871694881694909417909355600c8054861692871692909217909155600d80548516918616919091179055600e8054909316931692909217905550565b6115186040518060a001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b6001600160a01b038083166000908152600f6020908152604091829020825160a08101845281548152600182015485169281019290925260028101548416928201929092526003820154909216606083015260048101805460808401919061157f90613853565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab90613853565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b5050505050815250509050919050565b866001600160a01b0381166116445760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166116805760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b86806000036116b65760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b86806000036116ec5760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b6001600160a01b038a81166000908152600f60205260409020600101541633146111385760405162461bcd60e51b815260206004820152601060248201527f6e6f742070726f6a6563744f776e65720000000000000000000000000000000060448201526064016106cd565b6107008133612a08565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107f55760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117c03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156107f55760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038087166000908152600f60209081526040808320815160a081018352815481526001820154861693810193909352600281015485169183019190915260038101549093166060820152600483018054929391926080840191906118f190613853565b80601f016020809104026020016040519081016040528092919081815260200182805461191d90613853565b801561196a5780601f1061193f5761010080835404028352916020019161196a565b820191906000526020600020905b81548152906001019060200180831161194d57829003601f168201915b5050505050815250509050876001600160a01b031681604001516001600160a01b0316146119da5760405162461bcd60e51b815260206004820152601360248201527f6e6f74206d617463686564206c31546f6b656e0000000000000000000000000060448201526064016106cd565b866001600160a01b031681606001516001600160a01b031614611a3f5760405162461bcd60e51b815260206004820152601360248201527f6e6f74206d617463686564206c32546f6b656e0000000000000000000000000060448201526064016106cd565b83515161012081015161010090910151600091611a5b91613a0d565b905060008560a0015160200151866080015160200151876060015160200151602001518860400151602001516020015189602001516000015186611a9f9190613a0d565b611aa99190613a0d565b611ab39190613a0d565b611abd9190613a0d565b611ac79190613a0d565b905060008060005b8751811015611b1957878181518110611aea57611aea613a20565b6020026020010151602001516020015183611b059190613a0d565b925080611b1181613a36565b915050611acf565b5060005b8651811015611b6357868181518110611b3857611b38613a20565b60200260200101516040015182611b4f9190613a0d565b915080611b5b81613a36565b915050611b1d565b50611b6e8183613a0d565b611b789084613a0d565b9250888314611bc95760405162461bcd60e51b815260206004820152601760248201527f6e6f74206d61746368656420746f74616c416d6f756e7400000000000000000060448201526064016106cd565b6040516370a0823160e01b81523060048201526001600160a01b038c16906370a0823190602401602060405180830381865afa158015611c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c319190613a4f565b891115611c805760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e636500000000000000000000000060448201526064016106cd565b6060850180516001600160a01b039081166000908152600f602052604090208c90559051600854611cb2921686612a7d565b606085015160095460208a015151611cd492916001600160a01b031690612a7d565b606080860151600a54918a015160209081015181015160408c015182015190910151611d12936001600160a01b031691611d0d91613a0d565b612a7d565b6060850151600b5460a08a015160200151611d3792916001600160a01b031690612a7d565b6060850151600c5460808a015160200151611d5c92916001600160a01b031690612a7d565b8315611e425760085460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b158015611dba57600080fd5b505af1158015611dce573d6000803e3d6000fd5b505060085460608801518b5180516020909101516040516352bc80bd60e01b81526001600160a01b0390941695506352bc80bd9450611e0f93600401613ada565b600060405180830381600087803b158015611e2957600080fd5b505af1158015611e3d573d6000803e3d6000fd5b505050505b60208801515115611fee57600954606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015611ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecc9190613c1c565b611f415760095460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050505b60095460608681015160208b81015160408051632215f6f360e11b81526001600160a01b039485166004820152825160248201529282015160448401528101516064830152928301516084820152608083015163ffffffff1660a482015260a09092015161ffff1660c48301529091169063442bede69060e401600060405180830381600087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b505050505b8760400151602001516020015160001461218057600a54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120819190613c1c565b6120f657600a5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156120dd57600080fd5b505af11580156120f1573d6000803e3d6000fd5b505050505b600088604001519050600a60009054906101000a90046001600160a01b03166001600160a01b03166317bc6a728d836000015184602001516040518463ffffffff1660e01b815260040161214c93929190613c3e565b600060405180830381600087803b15801561216657600080fd5b505af115801561217a573d6000803e3d6000fd5b50505050505b8760600151602001516020015160001461231257600a54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190613c1c565b61228857600a5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b15801561226f57600080fd5b505af1158015612283573d6000803e3d6000fd5b505050505b600088606001519050600a60009054906101000a90046001600160a01b03166001600160a01b03166317bc6a728d836000015184602001516040518463ffffffff1660e01b81526004016122de93929190613c3e565b600060405180830381600087803b1580156122f857600080fd5b505af115801561230c573d6000803e3d6000fd5b50505050505b6080880151602001511561248157600c54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa15801561237b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239f9190613c1c565b61241457600c5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156123fb57600080fd5b505af115801561240f573d6000803e3d6000fd5b505050505b600c54606086015160808a01516040516356a6192d60e11b81526001600160a01b039093169263ad4c325a9261244e929091600401613cdc565b600060405180830381600087803b15801561246857600080fd5b505af115801561247c573d6000803e3d6000fd5b505050505b60a088015160200151156125f057600b54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa1580156124ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250e9190613c1c565b61258357600b5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b15801561256a57600080fd5b505af115801561257e573d6000803e3d6000fd5b505050505b600b54606086015160a08a01516040516356a6192d60e11b81526001600160a01b039093169263ad4c325a926125bd929091600401613cdc565b600060405180830381600087803b1580156125d757600080fd5b505af11580156125eb573d6000803e3d6000fd5b505050505b8982156127c757600d54606087015160208801516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126769190613c1c565b6126eb57600d5460608701516020880151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156126d257600080fd5b505af11580156126e6573d6000803e3d6000fd5b505050505b60005b88518110156127c557600089828151811061270b5761270b613a20565b602002602001015190506127418860600151600d60009054906101000a90046001600160a01b0316836020015160200151612a7d565b600d5460608901518251602084015160405163baf6ce1f60e01b81526001600160a01b039094169363baf6ce1f9361277f9390929091600401613d50565b600060405180830381600087803b15801561279957600080fd5b505af11580156127ad573d6000803e3d6000fd5b505050505080806127bd90613a36565b9150506126ee565b505b81156129a057600e54606087015160208801516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015612828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284c9190613c1c565b6128c157600e5460608701516020880151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156128a857600080fd5b505af11580156128bc573d6000803e3d6000fd5b505050505b60005b875181101561299e5760008882815181106128e1576128e1613a20565b602002602001015190506129138860600151600e60009054906101000a90046001600160a01b03168360400151612a7d565b600e54606089015182516020840151604080860151905163021a440560e01b81526001600160a01b039095169463021a44059461295894909390929091600401613dd9565b600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b5050505050808061299690613a36565b9150506128c4565b505b60408681015160608089015183516001600160a01b03938416815292166020830152818301849052810186905290517fc09fbebfef0054b64085d21310e8621dd22206fc0a44cedfa0a2f0fa5b97f7199181900360800190a150505050505050505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107f557612a3b81612b8e565b612a46836020612ba0565b604051602001612a57929190613e0e565b60408051601f198184030181529082905262461bcd60e51b82526106cd91600401613e8f565b6001600160a01b03821615801590612a9457508015155b8015612b105750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa158015612aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0e9190613a4f565b105b156107685760405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303816000875af1158015612b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b889190613c1c565b50505050565b606061066b6001600160a01b03831660145b60606000612baf836002613ea2565b612bba906002613a0d565b67ffffffffffffffff811115612bd257612bd2612f32565b6040519080825280601f01601f191660200182016040528015612bfc576020820181803683370190505b509050600360fc1b81600081518110612c1757612c17613a20565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c4657612c46613a20565b60200101906001600160f81b031916908160001a9053506000612c6a846002613ea2565b612c75906001613a0d565b90505b6001811115612cfa577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612cb657612cb6613a20565b1a60f81b828281518110612ccc57612ccc613a20565b60200101906001600160f81b031916908160001a90535060049490941c93612cf381613eb9565b9050612c78565b508315612d495760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106cd565b9392505050565b600060208284031215612d6257600080fd5b81356001600160e01b031981168114612d4957600080fd5b6001600160a01b038116811461070057600080fd5b600060208284031215612da157600080fd5b8135612d4981612d7a565b600060208284031215612dbe57600080fd5b5035919050565b60008060408385031215612dd857600080fd5b823591506020830135612dea81612d7a565b809150509250929050565b600080600080600060808688031215612e0d57600080fd5b8535612e1881612d7a565b94506020860135612e2881612d7a565b93506040860135612e3881612d7a565b9250606086013567ffffffffffffffff80821115612e5557600080fd5b818801915088601f830112612e6957600080fd5b813581811115612e7857600080fd5b896020828501011115612e8a57600080fd5b9699959850939650602001949392505050565b60005b83811015612eb8578181015183820152602001612ea0565b50506000910152565b60008151808452612ed9816020860160208601612e9d565b601f01601f19169290920160200192915050565b85815260006001600160a01b038087166020840152808616604084015280851660608401525060a06080830152612f2760a0830184612ec1565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b60405290565b6040516102c0810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b60405160c0810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b6040516060810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b604051601f8201601f1916810167ffffffffffffffff8111828210171561300457613004612f32565b604052919050565b600067ffffffffffffffff82111561302657613026612f32565b5060051b60200190565b600082601f83011261304157600080fd5b813560206130566130518361300c565b612fdb565b82815260059290921b8401810191818101908684111561307557600080fd5b8286015b848110156130905780358352918301918301613079565b509695505050505050565b6000604082840312156130ad57600080fd5b6130b5612f48565b9050813567ffffffffffffffff808211156130cf57600080fd5b6130db85838601613030565b835260208401359150808211156130f157600080fd5b506130fe84828501613030565b60208301525092915050565b803563ffffffff8116811461311e57600080fd5b919050565b600060c0828403121561313557600080fd5b61313d612f95565b90508135815260208201356020820152604082013560408201526060820135606082015261316d6080830161310a565b608082015260a082013561ffff8116811461318757600080fd5b60a082015292915050565b600060e082840312156131a457600080fd5b60405160e0810181811067ffffffffffffffff821117156131c7576131c7612f32565b60405290508082356131d881612d7a565b808252506020830135602082015260408301356040820152606083013560608201526132066080840161310a565b608082015261321760a0840161310a565b60a082015261322860c0840161310a565b60c08201525092915050565b600081830361014081121561324857600080fd5b613250612f48565b9150606081121561326057600080fd5b50613269612fb8565b823561327481612d7a565b8152602083013561328481612d7a565b6020820152604083013562ffffff8116811461329f57600080fd5b604082015281526132b38360608401613192565b602082015292915050565b600061052082840312156132d157600080fd5b6132d9612f95565b9050813567ffffffffffffffff808211156132f357600080fd5b908301908185036102e081121561330957600080fd5b613311612f48565b6102c08083121561332157600080fd5b613329612f71565b853581526020808701359082015260408087013590820152606080870135908201526080808701359082015260a0808701359082015260c0808701359082015260e08087013590820152610100808701359082015261012080870135908201526101408087013590820152610160808701359082015261018080870135908201526101a080870135908201526101c080870135908201526101e08087013590820152610200808701359082015261022080870135818301526102408088013590830152610260808801359083015261028080880135908301526102a080880135908301529083528186013593508484111561342357600080fd5b61342f8985880161309b565b60208401528287526134448960208a01613123565b60208801526134568960e08a01613234565b604088015261346789828a01613234565b6060880152505050505050613480836103608401613192565b6080820152613187836104408401613192565b600082601f8301126134a457600080fd5b813567ffffffffffffffff8111156134be576134be612f32565b6134d1601f8201601f1916602001612fdb565b8181528460208386010111156134e657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261351457600080fd5b813560206135246130518361300c565b82815260059290921b8401810191818101908684111561354357600080fd5b8286015b8481101561309057803567ffffffffffffffff808211156135685760008081fd5b90880190610100828b03601f190112156135825760008081fd5b61358a612f48565b868301358281111561359c5760008081fd5b6135aa8c8983870101613493565b8252506135ba8b60408501613192565b8188015285525050918301918301613547565b600082601f8301126135de57600080fd5b813560206135ee6130518361300c565b82815260059290921b8401810191818101908684111561360d57600080fd5b8286015b8481101561309057803567ffffffffffffffff808211156136325760008081fd5b908801906060828b03601f190181131561364c5760008081fd5b613654612fb8565b87840135838111156136665760008081fd5b6136748d8a83880101613493565b825250604092508284013561368881612d7a565b81890152920135908201528352918301918301613611565b600080600080600080600060e0888a0312156136bb57600080fd5b87356136c681612d7a565b965060208801356136d681612d7a565b95506040880135945060608801359350608088013567ffffffffffffffff8082111561370157600080fd5b61370d8b838c016132be565b945060a08a013591508082111561372357600080fd5b61372f8b838c01613503565b935060c08a013591508082111561374557600080fd5b506137528a828b016135cd565b91505092959891949750929550565b600080600080600080600060e0888a03121561377c57600080fd5b873561378781612d7a565b9650602088013561379781612d7a565b955060408801356137a781612d7a565b945060608801356137b781612d7a565b935060808801356137c781612d7a565b925060a08801356137d781612d7a565b915060c08801356137e781612d7a565b8091505092959891949750929550565b6020815281516020820152600060208301516001600160a01b0380821660408501528060408601511660608501528060608601511660808501525050608083015160a08084015261384b60c0840182612ec1565b949350505050565b600181811c9082168061386757607f821691505b60208210810361388757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561076857600081815260208120601f850160051c810160208610156138b45750805b601f850160051c820191505b818110156138d3578281556001016138c0565b505050505050565b815167ffffffffffffffff8111156138f5576138f5612f32565b613909816139038454613853565b8461388d565b602080601f83116001811461393e57600084156139265750858301515b600019600386901b1c1916600185901b1785556138d3565b600085815260208120601f198616915b8281101561396d5788860151825594840194600190910190840161394e565b508582101561398b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156139ec57600080fd5b8151612d4981612d7a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066b5761066b6139f7565b634e487b7160e01b600052603260045260246000fd5b600060018201613a4857613a486139f7565b5060010190565b600060208284031215613a6157600080fd5b5051919050565b600081518084526020808501945080840160005b83811015613a9857815187529582019590820190600101613a7c565b509495945050505050565b6000815160408452613ab86040850182613a68565b905060208301518482036020860152613ad18282613a68565b95945050505050565b6001600160a01b0384168152825160208083019190915283015160408083019190915283015160608083019190915283015160808083019190915283015160a08083019190915283015160c08083019190915283015160e08083019190915283015161010080830191909152830151610120808301919091528301516101408083019190915283015161016080830191909152830151610180808301919091528301516101a0808301919091528301516101c0808301919091528301516101e08083019190915283015161020080830191909152830151610220808301919091528301516102408083019190915283015161026080830191909152830151610280808301919091528301516102a0808301919091528301516102c08201526103006102e08201819052600090613c1283820185613aa3565b9695505050505050565b600060208284031215613c2e57600080fd5b81518015158114612d4957600080fd5b6000610160820190506001600160a01b0380861683528085511660208401528060208601511660408401525062ffffff604085015116606083015261384b60808301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b6001600160a01b03831681526101008101612d4960208301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b60006101206001600160a01b0386168352806020840152613d7381840186612ec1565b91505061384b60408301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b60006001600160a01b03808716835260806020840152613dfc6080840187612ec1565b94166040830152506060015292915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613e46816017850160208801612e9d565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613e83816028840160208801612e9d565b01602801949350505050565b602081526000612d496020830184612ec1565b808202811582820484141761066b5761066b6139f7565b600081613ec857613ec86139f7565b50600019019056fea164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102775760003560e01c806374a9f5c111610160578063c519eeac116100d8578063e748849b1161008c578063eddd5e8211610071578063eddd5e8214610601578063f1a6cc6314610614578063fbef005a1461062757600080fd5b8063e748849b146105ce578063eca7b836146105ee57600080fd5b8063c5b53e68116100bd578063c5b53e681461057f578063d547741f146105a8578063dfb28354146105bb57600080fd5b8063c519eeac14610559578063c51c773a1461056c57600080fd5b80638d96ff301161012f578063a217fddf11610114578063a217fddf14610515578063b911135f1461051d578063bb3f397a1461054657600080fd5b80638d96ff30146104c957806391d14854146104dc57600080fd5b806374a9f5c11461045357806375829def1461046b57806375b238fc1461047e578063840e78fd146104a557600080fd5b8063425d7058116101f35780635f214430116101c25780636e53f427116101a75780636e53f4271461041a5780636e6e85731461042d578063704802751461044057600080fd5b80635f214430146103fa57806363a8fd891461040d57600080fd5b8063425d7058146103885780634bc4447b1461039b57806350d2a276146103ae578063550d01a3146103d757600080fd5b806324d7806c1161024a5780632c8917c81161022f5780632c8917c81461034f5780632f2ff15d1461036257806336568abe1461037557600080fd5b806324d7806c146103115780632966c4dd1461032457600080fd5b806301ffc9a71461027c5780631785f53c146102a457806322985246146102b9578063248a9ca3146102ee575b600080fd5b61028f61028a366004612d50565b61063a565b60405190151581526020015b60405180910390f35b6102b76102b2366004612d8f565b610671565b005b6102e07ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200161029b565b6102e06102fc366004612dac565b60009081526004602052604090206001015490565b61028f61031f366004612d8f565b610703565b600a54610337906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b600854610337906001600160a01b031681565b6102b7610370366004612dc5565b610743565b6102b7610383366004612dc5565b61076d565b6102b7610396366004612df5565b6107f9565b6102b76103a9366004612d8f565b610a8d565b6103376103bc366004612d50565b6003602052600090815260409020546001600160a01b031681565b61028f6103e5366004612d8f565b60026020526000908152604090205460ff1681565b6102b7610408366004612d8f565b610b92565b60005461028f9060ff1681565b600b54610337906001600160a01b031681565b600e54610337906001600160a01b031681565b6102b761044e366004612d8f565b610caf565b6005546103379061010090046001600160a01b031681565b6102b7610479366004612d8f565b610d39565b6102e07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6104b86104b3366004612d8f565b610e9b565b60405161029b959493929190612eed565b6102b76104d73660046136a0565b610f62565b61028f6104ea366004612dc5565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102e0600081565b61033761052b366004612dac565b6001602052600090815260409020546001600160a01b031681565b6102b7610554366004612d8f565b611154565b600d54610337906001600160a01b031681565b600954610337906001600160a01b031681565b61033761058d366004612d8f565b6010602052600090815260409020546001600160a01b031681565b6102b76105b6366004612dc5565b611259565b6102b76105c9366004613761565b61127e565b6105e16105dc366004612d8f565b6114cb565b60405161029b91906137f7565b600c54610337906001600160a01b031681565b600654610337906001600160a01b031681565b6102b76106223660046136a0565b611608565b600754610337906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061066b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61067a33610703565b6106d65760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261076d565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661066b565b60008281526004602052604090206001015461075e81611758565b6107688383611762565b505050565b6001600160a01b03811633146107eb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106cd565b6107f58282611804565b5050565b6006546001600160a01b03161580159061081d57506006546001600160a01b031633145b6108695760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206973206e6f74206c32546f6b656e466163746f72790000000060448201526064016106cd565b60008190036108ba5760405162461bcd60e51b815260206004820152601360248201527f70726f6a6563744e616d65206973206e756c6c0000000000000000000000000060448201526064016106cd565b6001600160a01b038381166000908152600f602052604090206002015416156109255760405162461bcd60e51b815260206004820152600d60248201527f616c72656164792061646465640000000000000000000000000000000000000060448201526064016106cd565b6040518060a0016040528060008152602001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038087168252600f602090815260409283902085518155908501516001820180549184166001600160a01b031992831617905592850151600282018054918416918516919091179055606085015160038201805491909316931692909217905560808301519091506004820190610a1a90826138db565b5050506001600160a01b038481166000818152601060205260409081902080546001600160a01b0319169387169384179055517f665c02e22efe28364a081a633646b8db53de75e45491bbd51cb302f6e1ab3a2190610a7e9089908790879061399b565b60405180910390a35050505050565b806001600160a01b038116610ac95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b610ad233610703565b610b295760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6007546001600160a01b03808416911603610b6f5760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b038116610bce5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b610bd733610703565b610c2e5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6005546001600160a01b038084166101009092041603610c795760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b610cb833610703565b610d0f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610743565b610d4233610703565b610d995760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6001600160a01b038116610def5760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016106cd565b6001600160a01b0381163303610e475760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016106cd565b610e717fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610743565b6107007fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec423361076d565b600f602052600090815260409020805460018201546002830154600384015460048501805494956001600160a01b03948516959385169490921692610edf90613853565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b90613853565b8015610f585780601f10610f2d57610100808354040283529160200191610f58565b820191906000526020600020905b815481529060010190602001808311610f3b57829003601f168201915b5050505050905085565b6007546001600160a01b031633148015610ffc575060055460075460408051636e296e4560e01b815290516101009093046001600160a01b0390811693921691636e296e45916004808201926020929091908290030181865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906139da565b6001600160a01b0316145b6110545760405162461bcd60e51b8152602060048201526024808201527f6e6f74206f6e6c794d657373656e676572416e644c3150726f6a6563744d616e60448201526330b3b2b960e11b60648201526084016106cd565b866001600160a01b0381166110905760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166110cc5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b86806000036111025760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b86806000036111385760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b6111478b8b8b8b8b8b8b611887565b5050505050505050505050565b806001600160a01b0381166111905760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b61119933610703565b6111f05760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b6006546001600160a01b038084169116036112365760405162461bcd60e51b81526004016106cd9060208082526004908201526373616d6560e01b604082015260600190565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526004602052604090206001015461127481611758565b6107688383611804565b61128733610703565b6112de5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016106cd565b856001600160a01b03811661131a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b0381166113565760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b846001600160a01b0381166113925760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166113ce5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b03811661140a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b856001600160a01b0381166114465760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b5050600880546001600160a01b03199081166001600160a01b039d8e16179091556009805482169b8d169b909b17909a555050600a80548916978a169790971790965550600b8054871694881694909417909355600c8054861692871692909217909155600d80548516918616919091179055600e8054909316931692909217905550565b6115186040518060a001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b6001600160a01b038083166000908152600f6020908152604091829020825160a08101845281548152600182015485169281019290925260028101548416928201929092526003820154909216606083015260048101805460808401919061157f90613853565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab90613853565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b5050505050815250509050919050565b866001600160a01b0381166116445760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b866001600160a01b0381166116805760405162461bcd60e51b81526020600482015260026024820152612d1960f11b60448201526064016106cd565b86806000036116b65760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b86806000036116ec5760405162461bcd60e51b81526020600482015260026024820152615a3160f01b60448201526064016106cd565b6001600160a01b038a81166000908152600f60205260409020600101541633146111385760405162461bcd60e51b815260206004820152601060248201527f6e6f742070726f6a6563744f776e65720000000000000000000000000000000060448201526064016106cd565b6107008133612a08565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107f55760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117c03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156107f55760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038087166000908152600f60209081526040808320815160a081018352815481526001820154861693810193909352600281015485169183019190915260038101549093166060820152600483018054929391926080840191906118f190613853565b80601f016020809104026020016040519081016040528092919081815260200182805461191d90613853565b801561196a5780601f1061193f5761010080835404028352916020019161196a565b820191906000526020600020905b81548152906001019060200180831161194d57829003601f168201915b5050505050815250509050876001600160a01b031681604001516001600160a01b0316146119da5760405162461bcd60e51b815260206004820152601360248201527f6e6f74206d617463686564206c31546f6b656e0000000000000000000000000060448201526064016106cd565b866001600160a01b031681606001516001600160a01b031614611a3f5760405162461bcd60e51b815260206004820152601360248201527f6e6f74206d617463686564206c32546f6b656e0000000000000000000000000060448201526064016106cd565b83515161012081015161010090910151600091611a5b91613a0d565b905060008560a0015160200151866080015160200151876060015160200151602001518860400151602001516020015189602001516000015186611a9f9190613a0d565b611aa99190613a0d565b611ab39190613a0d565b611abd9190613a0d565b611ac79190613a0d565b905060008060005b8751811015611b1957878181518110611aea57611aea613a20565b6020026020010151602001516020015183611b059190613a0d565b925080611b1181613a36565b915050611acf565b5060005b8651811015611b6357868181518110611b3857611b38613a20565b60200260200101516040015182611b4f9190613a0d565b915080611b5b81613a36565b915050611b1d565b50611b6e8183613a0d565b611b789084613a0d565b9250888314611bc95760405162461bcd60e51b815260206004820152601760248201527f6e6f74206d61746368656420746f74616c416d6f756e7400000000000000000060448201526064016106cd565b6040516370a0823160e01b81523060048201526001600160a01b038c16906370a0823190602401602060405180830381865afa158015611c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c319190613a4f565b891115611c805760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e636500000000000000000000000060448201526064016106cd565b6060850180516001600160a01b039081166000908152600f602052604090208c90559051600854611cb2921686612a7d565b606085015160095460208a015151611cd492916001600160a01b031690612a7d565b606080860151600a54918a015160209081015181015160408c015182015190910151611d12936001600160a01b031691611d0d91613a0d565b612a7d565b6060850151600b5460a08a015160200151611d3792916001600160a01b031690612a7d565b6060850151600c5460808a015160200151611d5c92916001600160a01b031690612a7d565b8315611e425760085460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b158015611dba57600080fd5b505af1158015611dce573d6000803e3d6000fd5b505060085460608801518b5180516020909101516040516352bc80bd60e01b81526001600160a01b0390941695506352bc80bd9450611e0f93600401613ada565b600060405180830381600087803b158015611e2957600080fd5b505af1158015611e3d573d6000803e3d6000fd5b505050505b60208801515115611fee57600954606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015611ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecc9190613c1c565b611f415760095460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050505b60095460608681015160208b81015160408051632215f6f360e11b81526001600160a01b039485166004820152825160248201529282015160448401528101516064830152928301516084820152608083015163ffffffff1660a482015260a09092015161ffff1660c48301529091169063442bede69060e401600060405180830381600087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b505050505b8760400151602001516020015160001461218057600a54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120819190613c1c565b6120f657600a5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156120dd57600080fd5b505af11580156120f1573d6000803e3d6000fd5b505050505b600088604001519050600a60009054906101000a90046001600160a01b03166001600160a01b03166317bc6a728d836000015184602001516040518463ffffffff1660e01b815260040161214c93929190613c3e565b600060405180830381600087803b15801561216657600080fd5b505af115801561217a573d6000803e3d6000fd5b50505050505b8760600151602001516020015160001461231257600a54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190613c1c565b61228857600a5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b15801561226f57600080fd5b505af1158015612283573d6000803e3d6000fd5b505050505b600088606001519050600a60009054906101000a90046001600160a01b03166001600160a01b03166317bc6a728d836000015184602001516040518463ffffffff1660e01b81526004016122de93929190613c3e565b600060405180830381600087803b1580156122f857600080fd5b505af115801561230c573d6000803e3d6000fd5b50505050505b6080880151602001511561248157600c54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa15801561237b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239f9190613c1c565b61241457600c5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156123fb57600080fd5b505af115801561240f573d6000803e3d6000fd5b505050505b600c54606086015160808a01516040516356a6192d60e11b81526001600160a01b039093169263ad4c325a9261244e929091600401613cdc565b600060405180830381600087803b15801561246857600080fd5b505af115801561247c573d6000803e3d6000fd5b505050505b60a088015160200151156125f057600b54606086015160208701516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa1580156124ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250e9190613c1c565b61258357600b5460608601516020870151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b15801561256a57600080fd5b505af115801561257e573d6000803e3d6000fd5b505050505b600b54606086015160a08a01516040516356a6192d60e11b81526001600160a01b039093169263ad4c325a926125bd929091600401613cdc565b600060405180830381600087803b1580156125d757600080fd5b505af11580156125eb573d6000803e3d6000fd5b505050505b8982156127c757600d54606087015160208801516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126769190613c1c565b6126eb57600d5460608701516020880151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156126d257600080fd5b505af11580156126e6573d6000803e3d6000fd5b505050505b60005b88518110156127c557600089828151811061270b5761270b613a20565b602002602001015190506127418860600151600d60009054906101000a90046001600160a01b0316836020015160200151612a7d565b600d5460608901518251602084015160405163baf6ce1f60e01b81526001600160a01b039094169363baf6ce1f9361277f9390929091600401613d50565b600060405180830381600087803b15801561279957600080fd5b505af11580156127ad573d6000803e3d6000fd5b505050505080806127bd90613a36565b9150506126ee565b505b81156129a057600e54606087015160208801516040516328f40a9560e11b81526001600160a01b03928316600482015290821660248201529116906351e8152a90604401602060405180830381865afa158015612828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284c9190613c1c565b6128c157600e5460608701516020880151604051631adcd63360e11b81526001600160a01b03928316600482015290821660248201529116906335b9ac6690604401600060405180830381600087803b1580156128a857600080fd5b505af11580156128bc573d6000803e3d6000fd5b505050505b60005b875181101561299e5760008882815181106128e1576128e1613a20565b602002602001015190506129138860600151600e60009054906101000a90046001600160a01b03168360400151612a7d565b600e54606089015182516020840151604080860151905163021a440560e01b81526001600160a01b039095169463021a44059461295894909390929091600401613dd9565b600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b5050505050808061299690613a36565b9150506128c4565b505b60408681015160608089015183516001600160a01b03938416815292166020830152818301849052810186905290517fc09fbebfef0054b64085d21310e8621dd22206fc0a44cedfa0a2f0fa5b97f7199181900360800190a150505050505050505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107f557612a3b81612b8e565b612a46836020612ba0565b604051602001612a57929190613e0e565b60408051601f198184030181529082905262461bcd60e51b82526106cd91600401613e8f565b6001600160a01b03821615801590612a9457508015155b8015612b105750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa158015612aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0e9190613a4f565b105b156107685760405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303816000875af1158015612b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b889190613c1c565b50505050565b606061066b6001600160a01b03831660145b60606000612baf836002613ea2565b612bba906002613a0d565b67ffffffffffffffff811115612bd257612bd2612f32565b6040519080825280601f01601f191660200182016040528015612bfc576020820181803683370190505b509050600360fc1b81600081518110612c1757612c17613a20565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c4657612c46613a20565b60200101906001600160f81b031916908160001a9053506000612c6a846002613ea2565b612c75906001613a0d565b90505b6001811115612cfa577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612cb657612cb6613a20565b1a60f81b828281518110612ccc57612ccc613a20565b60200101906001600160f81b031916908160001a90535060049490941c93612cf381613eb9565b9050612c78565b508315612d495760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106cd565b9392505050565b600060208284031215612d6257600080fd5b81356001600160e01b031981168114612d4957600080fd5b6001600160a01b038116811461070057600080fd5b600060208284031215612da157600080fd5b8135612d4981612d7a565b600060208284031215612dbe57600080fd5b5035919050565b60008060408385031215612dd857600080fd5b823591506020830135612dea81612d7a565b809150509250929050565b600080600080600060808688031215612e0d57600080fd5b8535612e1881612d7a565b94506020860135612e2881612d7a565b93506040860135612e3881612d7a565b9250606086013567ffffffffffffffff80821115612e5557600080fd5b818801915088601f830112612e6957600080fd5b813581811115612e7857600080fd5b896020828501011115612e8a57600080fd5b9699959850939650602001949392505050565b60005b83811015612eb8578181015183820152602001612ea0565b50506000910152565b60008151808452612ed9816020860160208601612e9d565b601f01601f19169290920160200192915050565b85815260006001600160a01b038087166020840152808616604084015280851660608401525060a06080830152612f2760a0830184612ec1565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b60405290565b6040516102c0810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b60405160c0810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b6040516060810167ffffffffffffffff81118282101715612f6b57612f6b612f32565b604051601f8201601f1916810167ffffffffffffffff8111828210171561300457613004612f32565b604052919050565b600067ffffffffffffffff82111561302657613026612f32565b5060051b60200190565b600082601f83011261304157600080fd5b813560206130566130518361300c565b612fdb565b82815260059290921b8401810191818101908684111561307557600080fd5b8286015b848110156130905780358352918301918301613079565b509695505050505050565b6000604082840312156130ad57600080fd5b6130b5612f48565b9050813567ffffffffffffffff808211156130cf57600080fd5b6130db85838601613030565b835260208401359150808211156130f157600080fd5b506130fe84828501613030565b60208301525092915050565b803563ffffffff8116811461311e57600080fd5b919050565b600060c0828403121561313557600080fd5b61313d612f95565b90508135815260208201356020820152604082013560408201526060820135606082015261316d6080830161310a565b608082015260a082013561ffff8116811461318757600080fd5b60a082015292915050565b600060e082840312156131a457600080fd5b60405160e0810181811067ffffffffffffffff821117156131c7576131c7612f32565b60405290508082356131d881612d7a565b808252506020830135602082015260408301356040820152606083013560608201526132066080840161310a565b608082015261321760a0840161310a565b60a082015261322860c0840161310a565b60c08201525092915050565b600081830361014081121561324857600080fd5b613250612f48565b9150606081121561326057600080fd5b50613269612fb8565b823561327481612d7a565b8152602083013561328481612d7a565b6020820152604083013562ffffff8116811461329f57600080fd5b604082015281526132b38360608401613192565b602082015292915050565b600061052082840312156132d157600080fd5b6132d9612f95565b9050813567ffffffffffffffff808211156132f357600080fd5b908301908185036102e081121561330957600080fd5b613311612f48565b6102c08083121561332157600080fd5b613329612f71565b853581526020808701359082015260408087013590820152606080870135908201526080808701359082015260a0808701359082015260c0808701359082015260e08087013590820152610100808701359082015261012080870135908201526101408087013590820152610160808701359082015261018080870135908201526101a080870135908201526101c080870135908201526101e08087013590820152610200808701359082015261022080870135818301526102408088013590830152610260808801359083015261028080880135908301526102a080880135908301529083528186013593508484111561342357600080fd5b61342f8985880161309b565b60208401528287526134448960208a01613123565b60208801526134568960e08a01613234565b604088015261346789828a01613234565b6060880152505050505050613480836103608401613192565b6080820152613187836104408401613192565b600082601f8301126134a457600080fd5b813567ffffffffffffffff8111156134be576134be612f32565b6134d1601f8201601f1916602001612fdb565b8181528460208386010111156134e657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261351457600080fd5b813560206135246130518361300c565b82815260059290921b8401810191818101908684111561354357600080fd5b8286015b8481101561309057803567ffffffffffffffff808211156135685760008081fd5b90880190610100828b03601f190112156135825760008081fd5b61358a612f48565b868301358281111561359c5760008081fd5b6135aa8c8983870101613493565b8252506135ba8b60408501613192565b8188015285525050918301918301613547565b600082601f8301126135de57600080fd5b813560206135ee6130518361300c565b82815260059290921b8401810191818101908684111561360d57600080fd5b8286015b8481101561309057803567ffffffffffffffff808211156136325760008081fd5b908801906060828b03601f190181131561364c5760008081fd5b613654612fb8565b87840135838111156136665760008081fd5b6136748d8a83880101613493565b825250604092508284013561368881612d7a565b81890152920135908201528352918301918301613611565b600080600080600080600060e0888a0312156136bb57600080fd5b87356136c681612d7a565b965060208801356136d681612d7a565b95506040880135945060608801359350608088013567ffffffffffffffff8082111561370157600080fd5b61370d8b838c016132be565b945060a08a013591508082111561372357600080fd5b61372f8b838c01613503565b935060c08a013591508082111561374557600080fd5b506137528a828b016135cd565b91505092959891949750929550565b600080600080600080600060e0888a03121561377c57600080fd5b873561378781612d7a565b9650602088013561379781612d7a565b955060408801356137a781612d7a565b945060608801356137b781612d7a565b935060808801356137c781612d7a565b925060a08801356137d781612d7a565b915060c08801356137e781612d7a565b8091505092959891949750929550565b6020815281516020820152600060208301516001600160a01b0380821660408501528060408601511660608501528060608601511660808501525050608083015160a08084015261384b60c0840182612ec1565b949350505050565b600181811c9082168061386757607f821691505b60208210810361388757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561076857600081815260208120601f850160051c810160208610156138b45750805b601f850160051c820191505b818110156138d3578281556001016138c0565b505050505050565b815167ffffffffffffffff8111156138f5576138f5612f32565b613909816139038454613853565b8461388d565b602080601f83116001811461393e57600084156139265750858301515b600019600386901b1c1916600185901b1785556138d3565b600085815260208120601f198616915b8281101561396d5788860151825594840194600190910190840161394e565b508582101561398b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156139ec57600080fd5b8151612d4981612d7a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066b5761066b6139f7565b634e487b7160e01b600052603260045260246000fd5b600060018201613a4857613a486139f7565b5060010190565b600060208284031215613a6157600080fd5b5051919050565b600081518084526020808501945080840160005b83811015613a9857815187529582019590820190600101613a7c565b509495945050505050565b6000815160408452613ab86040850182613a68565b905060208301518482036020860152613ad18282613a68565b95945050505050565b6001600160a01b0384168152825160208083019190915283015160408083019190915283015160608083019190915283015160808083019190915283015160a08083019190915283015160c08083019190915283015160e08083019190915283015161010080830191909152830151610120808301919091528301516101408083019190915283015161016080830191909152830151610180808301919091528301516101a0808301919091528301516101c0808301919091528301516101e08083019190915283015161020080830191909152830151610220808301919091528301516102408083019190915283015161026080830191909152830151610280808301919091528301516102a0808301919091528301516102c08201526103006102e08201819052600090613c1283820185613aa3565b9695505050505050565b600060208284031215613c2e57600080fd5b81518015158114612d4957600080fd5b6000610160820190506001600160a01b0380861683528085511660208401528060208601511660408401525062ffffff604085015116606083015261384b60808301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b6001600160a01b03831681526101008101612d4960208301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b60006101206001600160a01b0386168352806020840152613d7381840186612ec1565b91505061384b60408301846001600160a01b038151168252602081015160208301526040810151604083015260608101516060830152608081015163ffffffff80821660808501528060a08401511660a08501528060c08401511660c085015250505050565b60006001600160a01b03808716835260806020840152613dfc6080840187612ec1565b94166040830152506060015292915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613e46816017850160208801612e9d565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613e83816028840160208801612e9d565b01602801949350505050565b602081526000612d496020830184612ec1565b808202811582820484141761066b5761066b6139f7565b600081613ec857613ec86139f7565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": false, + "internalType": "address", + "name": "projectOwner", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": false, + "internalType": "string", + "name": "projectName", + "type": "string" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "createL2Project(address,address,address,string)": { - "details": "프로젝트 추가" - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + ], + "name": "CreatedL2Project", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": false, + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount", + "type": "uint256" + } + ], + "name": "DistributedL2Token", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "setL1ProjectManager(address)": { - "details": "l1ProjectManager 주소 설정" + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "setL2CrossDomainMessenger(address)": { - "details": "l2CrossDomainMessenger 주소 설정" + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "setL2TokenFactory(address)": { - "details": "l2TokenFactory 주소 설정" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" } - }, - "title": "L2ProjectManager", - "version": 1 + ], + "stateMutability": "view", + "type": "function" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" }, - "storageLayout": { - "storage": [ - { - "astId": 13268, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "projectOwner", + "type": "address" }, { - "astId": 13272, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "internalType": "address", + "name": "l1Token", + "type": "address" }, { - "astId": 13276, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 13280, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "internalType": "string", + "name": "projectName", + "type": "string" + } + ], + "name": "createL2Project", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 6069, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, { - "astId": 6071, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "l1ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "uint256", + "name": "totalAmount", + "type": "uint256" }, { - "astId": 6073, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "l2TokenFactory", - "offset": 0, - "slot": "6", - "type": "t_address" + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stosTier1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier3", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier4", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier1Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier2Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier3Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier4Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1roundSaleAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total2roundSaleAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "saleTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "payTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "hardcapAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "changeTOSPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startWhiteTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endWhiteTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start1roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end1roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "snapshotTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start2roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end2roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimCounts", + "type": "uint256" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSaleVault", + "name": "vaultParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[]", + "name": "claimTimes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "claimPercents", + "type": "uint256[]" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSaleClaim", + "name": "claimParams", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSale", + "name": "publicSaleParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initSqrtPrice", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "startTime", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "fee", + "type": "uint16" + } + ], + "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", + "name": "initialVaultParams", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "internalType": "struct LibPool.PoolInfo", + "name": "poolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", + "name": "rewardTonTosPoolParams", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "internalType": "struct LibPool.PoolInfo", + "name": "poolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", + "name": "rewardProjectTosPoolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "tosAirdropParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "tonAirdropParams", + "type": "tuple" + } + ], + "internalType": "struct LibProject.TokamakVaults", + "name": "tokamakVaults", + "type": "tuple" }, { - "astId": 6075, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "l2CrossDomainMessenger", - "offset": 0, - "slot": "7", - "type": "t_address" + "components": [ + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterSchedule[]", + "name": "customScheduleVaults", + "type": "tuple[]" }, { - "astId": 6077, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "publicSaleVault", - "offset": 0, - "slot": "8", - "type": "t_address" + "components": [ + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + } + ], + "internalType": "struct LibProject.InitalParameterNonScheduleVault[]", + "name": "customNonScheduleVaults", + "type": "tuple[]" + } + ], + "name": "distributesL2Token", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1Token", + "type": "address" }, { - "astId": 6079, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "initialLiquidityVault", - "offset": 0, - "slot": "9", - "type": "t_address" + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 6081, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "liquidityRewardVault", - "offset": 0, - "slot": "10", - "type": "t_address" + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, { - "astId": 6083, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "tonAirdropVault", - "offset": 0, - "slot": "11", - "type": "t_address" + "internalType": "uint256", + "name": "totalAmount", + "type": "uint256" }, { - "astId": 6085, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "tosAirdropVault", - "offset": 0, - "slot": "12", - "type": "t_address" + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stosTier1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier3", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stosTier4", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier1Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier2Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier3Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tier4Percents", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1roundSaleAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total2roundSaleAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "saleTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "payTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "hardcapAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "changeTOSPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startWhiteTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endWhiteTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start1roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end1roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "snapshotTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start2roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end2roundTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimCounts", + "type": "uint256" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSaleVault", + "name": "vaultParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[]", + "name": "claimTimes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "claimPercents", + "type": "uint256[]" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSaleClaim", + "name": "claimParams", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterPublicSale", + "name": "publicSaleParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initSqrtPrice", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "startTime", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "fee", + "type": "uint16" + } + ], + "internalType": "struct LibProject.InitalParameterInitialLiquidityVault", + "name": "initialVaultParams", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "internalType": "struct LibPool.PoolInfo", + "name": "poolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", + "name": "rewardTonTosPoolParams", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "internalType": "struct LibPool.PoolInfo", + "name": "poolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterLiquidityRewardVault", + "name": "rewardProjectTosPoolParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "tosAirdropParams", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "tonAirdropParams", + "type": "tuple" + } + ], + "internalType": "struct LibProject.TokamakVaults", + "name": "tokamakVaults", + "type": "tuple" }, { - "astId": 6087, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "scheduleVault", - "offset": 0, - "slot": "13", - "type": "t_address" + "components": [ + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct LibProject.InitalParameterSchedule[]", + "name": "customScheduleVaults", + "type": "tuple[]" }, { - "astId": 6089, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "nonScheduleVault", - "offset": 0, - "slot": "14", - "type": "t_address" + "components": [ + { + "internalType": "string", + "name": "vaultName", + "type": "string" + }, + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + } + ], + "internalType": "struct LibProject.InitalParameterNonScheduleVault[]", + "name": "customNonScheduleVaults", + "type": "tuple[]" + } + ], + "name": "distributesL2TokenOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 6094, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "projects", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_struct(L2ProjectInfo)12273_storage)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 6098, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "tokenMaps", - "offset": 0, - "slot": "16", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialLiquidityVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2CrossDomainMessenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2TokenFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidityRewardVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nonScheduleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "projects", + "outputs": [ + { + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "projectOwner", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "l1Token", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "string", + "name": "projectName", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "publicSaleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1ProjectManager", + "type": "address" + } + ], + "name": "setL1ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2CrossDomainMessenger", + "type": "address" + } + ], + "name": "setL2CrossDomainMessenger", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2TokenFactory", + "type": "address" + } + ], + "name": "setL2TokenFactory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "publicSale", + "type": "address" }, - "t_mapping(t_address,t_struct(L2ProjectInfo)12273_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibProject.L2ProjectInfo)", - "numberOfBytes": "32", - "value": "t_struct(L2ProjectInfo)12273_storage" + { + "internalType": "address", + "name": "initialLiquidity", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "liquidityReward", + "type": "address" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "tonAirdrop", + "type": "address" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "tosAirdrop", + "type": "address" }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_scheduleVault", + "type": "address" }, - "t_struct(L2ProjectInfo)12273_storage": { - "encoding": "inplace", - "label": "struct LibProject.L2ProjectInfo", - "members": [ - { - "astId": 12264, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "projectId", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, + { + "internalType": "address", + "name": "_nonScheduleVault", + "type": "address" + } + ], + "name": "setTokamakVaults", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "tokenMaps", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tonAirdropVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tosAirdropVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2token", + "type": "address" + } + ], + "name": "viewProject", + "outputs": [ + { + "components": [ { - "astId": 12266, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "projectOwner", - "offset": 0, - "slot": "1", - "type": "t_address" + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, { - "astId": 12268, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "l1Token", - "offset": 0, - "slot": "2", - "type": "t_address" + "internalType": "address", + "name": "projectOwner", + "type": "address" }, { - "astId": 12270, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "l2Token", - "offset": 0, - "slot": "3", - "type": "t_address" + "internalType": "address", + "name": "l1Token", + "type": "address" }, { - "astId": 12272, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "projectName", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 18, - "contract": "contracts/L2/L2ProjectManager.sol:L2ProjectManager", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" + "internalType": "string", + "name": "projectName", + "type": "string" } ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + "internalType": "struct LibProject.L2ProjectInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2ProjectManagerProxy.json b/contracts/data/tonstarter/abi/L2ProjectManagerProxy.json index 0da923d..ee63935 100644 --- a/contracts/data/tonstarter/abi/L2ProjectManagerProxy.json +++ b/contracts/data/tonstarter/abi/L2ProjectManagerProxy.json @@ -1,1216 +1,743 @@ -{ - "address": "0x7A4710394a7f96028a517A9846b5aC3ECE6ebC62", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialLiquidityVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2CrossDomainMessenger", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2TokenFactory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "liquidityRewardVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonScheduleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "projects", - "outputs": [ - { - "internalType": "uint256", - "name": "projectId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "publicSaleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "scheduleVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "tokenMaps", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tonAirdropVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tosAirdropVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x4a9e3247dc6194f45c0b69bb7924e342319854d30abad8d1e7974155f5c31d33", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x7A4710394a7f96028a517A9846b5aC3ECE6ebC62", - "transactionIndex": 0, - "gasUsed": "1670893", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000800000000000000000000100000000000020000000000401000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0791cff23f3253845c24dca37b52e83dd82e7b727e10d0b8566c1563e02882aa", - "transactionHash": "0x4a9e3247dc6194f45c0b69bb7924e342319854d30abad8d1e7974155f5c31d33", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 22623, - "transactionHash": "0x4a9e3247dc6194f45c0b69bb7924e342319854d30abad8d1e7974155f5c31d33", - "address": "0x7A4710394a7f96028a517A9846b5aC3ECE6ebC62", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x0791cff23f3253845c24dca37b52e83dd82e7b727e10d0b8566c1563e02882aa" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 22623, - "transactionHash": "0x4a9e3247dc6194f45c0b69bb7924e342319854d30abad8d1e7974155f5c31d33", - "address": "0x7A4710394a7f96028a517A9846b5aC3ECE6ebC62", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x0791cff23f3253845c24dca37b52e83dd82e7b727e10d0b8566c1563e02882aa" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 22623, - "cumulativeGasUsed": "1670893", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "08f68a68e5f728776be9754440400d92", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialLiquidityVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2TokenFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityRewardVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonScheduleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"projects\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicSaleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scheduleVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMaps\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tonAirdropVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tosAirdropVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2ProjectManagerProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/L2ProjectManagerProxy.sol\":\"L2ProjectManagerProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/L2ProjectManagerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../proxy/Proxy.sol\\\";\\nimport \\\"./L2ProjectManagerStorage.sol\\\";\\n\\n/**\\n * @title L2ProjectManagerProxy\\n * @dev\\n */\\ncontract L2ProjectManagerProxy is Proxy, L2ProjectManagerStorage {\\n\\n}\",\"keccak256\":\"0x0dc9f84d7cd188c1c9126a690f041faad8d6ca97a012c804fda0baaa4275d095\",\"license\":\"MIT\"},\"contracts/L2/L2ProjectManagerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\nimport { LibProject } from \\\"../libraries/LibProject.sol\\\";\\n\\n/**\\n * @title L2ProjectManagerStorage\\n * @dev\\n */\\ncontract L2ProjectManagerStorage {\\n\\n bool internal free = true;\\n address public l1ProjectManager;\\n address public l2TokenFactory;\\n address public l2CrossDomainMessenger;\\n\\n // \\ud1a0\\ud070\\ubcc4\\ub85c \\ub300\\ud45c\\ub418\\ub294 \\ubcfc\\ud2b8\\n address public publicSaleVault;\\n address public initialLiquidityVault;\\n address public liquidityRewardVault;\\n address public tonAirdropVault;\\n address public tosAirdropVault;\\n\\n address public scheduleVault; // customScheduleVault\\n address public nonScheduleVault; // customNonScheduleVault\\n\\n // l2token - L2ProjectInfo\\n mapping(address => LibProject.L2ProjectInfo) public projects;\\n\\n // l1token - l2token\\n mapping(address => address) public tokenMaps;\\n\\n}\\n\",\"keccak256\":\"0x809825dcd965f575234470617a615db4435af4d640ee2f6660f0f6cdb24a846c\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n address poolAddress;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x70aa30ad2bdcc19fee1890162b02f21077efadb0da73a0898d2806f96ff0ffe5\",\"license\":\"MIT\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001d51833981519152806200005b565b6200005560008051602062001d5183398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611be7806200016a6000396000f3fe60806040526004361061026e5760003560e01c8063704802751161015357806391d14854116100cb578063c5b53e681161007f578063eca7b83611610064578063eca7b83614610820578063eddd5e8214610840578063fbef005a14610860576102c0565b8063c5b53e68146107ca578063d547741f14610800576102c0565b8063b911135f116100b0578063b911135f14610754578063c519eeac1461078a578063c51c773a146107aa576102c0565b806391d14854146106f9578063a217fddf1461073f576102c0565b80637cb00d2511610122578063840e78fd11610107578063840e78fd146106885780638b8f4a65146106b95780638d4fdb40146106d9576102c0565b80637cb00d25146106485780637cd5f66314610668576102c0565b806370480275146105af57806374a9f5c1146105cf57806375829def146105f457806375b238fc14610614576102c0565b80633659cfe6116101e65780635c60da1b116101b557806363a8fd891161019a57806363a8fd89146105555780636e53f4271461056f5780636e6e85731461058f576102c0565b80635c60da1b146104ef5780635cc797d814610535576102c0565b80633659cfe6146104495780634a5df50f1461046957806350d2a27614610489578063550d01a3146104bf576102c0565b806324d7806c1161023d5780632c8917c8116102225780632c8917c8146103e95780632f2ff15d1461040957806336568abe14610429576102c0565b806324d7806c146103915780632966c4dd146103b1576102c0565b806301ffc9a7146102ca5780631785f53c146102ff578063229852461461031f578063248a9ca314610361576102c0565b366102c05760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6102c8610880565b005b3480156102d657600080fd5b506102ea6102e536600461180e565b610929565b60405190151581526020015b60405180910390f35b34801561030b57600080fd5b506102c861031a36600461184f565b610960565b34801561032b57600080fd5b506103537ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102f6565b34801561036d57600080fd5b5061035361037c36600461186a565b60009081526004602052604090206001015490565b34801561039d57600080fd5b506102ea6103ac36600461184f565b6109db565b3480156103bd57600080fd5b50600a546103d1906001600160a01b031681565b6040516001600160a01b0390911681526020016102f6565b3480156103f557600080fd5b506008546103d1906001600160a01b031681565b34801561041557600080fd5b506102c8610424366004611883565b610a1b565b34801561043557600080fd5b506102c8610444366004611883565b610a40565b34801561045557600080fd5b506102c861046436600461184f565b610acc565b34801561047557600080fd5b506102c86104843660046118af565b610c25565b34801561049557600080fd5b506103d16104a436600461180e565b6003602052600090815260409020546001600160a01b031681565b3480156104cb57600080fd5b506102ea6104da36600461184f565b60026020526000908152604090205460ff1681565b3480156104fb57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103d1565b34801561054157600080fd5b506102c8610550366004611943565b610ed2565b34801561056157600080fd5b506000546102ea9060ff1681565b34801561057b57600080fd5b50600b546103d1906001600160a01b031681565b34801561059b57600080fd5b50600e546103d1906001600160a01b031681565b3480156105bb57600080fd5b506102c86105ca36600461184f565b610f2a565b3480156105db57600080fd5b506005546103d19061010090046001600160a01b031681565b34801561060057600080fd5b506102c861060f36600461184f565b610fa2565b34801561062057600080fd5b506103537fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561065457600080fd5b506102c861066336600461196d565b6110f2565b34801561067457600080fd5b506102c8610683366004611988565b611153565b34801561069457600080fd5b506106a86106a336600461184f565b6111ac565b6040516102f6959493929190611a0b565b3480156106c557600080fd5b506103d16106d436600461186a565b611273565b3480156106e557600080fd5b506103d16106f436600461180e565b611290565b34801561070557600080fd5b506102ea610714366004611883565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561074b57600080fd5b50610353600081565b34801561076057600080fd5b506103d161076f36600461186a565b6001602052600090815260409020546001600160a01b031681565b34801561079657600080fd5b50600d546103d1906001600160a01b031681565b3480156107b657600080fd5b506009546103d1906001600160a01b031681565b3480156107d657600080fd5b506103d16107e536600461184f565b6010602052600090815260409020546001600160a01b031681565b34801561080c57600080fd5b506102c861081b366004611883565b61138c565b34801561082c57600080fd5b50600c546103d1906001600160a01b031681565b34801561084c57600080fd5b506006546103d1906001600160a01b031681565b34801561086c57600080fd5b506007546103d1906001600160a01b031681565b60006108976000356001600160e01b031916611290565b90506001600160a01b038116158015906108b4575060005460ff16155b6109005760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016102b7565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061095a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610969336109db565b6109ae5760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a40565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661095a565b600082815260046020526040902060010154610a36816113b1565b61092483836113bb565b6001600160a01b0381163314610abe5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016102b7565b610ac8828261145d565b5050565b610ad5336109db565b610b1a5760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6001600160a01b038116610b705760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016102b7565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610be15760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016102b7565b610bee81600060016114e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c2e336109db565b610c735760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b81610cc05760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016102b7565b6001600160a01b03811660009081526002602052604090205460ff16610d285760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016102b7565b60005b82811015610ecc57816001600160a01b031660036000868685818110610d5357610d53611a50565b9050602002016020810190610d68919061180e565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610dd95760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016102b7565b8160036000868685818110610df057610df0611a50565b9050602002016020810190610e05919061180e565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610e5a57610e5a611a50565b9050602002016020810190610e6f919061180e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610ec481611a7c565b915050610d2b565b50505050565b610edb336109db565b610f205760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b610ac88282611578565b610f33336109db565b610f785760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1b565b610fab336109db565b610ff05760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6001600160a01b0381166110465760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016102b7565b6001600160a01b038116330361109e5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016102b7565b6110c87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1b565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610a40565b6110fb336109db565b6111405760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6000805460ff1916911515919091179055565b61115c336109db565b6111a15760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109248383836114e0565b600f602052600090815260409020805460018201546002830154600384015460048501805494956001600160a01b039485169593851694909216926111f090611a95565b80601f016020809104026020016040519081016040528092919081815260200182805461121c90611a95565b80156112695780601f1061123e57610100808354040283529160200191611269565b820191906000526020600020905b81548152906001019060200180831161124c57829003601f168201915b5050505050905085565b6000818152600160205260408120546001600160a01b031661095a565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112f05750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561134e57506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546113a7816113b1565b610924838361145d565b6109d881336115d7565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac85760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114193390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610ac85760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6115375760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016102b7565b8015611572576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61092483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac85761160a8161164c565b61161583602061165e565b604051602001611626929190611acf565b60408051601f198184030181529082905262461bcd60e51b82526102b791600401611b50565b606061095a6001600160a01b03831660145b6060600061166d836002611b63565b611678906002611b7a565b67ffffffffffffffff81111561169057611690611b8d565b6040519080825280601f01601f1916602001820160405280156116ba576020820181803683370190505b509050600360fc1b816000815181106116d5576116d5611a50565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061170457611704611a50565b60200101906001600160f81b031916908160001a9053506000611728846002611b63565b611733906001611b7a565b90505b60018111156117b8577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061177457611774611a50565b1a60f81b82828151811061178a5761178a611a50565b60200101906001600160f81b031916908160001a90535060049490941c936117b181611ba3565b9050611736565b5083156118075760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102b7565b9392505050565b60006020828403121561182057600080fd5b81356001600160e01b03198116811461180757600080fd5b80356001600160a01b038116811461138757600080fd5b60006020828403121561186157600080fd5b61180782611838565b60006020828403121561187c57600080fd5b5035919050565b6000806040838503121561189657600080fd5b823591506118a660208401611838565b90509250929050565b6000806000604084860312156118c457600080fd5b833567ffffffffffffffff808211156118dc57600080fd5b818601915086601f8301126118f057600080fd5b8135818111156118ff57600080fd5b8760208260051b850101111561191457600080fd5b60209283019550935061192a9186019050611838565b90509250925092565b8035801515811461138757600080fd5b6000806040838503121561195657600080fd5b61195f83611838565b91506118a660208401611933565b60006020828403121561197f57600080fd5b61180782611933565b60008060006060848603121561199d57600080fd5b6119a684611838565b92506020840135915061192a60408501611933565b60005b838110156119d65781810151838201526020016119be565b50506000910152565b600081518084526119f78160208601602086016119bb565b601f01601f19169290920160200192915050565b85815260006001600160a01b038087166020840152808616604084015280851660608401525060a06080830152611a4560a08301846119df565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611a8e57611a8e611a66565b5060010190565b600181811c90821680611aa957607f821691505b602082108103611ac957634e487b7160e01b600052602260045260246000fd5b50919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b078160178501602088016119bb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611b448160288401602088016119bb565b01602801949350505050565b60208152600061180760208301846119df565b808202811582820484141761095a5761095a611a66565b8082018082111561095a5761095a611a66565b634e487b7160e01b600052604160045260246000fd5b600081611bb257611bb2611a66565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x60806040526004361061026e5760003560e01c8063704802751161015357806391d14854116100cb578063c5b53e681161007f578063eca7b83611610064578063eca7b83614610820578063eddd5e8214610840578063fbef005a14610860576102c0565b8063c5b53e68146107ca578063d547741f14610800576102c0565b8063b911135f116100b0578063b911135f14610754578063c519eeac1461078a578063c51c773a146107aa576102c0565b806391d14854146106f9578063a217fddf1461073f576102c0565b80637cb00d2511610122578063840e78fd11610107578063840e78fd146106885780638b8f4a65146106b95780638d4fdb40146106d9576102c0565b80637cb00d25146106485780637cd5f66314610668576102c0565b806370480275146105af57806374a9f5c1146105cf57806375829def146105f457806375b238fc14610614576102c0565b80633659cfe6116101e65780635c60da1b116101b557806363a8fd891161019a57806363a8fd89146105555780636e53f4271461056f5780636e6e85731461058f576102c0565b80635c60da1b146104ef5780635cc797d814610535576102c0565b80633659cfe6146104495780634a5df50f1461046957806350d2a27614610489578063550d01a3146104bf576102c0565b806324d7806c1161023d5780632c8917c8116102225780632c8917c8146103e95780632f2ff15d1461040957806336568abe14610429576102c0565b806324d7806c146103915780632966c4dd146103b1576102c0565b806301ffc9a7146102ca5780631785f53c146102ff578063229852461461031f578063248a9ca314610361576102c0565b366102c05760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6102c8610880565b005b3480156102d657600080fd5b506102ea6102e536600461180e565b610929565b60405190151581526020015b60405180910390f35b34801561030b57600080fd5b506102c861031a36600461184f565b610960565b34801561032b57600080fd5b506103537ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016102f6565b34801561036d57600080fd5b5061035361037c36600461186a565b60009081526004602052604090206001015490565b34801561039d57600080fd5b506102ea6103ac36600461184f565b6109db565b3480156103bd57600080fd5b50600a546103d1906001600160a01b031681565b6040516001600160a01b0390911681526020016102f6565b3480156103f557600080fd5b506008546103d1906001600160a01b031681565b34801561041557600080fd5b506102c8610424366004611883565b610a1b565b34801561043557600080fd5b506102c8610444366004611883565b610a40565b34801561045557600080fd5b506102c861046436600461184f565b610acc565b34801561047557600080fd5b506102c86104843660046118af565b610c25565b34801561049557600080fd5b506103d16104a436600461180e565b6003602052600090815260409020546001600160a01b031681565b3480156104cb57600080fd5b506102ea6104da36600461184f565b60026020526000908152604090205460ff1681565b3480156104fb57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103d1565b34801561054157600080fd5b506102c8610550366004611943565b610ed2565b34801561056157600080fd5b506000546102ea9060ff1681565b34801561057b57600080fd5b50600b546103d1906001600160a01b031681565b34801561059b57600080fd5b50600e546103d1906001600160a01b031681565b3480156105bb57600080fd5b506102c86105ca36600461184f565b610f2a565b3480156105db57600080fd5b506005546103d19061010090046001600160a01b031681565b34801561060057600080fd5b506102c861060f36600461184f565b610fa2565b34801561062057600080fd5b506103537fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561065457600080fd5b506102c861066336600461196d565b6110f2565b34801561067457600080fd5b506102c8610683366004611988565b611153565b34801561069457600080fd5b506106a86106a336600461184f565b6111ac565b6040516102f6959493929190611a0b565b3480156106c557600080fd5b506103d16106d436600461186a565b611273565b3480156106e557600080fd5b506103d16106f436600461180e565b611290565b34801561070557600080fd5b506102ea610714366004611883565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561074b57600080fd5b50610353600081565b34801561076057600080fd5b506103d161076f36600461186a565b6001602052600090815260409020546001600160a01b031681565b34801561079657600080fd5b50600d546103d1906001600160a01b031681565b3480156107b657600080fd5b506009546103d1906001600160a01b031681565b3480156107d657600080fd5b506103d16107e536600461184f565b6010602052600090815260409020546001600160a01b031681565b34801561080c57600080fd5b506102c861081b366004611883565b61138c565b34801561082c57600080fd5b50600c546103d1906001600160a01b031681565b34801561084c57600080fd5b506006546103d1906001600160a01b031681565b34801561086c57600080fd5b506007546103d1906001600160a01b031681565b60006108976000356001600160e01b031916611290565b90506001600160a01b038116158015906108b4575060005460ff16155b6109005760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016102b7565b3660008037600080366000845af43d6000803e80801561091f573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061095a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610969336109db565b6109ae5760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a40565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661095a565b600082815260046020526040902060010154610a36816113b1565b61092483836113bb565b6001600160a01b0381163314610abe5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016102b7565b610ac8828261145d565b5050565b610ad5336109db565b610b1a5760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6001600160a01b038116610b705760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016102b7565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610be15760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016102b7565b610bee81600060016114e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c2e336109db565b610c735760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b81610cc05760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016102b7565b6001600160a01b03811660009081526002602052604090205460ff16610d285760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016102b7565b60005b82811015610ecc57816001600160a01b031660036000868685818110610d5357610d53611a50565b9050602002016020810190610d68919061180e565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610dd95760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016102b7565b8160036000868685818110610df057610df0611a50565b9050602002016020810190610e05919061180e565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610e5a57610e5a611a50565b9050602002016020810190610e6f919061180e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610ec481611a7c565b915050610d2b565b50505050565b610edb336109db565b610f205760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b610ac88282611578565b610f33336109db565b610f785760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1b565b610fab336109db565b610ff05760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6001600160a01b0381166110465760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016102b7565b6001600160a01b038116330361109e5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016102b7565b6110c87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610a1b565b6109d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610a40565b6110fb336109db565b6111405760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6000805460ff1916911515919091179055565b61115c336109db565b6111a15760405162461bcd60e51b81526020600482015260226024820152600080516020611bbb83398151915260448201526134b760f11b60648201526084016102b7565b6109248383836114e0565b600f602052600090815260409020805460018201546002830154600384015460048501805494956001600160a01b039485169593851694909216926111f090611a95565b80601f016020809104026020016040519081016040528092919081815260200182805461121c90611a95565b80156112695780601f1061123e57610100808354040283529160200191611269565b820191906000526020600020905b81548152906001019060200180831161124c57829003601f168201915b5050505050905085565b6000818152600160205260408120546001600160a01b031661095a565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166112f05750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561134e57506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546113a7816113b1565b610924838361145d565b6109d881336115d7565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac85760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114193390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610ac85760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6115375760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016102b7565b8015611572576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61092483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610ac85761160a8161164c565b61161583602061165e565b604051602001611626929190611acf565b60408051601f198184030181529082905262461bcd60e51b82526102b791600401611b50565b606061095a6001600160a01b03831660145b6060600061166d836002611b63565b611678906002611b7a565b67ffffffffffffffff81111561169057611690611b8d565b6040519080825280601f01601f1916602001820160405280156116ba576020820181803683370190505b509050600360fc1b816000815181106116d5576116d5611a50565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061170457611704611a50565b60200101906001600160f81b031916908160001a9053506000611728846002611b63565b611733906001611b7a565b90505b60018111156117b8577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061177457611774611a50565b1a60f81b82828151811061178a5761178a611a50565b60200101906001600160f81b031916908160001a90535060049490941c936117b181611ba3565b9050611736565b5083156118075760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102b7565b9392505050565b60006020828403121561182057600080fd5b81356001600160e01b03198116811461180757600080fd5b80356001600160a01b038116811461138757600080fd5b60006020828403121561186157600080fd5b61180782611838565b60006020828403121561187c57600080fd5b5035919050565b6000806040838503121561189657600080fd5b823591506118a660208401611838565b90509250929050565b6000806000604084860312156118c457600080fd5b833567ffffffffffffffff808211156118dc57600080fd5b818601915086601f8301126118f057600080fd5b8135818111156118ff57600080fd5b8760208260051b850101111561191457600080fd5b60209283019550935061192a9186019050611838565b90509250925092565b8035801515811461138757600080fd5b6000806040838503121561195657600080fd5b61195f83611838565b91506118a660208401611933565b60006020828403121561197f57600080fd5b61180782611933565b60008060006060848603121561199d57600080fd5b6119a684611838565b92506020840135915061192a60408501611933565b60005b838110156119d65781810151838201526020016119be565b50506000910152565b600081518084526119f78160208601602086016119bb565b601f01601f19169290920160200192915050565b85815260006001600160a01b038087166020840152808616604084015280851660608401525060a06080830152611a4560a08301846119df565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611a8e57611a8e611a66565b5060010190565b600181811c90821680611aa957607f821691505b602082108103611ac957634e487b7160e01b600052602260045260246000fd5b50919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b078160178501602088016119bb565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611b448160288401602088016119bb565b01602801949350505050565b60208152600061180760208301846119df565b808202811582820484141761095a5761095a611a66565b8082018082111561095a5761095a611a66565b634e487b7160e01b600052604160045260246000fd5b600081611bb257611bb2611a66565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2ProjectManagerProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 11696, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 11700, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 11704, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 11708, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 24, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 5876, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ { - "astId": 5878, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "l1ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5880, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "l2TokenFactory", - "offset": 0, - "slot": "6", - "type": "t_address" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "astId": 5882, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "l2CrossDomainMessenger", - "offset": 0, - "slot": "7", - "type": "t_address" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ { - "astId": 5884, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "publicSaleVault", - "offset": 0, - "slot": "8", - "type": "t_address" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5886, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "initialLiquidityVault", - "offset": 0, - "slot": "9", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ { - "astId": 5888, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "liquidityRewardVault", - "offset": 0, - "slot": "10", - "type": "t_address" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5890, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "tonAirdropVault", - "offset": 0, - "slot": "11", - "type": "t_address" - }, + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ { - "astId": 5892, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "tosAirdropVault", - "offset": 0, - "slot": "12", - "type": "t_address" - }, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 5894, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "scheduleVault", - "offset": 0, - "slot": "13", - "type": "t_address" + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 5896, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "nonScheduleVault", - "offset": 0, - "slot": "14", - "type": "t_address" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "astId": 5901, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "projects", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_struct(L2ProjectInfo)10710_storage)" + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 5905, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "tokenMaps", - "offset": 0, - "slot": "16", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialLiquidityVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2CrossDomainMessenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2TokenFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidityRewardVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nonScheduleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "projects", + "outputs": [ + { + "internalType": "uint256", + "name": "projectId", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "projectOwner", + "type": "address" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "l1Token", + "type": "address" }, - "t_mapping(t_address,t_struct(L2ProjectInfo)10710_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LibProject.L2ProjectInfo)", - "numberOfBytes": "32", - "value": "t_struct(L2ProjectInfo)10710_storage" + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "string", + "name": "projectName", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "publicSaleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "scheduleVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_struct(L2ProjectInfo)10710_storage": { - "encoding": "inplace", - "label": "struct LibProject.L2ProjectInfo", - "members": [ - { - "astId": 10701, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "projectId", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 10703, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "projectOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 10705, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "l1Token", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 10707, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "l2Token", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 10709, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "projectName", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "numberOfBytes": "160" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/L2ProjectManagerProxy.sol:L2ProjectManagerProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" } - } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "tokenMaps", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tonAirdropVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tosAirdropVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2ScheduleVault.json b/contracts/data/tonstarter/abi/L2ScheduleVault.json index 66f7df3..cacf73f 100644 --- a/contracts/data/tonstarter/abi/L2ScheduleVault.json +++ b/contracts/data/tonstarter/abi/L2ScheduleVault.json @@ -1,1236 +1,886 @@ -{ - "address": "0x270758e04385c5C92cE1dDF5F466280ebd686212", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "newClaimer", - "type": "address" - } - ], - "name": "ChangedClaimer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimedInVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "indexed": false, - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "parmas", - "type": "tuple" - } - ], - "name": "InitializedL2ScheduleVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - } - ], - "name": "availableClaimAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "internalType": "address", - "name": "_newClaimer", - "type": "address" - } - ], - "name": "changeClaimer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - } - ], - "name": "getCurrentRound", - "outputs": [ - { - "internalType": "uint256", - "name": "round", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - }, - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundIntervalTime", - "type": "uint32" - } - ], - "internalType": "struct LibProject.InitalParameterScheduleVault", - "name": "params", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isVaultAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "transferVaultAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "internalType": "string", - "name": "vaultName", - "type": "string" - } - ], - "name": "viewVaultInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "internalType": "struct LibScheduleVault.VaultInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xa13630a55ae0cbe841b945802543128cf6c765908c56eaf7984d462d4a4889ba", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x270758e04385c5C92cE1dDF5F466280ebd686212", - "transactionIndex": 0, - "gasUsed": "2434675", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6936539fc74b0f80dd9590df7f6f8877ec60891d279a3ac4417add74c867a997", - "transactionHash": "0xa13630a55ae0cbe841b945802543128cf6c765908c56eaf7984d462d4a4889ba", - "logs": [], - "blockNumber": 22634, - "cumulativeGasUsed": "2434675", - "status": 1, - "byzantium": true +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "newClaimer", + "type": "address" + } + ], + "name": "ChangedClaimer", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a3d458828a1932a50e4175124b65d2fd", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newClaimer\",\"type\":\"address\"}],\"name\":\"ChangedClaimer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedInVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"parmas\",\"type\":\"tuple\"}],\"name\":\"InitializedL2ScheduleVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"}],\"name\":\"availableClaimAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_newClaimer\",\"type\":\"address\"}],\"name\":\"changeClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"}],\"name\":\"getCurrentRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundIntervalTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibProject.InitalParameterScheduleVault\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isVaultAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"setVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"transferVaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"vaultName\",\"type\":\"string\"}],\"name\":\"viewVaultInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"internalType\":\"struct LibScheduleVault.VaultInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vaults that Vault Admins claim according to a schedule\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2ScheduleVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2ScheduleVault.sol\":\"L2ScheduleVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"hardhat/console.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBase is ProxyStorage, AccessibleCommon, L2CustomVaultBaseStorage {\\n using SafeERC20 for IERC20;\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function setVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyL2ProjectManager\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n function transferVaultAdmin(\\n address l2Token,\\n address _newAdmin\\n )\\n external nonZeroAddress(l2Token) nonZeroAddress(_newAdmin) onlyVaultAdminOfToken(l2Token)\\n {\\n require(vaultAdminOfToken[l2Token] != _newAdmin, \\\"same\\\");\\n vaultAdminOfToken[l2Token] = _newAdmin;\\n emit SetVaultAdmin(l2Token, _newAdmin);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n function isVaultAdmin(address l2Token, address account) public view returns (bool) {\\n return (account != address(0) && vaultAdminOfToken[l2Token] == account);\\n }\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd6f7e5c17da652401fd3d3e66e26091267a058b5f284dbe8e8b30a68e4aa883c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2ScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBase.sol\\\";\\nimport \\\"./L2ScheduleVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/LibProject.sol\\\";\\n\\n/**\\n * @title L2ScheduleVault\\n * @dev Vaults that Vault Admins claim according to a schedule\\n */\\ncontract L2ScheduleVault is L2CustomVaultBase, L2ScheduleVaultStorage {\\n using SafeERC20 for IERC20;\\n\\n event InitializedL2ScheduleVault(\\n address l2Token,\\n string name,\\n LibProject.InitalParameterScheduleVault parmas\\n );\\n event ClaimedInVault(address l2Token, string name, address to, uint256 amount);\\n event ChangedClaimer(address l2Token, string name, address newClaimer);\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n function initialize(\\n address l2Token,\\n string memory vaultName,\\n LibProject.InitalParameterScheduleVault memory params\\n )\\n external onlyL2ProjectManagerOrVaultAdmin(l2Token)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n require(params.firstClaimTime > block.number, \\\"first claim time passed\\\");\\n require(params.totalAllocatedAmount != 0 && params.totalClaimCount != 0 && params.roundIntervalTime != 0, \\\"wrong value\\\");\\n if (params.totalClaimCount > 1) require(params.secondClaimTime > params.firstClaimTime, \\\"wrong the second claim time\\\");\\n require(params.totalAllocatedAmount > params.firstClaimAmount, \\\"wrong the first claim amount\\\");\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n require(info.totalAllocatedAmount == 0, \\\"already initialized\\\");\\n\\n LibScheduleVault.VaultInfo memory data = LibScheduleVault.VaultInfo({\\n claimer: params.claimer,\\n totalAllocatedAmount: params.totalAllocatedAmount,\\n totalClaimCount: params.totalClaimCount,\\n totalClaimedAmount: 0,\\n firstClaimAmount: params.firstClaimAmount,\\n firstClaimTime: params.firstClaimTime,\\n secondClaimTime: params.secondClaimTime,\\n roundInterval: params.roundIntervalTime,\\n latestClaimedRound: 0\\n });\\n vaultInfo[l2Token][nameKey] = data;\\n\\n IERC20(l2Token).safeTransferFrom(l2ProjectManager, address(this), params.totalAllocatedAmount);\\n\\n emit InitializedL2ScheduleVault(l2Token, vaultName, params);\\n\\n }\\n\\n function changeClaimer(\\n address l2Token,\\n string memory vaultName,\\n address _newClaimer\\n ) external onlyL2ProjectManagerOrVaultAdmin(l2Token) nonZeroAddress(l2Token) nonZeroAddress(_newClaimer)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n require(info.totalAllocatedAmount != 0, \\\"not initialized\\\");\\n\\n require(info.claimer != _newClaimer, \\\"same\\\");\\n vaultInfo[l2Token][nameKey].claimer = _newClaimer;\\n\\n emit ChangedClaimer(l2Token, vaultName, _newClaimer);\\n }\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n function claim(address l2Token, string calldata vaultName)\\n external nonZeroAddress(l2Token)\\n {\\n bytes32 nameKey = keccak256(bytes(vaultName));\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n require(info.claimer != address(0), \\\"no claimer\\\");\\n\\n uint256 amount = _availableClaimAmount(l2Token, nameKey);\\n require(amount != 0, \\\"no claimable amount\\\");\\n require(amount <= IERC20(l2Token).balanceOf(address(this)), 'insufficient balance');\\n\\n vaultInfo[l2Token][nameKey].totalClaimedAmount += amount;\\n\\n IERC20(l2Token).safeTransfer(info.claimer, amount);\\n\\n emit ClaimedInVault(l2Token, vaultName, info.claimer, amount);\\n }\\n\\n\\n /* ========== VIEW ========== */\\n\\n function viewVaultInfo(address l2Token, string memory vaultName) external view returns (LibScheduleVault.VaultInfo memory){\\n\\n return vaultInfo[l2Token][keccak256(bytes(vaultName))];\\n\\n }\\n\\n function getCurrentRound(address l2Token, string calldata vaultName) public view returns (uint256 round){\\n\\n return _getCurrentRound(l2Token, keccak256(bytes(vaultName)));\\n }\\n\\n function availableClaimAmount(address l2Token, string calldata vaultName) public view returns (uint256 amount){\\n\\n return _availableClaimAmount(l2Token, keccak256(bytes(vaultName)));\\n }\\n\\n /* === ======= internal ========== */\\n\\n function _getCurrentRound(address l2Token, bytes32 nameKey) internal view returns (uint256 round){\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n if(info.firstClaimTime != 0 && info.firstClaimTime <= block.timestamp && block.timestamp < info.secondClaimTime) {\\n round = 1;\\n } else if(info.secondClaimTime <= block.timestamp) {\\n round = (block.timestamp - uint256(info.secondClaimTime)) / uint256(info.roundInterval) + 2;\\n }\\n if (round > info.totalClaimCount) round = info.totalClaimCount;\\n }\\n\\n function _availableClaimAmount(address l2Token, bytes32 nameKey) internal view returns (uint256 amount){\\n\\n LibScheduleVault.VaultInfo memory info = vaultInfo[l2Token][nameKey];\\n uint256 curRound = _getCurrentRound(l2Token, nameKey);\\n\\n if(info.latestClaimedRound < curRound) {\\n if (curRound == 1) {\\n amount = info.firstClaimAmount - info.totalClaimedAmount;\\n } else if (curRound < info.totalClaimCount) {\\n amount = (info.firstClaimAmount + ((info.totalAllocatedAmount - info.firstClaimAmount)/(info.totalClaimCount-1) * (curRound -1))) - info.totalClaimedAmount;\\n } else {\\n amount = info.totalAllocatedAmount - info.totalClaimedAmount;\\n }\\n }\\n }\\n\\n\\n}\",\"keccak256\":\"0x0b00b053ccfc7ed2d2c9cd945c4483d48b4c0c415bc287088a25a3e6b6c95352\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2ScheduleVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n/**\\n * @title L2ScheduleVaultStorage\\n * @dev Vaults that Vault Admins claim according to a schedule\\n */\\ncontract L2ScheduleVaultStorage {\\n\\n // l2token - keccak256 (vault name) - VaultInfo\\n mapping(address => mapping(bytes32 => LibScheduleVault.VaultInfo)) public vaultInfo;\\n\\n\\n}\",\"keccak256\":\"0x1581365db9f7952c0090b751608a94590209de795a6bc0d0dc01ee701b468786\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/libraries/LibProject.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface AddressManagerI {\\n function getAddress(string memory _name) external view returns (address);\\n}\\n\\n/**\\n * @title LibProject\\n */\\nlibrary LibProject {\\n\\n enum TOKEN_TYPE {\\n ERC20_A,\\n ERC20_B,\\n ERC20_C,\\n ERC20_D,\\n NONE\\n }\\n\\n enum L2_TYPE {\\n TOKAMAL_OPTIMISM,\\n TOKAMAL_ZKEVM,\\n NONE\\n }\\n\\n struct ProjectInfo {\\n address projectOwner;\\n address tokenOwner;\\n address l1Token;\\n address l2Token;\\n address addressManager;\\n uint256 initialTotalSupply;\\n uint8 tokenType;\\n uint8 l2Type;\\n string projectName;\\n }\\n\\n struct L2Info {\\n address l2TokenFactory;\\n address l2ProjectManager;\\n uint32 depositMinGasLimit;\\n uint32 sendMsgMinGasLimit;\\n }\\n\\n struct L2ProjectInfo {\\n uint256 projectId;\\n address projectOwner;\\n address l1Token;\\n address l2Token;\\n string projectName;\\n }\\n\\n struct TokamakVaults {\\n InitalParameterPublicSale publicSaleParams;\\n InitalParameterInitialLiquidityVault initialVaultParams;\\n InitalParameterLiquidityRewardVault rewardParams;\\n InitalParameterScheduleVault tosAirdropParams;\\n InitalParameterScheduleVault tonAirdropParams;\\n }\\n\\n struct InitalParameterPublicSale {\\n InitalParameterPublicSaleVault vaultParams;\\n InitalParameterPublicSaleClaim claimParams;\\n }\\n\\n struct InitalParameterPublicSaleVault {\\n uint256 stosTier1;\\n uint256 stosTier2;\\n uint256 stosTier3;\\n uint256 stosTier4;\\n uint256 tier1Percents;\\n uint256 tier2Percents;\\n uint256 tier3Percents;\\n uint256 tier4Percents;\\n uint256 total1roundSaleAmount;\\n uint256 total2roundSaleAmount;\\n uint256 saleTokenPrice;\\n uint256 payTokenPrice;\\n uint256 hardcapAmount;\\n uint256 changeTOSPercent;\\n uint256 startWhiteTime;\\n uint256 endWhiteTime;\\n uint256 start1roundTime;\\n uint256 end1roundTime;\\n uint256 snapshotTime;\\n uint256 start2roundTime;\\n uint256 end2roundTime;\\n uint256 claimCounts;\\n }\\n\\n struct InitalParameterPublicSaleClaim {\\n uint256[] claimTimes;\\n uint256[] claimPercents;\\n }\\n\\n struct InitalParameterInitialLiquidityVault {\\n uint256 totalAllocatedAmount;\\n uint256 tosPrice;\\n uint256 tokenPrice;\\n uint256 initSqrtPrice;\\n uint32 startTime;\\n uint16 fee;\\n }\\n\\n struct InitalParameterLiquidityRewardVault {\\n address poolAddress;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterSchedule {\\n string vaultName;\\n InitalParameterScheduleVault params;\\n }\\n\\n struct InitalParameterScheduleVault {\\n address claimer;\\n uint256 totalAllocatedAmount;\\n uint256 totalClaimCount;\\n uint256 firstClaimAmount;\\n uint32 firstClaimTime;\\n uint32 secondClaimTime;\\n uint32 roundIntervalTime;\\n }\\n\\n struct InitalParameterNonScheduleVault {\\n string vaultName;\\n address claimer;\\n uint256 totalAllocatedAmount;\\n }\\n\\n function getL1CommunicationMessenger(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1CrossDomainMessenger') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function getL1Bridge(address addressManager) external view returns(address _address) {\\n if (addressManager == address(0)) return address(0);\\n try\\n AddressManagerI(addressManager).getAddress('Proxy__OVM_L1StandardBridge') returns (address a) {\\n _address = a;\\n } catch (bytes memory ) {\\n _address = address(0);\\n }\\n }\\n\\n function validateTokamakVaults(TokamakVaults memory tokamakVaults)\\n public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n // if ((tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount\\n // +tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount) == 0 ||\\n // tokamakVaults.initialVaultParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.rewardParams.params.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.totalAllocatedAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.totalAllocatedAmount == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.initialVaultParams.tosPrice == 0 ||\\n // tokamakVaults.initialVaultParams.tokenPrice == 0 ||\\n // tokamakVaults.initialVaultParams.initSqrtPrice == 0 ||\\n // tokamakVaults.initialVaultParams.startTime == 0 ||\\n // tokamakVaults.initialVaultParams.fee == 0) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.rewardParams.poolAddress == address(0) ||\\n // tokamakVaults.rewardParams.params.totalClaimCount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimAmount == 0 ||\\n // tokamakVaults.rewardParams.params.firstClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.secondClaimTime == 0 ||\\n // tokamakVaults.rewardParams.params.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tosAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tosAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tosAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n // if (tokamakVaults.tonAirdropParams.totalClaimCount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimAmount == 0 ||\\n // tokamakVaults.tonAirdropParams.firstClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.secondClaimTime == 0 ||\\n // tokamakVaults.tonAirdropParams.roundIntervalTime == 0\\n // ) return (boolValidate, totalAmount);\\n\\n\\n totalAmount = tokamakVaults.publicSaleParams.vaultParams.total1roundSaleAmount +\\n tokamakVaults.publicSaleParams.vaultParams.total2roundSaleAmount +\\n tokamakVaults.initialVaultParams.totalAllocatedAmount +\\n tokamakVaults.rewardParams.params.totalAllocatedAmount +\\n tokamakVaults.tosAirdropParams.totalAllocatedAmount +\\n tokamakVaults.tonAirdropParams.totalAllocatedAmount ;\\n\\n if (totalAmount == 0) return (boolValidate, totalAmount);\\n\\n boolValidate = true;\\n }\\n\\n function validateScheduleVault(\\n InitalParameterSchedule[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i = 0; i < customs.length; i++){\\n if (customs[i].params.totalAllocatedAmount == 0 ||\\n customs[i].params.totalClaimCount == 0 ||\\n customs[i].params.firstClaimAmount == 0 ||\\n customs[i].params.firstClaimTime == 0 ||\\n customs[i].params.secondClaimTime == 0 ||\\n customs[i].params.roundIntervalTime == 0\\n ) return (boolValidate, totalAmount);\\n\\n totalAmount += customs[i].params.totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n function validateNonScheduleVault(\\n InitalParameterNonScheduleVault[] memory customs\\n ) public pure returns (bool boolValidate, uint256 totalAmount) {\\n\\n if (customs.length != 0) {\\n for(uint256 i =0 ; i < customs.length; i++){\\n if (customs[i].totalAllocatedAmount == 0) return (boolValidate, totalAmount);\\n totalAmount += customs[i].totalAllocatedAmount;\\n }\\n boolValidate = true;\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x70aa30ad2bdcc19fee1890162b02f21077efadb0da73a0898d2806f96ff0ffe5\",\"license\":\"MIT\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff1916600117905534801561001d57600080fd5b50612ab58061002d6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063560fd7781161010457806391d14854116100a2578063b40d735011610071578063b40d735014610593578063b911135f1461066e578063baf6ce1f14610697578063d547741f146106aa57600080fd5b806391d148541461052c578063a217fddf14610565578063a41823431461056d578063a8d95fb21461058057600080fd5b806375829def116100de57806375829def146104b657806375b238fc146104c95780637d601b92146104f05780637fc46ba81461050357600080fd5b8063560fd7781461048357806363a8fd891461049657806370480275146104a357600080fd5b80632f2ff15d1161017c57806350d2a2761161014b57806350d2a276146103f457806351e8152a1461043557806352351e8514610448578063550d01a31461046057600080fd5b80632f2ff15d146103a8578063321efaa1146103bb57806335b9ac66146103ce57806336568abe146103e157600080fd5b80631e8948c3116101b85780631e8948c31461032a578063229852461461033d578063248a9ca31461037257806324d7806c1461039557600080fd5b806301ffc9a7146101df5780630eb76bd3146102075780631785f53c14610315575b600080fd5b6101f26101ed36600461233e565b6106bd565b60405190151581526020015b60405180910390f35b610308610215366004612450565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b03808316600090815260076020908152604080832085518684012084528252918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015292915050565b6040516101fe919061249e565b610328610323366004612533565b6106f4565b005b61032861033836600461254e565b610786565b6103647ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016101fe565b610364610380366004612581565b60009081526004602052604090206001015490565b6101f26103a3366004612533565b61095f565b6103286103b636600461259a565b61099f565b6103646103c93660046125bd565b6109c9565b6103286103dc36600461254e565b6109f4565b6103286103ef36600461259a565b610ba8565b61041d61040236600461233e565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b6101f261044336600461254e565b610c34565b60055461041d9061010090046001600160a01b031681565b6101f261046e366004612533565b60026020526000908152604090205460ff1681565b6103646104913660046125bd565b610c71565b6000546101f29060ff1681565b6103286104b1366004612533565b610c94565b6103286104c4366004612533565b610d1e565b6103647fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103286104fe366004612640565b610e80565b61041d610511366004612533565b6006602052600090815260409020546001600160a01b031681565b6101f261053a36600461259a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610364600081565b61032861057b366004612533565b611170565b61032861058e3660046125bd565b61128d565b6106116105a136600461269e565b60076020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e084015216610100820152610120016101fe565b61041d61067c366004612581565b6001602052600090815260409020546001600160a01b031681565b6103286106a53660046126dc565b61156c565b6103286106b836600461259a565b611ad1565b60006001600160e01b03198216637965db0b60e01b14806106ee57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106fd3361095f565b6107595760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ba8565b50565b816001600160a01b0381166107c25760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b816001600160a01b0381166107fe5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b6001600160a01b038085166000908152600660205260409020548591161580159061084257506001600160a01b038181166000908152600660205260409020541633145b61089c5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610750565b6001600160a01b038581166000908152600660205260409020548186169116036108f15760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106ee565b6000828152600460205260409020600101546109ba81611af6565b6109c48383611b00565b505050565b60006109ec8484846040516109df9291906127ad565b6040518091039020611ba2565b949350505050565b816001600160a01b038116610a305760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b816001600160a01b038116610a6c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b60055461010090046001600160a01b031615801590610a9a575060055461010090046001600160a01b031633145b610ae65760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610750565b6001600160a01b03848116600090815260066020526040902054818516911603610b3b5760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b0381163314610c265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610750565b610c308282611ce1565b5050565b60006001600160a01b03821615801590610c6a57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b60006109ec848484604051610c879291906127ad565b6040518091039020611d64565b610c9d3361095f565b610cf45760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261099f565b610d273361095f565b610d7e5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610750565b6001600160a01b0381163303610e2c5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610750565b610e567fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261099f565b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ba8565b600554839061010090046001600160a01b0316331480610edd57506001600160a01b038181166000908152600660205260409020541615801590610edd57506001600160a01b038181166000908152600660205260409020541633145b610f3e5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610750565b836001600160a01b038116610f7a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b826001600160a01b038116610fb65760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b84516020808701919091206001600160a01b038089166000908152600784526040808220848352855280822081516101208101835281549094168452600181015495840186905260028101549184019190915260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b9091041661010083015291929091036110ab5760405162461bcd60e51b815260206004820152600f60248201527f6e6f7420696e697469616c697a656400000000000000000000000000000000006044820152606401610750565b80516001600160a01b038088169116036110f05760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0388811660009081526007602090815260408083208684529091529081902080546001600160a01b03191692891692909217909155517fca06a665ab96328b2df1007b733fb1aa10ae76d39bea810da47a66f7a8c2dee09061115e908a908a908a9061280d565b60405180910390a15050505050505050565b806001600160a01b0381166111ac5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b6111b53361095f565b61120c5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6005546001600160a01b0380841661010090920416036112575760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b826001600160a01b0381166112c95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b600083836040516112db9291906127ad565b604080519182900382206001600160a01b0380891660009081526007602090815284822084835281529084902061012086018552805490921680865260018301549186019190915260028201549385019390935260038101546060850152600481015460808501526005015463ffffffff80821660a08601526401000000008204811660c0860152600160401b8204811660e0860152600160601b9091041661010084015292506113bb5760405162461bcd60e51b815260206004820152600a60248201526937379031b630b4b6b2b960b11b6044820152606401610750565b60006113c78784611d64565b9050806000036114195760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610750565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190612843565b8111156114d05760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610750565b6001600160a01b038716600090815260076020908152604080832086845290915281206003018054839290611506908490612872565b90915550508151611522906001600160a01b0389169083611ecf565b81516040517fca22eeecfd9befea639efcc7bc0f6d548698260714f080f97a29487ca7362de89161155b918a918a918a91908790612885565b60405180910390a150505050505050565b600554839061010090046001600160a01b03163314806115c957506001600160a01b0381811660009081526006602052604090205416158015906115c957506001600160a01b038181166000908152600660205260409020541633145b61162a5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610750565b8251602084012060808301514363ffffffff9091161161168c5760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610750565b6020830151158015906116a25750604083015115155b80156116b7575060c083015163ffffffff1615155b6117035760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610750565b60018360400151111561177357826080015163ffffffff168360a0015163ffffffff16116117735760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610750565b82606001518360200151116117ca5760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610750565b6001600160a01b038086166000908152600760209081526040808320858452825291829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152156118b65760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610750565b600060405180610120016040528086600001516001600160a01b0316815260200186602001518152602001866040015181526020016000815260200186606001518152602001866080015163ffffffff1681526020018660a0015163ffffffff1681526020018660c0015163ffffffff168152602001600063ffffffff1681525090508060076000896001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050611a9e600560019054906101000a90046001600160a01b03163087602001518a6001600160a01b0316611fea909392919063ffffffff16565b7f58cc56e8f8fd1dded65bfd52fa3974aeadec2c589ce114b0989e51ece254260487878760405161155b939291906128d9565b600082815260046020526040902060010154611aec81611af6565b6109c48383611ce1565b610783813361210e565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610c305760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b5e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b03808316600090815260076020908152604080832085845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611c595750428160a0015163ffffffff1611155b8015611c6e57508060c0015163ffffffff1642105b15611c7c5760019150611cc6565b428160c0015163ffffffff1611611cc6578060e0015163ffffffff168160c0015163ffffffff1642611cae919061295d565b611cb89190612970565b611cc3906002612872565b91505b8060400151821115611cda57806040015191505b5092915050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610c305760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03808316600090815260076020908152604080832085845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611e0a8585611ba2565b90508082610100015163ffffffff161015611ec75780600103611e425781606001518260800151611e3b919061295d565b9250611ec7565b8160400151811015611eb0576060820151611e5e60018361295d565b60018460400151611e6f919061295d565b84608001518560200151611e83919061295d565b611e8d9190612970565b611e979190612992565b8360800151611ea69190612872565b611e3b919061295d565b81606001518260200151611ec4919061295d565b92505b505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611f2b91906129a9565b6000604051808303816000865af19150503d8060008114611f68576040519150601f19603f3d011682016040523d82523d6000602084013e611f6d565b606091505b5091509150818015611f97575080511580611f97575080806020019051810190611f9791906129c5565b611fe35760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610750565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161204e91906129a9565b6000604051808303816000865af19150503d806000811461208b576040519150601f19603f3d011682016040523d82523d6000602084013e612090565b606091505b50915091508180156120ba5750805115806120ba5750808060200190518101906120ba91906129c5565b6121065760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610750565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610c305761214181612183565b61214c836020612195565b60405160200161215d9291906129e7565b60408051601f198184030181529082905262461bcd60e51b825261075091600401612a68565b60606106ee6001600160a01b03831660145b606060006121a4836002612992565b6121af906002612872565b67ffffffffffffffff8111156121c7576121c7612384565b6040519080825280601f01601f1916602001820160405280156121f1576020820181803683370190505b509050600360fc1b8160008151811061220c5761220c612a7b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061223b5761223b612a7b565b60200101906001600160f81b031916908160001a905350600061225f846002612992565b61226a906001612872565b90505b60018111156122ef577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106122ab576122ab612a7b565b1a60f81b8282815181106122c1576122c1612a7b565b60200101906001600160f81b031916908160001a90535060049490941c936122e881612a91565b905061226d565b508315610c6a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610750565b60006020828403121561235057600080fd5b81356001600160e01b031981168114610c6a57600080fd5b80356001600160a01b038116811461237f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156123bd576123bd612384565b60405290565b600082601f8301126123d457600080fd5b813567ffffffffffffffff808211156123ef576123ef612384565b604051601f8301601f19908116603f0116810190828211818310171561241757612417612384565b8160405283815286602085880101111561243057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561246357600080fd5b61246c83612368565b9150602083013567ffffffffffffffff81111561248857600080fd5b612494858286016123c3565b9150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c083015161250360c084018263ffffffff169052565b5060e083015161251b60e084018263ffffffff169052565b506101008381015163ffffffff811684830152611ec7565b60006020828403121561254557600080fd5b610c6a82612368565b6000806040838503121561256157600080fd5b61256a83612368565b915061257860208401612368565b90509250929050565b60006020828403121561259357600080fd5b5035919050565b600080604083850312156125ad57600080fd5b8235915061257860208401612368565b6000806000604084860312156125d257600080fd5b6125db84612368565b9250602084013567ffffffffffffffff808211156125f857600080fd5b818601915086601f83011261260c57600080fd5b81358181111561261b57600080fd5b87602082850101111561262d57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561265557600080fd5b61265e84612368565b9250602084013567ffffffffffffffff81111561267a57600080fd5b612686868287016123c3565b92505061269560408501612368565b90509250925092565b600080604083850312156126b157600080fd5b6126ba83612368565b946020939093013593505050565b803563ffffffff8116811461237f57600080fd5b60008060008385036101208112156126f357600080fd5b6126fc85612368565b9350602085013567ffffffffffffffff81111561271857600080fd5b612724878288016123c3565b93505060e0603f198201121561273957600080fd5b5061274261239a565b61274e60408601612368565b8152606085013560208201526080850135604082015260a0850135606082015261277a60c086016126c8565b608082015261278b60e086016126c8565b60a082015261279d61010086016126c8565b60c0820152809150509250925092565b8183823760009101908152919050565b60005b838110156127d85781810151838201526020016127c0565b50506000910152565b600081518084526127f98160208601602086016127bd565b601f01601f19169290920160200192915050565b60006001600160a01b0380861683526060602084015261283060608401866127e1565b9150808416604084015250949350505050565b60006020828403121561285557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ee576106ee61285c565b60006001600160a01b03808816835260806020840152856080840152858760a0850137600060a0878501015260a0601f19601f88011684010191508085166040840152508260608301529695505050505050565b60006101206001600160a01b0380871684528160208501526128fd828501876127e1565b925080855116604085015250506020830151606083015260408301516080830152606083015160a0830152608083015163ffffffff80821660c08501528060a08601511660e08501528060c0860151166101008501525050949350505050565b818103818111156106ee576106ee61285c565b60008261298d57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176106ee576106ee61285c565b600082516129bb8184602087016127bd565b9190910192915050565b6000602082840312156129d757600080fd5b81518015158114610c6a57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a1f8160178501602088016127bd565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a5c8160288401602088016127bd565b01602801949350505050565b602081526000610c6a60208301846127e1565b634e487b7160e01b600052603260045260246000fd5b600081612aa057612aa061285c565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063560fd7781161010457806391d14854116100a2578063b40d735011610071578063b40d735014610593578063b911135f1461066e578063baf6ce1f14610697578063d547741f146106aa57600080fd5b806391d148541461052c578063a217fddf14610565578063a41823431461056d578063a8d95fb21461058057600080fd5b806375829def116100de57806375829def146104b657806375b238fc146104c95780637d601b92146104f05780637fc46ba81461050357600080fd5b8063560fd7781461048357806363a8fd891461049657806370480275146104a357600080fd5b80632f2ff15d1161017c57806350d2a2761161014b57806350d2a276146103f457806351e8152a1461043557806352351e8514610448578063550d01a31461046057600080fd5b80632f2ff15d146103a8578063321efaa1146103bb57806335b9ac66146103ce57806336568abe146103e157600080fd5b80631e8948c3116101b85780631e8948c31461032a578063229852461461033d578063248a9ca31461037257806324d7806c1461039557600080fd5b806301ffc9a7146101df5780630eb76bd3146102075780631785f53c14610315575b600080fd5b6101f26101ed36600461233e565b6106bd565b60405190151581526020015b60405180910390f35b610308610215366004612450565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b03808316600090815260076020908152604080832085518684012084528252918290208251610120810184528154909416845260018101549184019190915260028101549183019190915260038101546060830152600481015460808301526005015463ffffffff80821660a08401526401000000008204811660c0840152600160401b8204811660e0840152600160601b9091041661010082015292915050565b6040516101fe919061249e565b610328610323366004612533565b6106f4565b005b61032861033836600461254e565b610786565b6103647ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6040519081526020016101fe565b610364610380366004612581565b60009081526004602052604090206001015490565b6101f26103a3366004612533565b61095f565b6103286103b636600461259a565b61099f565b6103646103c93660046125bd565b6109c9565b6103286103dc36600461254e565b6109f4565b6103286103ef36600461259a565b610ba8565b61041d61040236600461233e565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b6101f261044336600461254e565b610c34565b60055461041d9061010090046001600160a01b031681565b6101f261046e366004612533565b60026020526000908152604090205460ff1681565b6103646104913660046125bd565b610c71565b6000546101f29060ff1681565b6103286104b1366004612533565b610c94565b6103286104c4366004612533565b610d1e565b6103647fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103286104fe366004612640565b610e80565b61041d610511366004612533565b6006602052600090815260409020546001600160a01b031681565b6101f261053a36600461259a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610364600081565b61032861057b366004612533565b611170565b61032861058e3660046125bd565b61128d565b6106116105a136600461269e565b60076020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff808216916401000000008104821691600160401b8204811691600160601b90041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e084015216610100820152610120016101fe565b61041d61067c366004612581565b6001602052600090815260409020546001600160a01b031681565b6103286106a53660046126dc565b61156c565b6103286106b836600461259a565b611ad1565b60006001600160e01b03198216637965db0b60e01b14806106ee57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106fd3361095f565b6107595760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610ba8565b50565b816001600160a01b0381166107c25760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b816001600160a01b0381166107fe5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b6001600160a01b038085166000908152600660205260409020548591161580159061084257506001600160a01b038181166000908152600660205260409020541633145b61089c5760405162461bcd60e51b815260206004820152602560248201527f63616c6c6572206973206e6f742061207661756c7441646d696e204f66206c326044820152642a37b5b2b760d91b6064820152608401610750565b6001600160a01b038581166000908152600660205260409020548186169116036108f15760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916948916948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a15050505050565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106ee565b6000828152600460205260409020600101546109ba81611af6565b6109c48383611b00565b505050565b60006109ec8484846040516109df9291906127ad565b6040518091039020611ba2565b949350505050565b816001600160a01b038116610a305760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b816001600160a01b038116610a6c5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b60055461010090046001600160a01b031615801590610a9a575060055461010090046001600160a01b031633145b610ae65760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74206c3250726f6a6563744d616e6167657200006044820152606401610750565b6001600160a01b03848116600090815260066020526040902054818516911603610b3b5760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0384811660008181526006602090815260409182902080546001600160a01b031916948816948517905581519283528201929092527fb00bb4c229aff6156cc8e2c767c571665e1927c09fe083ec055956a5a4026193910160405180910390a150505050565b6001600160a01b0381163314610c265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610750565b610c308282611ce1565b5050565b60006001600160a01b03821615801590610c6a57506001600160a01b038381166000908152600660205260409020548116908316145b9392505050565b60006109ec848484604051610c879291906127ad565b6040518091039020611d64565b610c9d3361095f565b610cf45760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261099f565b610d273361095f565b610d7e5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610750565b6001600160a01b0381163303610e2c5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610750565b610e567fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261099f565b6107837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610ba8565b600554839061010090046001600160a01b0316331480610edd57506001600160a01b038181166000908152600660205260409020541615801590610edd57506001600160a01b038181166000908152600660205260409020541633145b610f3e5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610750565b836001600160a01b038116610f7a5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b826001600160a01b038116610fb65760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b84516020808701919091206001600160a01b038089166000908152600784526040808220848352855280822081516101208101835281549094168452600181015495840186905260028101549184019190915260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b9091041661010083015291929091036110ab5760405162461bcd60e51b815260206004820152600f60248201527f6e6f7420696e697469616c697a656400000000000000000000000000000000006044820152606401610750565b80516001600160a01b038088169116036110f05760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b0388811660009081526007602090815260408083208684529091529081902080546001600160a01b03191692891692909217909155517fca06a665ab96328b2df1007b733fb1aa10ae76d39bea810da47a66f7a8c2dee09061115e908a908a908a9061280d565b60405180910390a15050505050505050565b806001600160a01b0381166111ac5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b6111b53361095f565b61120c5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610750565b6005546001600160a01b0380841661010090920416036112575760405162461bcd60e51b81526004016107509060208082526004908201526373616d6560e01b604082015260600190565b50600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b826001600160a01b0381166112c95760405162461bcd60e51b81526020600482015260026024820152612d1960f11b6044820152606401610750565b600083836040516112db9291906127ad565b604080519182900382206001600160a01b0380891660009081526007602090815284822084835281529084902061012086018552805490921680865260018301549186019190915260028201549385019390935260038101546060850152600481015460808501526005015463ffffffff80821660a08601526401000000008204811660c0860152600160401b8204811660e0860152600160601b9091041661010084015292506113bb5760405162461bcd60e51b815260206004820152600a60248201526937379031b630b4b6b2b960b11b6044820152606401610750565b60006113c78784611d64565b9050806000036114195760405162461bcd60e51b815260206004820152601360248201527f6e6f20636c61696d61626c6520616d6f756e74000000000000000000000000006044820152606401610750565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190612843565b8111156114d05760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610750565b6001600160a01b038716600090815260076020908152604080832086845290915281206003018054839290611506908490612872565b90915550508151611522906001600160a01b0389169083611ecf565b81516040517fca22eeecfd9befea639efcc7bc0f6d548698260714f080f97a29487ca7362de89161155b918a918a918a91908790612885565b60405180910390a150505050505050565b600554839061010090046001600160a01b03163314806115c957506001600160a01b0381811660009081526006602052604090205416158015906115c957506001600160a01b038181166000908152600660205260409020541633145b61162a5760405162461bcd60e51b815260206004820152602c60248201527f63616c6c6572206973206e6f742061207661756c7441646d696e206f7220507260448201526b37b532b1ba26b0b730b3b2b960a11b6064820152608401610750565b8251602084012060808301514363ffffffff9091161161168c5760405162461bcd60e51b815260206004820152601760248201527f666972737420636c61696d2074696d65207061737365640000000000000000006044820152606401610750565b6020830151158015906116a25750604083015115155b80156116b7575060c083015163ffffffff1615155b6117035760405162461bcd60e51b815260206004820152600b60248201527f77726f6e672076616c75650000000000000000000000000000000000000000006044820152606401610750565b60018360400151111561177357826080015163ffffffff168360a0015163ffffffff16116117735760405162461bcd60e51b815260206004820152601b60248201527f77726f6e6720746865207365636f6e6420636c61696d2074696d6500000000006044820152606401610750565b82606001518360200151116117ca5760405162461bcd60e51b815260206004820152601c60248201527f77726f6e672074686520666972737420636c61696d20616d6f756e74000000006044820152606401610750565b6001600160a01b038086166000908152600760209081526040808320858452825291829020825161012081018452815490941684526001810154918401829052600281015492840192909252600382015460608401526004820154608084015260059091015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b90910416610100830152156118b65760405162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610750565b600060405180610120016040528086600001516001600160a01b0316815260200186602001518152602001866040015181526020016000815260200186606001518152602001866080015163ffffffff1681526020018660a0015163ffffffff1681526020018660c0015163ffffffff168152602001600063ffffffff1681525090508060076000896001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160050160046101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160050160086101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600501600c6101000a81548163ffffffff021916908363ffffffff160217905550905050611a9e600560019054906101000a90046001600160a01b03163087602001518a6001600160a01b0316611fea909392919063ffffffff16565b7f58cc56e8f8fd1dded65bfd52fa3974aeadec2c589ce114b0989e51ece254260487878760405161155b939291906128d9565b600082815260046020526040902060010154611aec81611af6565b6109c48383611ce1565b610783813361210e565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610c305760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b5e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b03808316600090815260076020908152604080832085845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a085018190526401000000008304821660c0860152600160401b8304821660e0860152600160601b9092041661010084015290919015801590611c595750428160a0015163ffffffff1611155b8015611c6e57508060c0015163ffffffff1642105b15611c7c5760019150611cc6565b428160c0015163ffffffff1611611cc6578060e0015163ffffffff168160c0015163ffffffff1642611cae919061295d565b611cb89190612970565b611cc3906002612872565b91505b8060400151821115611cda57806040015191505b5092915050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1615610c305760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03808316600090815260076020908152604080832085845282528083208151610120810183528154909516855260018101549285019290925260028201549084015260038101546060840152600481015460808401526005015463ffffffff80821660a08501526401000000008204811660c0850152600160401b8204811660e0850152600160601b909104166101008301529081611e0a8585611ba2565b90508082610100015163ffffffff161015611ec75780600103611e425781606001518260800151611e3b919061295d565b9250611ec7565b8160400151811015611eb0576060820151611e5e60018361295d565b60018460400151611e6f919061295d565b84608001518560200151611e83919061295d565b611e8d9190612970565b611e979190612992565b8360800151611ea69190612872565b611e3b919061295d565b81606001518260200151611ec4919061295d565b92505b505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611f2b91906129a9565b6000604051808303816000865af19150503d8060008114611f68576040519150601f19603f3d011682016040523d82523d6000602084013e611f6d565b606091505b5091509150818015611f97575080511580611f97575080806020019051810190611f9791906129c5565b611fe35760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610750565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161204e91906129a9565b6000604051808303816000865af19150503d806000811461208b576040519150601f19603f3d011682016040523d82523d6000602084013e612090565b606091505b50915091508180156120ba5750805115806120ba5750808060200190518101906120ba91906129c5565b6121065760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610750565b505050505050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610c305761214181612183565b61214c836020612195565b60405160200161215d9291906129e7565b60408051601f198184030181529082905262461bcd60e51b825261075091600401612a68565b60606106ee6001600160a01b03831660145b606060006121a4836002612992565b6121af906002612872565b67ffffffffffffffff8111156121c7576121c7612384565b6040519080825280601f01601f1916602001820160405280156121f1576020820181803683370190505b509050600360fc1b8160008151811061220c5761220c612a7b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061223b5761223b612a7b565b60200101906001600160f81b031916908160001a905350600061225f846002612992565b61226a906001612872565b90505b60018111156122ef577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106122ab576122ab612a7b565b1a60f81b8282815181106122c1576122c1612a7b565b60200101906001600160f81b031916908160001a90535060049490941c936122e881612a91565b905061226d565b508315610c6a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610750565b60006020828403121561235057600080fd5b81356001600160e01b031981168114610c6a57600080fd5b80356001600160a01b038116811461237f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156123bd576123bd612384565b60405290565b600082601f8301126123d457600080fd5b813567ffffffffffffffff808211156123ef576123ef612384565b604051601f8301601f19908116603f0116810190828211818310171561241757612417612384565b8160405283815286602085880101111561243057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561246357600080fd5b61246c83612368565b9150602083013567ffffffffffffffff81111561248857600080fd5b612494858286016123c3565b9150509250929050565b6000610120820190506001600160a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015263ffffffff60a08401511660a083015260c083015161250360c084018263ffffffff169052565b5060e083015161251b60e084018263ffffffff169052565b506101008381015163ffffffff811684830152611ec7565b60006020828403121561254557600080fd5b610c6a82612368565b6000806040838503121561256157600080fd5b61256a83612368565b915061257860208401612368565b90509250929050565b60006020828403121561259357600080fd5b5035919050565b600080604083850312156125ad57600080fd5b8235915061257860208401612368565b6000806000604084860312156125d257600080fd5b6125db84612368565b9250602084013567ffffffffffffffff808211156125f857600080fd5b818601915086601f83011261260c57600080fd5b81358181111561261b57600080fd5b87602082850101111561262d57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561265557600080fd5b61265e84612368565b9250602084013567ffffffffffffffff81111561267a57600080fd5b612686868287016123c3565b92505061269560408501612368565b90509250925092565b600080604083850312156126b157600080fd5b6126ba83612368565b946020939093013593505050565b803563ffffffff8116811461237f57600080fd5b60008060008385036101208112156126f357600080fd5b6126fc85612368565b9350602085013567ffffffffffffffff81111561271857600080fd5b612724878288016123c3565b93505060e0603f198201121561273957600080fd5b5061274261239a565b61274e60408601612368565b8152606085013560208201526080850135604082015260a0850135606082015261277a60c086016126c8565b608082015261278b60e086016126c8565b60a082015261279d61010086016126c8565b60c0820152809150509250925092565b8183823760009101908152919050565b60005b838110156127d85781810151838201526020016127c0565b50506000910152565b600081518084526127f98160208601602086016127bd565b601f01601f19169290920160200192915050565b60006001600160a01b0380861683526060602084015261283060608401866127e1565b9150808416604084015250949350505050565b60006020828403121561285557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ee576106ee61285c565b60006001600160a01b03808816835260806020840152856080840152858760a0850137600060a0878501015260a0601f19601f88011684010191508085166040840152508260608301529695505050505050565b60006101206001600160a01b0380871684528160208501526128fd828501876127e1565b925080855116604085015250506020830151606083015260408301516080830152606083015160a0830152608083015163ffffffff80821660c08501528060a08601511660e08501528060c0860151166101008501525050949350505050565b818103818111156106ee576106ee61285c565b60008261298d57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176106ee576106ee61285c565b600082516129bb8184602087016127bd565b9190910192915050565b6000602082840312156129d757600080fd5b81518015158114610c6a57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a1f8160178501602088016127bd565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a5c8160288401602088016127bd565b01602801949350505050565b602081526000610c6a60208301846127e1565b634e487b7160e01b600052603260045260246000fd5b600081612aa057612aa061285c565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "details": "Vaults that Vault Admins claim according to a schedule", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } + ], + "name": "ClaimedInVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + { + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "indexed": false, + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "parmas", + "type": "tuple" + } + ], + "name": "InitializedL2ScheduleVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "internalType": "string", + "name": "vaultName", + "type": "string" + } + ], + "name": "availableClaimAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "internalType": "string", + "name": "vaultName", + "type": "string" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "internalType": "address", + "name": "_newClaimer", + "type": "address" } - }, - "title": "L2ScheduleVault", - "version": 1 + ], + "name": "changeClaimer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "internalType": "string", + "name": "vaultName", + "type": "string" + } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, - "storageLayout": { - "storage": [ - { - "astId": 8669, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 8673, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "internalType": "string", + "name": "vaultName", + "type": "string" + } + ], + "name": "getCurrentRound", + "outputs": [ + { + "internalType": "uint256", + "name": "round", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 8677, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 8681, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "internalType": "string", + "name": "vaultName", + "type": "string" }, { - "astId": 5165, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "components": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "roundIntervalTime", + "type": "uint32" + } + ], + "internalType": "struct LibProject.InitalParameterScheduleVault", + "name": "params", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 5167, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isVaultAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 5171, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 7746, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)8483_storage))" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "transferVaultAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)8483_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(bytes32 => struct LibScheduleVault.VaultInfo))", - "numberOfBytes": "32", - "value": "t_mapping(t_bytes32,t_struct(VaultInfo)8483_storage)" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(VaultInfo)8483_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)8483_storage" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l2Token", + "type": "address" }, - "t_struct(VaultInfo)8483_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ + { + "internalType": "string", + "name": "vaultName", + "type": "string" + } + ], + "name": "viewVaultInfo", + "outputs": [ + { + "components": [ { - "astId": 8466, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" + "internalType": "address", + "name": "claimer", + "type": "address" }, { - "astId": 8468, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, { - "astId": 8470, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, { - "astId": 8472, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, { - "astId": 8474, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, { - "astId": 8476, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, { - "astId": 8478, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, { - "astId": 8480, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, { - "astId": 8482, - "contract": "contracts/L2/vaults/L2ScheduleVault.sol:L2ScheduleVault", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } ], - "numberOfBytes": "192" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + "internalType": "struct LibScheduleVault.VaultInfo", + "name": "", + "type": "tuple" } - } + ], + "stateMutability": "view", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2ScheduleVaultProxy.json b/contracts/data/tonstarter/abi/L2ScheduleVaultProxy.json index 6b1e5e8..f5bac9f 100644 --- a/contracts/data/tonstarter/abi/L2ScheduleVaultProxy.json +++ b/contracts/data/tonstarter/abi/L2ScheduleVaultProxy.json @@ -1,1111 +1,670 @@ -{ - "address": "0x643512d2205E15a723ee2fe9B2871a75699Db37d", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Token", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetVaultAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "vaultAdminOfToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "vaultInfo", - "outputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalAllocatedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalClaimedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "firstClaimAmount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "firstClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "secondClaimTime", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "roundInterval", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "latestClaimedRound", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x001a71bb3fc4e5c66f0e6521fbc439e6ee562e35d2ab4dd82d86a7bb7dd860b7", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x643512d2205E15a723ee2fe9B2871a75699Db37d", - "transactionIndex": 0, - "gasUsed": "1548405", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000080000000000000000000400000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000020000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9b88695b696e3ac59dcab9b4dd2e40ae3b38fdfbc8649405c9cee7f07654f2c5", - "transactionHash": "0x001a71bb3fc4e5c66f0e6521fbc439e6ee562e35d2ab4dd82d86a7bb7dd860b7", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 22635, - "transactionHash": "0x001a71bb3fc4e5c66f0e6521fbc439e6ee562e35d2ab4dd82d86a7bb7dd860b7", - "address": "0x643512d2205E15a723ee2fe9B2871a75699Db37d", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x9b88695b696e3ac59dcab9b4dd2e40ae3b38fdfbc8649405c9cee7f07654f2c5" +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 22635, - "transactionHash": "0x001a71bb3fc4e5c66f0e6521fbc439e6ee562e35d2ab4dd82d86a7bb7dd860b7", - "address": "0x643512d2205E15a723ee2fe9B2871a75699Db37d", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x9b88695b696e3ac59dcab9b4dd2e40ae3b38fdfbc8649405c9cee7f07654f2c5" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 22635, - "cumulativeGasUsed": "1548405", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "1ed1c592115e49eafa413f74ea8d056d", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"SetVaultAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vaultAdminOfToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"vaultInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalClaimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"firstClaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"firstClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"secondClaimTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"roundInterval\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestClaimedRound\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Vaults that Vault Admins claim according to a schedule\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2ScheduleVaultProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/vaults/L2ScheduleVaultProxy.sol\":\"L2ScheduleVaultProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { Proxy } from \\\"../../proxy/Proxy.sol\\\";\\nimport { L2CustomVaultBaseStorage } from \\\"./L2CustomVaultBaseStorage.sol\\\";\\n\\n/**\\n * @title L2CustomVaultBase\\n * @dev\\n */\\ncontract L2CustomVaultBaseProxy is Proxy, L2CustomVaultBaseStorage {\\n\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n /* ========== VIEW ========== */\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0x7c1dfc5d2b669ef43872d3f836983a9a5d3de4feb12123ebc87e6399e9743539\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2CustomVaultBaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"hardhat/console.sol\\\";\\n/**\\n * @title L2CustomVaultBaseStorage\\n * @dev\\n */\\ncontract L2CustomVaultBaseStorage {\\n\\n bool internal free = true;\\n address public l2ProjectManager;\\n\\n // l2token - tokenOwner\\n mapping(address => address) public vaultAdminOfToken;\\n\\n event SetVaultAdmin(address l2Token, address newAdmin);\\n\\n modifier onlyL2ProjectManager() {\\n require(l2ProjectManager != address(0) && msg.sender == l2ProjectManager, \\\"caller is not l2ProjectManager\\\");\\n _;\\n }\\n\\n modifier onlyVaultAdminOfToken(address l2token) {\\n require(vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token],\\n \\\"caller is not a vaultAdmin Of l2Token\\\");\\n _;\\n }\\n\\n modifier onlyL2ProjectManagerOrVaultAdmin(address l2token) {\\n require(msg.sender == l2ProjectManager ||\\n (vaultAdminOfToken[l2token] != address(0) && msg.sender == vaultAdminOfToken[l2token]),\\n \\\"caller is not a vaultAdmin or ProjectManager\\\");\\n _;\\n }\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(free, \\\"lock\\\");\\n free = false;\\n _;\\n free = true;\\n }\\n\\n\\n}\",\"keccak256\":\"0xae89a60605db1239eb11e416113dbf441fa3c7959394259e6c49d4a675e292fe\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2ScheduleVaultProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"./L2CustomVaultBaseProxy.sol\\\";\\nimport \\\"./L2ScheduleVaultStorage.sol\\\";\\n\\nimport {IERC20} from \\\"../../interfaces/IERC20.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\n/**\\n * @title L2ScheduleVaultProxy\\n * @dev Vaults that Vault Admins claim according to a schedule\\n */\\ncontract L2ScheduleVaultProxy is L2CustomVaultBaseProxy, L2ScheduleVaultStorage {\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n\\n /* ========== only L2ProjectManager ========== */\\n\\n\\n /* ========== only VaultAdmin Of Token ========== */\\n\\n /* ========== Anyone can vault admin of token ========== */\\n\\n\\n /* ========== VIEW ========== */\\n\\n\\n\\n /* === ======= internal ========== */\\n\\n}\",\"keccak256\":\"0xd067fa93b86b3d1baca0529740acb68fd03c531e74f3297a1d4ed2f943fdac1c\",\"license\":\"MIT\"},\"contracts/L2/vaults/L2ScheduleVaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { LibScheduleVault } from \\\"../../libraries/LibScheduleVault.sol\\\";\\n/**\\n * @title L2ScheduleVaultStorage\\n * @dev Vaults that Vault Admins claim according to a schedule\\n */\\ncontract L2ScheduleVaultStorage {\\n\\n // l2token - keccak256 (vault name) - VaultInfo\\n mapping(address => mapping(bytes32 => LibScheduleVault.VaultInfo)) public vaultInfo;\\n\\n\\n}\",\"keccak256\":\"0x1581365db9f7952c0090b751608a94590209de795a6bc0d0dc01ee701b468786\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address account) external view returns (uint256);\\n\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n function mint(address account, uint256 amount) external returns (bool);\\n\\n function burn(address account, uint256 amount) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x4dfcbed37adf9f54e4544d13382814f51c9ef5d52ca4277d2080f988857f3b23\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibScheduleVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibScheduleVault\\n */\\nlibrary LibScheduleVault {\\n\\n struct VaultInfo {\\n address claimer;\\n uint256 totalAllocatedAmount; // Token allocation amount\\n uint256 totalClaimCount; // total number of claims\\n uint256 totalClaimedAmount; // Total amount claimed\\n uint256 firstClaimAmount; // first claim amount\\n uint32 firstClaimTime; // first claim time\\n uint32 secondClaimTime; // second claim time\\n uint32 roundInterval; // round interval (seconds)\\n uint32 latestClaimedRound; // the latest claimed round\\n }\\n}\",\"keccak256\":\"0x2cbb247a9dd563af894a16b479d1cb096b7f4810a5c5c444cf9436bdce9b7a6a\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.7.5;\\n\\nimport {IERC20} from \\\"../interfaces/IERC20.sol\\\";\\n\\n/// @notice Safe IERC20 and ETH transfer library that safely handles missing return values.\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v3-periphery/blob/main/contracts/libraries/TransferHelper.sol)\\n/// Taken from Solmate\\nlibrary SafeERC20 {\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FROM_FAILED\\\");\\n }\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.transfer.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"TRANSFER_FAILED\\\");\\n }\\n\\n function safeApprove(\\n IERC20 token,\\n address to,\\n uint256 amount\\n ) internal {\\n (bool success, bytes memory data) = address(token).call(\\n abi.encodeWithSelector(IERC20.approve.selector, to, amount)\\n );\\n\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"APPROVE_FAILED\\\");\\n }\\n\\n function safeTransferETH(address to, uint256 amount) internal {\\n (bool success, ) = to.call{value: amount}(new bytes(0));\\n\\n require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n }\\n}\\n\",\"keccak256\":\"0x778abe92595c692abcf3bec8b72f4491746626d1a057c76b97c8d1a7d759f7b0\",\"license\":\"AGPL-3.0-only\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040526005805460ff191660011790553480156200001e57600080fd5b506200003a60008051602062001b1b833981519152806200005b565b6200005560008051602062001b1b83398151915233620000a6565b6200015a565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000b28282620000b6565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000b25760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119b1806200016a6000396000f3fe6080604052600436106101bb5760003560e01c806363a8fd89116100ec5780638b8f4a651161008a578063a217fddf11610064578063a217fddf14610611578063b40d735014610626578063b911135f1461071c578063d547741f146107525761020d565b80638b8f4a651461058b5780638d4fdb40146105ab57806391d14854146105cb5761020d565b806375b238fc116100c657806375b238fc146104e15780637cb00d25146105155780637cd5f663146105355780637fc46ba8146105555761020d565b806363a8fd891461048757806370480275146104a157806375829def146104c15761020d565b80633659cfe61161015957806352351e851161013357806352351e85146103cc578063550d01a3146103f15780635c60da1b146104215780635cc797d8146104675761020d565b80633659cfe61461033e5780634a5df50f1461035e57806350d2a2761461037e5761020d565b8063248a9ca311610195578063248a9ca3146102ae57806324d7806c146102de5780632f2ff15d146102fe57806336568abe1461031e5761020d565b806301ffc9a7146102175780631785f53c1461024c578063229852461461026c5761020d565b3661020d5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610215610772565b005b34801561022357600080fd5b50610237610232366004611639565b61081b565b60405190151581526020015b60405180910390f35b34801561025857600080fd5b5061021561026736600461167a565b610852565b34801561027857600080fd5b506102a07ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610243565b3480156102ba57600080fd5b506102a06102c9366004611695565b60009081526004602052604090206001015490565b3480156102ea57600080fd5b506102376102f936600461167a565b6108cd565b34801561030a57600080fd5b506102156103193660046116ae565b61090d565b34801561032a57600080fd5b506102156103393660046116ae565b610932565b34801561034a57600080fd5b5061021561035936600461167a565b6109be565b34801561036a57600080fd5b506102156103793660046116da565b610b17565b34801561038a57600080fd5b506103b4610399366004611639565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610243565b3480156103d857600080fd5b506005546103b49061010090046001600160a01b031681565b3480156103fd57600080fd5b5061023761040c36600461167a565b60026020526000908152604090205460ff1681565b34801561042d57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103b4565b34801561047357600080fd5b5061021561048236600461176e565b610dc4565b34801561049357600080fd5b506000546102379060ff1681565b3480156104ad57600080fd5b506102156104bc36600461167a565b610e1c565b3480156104cd57600080fd5b506102156104dc36600461167a565b610e94565b3480156104ed57600080fd5b506102a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561052157600080fd5b50610215610530366004611798565b610fe4565b34801561054157600080fd5b506102156105503660046117b3565b611045565b34801561056157600080fd5b506103b461057036600461167a565b6006602052600090815260409020546001600160a01b031681565b34801561059757600080fd5b506103b46105a6366004611695565b61109e565b3480156105b757600080fd5b506103b46105c6366004611639565b6110bb565b3480156105d757600080fd5b506102376105e63660046116ae565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561061d57600080fd5b506102a0600081565b34801561063257600080fd5b506106bf6106413660046117e6565b60076020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610243565b34801561072857600080fd5b506103b4610737366004611695565b6001602052600090815260409020546001600160a01b031681565b34801561075e57600080fd5b5061021561076d3660046116ae565b6111b7565b60006107896000356001600160e01b0319166110bb565b90506001600160a01b038116158015906107a6575060005460ff16155b6107f25760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610204565b3660008037600080366000845af43d6000803e808015610811573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061084c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61085b336108cd565b6108a05760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610932565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661084c565b600082815260046020526040902060010154610928816111dc565b61081683836111e6565b6001600160a01b03811633146109b05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610204565b6109ba8282611288565b5050565b6109c7336108cd565b610a0c5760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6001600160a01b038116610a625760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610204565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610ad35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610204565b610ae0816000600161130b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b20336108cd565b610b655760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b81610bb25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610204565b6001600160a01b03811660009081526002602052604090205460ff16610c1a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610204565b60005b82811015610dbe57816001600160a01b031660036000868685818110610c4557610c45611810565b9050602002016020810190610c5a9190611639565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ccb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610204565b8160036000868685818110610ce257610ce2611810565b9050602002016020810190610cf79190611639565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d4c57610d4c611810565b9050602002016020810190610d619190611639565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610db68161183c565b915050610c1d565b50505050565b610dcd336108cd565b610e125760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6109ba82826113a3565b610e25336108cd565b610e6a5760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261090d565b610e9d336108cd565b610ee25760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6001600160a01b038116610f385760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610204565b6001600160a01b0381163303610f905760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610204565b610fba7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261090d565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610932565b610fed336108cd565b6110325760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6000805460ff1916911515919091179055565b61104e336108cd565b6110935760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b61081683838361130b565b6000818152600160205260408120546001600160a01b031661084c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661111b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561117957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111d2816111dc565b6108168383611288565b6108ca8133611402565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109ba5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112443390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109ba5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113625760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610204565b801561139d576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61081683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109ba5761143581611477565b611440836020611489565b604051602001611451929190611879565b60408051601f198184030181529082905262461bcd60e51b8252610204916004016118fa565b606061084c6001600160a01b03831660145b6060600061149883600261192d565b6114a3906002611944565b67ffffffffffffffff8111156114bb576114bb611957565b6040519080825280601f01601f1916602001820160405280156114e5576020820181803683370190505b509050600360fc1b8160008151811061150057611500611810565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061152f5761152f611810565b60200101906001600160f81b031916908160001a905350600061155384600261192d565b61155e906001611944565b90505b60018111156115e3577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061159f5761159f611810565b1a60f81b8282815181106115b5576115b5611810565b60200101906001600160f81b031916908160001a90535060049490941c936115dc8161196d565b9050611561565b5083156116325760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610204565b9392505050565b60006020828403121561164b57600080fd5b81356001600160e01b03198116811461163257600080fd5b80356001600160a01b03811681146111b257600080fd5b60006020828403121561168c57600080fd5b61163282611663565b6000602082840312156116a757600080fd5b5035919050565b600080604083850312156116c157600080fd5b823591506116d160208401611663565b90509250929050565b6000806000604084860312156116ef57600080fd5b833567ffffffffffffffff8082111561170757600080fd5b818601915086601f83011261171b57600080fd5b81358181111561172a57600080fd5b8760208260051b850101111561173f57600080fd5b6020928301955093506117559186019050611663565b90509250925092565b803580151581146111b257600080fd5b6000806040838503121561178157600080fd5b61178a83611663565b91506116d16020840161175e565b6000602082840312156117aa57600080fd5b6116328261175e565b6000806000606084860312156117c857600080fd5b6117d184611663565b9250602084013591506117556040850161175e565b600080604083850312156117f957600080fd5b61180283611663565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161184e5761184e611826565b5060010190565b60005b83811015611870578181015183820152602001611858565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118b1816017850160208801611855565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118ee816028840160208801611855565b01602801949350505050565b6020815260008251806020840152611919816040850160208701611855565b601f01601f19169190910160400192915050565b808202811582820484141761084c5761084c611826565b8082018082111561084c5761084c611826565b634e487b7160e01b600052604160045260246000fd5b60008161197c5761197c611826565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x6080604052600436106101bb5760003560e01c806363a8fd89116100ec5780638b8f4a651161008a578063a217fddf11610064578063a217fddf14610611578063b40d735014610626578063b911135f1461071c578063d547741f146107525761020d565b80638b8f4a651461058b5780638d4fdb40146105ab57806391d14854146105cb5761020d565b806375b238fc116100c657806375b238fc146104e15780637cb00d25146105155780637cd5f663146105355780637fc46ba8146105555761020d565b806363a8fd891461048757806370480275146104a157806375829def146104c15761020d565b80633659cfe61161015957806352351e851161013357806352351e85146103cc578063550d01a3146103f15780635c60da1b146104215780635cc797d8146104675761020d565b80633659cfe61461033e5780634a5df50f1461035e57806350d2a2761461037e5761020d565b8063248a9ca311610195578063248a9ca3146102ae57806324d7806c146102de5780632f2ff15d146102fe57806336568abe1461031e5761020d565b806301ffc9a7146102175780631785f53c1461024c578063229852461461026c5761020d565b3661020d5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610215610772565b005b34801561022357600080fd5b50610237610232366004611639565b61081b565b60405190151581526020015b60405180910390f35b34801561025857600080fd5b5061021561026736600461167a565b610852565b34801561027857600080fd5b506102a07ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610243565b3480156102ba57600080fd5b506102a06102c9366004611695565b60009081526004602052604090206001015490565b3480156102ea57600080fd5b506102376102f936600461167a565b6108cd565b34801561030a57600080fd5b506102156103193660046116ae565b61090d565b34801561032a57600080fd5b506102156103393660046116ae565b610932565b34801561034a57600080fd5b5061021561035936600461167a565b6109be565b34801561036a57600080fd5b506102156103793660046116da565b610b17565b34801561038a57600080fd5b506103b4610399366004611639565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610243565b3480156103d857600080fd5b506005546103b49061010090046001600160a01b031681565b3480156103fd57600080fd5b5061023761040c36600461167a565b60026020526000908152604090205460ff1681565b34801561042d57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03166103b4565b34801561047357600080fd5b5061021561048236600461176e565b610dc4565b34801561049357600080fd5b506000546102379060ff1681565b3480156104ad57600080fd5b506102156104bc36600461167a565b610e1c565b3480156104cd57600080fd5b506102156104dc36600461167a565b610e94565b3480156104ed57600080fd5b506102a07fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561052157600080fd5b50610215610530366004611798565b610fe4565b34801561054157600080fd5b506102156105503660046117b3565b611045565b34801561056157600080fd5b506103b461057036600461167a565b6006602052600090815260409020546001600160a01b031681565b34801561059757600080fd5b506103b46105a6366004611695565b61109e565b3480156105b757600080fd5b506103b46105c6366004611639565b6110bb565b3480156105d757600080fd5b506102376105e63660046116ae565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561061d57600080fd5b506102a0600081565b34801561063257600080fd5b506106bf6106413660046117e6565b60076020908152600092835260408084209091529082529020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909163ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000090041689565b604080516001600160a01b03909a168a5260208a0198909852968801959095526060870193909352608086019190915263ffffffff90811660a086015290811660c085015290811660e08401521661010082015261012001610243565b34801561072857600080fd5b506103b4610737366004611695565b6001602052600090815260409020546001600160a01b031681565b34801561075e57600080fd5b5061021561076d3660046116ae565b6111b7565b60006107896000356001600160e01b0319166110bb565b90506001600160a01b038116158015906107a6575060005460ff16155b6107f25760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610204565b3660008037600080366000845af43d6000803e808015610811573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b148061084c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61085b336108cd565b6108a05760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610932565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661084c565b600082815260046020526040902060010154610928816111dc565b61081683836111e6565b6001600160a01b03811633146109b05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610204565b6109ba8282611288565b5050565b6109c7336108cd565b610a0c5760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6001600160a01b038116610a625760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610204565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610ad35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610204565b610ae0816000600161130b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610b20336108cd565b610b655760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b81610bb25760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610204565b6001600160a01b03811660009081526002602052604090205460ff16610c1a5760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610204565b60005b82811015610dbe57816001600160a01b031660036000868685818110610c4557610c45611810565b9050602002016020810190610c5a9190611639565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ccb5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610204565b8160036000868685818110610ce257610ce2611810565b9050602002016020810190610cf79190611639565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610d4c57610d4c611810565b9050602002016020810190610d619190611639565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610db68161183c565b915050610c1d565b50505050565b610dcd336108cd565b610e125760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6109ba82826113a3565b610e25336108cd565b610e6a5760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261090d565b610e9d336108cd565b610ee25760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6001600160a01b038116610f385760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f206164647265737300000000000000006044820152606401610204565b6001600160a01b0381163303610f905760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e000000000000000000006044820152606401610204565b610fba7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261090d565b6108ca7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610932565b610fed336108cd565b6110325760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b6000805460ff1916911515919091179055565b61104e336108cd565b6110935760405162461bcd60e51b8152602060048201526022602482015260008051602061198583398151915260448201526134b760f11b6064820152608401610204565b61081683838361130b565b6000818152600160205260408120546001600160a01b031661084c565b6001600160e01b031981166000908152600360205260408120546001600160a01b031661111b5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561117957506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546111d2816111dc565b6108168383611288565b6108ca8133611402565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109ba5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112443390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156109ba5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6113625760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610204565b801561139d576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b61081683825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166109ba5761143581611477565b611440836020611489565b604051602001611451929190611879565b60408051601f198184030181529082905262461bcd60e51b8252610204916004016118fa565b606061084c6001600160a01b03831660145b6060600061149883600261192d565b6114a3906002611944565b67ffffffffffffffff8111156114bb576114bb611957565b6040519080825280601f01601f1916602001820160405280156114e5576020820181803683370190505b509050600360fc1b8160008151811061150057611500611810565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061152f5761152f611810565b60200101906001600160f81b031916908160001a905350600061155384600261192d565b61155e906001611944565b90505b60018111156115e3577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061159f5761159f611810565b1a60f81b8282815181106115b5576115b5611810565b60200101906001600160f81b031916908160001a90535060049490941c936115dc8161196d565b9050611561565b5083156116325760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610204565b9392505050565b60006020828403121561164b57600080fd5b81356001600160e01b03198116811461163257600080fd5b80356001600160a01b03811681146111b257600080fd5b60006020828403121561168c57600080fd5b61163282611663565b6000602082840312156116a757600080fd5b5035919050565b600080604083850312156116c157600080fd5b823591506116d160208401611663565b90509250929050565b6000806000604084860312156116ef57600080fd5b833567ffffffffffffffff8082111561170757600080fd5b818601915086601f83011261171b57600080fd5b81358181111561172a57600080fd5b8760208260051b850101111561173f57600080fd5b6020928301955093506117559186019050611663565b90509250925092565b803580151581146111b257600080fd5b6000806040838503121561178157600080fd5b61178a83611663565b91506116d16020840161175e565b6000602082840312156117aa57600080fd5b6116328261175e565b6000806000606084860312156117c857600080fd5b6117d184611663565b9250602084013591506117556040850161175e565b600080604083850312156117f957600080fd5b61180283611663565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161184e5761184e611826565b5060010190565b60005b83811015611870578181015183820152602001611858565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118b1816017850160208801611855565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516118ee816028840160208801611855565b01602801949350505050565b6020815260008251806020840152611919816040850160208701611855565b601f01601f19169190910160400192915050565b808202811582820484141761084c5761084c611826565b8082018082111561084c5761084c611826565b634e487b7160e01b600052604160045260246000fd5b60008161197c5761197c611826565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "details": "Vaults that Vault Admins claim according to a schedule", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "title": "L2ScheduleVaultProxy", - "version": 1 + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } - }, - "version": 1 + ], + "name": "SetAliveImplementation", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 7441, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 7445, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 7449, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 7453, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": false, + "internalType": "address", + "name": "l2Token", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetVaultAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ { - "astId": 3479, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "free", - "offset": 0, - "slot": "5", - "type": "t_bool" + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3481, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "l2ProjectManager", - "offset": 1, - "slot": "5", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 3485, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "vaultAdminOfToken", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_address)" + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 6086, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "vaultInfo", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)6896_storage))" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "vaultAdminOfToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(VaultInfo)6896_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(bytes32 => struct LibScheduleVault.VaultInfo))", - "numberOfBytes": "32", - "value": "t_mapping(t_bytes32,t_struct(VaultInfo)6896_storage)" + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "vaultInfo", + "outputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "totalAllocatedAmount", + "type": "uint256" }, - "t_mapping(t_bytes32,t_struct(VaultInfo)6896_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct LibScheduleVault.VaultInfo)", - "numberOfBytes": "32", - "value": "t_struct(VaultInfo)6896_storage" + { + "internalType": "uint256", + "name": "totalClaimCount", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "totalClaimedAmount", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "firstClaimAmount", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "uint32", + "name": "firstClaimTime", + "type": "uint32" }, - "t_struct(VaultInfo)6896_storage": { - "encoding": "inplace", - "label": "struct LibScheduleVault.VaultInfo", - "members": [ - { - "astId": 6879, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "claimer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6881, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "totalAllocatedAmount", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6883, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "totalClaimCount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6885, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "totalClaimedAmount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 6887, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "firstClaimAmount", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6889, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "firstClaimTime", - "offset": 0, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 6891, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "secondClaimTime", - "offset": 4, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 6893, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "roundInterval", - "offset": 8, - "slot": "5", - "type": "t_uint32" - }, - { - "astId": 6895, - "contract": "contracts/L2/vaults/L2ScheduleVaultProxy.sol:L2ScheduleVaultProxy", - "label": "latestClaimedRound", - "offset": 12, - "slot": "5", - "type": "t_uint32" - } - ], - "numberOfBytes": "192" + { + "internalType": "uint32", + "name": "secondClaimTime", + "type": "uint32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "roundInterval", + "type": "uint32" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "latestClaimedRound", + "type": "uint32" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2TokenFactory.json b/contracts/data/tonstarter/abi/L2TokenFactory.json index 105f9c9..7e5c499 100644 --- a/contracts/data/tonstarter/abi/L2TokenFactory.json +++ b/contracts/data/tonstarter/abi/L2TokenFactory.json @@ -1,612 +1,399 @@ -{ - "address": "0x42773CF37d7E2757a41d14ca130cD1aC8ac5064A", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "l2Token", - "type": "address" - } - ], - "name": "StandardL2TokenCreated", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "projectOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "projectName", - "type": "string" - } - ], - "name": "createL2Token", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1Bridge", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2ProjectManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Bridge", - "type": "address" - } - ], - "name": "setL1Bridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2ProjectManager", - "type": "address" - } - ], - "name": "setL2ProjectManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xb63c07c2aa223e2eeca0d20b88a13c9e9a2ef3c1a39d845909067ef8e7df4ecc", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x42773CF37d7E2757a41d14ca130cD1aC8ac5064A", - "transactionIndex": 0, - "gasUsed": "2108047", - "logsBloom": "0x00000004000000000800000000000000082000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000020000000000000000000000000000000000000000000000000000000000100000800000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc2e17d794cefe3e8a912d027653b1e2d9d64b73ca01a8cd549b75cdc847b9730", - "transactionHash": "0xb63c07c2aa223e2eeca0d20b88a13c9e9a2ef3c1a39d845909067ef8e7df4ecc", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 22621, - "transactionHash": "0xb63c07c2aa223e2eeca0d20b88a13c9e9a2ef3c1a39d845909067ef8e7df4ecc", - "address": "0x42773CF37d7E2757a41d14ca130cD1aC8ac5064A", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0xc2e17d794cefe3e8a912d027653b1e2d9d64b73ca01a8cd549b75cdc847b9730" +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, { - "transactionIndex": 0, - "blockNumber": 22621, - "transactionHash": "0xb63c07c2aa223e2eeca0d20b88a13c9e9a2ef3c1a39d845909067ef8e7df4ecc", - "address": "0x42773CF37d7E2757a41d14ca130cD1aC8ac5064A", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xc2e17d794cefe3e8a912d027653b1e2d9d64b73ca01a8cd549b75cdc847b9730" + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" } ], - "blockNumber": 22621, - "cumulativeGasUsed": "2108047", - "status": 1, - "byzantium": true + "name": "RoleAdminChanged", + "type": "event" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b9f697bafbbf51b20a0b31f4cbfd72b5", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"}],\"name\":\"StandardL2TokenCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"projectOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"projectName\",\"type\":\"string\"}],\"name\":\"createL2Token\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ProjectManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Bridge\",\"type\":\"address\"}],\"name\":\"setL1Bridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2ProjectManager\",\"type\":\"address\"}],\"name\":\"setL2ProjectManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Factory contract for creating standard L2 token representations of L1 ERC20s compatible with and working on the standard bridge.\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"createL2Token(address,address,string,string,string)\":{\"details\":\"Creates an instance of the standard ERC20 token on L2.\",\"params\":{\"_l1Token\":\"Address of the corresponding L1 token.\",\"_name\":\"ERC20 name.\",\"_symbol\":\"ERC20 symbol.\",\"projectOwner\":\"Address of the project owner.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"title\":\"L2TokenFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/factory/L2TokenFactory.sol\":\"L2TokenFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n}\\n\",\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/factory/L2TokenFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/* Contract Imports */\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\n\\nimport { L2StandardERC20 } from \\\"../../standards/L2StandardERC20.sol\\\";\\nimport { Lib_PredeployAddresses } from \\\"../../libraries/constants/Lib_PredeployAddresses.sol\\\";\\nimport 'hardhat/console.sol';\\n\\ninterface IL2Projectmanager {\\n\\n function createL2Project(\\n address projectOwner,\\n address l1Token,\\n address l2Token,\\n string calldata projectName\\n ) external;\\n}\\n\\n/**\\n * @title L2TokenFactory\\n * @dev Factory contract for creating standard L2 token representations of L1 ERC20s\\n * compatible with and working on the standard bridge.\\n */\\ncontract L2TokenFactory is AccessibleCommon {\\n\\n address public l2ProjectManager;\\n address public l1Bridge;\\n\\n event StandardL2TokenCreated(address indexed l1Token, address indexed l2Token);\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor() {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /* ========== onlyOwner ========== */\\n function setL2ProjectManager(address _l2ProjectManager)\\n external nonZeroAddress(_l2ProjectManager) onlyOwner\\n {\\n require(l2ProjectManager != _l2ProjectManager, \\\"same\\\");\\n l2ProjectManager = _l2ProjectManager;\\n }\\n\\n function setL1Bridge(address _l1Bridge)\\n external nonZeroAddress(_l1Bridge) onlyOwner\\n {\\n require(l1Bridge != _l1Bridge, \\\"same\\\");\\n l1Bridge = _l1Bridge;\\n }\\n\\n /* ========== Anyone can execute ========== */\\n\\n /**\\n * @dev Creates an instance of the standard ERC20 token on L2.\\n * @param projectOwner Address of the project owner.\\n * @param _l1Token Address of the corresponding L1 token.\\n * @param _name ERC20 name.\\n * @param _symbol ERC20 symbol.\\n */\\n function createL2Token(\\n address projectOwner,\\n address _l1Token,\\n string calldata _name,\\n string calldata _symbol,\\n string calldata projectName\\n ) external {\\n require(_l1Token != address(0), \\\"Must provide L1 token address\\\");\\n require(projectOwner != address(0), \\\"zero projectOwner\\\");\\n require(bytes(_name).length != 0, \\\"name is null\\\");\\n require(bytes(_symbol).length != 0, \\\"symbol is null\\\");\\n\\n L2StandardERC20 l2Token = new L2StandardERC20(\\n Lib_PredeployAddresses.L2_STANDARD_BRIDGE,\\n _l1Token,\\n _name,\\n _symbol\\n );\\n\\n require(address(l2Token) != address(0), \\\"zero l2Token\\\");\\n\\n IL2Projectmanager(l2ProjectManager).createL2Project(\\n projectOwner, _l1Token, address(l2Token), projectName\\n );\\n\\n emit StandardL2TokenCreated(_l1Token, address(l2Token));\\n }\\n\\n /* ========== VIEW ========== */\\n\\n /* === ======= internal ========== */\\n\\n\\n}\\n\",\"keccak256\":\"0x6f98c931eeaa67e8ae662af20fa82071c4396c1dbafbfa83e7810bf800b98152\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/libraries/constants/Lib_PredeployAddresses.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title Lib_PredeployAddresses\\n */\\nlibrary Lib_PredeployAddresses {\\n address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;\\n address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;\\n address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;\\n address payable internal constant OVM_ETH = payable(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000);\\n address internal constant L2_CROSS_DOMAIN_MESSENGER =\\n 0x4200000000000000000000000000000000000007;\\n address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;\\n address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;\\n address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;\\n address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;\\n address internal constant L2_STANDARD_TOKEN_FACTORY =\\n 0x4200000000000000000000000000000000000012;\\n address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;\\n}\\n\",\"keccak256\":\"0x3b4501b0fb6bfcd7f67737ac21f8df69a51847a30efccead55832429eefe808c\",\"license\":\"MIT\"},\"contracts/standards/IL2StandardERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\ninterface IL2StandardERC20 is IERC20, IERC165 {\\n function l1Token() external returns (address);\\n\\n function mint(address _to, uint256 _amount) external;\\n\\n function burn(address _from, uint256 _amount) external;\\n\\n event Mint(address indexed _account, uint256 _amount);\\n event Burn(address indexed _account, uint256 _amount);\\n}\\n\",\"keccak256\":\"0x31cfc6759e16fe0a16b6f2f381263627171b19a76b35a3c1e118622d251bb62b\",\"license\":\"MIT\"},\"contracts/standards/L2StandardERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"./IL2StandardERC20.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract L2StandardERC20 is IL2StandardERC20, ERC20 {\\n address public override l1Token;\\n address public l2Bridge;\\n\\n /**\\n * @param _l2Bridge Address of the L2 standard bridge.\\n * @param _l1Token Address of the corresponding L1 token.\\n * @param _name ERC20 name.\\n * @param _symbol ERC20 symbol.\\n */\\n constructor(\\n address _l2Bridge,\\n address _l1Token,\\n string memory _name,\\n string memory _symbol\\n ) ERC20(_name, _symbol) {\\n l1Token = _l1Token;\\n l2Bridge = _l2Bridge;\\n }\\n\\n modifier onlyL2Bridge() {\\n require(msg.sender == l2Bridge, \\\"Only L2 Bridge can mint and burn\\\");\\n _;\\n }\\n\\n // slither-disable-next-line external-function\\n function supportsInterface(bytes4 _interfaceId) public pure override returns (bool) {\\n bytes4 firstSupportedInterface = bytes4(keccak256(\\\"supportsInterface(bytes4)\\\")); // ERC165\\n bytes4 secondSupportedInterface = IL2StandardERC20.l1Token.selector ^\\n IL2StandardERC20.mint.selector ^\\n IL2StandardERC20.burn.selector;\\n return _interfaceId == firstSupportedInterface || _interfaceId == secondSupportedInterface;\\n }\\n\\n // slither-disable-next-line external-function\\n function mint(address _to, uint256 _amount) public virtual override onlyL2Bridge {\\n\\n _mint(_to, _amount);\\n\\n emit Mint(_to, _amount);\\n }\\n\\n // slither-disable-next-line external-function\\n function burn(address _from, uint256 _amount) public virtual override onlyL2Bridge {\\n _burn(_from, _amount);\\n\\n emit Burn(_from, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x89d3992722ce581920b0e1adba564e8a52304206f20692191b2edd968f286206\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >= 0.4.22 <0.9.0;\\n\\nlibrary console {\\n\\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);\\n\\n\\tfunction _sendLogPayload(bytes memory payload) private view {\\n\\t\\tuint256 payloadLength = payload.length;\\n\\t\\taddress consoleAddress = CONSOLE_ADDRESS;\\n\\t\\tassembly {\\n\\t\\t\\tlet payloadStart := add(payload, 32)\\n\\t\\t\\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\\n\\t\\t}\\n\\t}\\n\\n\\tfunction log() internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n\\t}\\n\\n\\tfunction logInt(int256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n\\t}\\n\\n\\tfunction logUint(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction logString(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction logBool(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction logAddress(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes(bytes memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes1(bytes1 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes2(bytes2 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes3(bytes3 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes4(bytes4 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes5(bytes5 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes6(bytes6 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes7(bytes7 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes8(bytes8 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes9(bytes9 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes10(bytes10 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes11(bytes11 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes12(bytes12 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes13(bytes13 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes14(bytes14 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes15(bytes15 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes16(bytes16 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes17(bytes17 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes18(bytes18 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes19(bytes19 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes20(bytes20 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes21(bytes21 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes22(bytes22 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes23(bytes23 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes24(bytes24 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes25(bytes25 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes26(bytes26 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes27(bytes27 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes28(bytes28 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes29(bytes29 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes30(bytes30 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes31(bytes31 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n\\t}\\n\\n\\tfunction logBytes32(bytes32 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n\\t}\\n\\n\\tfunction log(string memory p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n\\t}\\n\\n\\tfunction log(bool p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n\\t}\\n\\n\\tfunction log(address p0) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(address p0, address p1) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(uint256 p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(string memory p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(bool p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, uint256 p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, string memory p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, bool p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, uint256 p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, string memory p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, bool p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, uint256 p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, string memory p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, bool p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n\\tfunction log(address p0, address p1, address p2, address p3) internal view {\\n\\t\\t_sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n\\t}\\n\\n}\\n\",\"keccak256\":\"0x60b0215121bf25612a6739fb2f1ec35f31ee82e4a8216c032c8243d904ab3aa9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506200002d600080516020620025a2833981519152806200004e565b62000048600080516020620025a28339815191523362000099565b62000149565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000a58282620000a9565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000a5576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001053390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61244980620001596000396000f3fe60806040523480156200001157600080fd5b50600436106200014f5760003560e01c80637048027511620000c0578063969b53da116200008b578063a4182343116200006e578063a4182343146200032c578063c6317f8c1462000343578063d547741f146200035a57600080fd5b8063969b53da146200030f578063a217fddf146200032357600080fd5b806370480275146200027f57806375829def146200029657806375b238fc14620002ad57806391d1485414620002d557600080fd5b8063248a9ca3116200011e5780632f2ff15d11620001015780632f2ff15d146200022457806336568abe146200023b57806352351e85146200025257600080fd5b8063248a9ca314620001e757806324d7806c146200020d57600080fd5b806301ffc9a714620001545780631785f53c14620001805780631a05037614620001995780632298524614620001b0575b600080fd5b6200016b6200016536600462000feb565b62000371565b60405190151581526020015b60405180910390f35b620001976200019136600462001034565b620003a9565b005b62000197620001aa36600462001034565b62000440565b620001d87ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200162000177565b620001d8620001f836600462001052565b60009081526020819052604090206001015490565b6200016b6200021e36600462001034565b6200055a565b62000197620002353660046200106c565b6200059b565b620001976200024c3660046200106c565b620005c9565b60015462000266906001600160a01b031681565b6040516001600160a01b03909116815260200162000177565b620001976200029036600462001034565b62000659565b62000197620002a736600462001034565b620006e9565b620001d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6200016b620002e63660046200106c565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60025462000266906001600160a01b031681565b620001d8600081565b620001976200033d36600462001034565b62000857565b6200019762000354366004620010e7565b62000971565b620001976200036b3660046200106c565b62000c2b565b60006001600160e01b03198216637965db0b60e01b1480620003a357506301ffc9a760e01b6001600160e01b03198316145b92915050565b620003b4336200055a565b620004115760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282620005c9565b50565b806001600160a01b0381166200047e5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b604482015260640162000408565b62000489336200055a565b620004e25760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6002546001600160a01b038084169116036200052a5760405162461bcd60e51b8152600401620004089060208082526004908201526373616d6560e01b604082015260600190565b506002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03811660009081527f5cbfc8ee58ca47855df7bcf648dd304ddb6b932f9b87878bdf6318d7ec7ee5b7602052604081205460ff16620003a3565b600082815260208190526040902060010154620005b88162000c54565b620005c4838362000c60565b505050565b6001600160a01b0381163314620006495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840162000408565b62000655828262000d00565b5050565b62000664336200055a565b620006bd5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826200059b565b620006f4336200055a565b6200074d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6001600160a01b038116620007a55760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640162000408565b6001600160a01b0381163303620007ff5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640162000408565b6200082b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826200059b565b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233620005c9565b806001600160a01b038116620008955760405162461bcd60e51b81526020600482015260026024820152612d1960f11b604482015260640162000408565b620008a0336200055a565b620008f95760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6001546001600160a01b03808416911603620009415760405162461bcd60e51b8152600401620004089060208082526004908201526373616d6560e01b604082015260600190565b506001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038716620009c95760405162461bcd60e51b815260206004820152601d60248201527f4d7573742070726f76696465204c3120746f6b656e2061646472657373000000604482015260640162000408565b6001600160a01b03881662000a215760405162461bcd60e51b815260206004820152601160248201527f7a65726f2070726f6a6563744f776e6572000000000000000000000000000000604482015260640162000408565b600085900362000a745760405162461bcd60e51b815260206004820152600c60248201527f6e616d65206973206e756c6c0000000000000000000000000000000000000000604482015260640162000408565b600083900362000ac75760405162461bcd60e51b815260206004820152600e60248201527f73796d626f6c206973206e756c6c000000000000000000000000000000000000604482015260640162000408565b6000734200000000000000000000000000000000000010888888888860405162000af19062000fdd565b62000b0296959493929190620011d9565b604051809103906000f08015801562000b1f573d6000803e3d6000fd5b5090506001600160a01b03811662000b7a5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206c32546f6b656e0000000000000000000000000000000000000000604482015260640162000408565b60015460405163084bae0b60e31b81526001600160a01b039091169063425d70589062000bb4908c908c908690899089906004016200122a565b600060405180830381600087803b15801562000bcf57600080fd5b505af115801562000be4573d6000803e3d6000fd5b50506040516001600160a01b0380851693508b1691507fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf90600090a3505050505050505050565b60008281526020819052604090206001015462000c488162000c54565b620005c4838362000d00565b6200043d813362000d80565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000655576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905562000cbc3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161562000655576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620006555762000db48162000dfc565b62000dc183602062000e0f565b60405160200162000dd492919062001292565b60408051601f198184030181529082905262461bcd60e51b8252620004089160040162001317565b6060620003a36001600160a01b03831660145b6060600062000e2083600262001362565b62000e2d9060026200137c565b67ffffffffffffffff81111562000e485762000e4862001392565b6040519080825280601f01601f19166020018201604052801562000e73576020820181803683370190505b509050600360fc1b8160008151811062000e915762000e91620013a8565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062000ec35762000ec3620013a8565b60200101906001600160f81b031916908160001a905350600062000ee984600262001362565b62000ef69060016200137c565b90505b600181111562000f85577f303132333435363738396162636465660000000000000000000000000000000085600f166010811062000f3b5762000f3b620013a8565b1a60f81b82828151811062000f545762000f54620013a8565b60200101906001600160f81b031916908160001a90535060049490941c9362000f7d81620013be565b905062000ef9565b50831562000fd65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000408565b9392505050565b61106480620013d983390190565b60006020828403121562000ffe57600080fd5b81356001600160e01b03198116811462000fd657600080fd5b80356001600160a01b03811681146200102f57600080fd5b919050565b6000602082840312156200104757600080fd5b62000fd68262001017565b6000602082840312156200106557600080fd5b5035919050565b600080604083850312156200108057600080fd5b82359150620010926020840162001017565b90509250929050565b60008083601f840112620010ae57600080fd5b50813567ffffffffffffffff811115620010c757600080fd5b602083019150836020828501011115620010e057600080fd5b9250929050565b60008060008060008060008060a0898b0312156200110457600080fd5b6200110f8962001017565b97506200111f60208a0162001017565b9650604089013567ffffffffffffffff808211156200113d57600080fd5b6200114b8c838d016200109b565b909850965060608b01359150808211156200116557600080fd5b620011738c838d016200109b565b909650945060808b01359150808211156200118d57600080fd5b506200119c8b828c016200109b565b999c989b5096995094979396929594505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b0380891683528088166020840152506080604083015262001208608083018688620011b0565b82810360608401526200121d818587620011b0565b9998505050505050505050565b60006001600160a01b03808816835280871660208401528086166040840152506080606083015262001261608083018486620011b0565b979650505050505050565b60005b83811015620012895781810151838201526020016200126f565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620012cc8160178501602088016200126c565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516200130b8160288401602088016200126c565b01602801949350505050565b6020815260008251806020840152620013388160408501602087016200126c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620003a357620003a36200134c565b80820180821115620003a357620003a36200134c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081620013d057620013d06200134c565b50600019019056fe60806040523480156200001157600080fd5b506040516200106438038062001064833981016040819052620000349162000171565b8181600362000044838262000290565b50600462000053828262000290565b5050600580546001600160a01b039586166001600160a01b0319918216179091556006805496909516951694909417909255506200035c915050565b80516001600160a01b0381168114620000a757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d457600080fd5b81516001600160401b0380821115620000f157620000f1620000ac565b604051601f8301601f19908116603f011681019082821181831017156200011c576200011c620000ac565b816040528381526020925086838588010111156200013957600080fd5b600091505b838210156200015d57858201830151818301840152908201906200013e565b600093810190920192909252949350505050565b600080600080608085870312156200018857600080fd5b62000193856200008f565b9350620001a3602086016200008f565b60408601519093506001600160401b0380821115620001c157600080fd5b620001cf88838901620000c2565b93506060870151915080821115620001e657600080fd5b50620001f587828801620000c2565b91505092959194509250565b600181811c908216806200021657607f821691505b6020821081036200023757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028b57600081815260208120601f850160051c81016020861015620002665750805b601f850160051c820191505b81811015620002875782815560010162000272565b5050505b505050565b81516001600160401b03811115620002ac57620002ac620000ac565b620002c481620002bd845462000201565b846200023d565b602080601f831160018114620002fc5760008415620002e35750858301515b600019600386901b1c1916600185901b17855562000287565b600085815260208120601f198616915b828110156200032d578886015182559484019460019091019084016200030c565b50858210156200034c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610cf8806200036c6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610208578063ae1f6aaf1461021b578063c01e1bd614610246578063dd62ed3e1461025957600080fd5b806370a08231146101b157806395d89b41146101da5780639dc29fac146101e2578063a457c2d7146101f557600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610b41565b610292565b60405190151581526020015b60405180910390f35b6101356102f0565b6040516101249190610b72565b610118610150366004610bdc565b610382565b6002545b604051908152602001610124565b610118610175366004610c06565b61039c565b60405160128152602001610124565b610118610197366004610bdc565b6103c0565b6101af6101aa366004610bdc565b6103ff565b005b6101596101bf366004610c42565b6001600160a01b031660009081526020819052604090205490565b6101356104af565b6101af6101f0366004610bdc565b6104be565b610118610203366004610bdc565b61055d565b610118610216366004610bdc565b6105ef565b60065461022e906001600160a01b031681565b6040516001600160a01b039091168152602001610124565b60055461022e906001600160a01b031681565b610159610267366004610c5d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2631d1d8b6360e01b6001600160e01b031984166301ffc9a760e01b14806102e857506001600160e01b0319848116908216145b949350505050565b6060600380546102ff90610c90565b80601f016020809104026020016040519081016040528092919081815260200182805461032b90610c90565b80156103785780601f1061034d57610100808354040283529160200191610378565b820191906000526020600020905b81548152906001019060200180831161035b57829003601f168201915b5050505050905090565b6000336103908185856105fd565b60019150505b92915050565b6000336103aa858285610722565b6103b58585856107b4565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061039090829086906103fa908790610cca565b6105fd565b6006546001600160a01b0316331461045e5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064015b60405180910390fd5b6104688282610958565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516104a391815260200190565b60405180910390a25050565b6060600480546102ff90610c90565b6006546001600160a01b031633146105185760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e6044820152606401610455565b6105228282610a17565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516104a391815260200190565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156105e25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610455565b6103b582868684036105fd565b6000336103908185856107b4565b6001600160a01b03831661065f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610455565b6001600160a01b0382166106c05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610455565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107ae57818110156107a15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610455565b6107ae84848484036105fd565b50505050565b6001600160a01b0383166108185760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610455565b6001600160a01b03821661087a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610455565b6001600160a01b038316600090815260208190526040902054818110156108f25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610455565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107ae565b6001600160a01b0382166109ae5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610455565b80600260008282546109c09190610cca565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610a775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610455565b6001600160a01b03821660009081526020819052604090205481811015610aeb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610455565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610715565b600060208284031215610b5357600080fd5b81356001600160e01b031981168114610b6b57600080fd5b9392505050565b600060208083528351808285015260005b81811015610b9f57858101830151858201604001528201610b83565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610bd757600080fd5b919050565b60008060408385031215610bef57600080fd5b610bf883610bc0565b946020939093013593505050565b600080600060608486031215610c1b57600080fd5b610c2484610bc0565b9250610c3260208501610bc0565b9150604084013590509250925092565b600060208284031215610c5457600080fd5b610b6b82610bc0565b60008060408385031215610c7057600080fd5b610c7983610bc0565b9150610c8760208401610bc0565b90509250929050565b600181811c90821680610ca457607f821691505b602082108103610cc457634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561039657634e487b7160e01b600052601160045260246000fdfea164736f6c6343000812000aa164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x60806040523480156200001157600080fd5b50600436106200014f5760003560e01c80637048027511620000c0578063969b53da116200008b578063a4182343116200006e578063a4182343146200032c578063c6317f8c1462000343578063d547741f146200035a57600080fd5b8063969b53da146200030f578063a217fddf146200032357600080fd5b806370480275146200027f57806375829def146200029657806375b238fc14620002ad57806391d1485414620002d557600080fd5b8063248a9ca3116200011e5780632f2ff15d11620001015780632f2ff15d146200022457806336568abe146200023b57806352351e85146200025257600080fd5b8063248a9ca314620001e757806324d7806c146200020d57600080fd5b806301ffc9a714620001545780631785f53c14620001805780631a05037614620001995780632298524614620001b0575b600080fd5b6200016b6200016536600462000feb565b62000371565b60405190151581526020015b60405180910390f35b620001976200019136600462001034565b620003a9565b005b62000197620001aa36600462001034565b62000440565b620001d87ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b60405190815260200162000177565b620001d8620001f836600462001052565b60009081526020819052604090206001015490565b6200016b6200021e36600462001034565b6200055a565b62000197620002353660046200106c565b6200059b565b620001976200024c3660046200106c565b620005c9565b60015462000266906001600160a01b031681565b6040516001600160a01b03909116815260200162000177565b620001976200029036600462001034565b62000659565b62000197620002a736600462001034565b620006e9565b620001d87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6200016b620002e63660046200106c565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60025462000266906001600160a01b031681565b620001d8600081565b620001976200033d36600462001034565b62000857565b6200019762000354366004620010e7565b62000971565b620001976200036b3660046200106c565b62000c2b565b60006001600160e01b03198216637965db0b60e01b1480620003a357506301ffc9a760e01b6001600160e01b03198316145b92915050565b620003b4336200055a565b620004115760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282620005c9565b50565b806001600160a01b0381166200047e5760405162461bcd60e51b81526020600482015260026024820152612d1960f11b604482015260640162000408565b62000489336200055a565b620004e25760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6002546001600160a01b038084169116036200052a5760405162461bcd60e51b8152600401620004089060208082526004908201526373616d6560e01b604082015260600190565b506002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03811660009081527f5cbfc8ee58ca47855df7bcf648dd304ddb6b932f9b87878bdf6318d7ec7ee5b7602052604081205460ff16620003a3565b600082815260208190526040902060010154620005b88162000c54565b620005c4838362000c60565b505050565b6001600160a01b0381163314620006495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840162000408565b62000655828262000d00565b5050565b62000664336200055a565b620006bd5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826200059b565b620006f4336200055a565b6200074d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6001600160a01b038116620007a55760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f20616464726573730000000000000000604482015260640162000408565b6001600160a01b0381163303620007ff5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e00000000000000000000604482015260640162000408565b6200082b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826200059b565b6200043d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233620005c9565b806001600160a01b038116620008955760405162461bcd60e51b81526020600482015260026024820152612d1960f11b604482015260640162000408565b620008a0336200055a565b620008f95760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b606482015260840162000408565b6001546001600160a01b03808416911603620009415760405162461bcd60e51b8152600401620004089060208082526004908201526373616d6560e01b604082015260600190565b506001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038716620009c95760405162461bcd60e51b815260206004820152601d60248201527f4d7573742070726f76696465204c3120746f6b656e2061646472657373000000604482015260640162000408565b6001600160a01b03881662000a215760405162461bcd60e51b815260206004820152601160248201527f7a65726f2070726f6a6563744f776e6572000000000000000000000000000000604482015260640162000408565b600085900362000a745760405162461bcd60e51b815260206004820152600c60248201527f6e616d65206973206e756c6c0000000000000000000000000000000000000000604482015260640162000408565b600083900362000ac75760405162461bcd60e51b815260206004820152600e60248201527f73796d626f6c206973206e756c6c000000000000000000000000000000000000604482015260640162000408565b6000734200000000000000000000000000000000000010888888888860405162000af19062000fdd565b62000b0296959493929190620011d9565b604051809103906000f08015801562000b1f573d6000803e3d6000fd5b5090506001600160a01b03811662000b7a5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206c32546f6b656e0000000000000000000000000000000000000000604482015260640162000408565b60015460405163084bae0b60e31b81526001600160a01b039091169063425d70589062000bb4908c908c908690899089906004016200122a565b600060405180830381600087803b15801562000bcf57600080fd5b505af115801562000be4573d6000803e3d6000fd5b50506040516001600160a01b0380851693508b1691507fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf90600090a3505050505050505050565b60008281526020819052604090206001015462000c488162000c54565b620005c4838362000d00565b6200043d813362000d80565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000655576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905562000cbc3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161562000655576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620006555762000db48162000dfc565b62000dc183602062000e0f565b60405160200162000dd492919062001292565b60408051601f198184030181529082905262461bcd60e51b8252620004089160040162001317565b6060620003a36001600160a01b03831660145b6060600062000e2083600262001362565b62000e2d9060026200137c565b67ffffffffffffffff81111562000e485762000e4862001392565b6040519080825280601f01601f19166020018201604052801562000e73576020820181803683370190505b509050600360fc1b8160008151811062000e915762000e91620013a8565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062000ec35762000ec3620013a8565b60200101906001600160f81b031916908160001a905350600062000ee984600262001362565b62000ef69060016200137c565b90505b600181111562000f85577f303132333435363738396162636465660000000000000000000000000000000085600f166010811062000f3b5762000f3b620013a8565b1a60f81b82828151811062000f545762000f54620013a8565b60200101906001600160f81b031916908160001a90535060049490941c9362000f7d81620013be565b905062000ef9565b50831562000fd65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000408565b9392505050565b61106480620013d983390190565b60006020828403121562000ffe57600080fd5b81356001600160e01b03198116811462000fd657600080fd5b80356001600160a01b03811681146200102f57600080fd5b919050565b6000602082840312156200104757600080fd5b62000fd68262001017565b6000602082840312156200106557600080fd5b5035919050565b600080604083850312156200108057600080fd5b82359150620010926020840162001017565b90509250929050565b60008083601f840112620010ae57600080fd5b50813567ffffffffffffffff811115620010c757600080fd5b602083019150836020828501011115620010e057600080fd5b9250929050565b60008060008060008060008060a0898b0312156200110457600080fd5b6200110f8962001017565b97506200111f60208a0162001017565b9650604089013567ffffffffffffffff808211156200113d57600080fd5b6200114b8c838d016200109b565b909850965060608b01359150808211156200116557600080fd5b620011738c838d016200109b565b909650945060808b01359150808211156200118d57600080fd5b506200119c8b828c016200109b565b999c989b5096995094979396929594505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b0380891683528088166020840152506080604083015262001208608083018688620011b0565b82810360608401526200121d818587620011b0565b9998505050505050505050565b60006001600160a01b03808816835280871660208401528086166040840152506080606083015262001261608083018486620011b0565b979650505050505050565b60005b83811015620012895781810151838201526020016200126f565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620012cc8160178501602088016200126c565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516200130b8160288401602088016200126c565b01602801949350505050565b6020815260008251806020840152620013388160408501602087016200126c565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620003a357620003a36200134c565b80820180821115620003a357620003a36200134c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081620013d057620013d06200134c565b50600019019056fe60806040523480156200001157600080fd5b506040516200106438038062001064833981016040819052620000349162000171565b8181600362000044838262000290565b50600462000053828262000290565b5050600580546001600160a01b039586166001600160a01b0319918216179091556006805496909516951694909417909255506200035c915050565b80516001600160a01b0381168114620000a757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d457600080fd5b81516001600160401b0380821115620000f157620000f1620000ac565b604051601f8301601f19908116603f011681019082821181831017156200011c576200011c620000ac565b816040528381526020925086838588010111156200013957600080fd5b600091505b838210156200015d57858201830151818301840152908201906200013e565b600093810190920192909252949350505050565b600080600080608085870312156200018857600080fd5b62000193856200008f565b9350620001a3602086016200008f565b60408601519093506001600160401b0380821115620001c157600080fd5b620001cf88838901620000c2565b93506060870151915080821115620001e657600080fd5b50620001f587828801620000c2565b91505092959194509250565b600181811c908216806200021657607f821691505b6020821081036200023757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028b57600081815260208120601f850160051c81016020861015620002665750805b601f850160051c820191505b81811015620002875782815560010162000272565b5050505b505050565b81516001600160401b03811115620002ac57620002ac620000ac565b620002c481620002bd845462000201565b846200023d565b602080601f831160018114620002fc5760008415620002e35750858301515b600019600386901b1c1916600185901b17855562000287565b600085815260208120601f198616915b828110156200032d578886015182559484019460019091019084016200030c565b50858210156200034c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610cf8806200036c6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610208578063ae1f6aaf1461021b578063c01e1bd614610246578063dd62ed3e1461025957600080fd5b806370a08231146101b157806395d89b41146101da5780639dc29fac146101e2578063a457c2d7146101f557600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610b41565b610292565b60405190151581526020015b60405180910390f35b6101356102f0565b6040516101249190610b72565b610118610150366004610bdc565b610382565b6002545b604051908152602001610124565b610118610175366004610c06565b61039c565b60405160128152602001610124565b610118610197366004610bdc565b6103c0565b6101af6101aa366004610bdc565b6103ff565b005b6101596101bf366004610c42565b6001600160a01b031660009081526020819052604090205490565b6101356104af565b6101af6101f0366004610bdc565b6104be565b610118610203366004610bdc565b61055d565b610118610216366004610bdc565b6105ef565b60065461022e906001600160a01b031681565b6040516001600160a01b039091168152602001610124565b60055461022e906001600160a01b031681565b610159610267366004610c5d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2631d1d8b6360e01b6001600160e01b031984166301ffc9a760e01b14806102e857506001600160e01b0319848116908216145b949350505050565b6060600380546102ff90610c90565b80601f016020809104026020016040519081016040528092919081815260200182805461032b90610c90565b80156103785780601f1061034d57610100808354040283529160200191610378565b820191906000526020600020905b81548152906001019060200180831161035b57829003601f168201915b5050505050905090565b6000336103908185856105fd565b60019150505b92915050565b6000336103aa858285610722565b6103b58585856107b4565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061039090829086906103fa908790610cca565b6105fd565b6006546001600160a01b0316331461045e5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064015b60405180910390fd5b6104688282610958565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516104a391815260200190565b60405180910390a25050565b6060600480546102ff90610c90565b6006546001600160a01b031633146105185760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e6044820152606401610455565b6105228282610a17565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516104a391815260200190565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156105e25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610455565b6103b582868684036105fd565b6000336103908185856107b4565b6001600160a01b03831661065f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610455565b6001600160a01b0382166106c05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610455565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107ae57818110156107a15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610455565b6107ae84848484036105fd565b50505050565b6001600160a01b0383166108185760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610455565b6001600160a01b03821661087a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610455565b6001600160a01b038316600090815260208190526040902054818110156108f25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610455565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107ae565b6001600160a01b0382166109ae5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610455565b80600260008282546109c09190610cca565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610a775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610455565b6001600160a01b03821660009081526020819052604090205481811015610aeb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610455565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610715565b600060208284031215610b5357600080fd5b81356001600160e01b031981168114610b6b57600080fd5b9392505050565b600060208083528351808285015260005b81811015610b9f57858101830151858201604001528201610b83565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610bd757600080fd5b919050565b60008060408385031215610bef57600080fd5b610bf883610bc0565b946020939093013593505050565b600080600060608486031215610c1b57600080fd5b610c2484610bc0565b9250610c3260208501610bc0565b9150604084013590509250925092565b600060208284031215610c5457600080fd5b610b6b82610bc0565b60008060408385031215610c7057600080fd5b610c7983610bc0565b9150610c8760208401610bc0565b90509250929050565b600181811c90821680610ca457607f821691505b602082108103610cc457634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561039657634e487b7160e01b600052601160045260246000fdfea164736f6c6343000812000aa164736f6c6343000812000a", - "devdoc": { - "details": "Factory contract for creating standard L2 token representations of L1 ERC20s compatible with and working on the standard bridge.", - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "createL2Token(address,address,string,string,string)": { - "details": "Creates an instance of the standard ERC20 token on L2.", - "params": { - "_l1Token": "Address of the corresponding L1 token.", - "_name": "ERC20 name.", - "_symbol": "ERC20 symbol.", - "projectOwner": "Address of the project owner." - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + } + ], + "name": "StandardL2TokenCreated", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "projectOwner", + "type": "address" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "internalType": "address", + "name": "_l1Token", + "type": "address" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "internalType": "string", + "name": "_name", + "type": "string" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "internalType": "string", + "name": "_symbol", + "type": "string" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "internalType": "string", + "name": "projectName", + "type": "string" } - }, - "title": "L2TokenFactory", - "version": 1 + ], + "name": "createL2Token", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" }, - "storageLayout": { - "storage": [ - { - "astId": 24, - "contract": "contracts/L2/factory/L2TokenFactory.sol:L2TokenFactory", - "label": "_roles", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + { + "inputs": [ { - "astId": 2962, - "contract": "contracts/L2/factory/L2TokenFactory.sol:L2TokenFactory", - "label": "l2ProjectManager", - "offset": 0, - "slot": "1", - "type": "t_address" + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 2964, - "contract": "contracts/L2/factory/L2TokenFactory.sol:L2TokenFactory", - "label": "l1Bridge", - "offset": 0, - "slot": "2", - "type": "t_address" + "internalType": "address", + "name": "account", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Bridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2ProjectManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/factory/L2TokenFactory.sol:L2TokenFactory", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/factory/L2TokenFactory.sol:L2TokenFactory", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "address", + "name": "account", + "type": "address" } - } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Bridge", + "type": "address" + } + ], + "name": "setL1Bridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2ProjectManager", + "type": "address" + } + ], + "name": "setL2ProjectManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2UniversalStos.json b/contracts/data/tonstarter/abi/L2UniversalStos.json index 78a10a1..60e4bc7 100644 --- a/contracts/data/tonstarter/abi/L2UniversalStos.json +++ b/contracts/data/tonstarter/abi/L2UniversalStos.json @@ -1,740 +1,513 @@ -{ - "address": "0xF9d75D5814e1C3D734342bD5Ed0637b9c49c3f69", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_l2StakeV2", - "type": "address" - } - ], - "name": "SetL2StakeV2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_lockIdNftForRegister", - "type": "address" - } - ], - "name": "SetLockIdNftForRegister", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "balanceOfAt", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2StakeV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lockIdNftForRegister", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2StakeV2", - "type": "address" - } - ], - "name": "setL2Stakev2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lockIdNftForRegister", - "type": "address" - } - ], - "name": "setLockIdNftForRegister", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "totalSupplyAt", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x72b3d81bd49f6c00c569e6dd3ad25a80d005907328b97b9374a14e025361d2d7", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0xF9d75D5814e1C3D734342bD5Ed0637b9c49c3f69", - "transactionIndex": 0, - "gasUsed": "1156077", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x43433772eaca553ff1b5fe22473ca2eb78d08efb3e6af1efdc6715cf7c55b6b7", - "transactionHash": "0x72b3d81bd49f6c00c569e6dd3ad25a80d005907328b97b9374a14e025361d2d7", - "logs": [], - "blockNumber": 23684, - "cumulativeGasUsed": "1156077", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "45d0672b273989ad93ec409a9a777d39", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_l2StakeV2\",\"type\":\"address\"}],\"name\":\"SetL2StakeV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_lockIdNftForRegister\",\"type\":\"address\"}],\"name\":\"SetLockIdNftForRegister\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StakeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockIdNftForRegister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2StakeV2\",\"type\":\"address\"}],\"name\":\"setL2Stakev2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lockIdNftForRegister\",\"type\":\"address\"}],\"name\":\"setLockIdNftForRegister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/stos/L2UniversalStos.sol\":\"L2UniversalStos\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/stos/L2UniversalStos.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport { ProxyStorage } from \\\"../../proxy/ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../../common/AccessibleCommon.sol\\\";\\nimport \\\"./L2UniversalStosStorage.sol\\\";\\n\\ninterface IL2StakeV2 {\\n function balanceOfLock(address account) external view returns (uint256);\\n function balanceOfLockAt(address account, uint256 timestamp) external view returns (uint256);\\n function totalSupplyStos() external view returns (uint256);\\n function totalSupplyStosAt(uint256 timestamp) external view returns (uint256);\\n}\\n\\ninterface ILockIdNftForRegister {\\n function balanceOfLock(address account) external view returns (uint256);\\n function balanceOfLockAt(address account, uint32 timestamp) external view returns (uint256);\\n function totalSupplyLocks() external view returns (uint256);\\n function totalSupplyLocksAt(uint32 timestamp) external view returns (uint256);\\n}\\n\\ncontract L2UniversalStos is ProxyStorage, AccessibleCommon, L2UniversalStosStorage {\\n\\n modifier nonZero(uint256 value) {\\n require(value != 0, \\\"Z1\\\");\\n _;\\n }\\n\\n modifier nonZeroAddress(address account) {\\n require(account != address(0), \\\"Z2\\\");\\n _;\\n }\\n\\n event SetL2StakeV2(address _l2StakeV2);\\n event SetLockIdNftForRegister(address _lockIdNftForRegister);\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n /* ========== onlyOwner ========== */\\n\\n function setL2Stakev2(\\n address _l2StakeV2\\n ) external onlyOwner\\n {\\n require(l2StakeV2 != _l2StakeV2, \\\"same\\\");\\n emit SetL2StakeV2(_l2StakeV2 );\\n }\\n\\n function setLockIdNftForRegister(\\n address _lockIdNftForRegister\\n ) external onlyOwner\\n {\\n require(lockIdNftForRegister != _lockIdNftForRegister, \\\"same\\\");\\n lockIdNftForRegister = _lockIdNftForRegister;\\n emit SetLockIdNftForRegister(_lockIdNftForRegister);\\n }\\n\\n function balanceOf(address account) external view returns (uint256 amount) {\\n\\n if (l2StakeV2 != address(0)) amount += IL2StakeV2(l2StakeV2).balanceOfLock(account);\\n if (lockIdNftForRegister != address(0)) amount += ILockIdNftForRegister(lockIdNftForRegister).balanceOfLock(account);\\n\\n }\\n\\n function balanceOfAt(address account, uint256 timestamp) external view returns (uint256 amount) {\\n if (l2StakeV2 != address(0)) amount += IL2StakeV2(l2StakeV2).balanceOfLockAt(account, timestamp);\\n if (lockIdNftForRegister != address(0)) amount += ILockIdNftForRegister(lockIdNftForRegister).balanceOfLockAt(account, uint32(timestamp));\\n\\n }\\n\\n function totalSupply() external view returns (uint256 amount) {\\n if (l2StakeV2 != address(0)) amount += IL2StakeV2(l2StakeV2).totalSupplyStos();\\n if (lockIdNftForRegister != address(0)) amount += ILockIdNftForRegister(lockIdNftForRegister).totalSupplyLocks();\\n\\n }\\n\\n function totalSupplyAt(uint256 timestamp) external view returns (uint256 amount) {\\n if (l2StakeV2 != address(0)) amount += IL2StakeV2(l2StakeV2).totalSupplyStosAt(timestamp);\\n if (lockIdNftForRegister != address(0)) amount += ILockIdNftForRegister(lockIdNftForRegister).totalSupplyLocksAt(uint32(timestamp));\\n\\n }\\n\\n}\\n\",\"keccak256\":\"0x718b28b0f53f0505d405e5f135529e288d050882d6efa49e8add42e80ba4e30d\",\"license\":\"MIT\"},\"contracts/L2/stos/L2UniversalStosStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract L2UniversalStosStorage {\\n\\n address public l2StakeV2; // L2 stos\\n address public lockIdNftForRegister; // L1 locktos register\\n\\n}\",\"keccak256\":\"0x3c11d6fb4628d9c1c72f13f74edcb54ab9128e5aa4fad8085eaf81df0163432e\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506113f5806100206000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806363a8fd89116100ee57806391d1485411610097578063b911135f11610071578063b911135f146103dc578063c9ac89a414610405578063d547741f14610418578063e65be2d01461042b57600080fd5b806391d1485414610388578063981b24d0146103c1578063a217fddf146103d457600080fd5b806370a08231116100c857806370a082311461033b57806375829def1461034e57806375b238fc1461036157600080fd5b806363a8fd89146103085780636b765aa614610315578063704802751461032857600080fd5b80632f2ff15d116101505780634ee2cd7e1161012a5780634ee2cd7e1461029157806350d2a276146102a4578063550d01a3146102e557600080fd5b80632f2ff15d1461025857806336568abe1461026b5780634588f7ab1461027e57600080fd5b8063229852461161018157806322985246146101fb578063248a9ca31461022257806324d7806c1461024557600080fd5b806301ffc9a7146101a85780631785f53c146101d057806318160ddd146101e5575b600080fd5b6101bb6101b63660046111a9565b61043e565b60405190151581526020015b60405180910390f35b6101e36101de3660046111ea565b610475565b005b6101ed610507565b6040519081526020016101c7565b6101ed7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6101ed610230366004611205565b60009081526004602052604090206001015490565b6101bb6102533660046111ea565b610637565b6101e361026636600461121e565b610677565b6101e361027936600461121e565b6106a1565b6101e361028c3660046111ea565b61072d565b6101ed61029f36600461124a565b610835565b6102cd6102b23660046111a9565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b6101bb6102f33660046111ea565b60026020526000908152604090205460ff1681565b6000546101bb9060ff1681565b6006546102cd906001600160a01b031681565b6101e36103363660046111ea565b610967565b6101ed6103493660046111ea565b6109f1565b6101e361035c3660046111ea565b610b0f565b6101ed7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6101bb61039636600461121e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101ed6103cf366004611205565b610c71565b6101ed600081565b6102cd6103ea366004611205565b6001602052600090815260409020546001600160a01b031681565b6101e36104133660046111ea565b610d46565b6101e361042636600461121e565b610e25565b6005546102cd906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061046f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61047e33610637565b6104da5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106a1565b50565b6005546000906001600160a01b03161561059f57600560009054906101000a90046001600160a01b03166001600160a01b0316637f4f24816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105929190611274565b61059c90826112a3565b90505b6006546001600160a01b03161561063457600660009054906101000a90046001600160a01b03166001600160a01b031663de6961806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611274565b61063190826112a3565b90505b90565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661046f565b60008281526004602052604090206001015461069281610e4a565b61069c8383610e54565b505050565b6001600160a01b038116331461071f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016104d1565b6107298282610ef6565b5050565b61073633610637565b61078d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6006546001600160a01b038083169116036107d35760405162461bcd60e51b81526004016104d19060208082526004908201526373616d6560e01b604082015260600190565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f0a5d8c4f60693be445ac0cf65391b0feb45faccdca6babf2aee9a71b688b2e50906020015b60405180910390a150565b6005546000906001600160a01b0316156108cb576005546040516320b3455f60e11b81526001600160a01b03858116600483015260248201859052909116906341668abe90604401602060405180830381865afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611274565b6108c890826112a3565b90505b6006546001600160a01b03161561046f57600654604051630346759360e01b81526001600160a01b03858116600483015263ffffffff8516602483015290911690630346759390604401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190611274565b61096090826112a3565b9392505050565b61097033610637565b6109c75760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610677565b6005546000906001600160a01b031615610a8057600554604051633e47a4b160e01b81526001600160a01b03848116600483015290911690633e47a4b190602401602060405180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a739190611274565b610a7d90826112a3565b90505b6006546001600160a01b031615610b0a57600654604051633e47a4b160e01b81526001600160a01b03848116600483015290911690633e47a4b1906024015b602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611274565b61046f90826112a3565b919050565b610b1833610637565b610b6f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6001600160a01b038116610bc55760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016104d1565b6001600160a01b0381163303610c1d5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016104d1565b610c477fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610677565b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336106a1565b6005546000906001600160a01b031615610cff5760055460405163ac3e9ccd60e01b8152600481018490526001600160a01b039091169063ac3e9ccd90602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190611274565b610cfc90826112a3565b90505b6006546001600160a01b031615610b0a5760065460405163a36c36e560e01b815263ffffffff841660048201526001600160a01b039091169063a36c36e590602401610abf565b610d4f33610637565b610da65760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6005546001600160a01b03808316911603610dec5760405162461bcd60e51b81526004016104d19060208082526004908201526373616d6560e01b604082015260600190565b6040516001600160a01b03821681527f990c137f3faa15669a0ca573d438cda706ccc26009f24a92e914a7cc21ed97189060200161082a565b600082815260046020526040902060010154610e4081610e4a565b61069c8383610ef6565b6105048133610f79565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107295760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156107295760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661072957610fac81610fee565b610fb7836020611000565b604051602001610fc89291906112da565b60408051601f198184030181529082905262461bcd60e51b82526104d19160040161135b565b606061046f6001600160a01b03831660145b6060600061100f83600261138e565b61101a9060026112a3565b67ffffffffffffffff811115611032576110326113a5565b6040519080825280601f01601f19166020018201604052801561105c576020820181803683370190505b509050600360fc1b81600081518110611077576110776113bb565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106110a6576110a66113bb565b60200101906001600160f81b031916908160001a90535060006110ca84600261138e565b6110d59060016112a3565b90505b600181111561115a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611116576111166113bb565b1a60f81b82828151811061112c5761112c6113bb565b60200101906001600160f81b031916908160001a90535060049490941c93611153816113d1565b90506110d8565b5083156109605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104d1565b6000602082840312156111bb57600080fd5b81356001600160e01b03198116811461096057600080fd5b80356001600160a01b0381168114610b0a57600080fd5b6000602082840312156111fc57600080fd5b610960826111d3565b60006020828403121561121757600080fd5b5035919050565b6000806040838503121561123157600080fd5b82359150611241602084016111d3565b90509250929050565b6000806040838503121561125d57600080fd5b611266836111d3565b946020939093013593505050565b60006020828403121561128657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561046f5761046f61128d565b60005b838110156112d15781810151838201526020016112b9565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516113128160178501602088016112b6565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161134f8160288401602088016112b6565b01602801949350505050565b602081526000825180602084015261137a8160408501602087016112b6565b601f01601f19169190910160400192915050565b808202811582820484141761046f5761046f61128d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816113e0576113e061128d565b50600019019056fea164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c806363a8fd89116100ee57806391d1485411610097578063b911135f11610071578063b911135f146103dc578063c9ac89a414610405578063d547741f14610418578063e65be2d01461042b57600080fd5b806391d1485414610388578063981b24d0146103c1578063a217fddf146103d457600080fd5b806370a08231116100c857806370a082311461033b57806375829def1461034e57806375b238fc1461036157600080fd5b806363a8fd89146103085780636b765aa614610315578063704802751461032857600080fd5b80632f2ff15d116101505780634ee2cd7e1161012a5780634ee2cd7e1461029157806350d2a276146102a4578063550d01a3146102e557600080fd5b80632f2ff15d1461025857806336568abe1461026b5780634588f7ab1461027e57600080fd5b8063229852461161018157806322985246146101fb578063248a9ca31461022257806324d7806c1461024557600080fd5b806301ffc9a7146101a85780631785f53c146101d057806318160ddd146101e5575b600080fd5b6101bb6101b63660046111a9565b61043e565b60405190151581526020015b60405180910390f35b6101e36101de3660046111ea565b610475565b005b6101ed610507565b6040519081526020016101c7565b6101ed7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b6101ed610230366004611205565b60009081526004602052604090206001015490565b6101bb6102533660046111ea565b610637565b6101e361026636600461121e565b610677565b6101e361027936600461121e565b6106a1565b6101e361028c3660046111ea565b61072d565b6101ed61029f36600461124a565b610835565b6102cd6102b23660046111a9565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b6101bb6102f33660046111ea565b60026020526000908152604090205460ff1681565b6000546101bb9060ff1681565b6006546102cd906001600160a01b031681565b6101e36103363660046111ea565b610967565b6101ed6103493660046111ea565b6109f1565b6101e361035c3660046111ea565b610b0f565b6101ed7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6101bb61039636600461121e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101ed6103cf366004611205565b610c71565b6101ed600081565b6102cd6103ea366004611205565b6001602052600090815260409020546001600160a01b031681565b6101e36104133660046111ea565b610d46565b6101e361042636600461121e565b610e25565b6005546102cd906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061046f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61047e33610637565b6104da5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084015b60405180910390fd5b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826106a1565b50565b6005546000906001600160a01b03161561059f57600560009054906101000a90046001600160a01b03166001600160a01b0316637f4f24816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105929190611274565b61059c90826112a3565b90505b6006546001600160a01b03161561063457600660009054906101000a90046001600160a01b03166001600160a01b031663de6961806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611274565b61063190826112a3565b90505b90565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff1661046f565b60008281526004602052604090206001015461069281610e4a565b61069c8383610e54565b505050565b6001600160a01b038116331461071f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016104d1565b6107298282610ef6565b5050565b61073633610637565b61078d5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6006546001600160a01b038083169116036107d35760405162461bcd60e51b81526004016104d19060208082526004908201526373616d6560e01b604082015260600190565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f0a5d8c4f60693be445ac0cf65391b0feb45faccdca6babf2aee9a71b688b2e50906020015b60405180910390a150565b6005546000906001600160a01b0316156108cb576005546040516320b3455f60e11b81526001600160a01b03858116600483015260248201859052909116906341668abe90604401602060405180830381865afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611274565b6108c890826112a3565b90505b6006546001600160a01b03161561046f57600654604051630346759360e01b81526001600160a01b03858116600483015263ffffffff8516602483015290911690630346759390604401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190611274565b61096090826112a3565b9392505050565b61097033610637565b6109c75760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610677565b6005546000906001600160a01b031615610a8057600554604051633e47a4b160e01b81526001600160a01b03848116600483015290911690633e47a4b190602401602060405180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a739190611274565b610a7d90826112a3565b90505b6006546001600160a01b031615610b0a57600654604051633e47a4b160e01b81526001600160a01b03848116600483015290911690633e47a4b1906024015b602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611274565b61046f90826112a3565b919050565b610b1833610637565b610b6f5760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6001600160a01b038116610bc55760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016104d1565b6001600160a01b0381163303610c1d5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016104d1565b610c477fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610677565b6105047fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336106a1565b6005546000906001600160a01b031615610cff5760055460405163ac3e9ccd60e01b8152600481018490526001600160a01b039091169063ac3e9ccd90602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190611274565b610cfc90826112a3565b90505b6006546001600160a01b031615610b0a5760065460405163a36c36e560e01b815263ffffffff841660048201526001600160a01b039091169063a36c36e590602401610abf565b610d4f33610637565b610da65760405162461bcd60e51b815260206004820152602260248201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b60648201526084016104d1565b6005546001600160a01b03808316911603610dec5760405162461bcd60e51b81526004016104d19060208082526004908201526373616d6560e01b604082015260600190565b6040516001600160a01b03821681527f990c137f3faa15669a0ca573d438cda706ccc26009f24a92e914a7cc21ed97189060200161082a565b600082815260046020526040902060010154610e4081610e4a565b61069c8383610ef6565b6105048133610f79565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166107295760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156107295760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff1661072957610fac81610fee565b610fb7836020611000565b604051602001610fc89291906112da565b60408051601f198184030181529082905262461bcd60e51b82526104d19160040161135b565b606061046f6001600160a01b03831660145b6060600061100f83600261138e565b61101a9060026112a3565b67ffffffffffffffff811115611032576110326113a5565b6040519080825280601f01601f19166020018201604052801561105c576020820181803683370190505b509050600360fc1b81600081518110611077576110776113bb565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106110a6576110a66113bb565b60200101906001600160f81b031916908160001a90535060006110ca84600261138e565b6110d59060016112a3565b90505b600181111561115a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611116576111166113bb565b1a60f81b82828151811061112c5761112c6113bb565b60200101906001600160f81b031916908160001a90535060049490941c93611153816113d1565b90506110d8565b5083156109605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104d1565b6000602082840312156111bb57600080fd5b81356001600160e01b03198116811461096057600080fd5b80356001600160a01b0381168114610b0a57600080fd5b6000602082840312156111fc57600080fd5b610960826111d3565b60006020828403121561121757600080fd5b5035919050565b6000806040838503121561123157600080fd5b82359150611241602084016111d3565b90509250929050565b6000806040838503121561125d57600080fd5b611266836111d3565b946020939093013593505050565b60006020828403121561128657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561046f5761046f61128d565b60005b838110156112d15781810151838201526020016112b9565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516113128160178501602088016112b6565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161134f8160288401602088016112b6565b01602801949350505050565b602081526000825180602084015261137a8160408501602087016112b6565b601f01601f19169190910160400192915050565b808202811582820484141761046f5761046f61128d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816113e0576113e061128d565b50600019019056fea164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." - }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } - } - }, - "version": 1 + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_l2StakeV2", + "type": "address" + } + ], + "name": "SetL2StakeV2", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 1928, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 1932, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" - }, + "indexed": false, + "internalType": "address", + "name": "_lockIdNftForRegister", + "type": "address" + } + ], + "name": "SetLockIdNftForRegister", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ { - "astId": 1936, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ { - "astId": 1940, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ { - "astId": 24, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1807, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "l2StakeV2", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "astId": 1809, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "lockIdNftForRegister", - "offset": 0, - "slot": "6", - "type": "t_address" + "internalType": "address", + "name": "", + "type": "address" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "balanceOfAt", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2StakeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockIdNftForRegister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/stos/L2UniversalStos.sol:L2UniversalStos", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "account", + "type": "address" } - } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2StakeV2", + "type": "address" + } + ], + "name": "setL2Stakev2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_lockIdNftForRegister", + "type": "address" + } + ], + "name": "setLockIdNftForRegister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "totalSupplyAt", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/L2UniversalStosProxy.json b/contracts/data/tonstarter/abi/L2UniversalStosProxy.json index 669aea3..c941bfd 100644 --- a/contracts/data/tonstarter/abi/L2UniversalStosProxy.json +++ b/contracts/data/tonstarter/abi/L2UniversalStosProxy.json @@ -1,858 +1,555 @@ -{ - "address": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x8c01eec46220276dcea6f1e27516fe9ea8879a5e2ac966d402c475f9733cb704", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", - "transactionIndex": 0, - "gasUsed": "1437401", - "logsBloom": "0x00000004000000000800000000000000080000000000000000000000000000280000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000400000088000000800000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000400000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1be678336491cb372dd4bc6e0632e8a2e360ea75a66ccb56a1ed951966e717cc", - "transactionHash": "0x8c01eec46220276dcea6f1e27516fe9ea8879a5e2ac966d402c475f9733cb704", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23685, - "transactionHash": "0x8c01eec46220276dcea6f1e27516fe9ea8879a5e2ac966d402c475f9733cb704", - "address": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", - "topics": [ - "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x1be678336491cb372dd4bc6e0632e8a2e360ea75a66ccb56a1ed951966e717cc" - }, +[ + { + "anonymous": false, + "inputs": [ { - "transactionIndex": 0, - "blockNumber": 23685, - "transactionHash": "0x8c01eec46220276dcea6f1e27516fe9ea8879a5e2ac966d402c475f9733cb704", - "address": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", - "topics": [ - "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", - "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0x1be678336491cb372dd4bc6e0632e8a2e360ea75a66ccb56a1ed951966e717cc" - } - ], - "blockNumber": 23685, - "cumulativeGasUsed": "1437401", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "b43c6570b3b1b6f48b8dc9da694ef9ce", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POLICY_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"add admin\",\"params\":{\"account\":\"address to add\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"isAdmin(address)\":{\"details\":\"whether admin\",\"params\":{\"account\":\"address to check\"}},\"removeAdmin(address)\":{\"details\":\"remove admin\",\"params\":{\"account\":\"address to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferAdmin(address)\":{\"details\":\"transfer admin\",\"params\":{\"newAdmin\":\"new admin address\"}},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}}},\"title\":\"L2UniversalStosProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L2/stos/L2UniversalStosProxy.sol\":\"L2UniversalStosProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/L2/stos/L2UniversalStosProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"../../proxy/Proxy.sol\\\";\\n\\n/**\\n * @title L2UniversalStosProxy\\n * @dev\\n */\\ncontract L2UniversalStosProxy is Proxy {\\n\\n}\",\"keccak256\":\"0x5fe71b101121884fb297f4eaf104abd04c4810869d2132cdfc0e1da7bde8919a\",\"license\":\"MIT\"},\"contracts/common/AccessRoleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ncontract AccessRoleCommon {\\n bytes32 public constant ADMIN_ROLE = keccak256(\\\"ADMIN\\\");\\n bytes32 public constant POLICY_ROLE = keccak256(\\\"POLICY_ROLE\\\");\\n}\\n\",\"keccak256\":\"0xd33c0944095da18c41a9434b86d34de8ce9c3667b57072c6b8b0567d406c814a\",\"license\":\"MIT\"},\"contracts/common/AccessibleCommon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./AccessRoleCommon.sol\\\";\\n\\ncontract AccessibleCommon is AccessRoleCommon, AccessControl {\\n modifier onlyOwner() {\\n require(isAdmin(msg.sender), \\\"Accessible: Caller is not an admin\\\");\\n _;\\n }\\n\\n /// @dev add admin\\n /// @param account address to add\\n function addAdmin(address account) public virtual onlyOwner {\\n grantRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev remove admin\\n /// @param account address to remove\\n function removeAdmin(address account) public virtual onlyOwner {\\n renounceRole(ADMIN_ROLE, account);\\n }\\n\\n /// @dev transfer admin\\n /// @param newAdmin new admin address\\n function transferAdmin(address newAdmin) external virtual onlyOwner {\\n require(newAdmin != address(0), \\\"Accessible: zero address\\\");\\n require(msg.sender != newAdmin, \\\"Accessible: same admin\\\");\\n\\n grantRole(ADMIN_ROLE, newAdmin);\\n renounceRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n /// @dev whether admin\\n /// @param account address to check\\n function isAdmin(address account) public view virtual returns (bool) {\\n return hasRole(ADMIN_ROLE, account);\\n }\\n}\\n\",\"keccak256\":\"0x846f0a4ecf6c7598f710d256c400f5fd47f23ce38df5ff9fe1fed41104568613\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/proxy/Proxy.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage.sol\\\";\\nimport { AccessibleCommon } from \\\"../common/AccessibleCommon.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy is ProxyStorage, AccessibleCommon, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n\\n /* ========== CONSTRUCTOR ========== */\\n\\n constructor () {\\n _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE);\\n _setupRole(ADMIN_ROLE, msg.sender);\\n }\\n\\n\\n /* ========== onlyOwner ========== */\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x93a991e14e887e148f44924608e0fd480a62be79a72522bf1cb4c83b9ef85d85\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage {\\n\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n}\",\"keccak256\":\"0x0c29ab2e9f114400a3825c2a0ed8c0594cbf19e0322b7465140b61f5b5de6d96\",\"license\":\"Unlicense\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506200002d60008051602062001972833981519152806200004e565b62000048600080516020620019728339815191523362000099565b6200014d565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000a58282620000a9565b5050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620000a55760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001093390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611815806200015d6000396000f3fe60806040526004361061019a5760003560e01c80635cc797d8116100e15780637cd5f6631161008a57806391d148541161006457806391d148541461054f578063a217fddf14610595578063b911135f146105aa578063d547741f146105e0576101ec565b80637cd5f663146104ef5780638b8f4a651461050f5780638d4fdb401461052f576101ec565b806375829def116100bb57806375829def1461047b57806375b238fc1461049b5780637cb00d25146104cf576101ec565b80635cc797d81461042157806363a8fd8914610441578063704802751461045b576101ec565b806336568abe1161014357806350d2a2761161011d57806350d2a2761461035d578063550d01a3146103ab5780635c60da1b146103db576101ec565b806336568abe146102fd5780633659cfe61461031d5780634a5df50f1461033d576101ec565b8063248a9ca311610174578063248a9ca31461028d57806324d7806c146102bd5780632f2ff15d146102dd576101ec565b806301ffc9a7146101f65780631785f53c1461022b578063229852461461024b576101ec565b366101ec5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6101f4610600565b005b34801561020257600080fd5b506102166102113660046114c7565b6106a9565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b506101f4610246366004611508565b6106e0565b34801561025757600080fd5b5061027f7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610222565b34801561029957600080fd5b5061027f6102a8366004611523565b60009081526004602052604090206001015490565b3480156102c957600080fd5b506102166102d8366004611508565b61075b565b3480156102e957600080fd5b506101f46102f836600461153c565b61079b565b34801561030957600080fd5b506101f461031836600461153c565b6107c0565b34801561032957600080fd5b506101f4610338366004611508565b61084c565b34801561034957600080fd5b506101f4610358366004611568565b6109a5565b34801561036957600080fd5b506103936103783660046114c7565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610222565b3480156103b757600080fd5b506102166103c6366004611508565b60026020526000908152604090205460ff1681565b3480156103e757600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610393565b34801561042d57600080fd5b506101f461043c3660046115fc565b610c52565b34801561044d57600080fd5b506000546102169060ff1681565b34801561046757600080fd5b506101f4610476366004611508565b610caa565b34801561048757600080fd5b506101f4610496366004611508565b610d22565b3480156104a757600080fd5b5061027f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b3480156104db57600080fd5b506101f46104ea366004611626565b610e72565b3480156104fb57600080fd5b506101f461050a366004611641565b610ed3565b34801561051b57600080fd5b5061039361052a366004611523565b610f2c565b34801561053b57600080fd5b5061039361054a3660046114c7565b610f49565b34801561055b57600080fd5b5061021661056a36600461153c565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105a157600080fd5b5061027f600081565b3480156105b657600080fd5b506103936105c5366004611523565b6001602052600090815260409020546001600160a01b031681565b3480156105ec57600080fd5b506101f46105fb36600461153c565b611045565b60006106176000356001600160e01b031916610f49565b90506001600160a01b03811615801590610634575060005460ff16155b6106805760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101e3565b3660008037600080366000845af43d6000803e80801561069f573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b14806106da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106e93361075b565b61072e5760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826107c0565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106da565b6000828152600460205260409020600101546107b68161106a565b6106a48383611074565b6001600160a01b038116331461083e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016101e3565b6108488282611116565b5050565b6108553361075b565b61089a5760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6001600160a01b0381166108f05760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101e3565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036109615760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101e3565b61096e8160006001611199565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6109ae3361075b565b6109f35760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b81610a405760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101e3565b6001600160a01b03811660009081526002602052604090205460ff16610aa85760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101e3565b60005b82811015610c4c57816001600160a01b031660036000868685818110610ad357610ad3611674565b9050602002016020810190610ae891906114c7565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610b595760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101e3565b8160036000868685818110610b7057610b70611674565b9050602002016020810190610b8591906114c7565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610bda57610bda611674565b9050602002016020810190610bef91906114c7565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610c44816116a0565b915050610aab565b50505050565b610c5b3361075b565b610ca05760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6108488282611231565b610cb33361075b565b610cf85760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261079b565b610d2b3361075b565b610d705760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6001600160a01b038116610dc65760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016101e3565b6001600160a01b0381163303610e1e5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016101e3565b610e487fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261079b565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336107c0565b610e7b3361075b565b610ec05760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6000805460ff1916911515919091179055565b610edc3361075b565b610f215760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6106a4838383611199565b6000818152600160205260408120546001600160a01b03166106da565b6001600160e01b031981166000908152600360205260408120546001600160a01b0316610fa95750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561100757506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546110608161106a565b6106a48383611116565b6107588133611290565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108485760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110d23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156108485760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6111f05760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101e3565b801561122b576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6106a483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610848576112c381611305565b6112ce836020611317565b6040516020016112df9291906116dd565b60408051601f198184030181529082905262461bcd60e51b82526101e39160040161175e565b60606106da6001600160a01b03831660145b60606000611326836002611791565b6113319060026117a8565b67ffffffffffffffff811115611349576113496117bb565b6040519080825280601f01601f191660200182016040528015611373576020820181803683370190505b509050600360fc1b8160008151811061138e5761138e611674565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113bd576113bd611674565b60200101906001600160f81b031916908160001a90535060006113e1846002611791565b6113ec9060016117a8565b90505b6001811115611471577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061142d5761142d611674565b1a60f81b82828151811061144357611443611674565b60200101906001600160f81b031916908160001a90535060049490941c9361146a816117d1565b90506113ef565b5083156114c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016101e3565b9392505050565b6000602082840312156114d957600080fd5b81356001600160e01b0319811681146114c057600080fd5b80356001600160a01b038116811461104057600080fd5b60006020828403121561151a57600080fd5b6114c0826114f1565b60006020828403121561153557600080fd5b5035919050565b6000806040838503121561154f57600080fd5b8235915061155f602084016114f1565b90509250929050565b60008060006040848603121561157d57600080fd5b833567ffffffffffffffff8082111561159557600080fd5b818601915086601f8301126115a957600080fd5b8135818111156115b857600080fd5b8760208260051b85010111156115cd57600080fd5b6020928301955093506115e391860190506114f1565b90509250925092565b8035801515811461104057600080fd5b6000806040838503121561160f57600080fd5b611618836114f1565b915061155f602084016115ec565b60006020828403121561163857600080fd5b6114c0826115ec565b60008060006060848603121561165657600080fd5b61165f846114f1565b9250602084013591506115e3604085016115ec565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016116b2576116b261168a565b5060010190565b60005b838110156116d45781810151838201526020016116bc565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516117158160178501602088016116b9565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117528160288401602088016116b9565b01602801949350505050565b602081526000825180602084015261177d8160408501602087016116b9565b601f01601f19169190910160400192915050565b80820281158282048414176106da576106da61168a565b808201808211156106da576106da61168a565b634e487b7160e01b600052604160045260246000fd5b6000816117e0576117e061168a565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000adf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x60806040526004361061019a5760003560e01c80635cc797d8116100e15780637cd5f6631161008a57806391d148541161006457806391d148541461054f578063a217fddf14610595578063b911135f146105aa578063d547741f146105e0576101ec565b80637cd5f663146104ef5780638b8f4a651461050f5780638d4fdb401461052f576101ec565b806375829def116100bb57806375829def1461047b57806375b238fc1461049b5780637cb00d25146104cf576101ec565b80635cc797d81461042157806363a8fd8914610441578063704802751461045b576101ec565b806336568abe1161014357806350d2a2761161011d57806350d2a2761461035d578063550d01a3146103ab5780635c60da1b146103db576101ec565b806336568abe146102fd5780633659cfe61461031d5780634a5df50f1461033d576101ec565b8063248a9ca311610174578063248a9ca31461028d57806324d7806c146102bd5780632f2ff15d146102dd576101ec565b806301ffc9a7146101f65780631785f53c1461022b578063229852461461024b576101ec565b366101ec5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b6101f4610600565b005b34801561020257600080fd5b506102166102113660046114c7565b6106a9565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b506101f4610246366004611508565b6106e0565b34801561025757600080fd5b5061027f7ffb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e8526127831181565b604051908152602001610222565b34801561029957600080fd5b5061027f6102a8366004611523565b60009081526004602052604090206001015490565b3480156102c957600080fd5b506102166102d8366004611508565b61075b565b3480156102e957600080fd5b506101f46102f836600461153c565b61079b565b34801561030957600080fd5b506101f461031836600461153c565b6107c0565b34801561032957600080fd5b506101f4610338366004611508565b61084c565b34801561034957600080fd5b506101f4610358366004611568565b6109a5565b34801561036957600080fd5b506103936103783660046114c7565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610222565b3480156103b757600080fd5b506102166103c6366004611508565b60026020526000908152604090205460ff1681565b3480156103e757600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b0316610393565b34801561042d57600080fd5b506101f461043c3660046115fc565b610c52565b34801561044d57600080fd5b506000546102169060ff1681565b34801561046757600080fd5b506101f4610476366004611508565b610caa565b34801561048757600080fd5b506101f4610496366004611508565b610d22565b3480156104a757600080fd5b5061027f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b3480156104db57600080fd5b506101f46104ea366004611626565b610e72565b3480156104fb57600080fd5b506101f461050a366004611641565b610ed3565b34801561051b57600080fd5b5061039361052a366004611523565b610f2c565b34801561053b57600080fd5b5061039361054a3660046114c7565b610f49565b34801561055b57600080fd5b5061021661056a36600461153c565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105a157600080fd5b5061027f600081565b3480156105b657600080fd5b506103936105c5366004611523565b6001602052600090815260409020546001600160a01b031681565b3480156105ec57600080fd5b506101f46105fb36600461153c565b611045565b60006106176000356001600160e01b031916610f49565b90506001600160a01b03811615801590610634575060005460ff16155b6106805760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064016101e3565b3660008037600080366000845af43d6000803e80801561069f573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b14806106da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106e93361075b565b61072e5760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42826107c0565b50565b6001600160a01b03811660009081527f2fb794d17134dfdec181ddbac1babb5ab1eb140204ef4d982f294e7fc8b69022602052604081205460ff166106da565b6000828152600460205260409020600101546107b68161106a565b6106a48383611074565b6001600160a01b038116331461083e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016101e3565b6108488282611116565b5050565b6108553361075b565b61089a5760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6001600160a01b0381166108f05760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f0000000000000000000000000000000000000060448201526064016101e3565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b038281169116036109615760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b60448201526064016101e3565b61096e8160006001611199565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6109ae3361075b565b6109f35760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b81610a405760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f60448201526064016101e3565b6001600160a01b03811660009081526002602052604090205460ff16610aa85760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c697665000000000000000060448201526064016101e3565b60005b82811015610c4c57816001600160a01b031660036000868685818110610ad357610ad3611674565b9050602002016020810190610ae891906114c7565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610b595760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d7000000060448201526064016101e3565b8160036000868685818110610b7057610b70611674565b9050602002016020810190610b8591906114c7565b6001600160e01b03191681526020810191909152604001600020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283161790558216848483818110610bda57610bda611674565b9050602002016020810190610bef91906114c7565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610c44816116a0565b915050610aab565b50505050565b610c5b3361075b565b610ca05760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6108488282611231565b610cb33361075b565b610cf85760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261079b565b610d2b3361075b565b610d705760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6001600160a01b038116610dc65760405162461bcd60e51b815260206004820152601860248201527f41636365737369626c653a207a65726f2061646472657373000000000000000060448201526064016101e3565b6001600160a01b0381163303610e1e5760405162461bcd60e51b815260206004820152601660248201527f41636365737369626c653a2073616d652061646d696e0000000000000000000060448201526064016101e3565b610e487fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428261079b565b6107587fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336107c0565b610e7b3361075b565b610ec05760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6000805460ff1916911515919091179055565b610edc3361075b565b610f215760405162461bcd60e51b815260206004820152602260248201526000805160206117e983398151915260448201526134b760f11b60648201526084016101e3565b6106a4838383611199565b6000818152600160205260408120546001600160a01b03166106da565b6001600160e01b031981166000908152600360205260408120546001600160a01b0316610fa95750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561100757506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b6000828152600460205260409020600101546110608161106a565b6106a48383611116565b6107588133611290565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff166108485760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110d23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16156108485760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0383163b6111f05760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e74726163742061646472657373000000000060448201526064016101e3565b801561122b576000828152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790555b6106a483825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16610848576112c381611305565b6112ce836020611317565b6040516020016112df9291906116dd565b60408051601f198184030181529082905262461bcd60e51b82526101e39160040161175e565b60606106da6001600160a01b03831660145b60606000611326836002611791565b6113319060026117a8565b67ffffffffffffffff811115611349576113496117bb565b6040519080825280601f01601f191660200182016040528015611373576020820181803683370190505b509050600360fc1b8160008151811061138e5761138e611674565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113bd576113bd611674565b60200101906001600160f81b031916908160001a90535060006113e1846002611791565b6113ec9060016117a8565b90505b6001811115611471577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061142d5761142d611674565b1a60f81b82828151811061144357611443611674565b60200101906001600160f81b031916908160001a90535060049490941c9361146a816117d1565b90506113ef565b5083156114c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016101e3565b9392505050565b6000602082840312156114d957600080fd5b81356001600160e01b0319811681146114c057600080fd5b80356001600160a01b038116811461104057600080fd5b60006020828403121561151a57600080fd5b6114c0826114f1565b60006020828403121561153557600080fd5b5035919050565b6000806040838503121561154f57600080fd5b8235915061155f602084016114f1565b90509250929050565b60008060006040848603121561157d57600080fd5b833567ffffffffffffffff8082111561159557600080fd5b818601915086601f8301126115a957600080fd5b8135818111156115b857600080fd5b8760208260051b85010111156115cd57600080fd5b6020928301955093506115e391860190506114f1565b90509250925092565b8035801515811461104057600080fd5b6000806040838503121561160f57600080fd5b611618836114f1565b915061155f602084016115ec565b60006020828403121561163857600080fd5b6114c0826115ec565b60008060006060848603121561165657600080fd5b61165f846114f1565b9250602084013591506115e3604085016115ec565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016116b2576116b261168a565b5060010190565b60005b838110156116d45781810151838201526020016116bc565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516117158160178501602088016116b9565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117528160288401602088016116b9565b01602801949350505050565b602081526000825180602084015261177d8160408501602087016116b9565b601f01601f19169190910160400192915050565b80820281158282048414176106da576106da61168a565b808201808211156106da576106da61168a565b634e487b7160e01b600052604160045260246000fd5b6000816117e0576117e061168a565b50600019019056fe41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646da164736f6c6343000812000a", - "devdoc": { - "events": { - "RoleAdminChanged(bytes32,bytes32,bytes32)": { - "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" - }, - "RoleGranted(bytes32,address,address)": { - "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." - }, - "RoleRevoked(bytes32,address,address)": { - "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" - } - }, - "kind": "dev", - "methods": { - "addAdmin(address)": { - "details": "add admin", - "params": { - "account": "address to add" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "isAdmin(address)": { - "details": "whether admin", - "params": { - "account": "address to check" - } - }, - "removeAdmin(address)": { - "details": "remove admin", - "params": { - "account": "address to remove" - } + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" }, - "transferAdmin(address)": { - "details": "transfer admin", - "params": { - "newAdmin": "new admin address" - } + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } - } - }, - "title": "L2UniversalStosProxy", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" } - }, - "version": 1 + ], + "name": "RoleGranted", + "type": "event" }, - "storageLayout": { - "storage": [ + { + "anonymous": false, + "inputs": [ { - "astId": 5155, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "pauseProxy", - "offset": 0, - "slot": "0", - "type": "t_bool" + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, { - "astId": 5159, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" }, { - "astId": 5163, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 5167, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, { - "astId": 24, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "_roles", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)" + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" }, - "t_mapping(t_bytes32,t_struct(RoleData)19_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct AccessControl.RoleData)", - "numberOfBytes": "32", - "value": "t_struct(RoleData)19_storage" + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_struct(RoleData)19_storage": { - "encoding": "inplace", - "label": "struct AccessControl.RoleData", - "members": [ - { - "astId": 16, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "members", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 18, - "contract": "contracts/L2/stos/L2UniversalStosProxy.sol:L2UniversalStosProxy", - "label": "adminRole", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" } - } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/LockIdNftForRegister.json b/contracts/data/tonstarter/abi/LockIdNftForRegister.json index 018c076..4945fd8 100644 --- a/contracts/data/tonstarter/abi/LockIdNftForRegister.json +++ b/contracts/data/tonstarter/abi/LockIdNftForRegister.json @@ -1,1960 +1,1464 @@ -{ - "address": "0x48f60aAf60D5E162b2DebFD4F70c88fE01b7c331", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_ERC721_RECEIVED", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721_ENUMERABLE", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721_METADATA", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_allTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_allTokensIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "_operatorApprovals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_ownedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "_ownedTokensCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_ownedTokensIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenApprovals", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenAttributes", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenURIs", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allIndexOfTimes", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allTokens", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "balanceOfLock", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_lockId", - "type": "uint256" - } - ], - "name": "balanceOfLock", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_timestamp", - "type": "uint32" - } - ], - "name": "balanceOfLockAt", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_lockId", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "_timestamp", - "type": "uint32" - } - ], - "name": "balanceOfLockAt", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo", - "name": "point", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "balanceOfPoint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochUnit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "indexCheckOfTimeset", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "indexOfTimeset", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" - }, - { - "internalType": "address", - "name": "managerAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "epochUnit_", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTime_", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastIndexOfTimeset", - "outputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "lastPointOfTimeIndex", - "outputs": [ - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stime", - "type": "uint256" - } - ], - "name": "nextTimeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pointHistoryByLockId", - "outputs": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pointHistoryByWeek", - "outputs": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_lockId", - "type": "uint256" - } - ], - "name": "pointHistoryOfId", - "outputs": [ - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_timeIndex", - "type": "uint256" - } - ], - "name": "pointHistoryOfTimeIndex", - "outputs": [ - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pointOfLastTimeIndex", - "outputs": [ - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "lockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "internalType": "struct LibLockId.SyncInfo", - "name": "packet", - "type": "tuple" - } - ], - "internalType": "struct LibLockId.SyncPacket[]", - "name": "packets", - "type": "tuple[]" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "name": "tokensOfOwner", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupplyLocks", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_timestamp", - "type": "uint32" - } - ], - "name": "totalSupplyLocksAt", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x9f648eb7b2ebd0186fa24c5a2cf7aea874c95b7b3b1adb20c3140eb71b167df8", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x48f60aAf60D5E162b2DebFD4F70c88fE01b7c331", - "transactionIndex": 0, - "gasUsed": "2604067", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2c7cfa284005fe20b05bbd93eef26c42a080612747474036b94953b78ea640b6", - "transactionHash": "0x9f648eb7b2ebd0186fa24c5a2cf7aea874c95b7b3b1adb20c3140eb71b167df8", - "logs": [], - "blockNumber": 23651, - "cumulativeGasUsed": "2604067", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "0b0fef9a8d6b9c8091d16e0cc52f9a67", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_ERC721_RECEIVED\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721_ENUMERABLE\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721_METADATA\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_allTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_allTokensIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_operatorApprovals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_ownedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_ownedTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_ownedTokensIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenApprovals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenAttributes\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenURIs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allIndexOfTimes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOfLock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_lockId\",\"type\":\"uint256\"}],\"name\":\"balanceOfLock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_timestamp\",\"type\":\"uint32\"}],\"name\":\"balanceOfLockAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_lockId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_timestamp\",\"type\":\"uint32\"}],\"name\":\"balanceOfLockAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo\",\"name\":\"point\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"balanceOfPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochUnit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"indexCheckOfTimeset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"indexOfTimeset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"managerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochUnit_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTime_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastIndexOfTimeset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"lastPointOfTimeIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stime\",\"type\":\"uint256\"}],\"name\":\"nextTimeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pointHistoryByLockId\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pointHistoryByWeek\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_lockId\",\"type\":\"uint256\"}],\"name\":\"pointHistoryOfId\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timeIndex\",\"type\":\"uint256\"}],\"name\":\"pointHistoryOfTimeIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pointOfLastTimeIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"lockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"internalType\":\"struct LibLockId.SyncInfo\",\"name\":\"packet\",\"type\":\"tuple\"}],\"internalType\":\"struct LibLockId.SyncPacket[]\",\"name\":\"packets\",\"type\":\"tuple[]\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"tokensOfOwner\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupplyLocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_timestamp\",\"type\":\"uint32\"}],\"name\":\"totalSupplyLocksAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenByIndex(uint256)\":{\"details\":\"Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"totalSupply()\":{\"details\":\"Returns the total amount of tokens stored by the contract.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOfLock(address)\":{\"notice\":\"\\ud2b9\\uc815 \\uacc4\\uc815\\uc774 \\uc18c\\uc720\\ud55c stos\\ub97c \\uac00\\uc838\\uc634.\"},\"balanceOfLock(uint256)\":{\"notice\":\"\\ud2b9\\uc815 \\ub77d\\uc544\\uc774\\ub514\\uc758 \\ud604\\uc7ac \\uc2dc\\uac04\\uc758 stos\"},\"balanceOfLockAt(uint256,uint32)\":{\"notice\":\"\\ud2b9\\uc815 \\ub77d\\uc544\\uc774\\ub514\\uc758 \\ud604\\uc7ac \\uc2dc\\uac04\\uc758 stos\"},\"lastPointOfTimeIndex(uint256)\":{\"notice\":\"\\ud574\\ub2f9 \\ud0c0\\uc784\\uc758 \\uac00\\uc7a5 \\ucd5c\\uc2e0 \\ud3ec\\uc778\\ud2b8\"},\"pointHistoryOfTimeIndex(uint256)\":{\"notice\":\"\\ud2b9\\uc815 \\ud0c0\\uc784\\uc778\\ub371\\uc2a4\\uc758 \\uc804\\uccb4 \\ud3ec\\uc778\\ud2b8 \\ub9ac\\uc2a4\\ud2b8\"},\"pointOfLastTimeIndex()\":{\"notice\":\"\\uac00\\uc7a5 \\ucd5c\\uadfc\\uc758 \\ud3ec\\uc778\\ud2b8\"},\"totalSupplyLocks()\":{\"notice\":\"\\ud604\\uc7ac \\uc2dc\\uac04\\uc758 \\ucd1d stos\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/stos/LockIdNftForRegister.sol\":\"LockIdNftForRegister\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes calldata data\\n ) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(\\n address operator,\\n address from,\\n uint256 tokenId,\\n bytes calldata data\\n ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Enumerable is IERC721 {\\n /**\\n * @dev Returns the total amount of tokens stored by the contract.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\\n */\\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\\n * Use along with {totalSupply} to enumerate all tokens.\\n */\\n function tokenByIndex(uint256 index) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/interfaces/IIERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\npragma solidity ^0.8.9;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IIERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x909bdc2f1c48c72997c2d1ad227701a6d46157345692f3486673e591f698c476\",\"license\":\"MIT\"},\"contracts/libraries/LibLockId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibLockId\\n */\\nlibrary LibLockId {\\n\\n // LockId\\uc758 \\ud3ec\\uc778\\ud2b8 \\uc815\\ubcf4\\n struct Point {\\n int256 slope;\\n int256 bias;\\n uint256 timestamp; // \\ub4f1\\ub85d(\\uc2dc\\uc791)\\uc2dc\\uc810\\n }\\n\\n // LockId\\uc758 \\uc794\\uace0\\n struct LockedInfo {\\n uint256 start;\\n uint256 end;\\n uint256 amount;\\n uint256 withdrawlTime;\\n }\\n\\n // SyncInfo\\n struct SyncInfo {\\n int256 slope;\\n int256 bias;\\n uint32 timestamp; // point \\uc815\\ubcf4\\uc5d0 \\uc788\\ub294 \\uc778\\ub371\\uc2a4\\uc5d0 \\ud574\\ub2f9\\ud558\\ub294 timestamp\\n uint32 syncTime; // \\ub3d9\\uae30\\ud654 \\uc2dc\\uc810\\n }\\n\\n struct SyncPacket {\\n uint256 lockId;\\n SyncInfo packet;\\n }\\n\\n struct UnlimitedAmount {\\n uint32 timestamp;\\n uint256 amount;\\n }\\n\\n}\",\"keccak256\":\"0xf1a7a0153b2bd0a20c1dd536adfa44e1c7c3dc7336a37eef2e3166c44285792e\",\"license\":\"MIT\"},\"contracts/proxy/ProxyStorage2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage2 {\\n\\n address public _owner;\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n\\n}\",\"keccak256\":\"0x143792b4a69ee77d8ac3bf521938acc34f9e6800751d4db9bae90333b4749a4a\",\"license\":\"Unlicense\"},\"contracts/stos/ERC165P.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"../interfaces/IIERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\ncontract ERC165P is IIERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) internal _supportedInterfaces;\\n\\n constructor () {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\",\"keccak256\":\"0x005572f46a5db276ca3af9344099070a4d8070456e313e20048ce6eca9619550\",\"license\":\"MIT\"},\"contracts/stos/LockIdNftForRegister.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/IERC721.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\nimport \\\"../proxy/ProxyStorage2.sol\\\";\\nimport \\\"./LockIdRegisterStorage1.sol\\\";\\nimport \\\"./LockIdRegisterStorage2.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract LockIdNftForRegister is\\n ProxyStorage2,\\n LockIdRegisterStorage1,\\n LockIdRegisterStorage2,\\n IERC721, IERC721Metadata, IERC721Enumerable\\n{\\n // using SafeMath for uint256;\\n using Address for address;\\n using Strings for uint256;\\n\\n modifier nonZero(uint256 _val) {\\n require(_val != 0, \\\"zero value\\\");\\n _;\\n }\\n\\n modifier onlyOwner() {\\n require(_owner == msg.sender, \\\"not owner\\\");\\n _;\\n }\\n\\n constructor (){}\\n\\n /*** External onlyManager ***/\\n\\n function initialize(\\n string memory name_,\\n string memory symbol_,\\n address managerAddress,\\n uint256 epochUnit_,\\n uint256 maxTime_\\n ) external onlyOwner {\\n _manager = managerAddress;\\n _name = name_;\\n _symbol = symbol_;\\n epochUnit = epochUnit_;\\n maxTime = maxTime_;\\n }\\n\\n /*** External ***/\\n function register(\\n address account,\\n LibLockId.SyncPacket[] memory packets\\n )\\n public onlyManager\\n {\\n require(packets.length !=0, 'no data');\\n for(uint256 i = 0; i < packets.length; i++){\\n if(!_exists(packets[i].lockId)) {\\n _safeMint(account, packets[i].lockId);\\n }\\n _deposit(account, packets[i].lockId, packets[i].packet);\\n }\\n }\\n\\n /*** Public ***/\\n function approve(address to, uint256 tokenId) public virtual override {\\n\\n }\\n\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n\\n }\\n\\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\\n\\n }\\n\\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\\n\\n }\\n\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\\n\\n }\\n\\n /*** View ***/\\n\\n // /**\\n // * @dev Overrides supportsInterface\\n // */\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165P) returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n function manager() public view virtual returns (address) {\\n return _manager;\\n }\\n\\n function isManager(address addr) public view virtual returns (bool) {\\n\\n if(_manager == addr) return true;\\n else return false;\\n }\\n\\n function balanceOf(address owner_) public view override returns (uint256) {\\n require(owner_ != address(0), \\\"LockIdNFT: balance query for the zero address\\\");\\n\\n return _ownedTokensCount[owner_];\\n }\\n\\n function ownerOf(uint256 tokenId) public view override returns (address) {\\n address owner_ = _tokenOwner[tokenId];\\n require(owner_ != address(0), \\\"LockIdNFT: owner query for nonexistent token\\\");\\n\\n return owner_;\\n }\\n\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n return '';\\n }\\n\\n function tokenOfOwnerByIndex(address owner_, uint256 index) public view override returns (uint256) {\\n require(index < balanceOf(owner_), \\\"LockIdNFT: owner index out of bounds\\\");\\n return _ownedTokens[owner_][index];\\n }\\n\\n function totalSupply() public view override returns (uint256) {\\n return _allTokens.length;\\n }\\n\\n function tokenByIndex(uint256 index) public view override returns (uint256) {\\n require(index < totalSupply(), \\\"LockIdNFT: global index out of bounds\\\");\\n return _allTokens[index];\\n }\\n\\n function allTokens() public view returns (uint256[] memory) {\\n return _allTokens;\\n }\\n\\n function tokensOfOwner(address owner_) public view returns (uint256[] memory) {\\n return _ownedTokens[owner_];\\n }\\n\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n }\\n\\n function isApprovedForAll(address owner_, address operator) public view virtual override returns (bool) {\\n }\\n\\n /*** internal ***/\\n\\n function _exists(uint256 tokenId) internal view returns (bool) {\\n address owner_ = _tokenOwner[tokenId];\\n return owner_ != address(0);\\n }\\n\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\\n require(tokenId != 0, \\\"not allowed tokenId\\\");\\n _mint(to, tokenId);\\n\\n _addTokenToOwnerEnumeration(to, tokenId);\\n\\n _addTokenToAllTokensEnumeration(tokenId);\\n\\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \\\"LockIdNFT: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"LockIdNFT: mint to the zero address\\\");\\n require(!_exists(tokenId), \\\"LockIdNFT: token already minted\\\");\\n\\n // _beforeTokenTransfer(address(0), to, tokenId, 1);\\n\\n _tokenOwner[tokenId] = to;\\n unchecked {\\n _ownedTokensCount[to] += 1;\\n }\\n\\n emit Transfer(address(0), to, tokenId);\\n // _afterTokenTransfer(address(0), to, tokenId, 1);\\n }\\n\\n\\n /**\\n * @dev Private function to add a token to this extension's ownership-tracking data structures.\\n * @param to address representing the new owner of the given token ID\\n * @param tokenId uint256 ID of the token to be added to the tokens list of the given address\\n */\\n function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {\\n _ownedTokensIndex[tokenId] = _ownedTokens[to].length;\\n _ownedTokens[to].push(tokenId);\\n }\\n\\n\\n /**\\n * @dev Private function to add a token to this extension's token tracking data structures.\\n * @param tokenId uint256 ID of the token to be added to the tokens list\\n */\\n function _addTokenToAllTokensEnumeration(uint256 tokenId) private {\\n _allTokensIndex[tokenId] = _allTokens.length;\\n _allTokens.push(tokenId);\\n }\\n\\n\\n function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {\\n // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and\\n // then delete the last slot (swap and pop).\\n\\n uint256 lastTokenIndex = _ownedTokens[from].length-1;\\n uint256 tokenIndex = _ownedTokensIndex[tokenId];\\n\\n // When the token to delete is the last token, the swap operation is unnecessary\\n if (tokenIndex != lastTokenIndex) {\\n uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];\\n\\n _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\\n _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\\n }\\n\\n // This also deletes the contents at the last position of the array\\n //_ownedTokens[from].length--;\\n _ownedTokens[from].pop();\\n\\n // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by\\n // lastTokenId, or just over the end of the array if the token was the last one).\\n }\\n\\n\\n function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {\\n // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and\\n // then delete the last slot (swap and pop).\\n\\n uint256 lastTokenIndex = _allTokens.length-1;\\n uint256 tokenIndex = _allTokensIndex[tokenId];\\n\\n // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so\\n // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding\\n // an 'if' statement (like in _removeTokenFromOwnerEnumeration)\\n uint256 lastTokenId = _allTokens[lastTokenIndex];\\n\\n _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\\n _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\\n\\n // This also deletes the contents at the last position of the array\\n //_allTokens.length--;\\n _allTokens.pop();\\n _allTokensIndex[tokenId] = 0;\\n }\\n\\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\\n private returns (bool)\\n {\\n if (!to.isContract()) {\\n return true;\\n }\\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\\n IERC721Receiver(to).onERC721Received.selector,\\n msg.sender,\\n from,\\n tokenId,\\n _data\\n ), \\\"LockIdNFT: transfer to non ERC721Receiver implementer\\\");\\n bytes4 retval = abi.decode(returndata, (bytes4));\\n return (retval == _ERC721_RECEIVED);\\n }\\n\\n\\n /// @dev Deposit\\n function _deposit(\\n address _addr,\\n uint256 _lockId,\\n LibLockId.SyncInfo memory syncInfo\\n ) internal ifFree {\\n\\n /////////////////////////////////////////////////\\n // add point of LockId , \\uac00\\uc7a5 \\ucd5c\\uadfc\\uc758 \\ud3ec\\uc778\\ud2b8 (\\ubaa8\\ub450 \\ub204\\uc801 \\ubc18\\uc601)\\n uint256 lenOfId = pointHistoryByLockId[_lockId].length;\\n LibLockId.SyncInfo memory pointByIdOld ;\\n LibLockId.SyncInfo memory pointByIdNew = LibLockId.SyncInfo({\\n slope: syncInfo.slope,\\n bias: syncInfo.bias,\\n timestamp : syncInfo.timestamp,\\n syncTime : uint32(block.timestamp)\\n });\\n\\n if(lenOfId > 0) pointByIdOld = pointHistoryByLockId[_lockId][lenOfId-1];\\n else {\\n pointByIdOld = LibLockId.SyncInfo({\\n slope: 0,\\n bias: 0,\\n timestamp : 0,\\n syncTime : 0\\n });\\n }\\n\\n /////////////////////////////////////////////////\\n // \\ubcc0\\uacbd\\ub41c \\uac12\\n LibLockId.SyncInfo memory pointByIdChange = LibLockId.SyncInfo({\\n slope: pointByIdNew.slope - pointByIdOld.slope,\\n bias: pointByIdNew.bias - pointByIdOld.bias,\\n timestamp : syncInfo.timestamp,\\n syncTime : uint32(block.timestamp)\\n });\\n\\n /////////////////////////////////////////////////\\n // \\ub77d\\uc544\\uc774\\ub514 \\ubc18\\uc601\\n pointHistoryByLockId[_lockId].push(pointByIdNew);\\n\\n /////////////////////////////////////////////////\\n // point history based time\\n // deposit\\ud558\\uba74 \\ub2e4\\uac00\\uc624\\ub294 \\ubaa9\\uc694\\uc77c \\uc2dc\\uac04\\uc5d0 \\ub204\\uc801\\ub418\\uc5b4\\uc57c \\ud55c\\ub2e4..\\ucd1d \\uae08\\uc561\\uc774 \\ub2e4\\uc74c \\ud0c0\\uc784\\uc778\\ub371\\uc2a4\\uc5d0 \\ubc18\\uc601\\ub41c\\ub2e4\\uace0 \\ubcf4\\uc544\\uc57c \\ud55c\\ub2e4.\\n uint256 nextTimeIndexOfTotalPoint = nextTimeIndex(block.timestamp);\\n\\n uint256 len = pointHistoryByWeek[nextTimeIndexOfTotalPoint].length;\\n LibLockId.SyncInfo memory pointLast ; // \\uac00\\uc7a5 \\ucd5c\\uadfc\\uc758 point\\n\\n if (len == 0 ) {\\n // \\uac00\\uc7a5 \\ucd5c\\uadfc \\uc778\\ub371\\uc2a4\\n pointLast = pointOfLastTimeIndex();\\n } else {\\n pointLast = pointHistoryByWeek[nextTimeIndexOfTotalPoint][len-1];\\n }\\n\\n LibLockId.SyncInfo memory pointNew = LibLockId.SyncInfo({\\n slope: pointLast.slope + pointByIdChange.slope,\\n bias: pointLast.bias + pointByIdChange.bias,\\n timestamp : syncInfo.timestamp,\\n syncTime : uint32(block.timestamp)\\n });\\n\\n /////////////////////////////////////////////////\\n // \\ucd1d\\uacc4 \\uc9d1\\uacc4\\ub97c \\uc704\\ud55c \\ub77d\\uc544\\uc774\\ub514 \\ubc18\\uc601\\n pointHistoryByWeek[nextTimeIndexOfTotalPoint].push(pointNew);\\n\\n if(!indexCheckOfTimeset[nextTimeIndexOfTotalPoint]) {\\n indexCheckOfTimeset[nextTimeIndexOfTotalPoint] = true;\\n indexOfTimeset.push(nextTimeIndexOfTotalPoint);\\n }\\n }\\n\\n function nextTimeIndex(uint256 _stime) public view returns(uint256) {\\n return (_stime + epochUnit / epochUnit * epochUnit);\\n }\\n\\n function lastIndexOfTimeset() public view returns(uint256 index) {\\n index = (indexOfTimeset.length != 0 ? indexOfTimeset[indexOfTimeset.length - 1]:0);\\n }\\n\\n /// \\uac00\\uc7a5 \\ucd5c\\uadfc\\uc758 \\ud3ec\\uc778\\ud2b8\\n function pointOfLastTimeIndex() public view returns(LibLockId.SyncInfo memory) {\\n return lastPointOfTimeIndex(lastIndexOfTimeset());\\n }\\n\\n /// \\ud574\\ub2f9 \\ud0c0\\uc784\\uc758 \\uac00\\uc7a5 \\ucd5c\\uc2e0 \\ud3ec\\uc778\\ud2b8\\n function lastPointOfTimeIndex(uint256 _index) public view returns(LibLockId.SyncInfo memory) {\\n if (_index != 0) {\\n LibLockId.SyncInfo[] memory points = pointHistoryByWeek[_index];\\n\\n if (points.length != 0) {\\n return LibLockId.SyncInfo({\\n slope: points[points.length-1].slope,\\n bias: points[points.length-1].bias,\\n timestamp: points[points.length-1].timestamp,\\n syncTime : points[points.length-1].syncTime\\n });\\n } else {\\n return LibLockId.SyncInfo({\\n slope: 0,\\n bias: 0,\\n timestamp: 0,\\n syncTime : 0\\n });\\n }\\n } else return LibLockId.SyncInfo({\\n slope: 0,\\n bias: 0,\\n timestamp: 0,\\n syncTime : 0\\n });\\n }\\n\\n // \\ud2b9\\uc815 \\ub77d\\uc544\\uc544\\ub514\\uc758 \\uc804\\uccb4 \\ud3ec\\uc778\\ud2b8 \\ub9ac\\uc2a4\\ud2b8\\n function pointHistoryOfId(uint256 _lockId)\\n public\\n view\\n returns (LibLockId.SyncInfo[] memory)\\n {\\n return pointHistoryByLockId[_lockId];\\n }\\n\\n\\n /// \\ud2b9\\uc815 \\ud0c0\\uc784\\uc778\\ub371\\uc2a4\\uc758 \\uc804\\uccb4 \\ud3ec\\uc778\\ud2b8 \\ub9ac\\uc2a4\\ud2b8\\n function pointHistoryOfTimeIndex(uint256 _timeIndex)\\n public\\n view\\n returns (LibLockId.SyncInfo[] memory)\\n {\\n return pointHistoryByWeek[_timeIndex];\\n }\\n\\n /// \\ud2b9\\uc815 \\uacc4\\uc815\\uc774 \\uc18c\\uc720\\ud55c stos\\ub97c \\uac00\\uc838\\uc634.\\n function balanceOfLock(address _addr)\\n public\\n view\\n returns (uint256 balance)\\n {\\n uint256[] memory locks = tokensOfOwner(_addr);\\n if (locks.length == 0) return 0;\\n for (uint256 i = 0; i < locks.length; ++i) {\\n balance += balanceOfLock(locks[i]);\\n }\\n }\\n\\n function balanceOfLockAt(address _addr, uint32 _timestamp)\\n public\\n view\\n returns (uint256 balance)\\n {\\n uint256[] memory locks = tokensOfOwner(_addr);\\n if (locks.length == 0) return 0;\\n for (uint256 i = 0; i < locks.length; ++i) {\\n balance += balanceOfLockAt(locks[i], _timestamp);\\n }\\n }\\n\\n /// \\ud2b9\\uc815 \\ub77d\\uc544\\uc774\\ub514\\uc758 \\ud604\\uc7ac \\uc2dc\\uac04\\uc758 stos\\n function balanceOfLock(uint256 _lockId)\\n public\\n view\\n returns (uint256 amount)\\n {\\n uint256 len = pointHistoryByLockId[_lockId].length;\\n amount = (len == 0? 0: balanceOfPoint(pointHistoryByLockId[_lockId][len - 1], block.timestamp));\\n }\\n\\n /// \\ud2b9\\uc815 \\ub77d\\uc544\\uc774\\ub514\\uc758 \\ud604\\uc7ac \\uc2dc\\uac04\\uc758 stos\\n function balanceOfLockAt(uint256 _lockId, uint32 _timestamp)\\n public\\n view\\n returns (uint256 amount)\\n {\\n (bool success, LibLockId.SyncInfo memory point) = _findClosestPoint(\\n pointHistoryByLockId[_lockId], _timestamp);\\n amount = (!success? 0: balanceOfPoint(point, _timestamp));\\n }\\n\\n /// \\ud604\\uc7ac \\uc2dc\\uac04\\uc758 \\ucd1d stos\\n function totalSupplyLocks()\\n public\\n view\\n returns (uint256 amount)\\n {\\n amount = balanceOfPoint(pointOfLastTimeIndex(), block.timestamp);\\n }\\n\\n function totalSupplyLocksAt(uint32 _timestamp)\\n public\\n view\\n returns (uint256 amount)\\n {\\n // \\ud574\\ub2f9 \\ud0c0\\uc784\\uc5d0 \\ub9de\\ub294 \\ud0c0\\uc784\\uc778\\ub371\\uc2a4\\n (bool success, uint256 timeindex) = _findClosestTimeindex(_timestamp);\\n if(!success) return 0;\\n (bool success1, LibLockId.SyncInfo memory point) = _findClosestPoint(\\n pointHistoryByWeek[timeindex], _timestamp);\\n if(!success1) return 0;\\n amount = balanceOfPoint(point, _timestamp);\\n }\\n\\n function balanceOfPoint(LibLockId.SyncInfo memory point, uint256 timestamp)\\n public\\n pure\\n returns (uint256)\\n {\\n if(timestamp < point.syncTime) return 0;\\n int256 currentBias = point.slope * int256(timestamp - point.timestamp);\\n return\\n uint256(point.bias > currentBias ? (point.bias - currentBias) : int256(0)) / MULTIPLIER;\\n }\\n\\n function allIndexOfTimes() public view returns(uint256[] memory){\\n return indexOfTimeset;\\n }\\n\\n function _findClosestPoint(\\n LibLockId.SyncInfo[] storage _history,\\n uint32 _timestamp\\n ) internal view returns(bool success, LibLockId.SyncInfo memory point) {\\n if (_history.length == 0) {\\n return (false, point);\\n }\\n uint256 left = 0;\\n uint256 right = _history.length;\\n while (left + 1 < right) {\\n uint256 mid = (left + right) / 2;\\n if (_history[mid].syncTime <= _timestamp) {\\n left = mid;\\n } else {\\n right = mid;\\n }\\n }\\n\\n if (_history[left].syncTime <= _timestamp) {\\n return (true, _history[left]);\\n }\\n return (false, point);\\n }\\n\\n function _findClosestTimeindex(\\n uint256 _timestamp\\n ) internal view returns(bool success, uint256 timeindex) {\\n uint256 totalLen = indexOfTimeset.length;\\n uint256 timeIndexKey = (_timestamp + epochUnit) * epochUnit / epochUnit ;\\n\\n if (totalLen == 0) {\\n return (false, 0);\\n }\\n uint256 left = 0;\\n uint256 right = totalLen;\\n\\n while (left + 1 < right) {\\n uint256 mid = (left + right) / 2;\\n if (indexOfTimeset[mid] <= timeIndexKey) {\\n left = mid;\\n } else {\\n right = mid;\\n }\\n }\\n\\n if (indexOfTimeset[left] <= timeIndexKey) {\\n return (true, indexOfTimeset[left]);\\n }\\n return (false, 0);\\n }\\n}\\n\",\"keccak256\":\"0x5407888343c6ca673daa53dc204bcced0fbb27352121960b1fc768dd418627af\",\"license\":\"MIT\"},\"contracts/stos/LockIdRegisterStorage1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"./ERC165P.sol\\\";\\n\\ncontract LockIdRegisterStorage1 is ERC165P {\\n\\n // Equals to `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`\\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\\n bytes4 public constant _ERC721_RECEIVED = 0x150b7a02;\\n\\n address public _manager;\\n\\n // Token name\\n string public _name;\\n\\n // Token symbol\\n string public _symbol;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) public _tokenURIs;\\n\\n // attributes\\n mapping (uint256 => uint8) public _tokenAttributes;\\n\\n // Base URI\\n string public _baseURI;\\n\\n // Mapping from token ID to owner\\n mapping (uint256 => address) public _tokenOwner; // _owners\\n\\n // Mapping from token ID to approved address\\n mapping (uint256 => address) public _tokenApprovals;\\n\\n // Mapping from owner to number of owned token\\n mapping (address => uint256) public _ownedTokensCount; // _balances\\n\\n // Mapping from owner to operator approvals\\n mapping (address => mapping (address => bool)) public _operatorApprovals;\\n\\n // Mapping from owner to list of owned token IDs\\n mapping(address => uint256[]) public _ownedTokens;\\n\\n // Mapping from token ID to index of the owner tokens list\\n mapping(uint256 => uint256) public _ownedTokensIndex;\\n\\n // Array with all token ids, used for enumeration\\n uint256[] public _allTokens;\\n\\n // Mapping from token id to position in the allTokens array\\n mapping(uint256 => uint256) public _allTokensIndex;\\n\\n bool internal _lock;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n /*\\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\\n *\\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n modifier onlyManager() {\\n require(_manager == msg.sender, \\\"not manager\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(_lock != true, \\\"in use\\\");\\n _lock = true;\\n _;\\n _lock = false;\\n }\\n\\n}\\n\",\"keccak256\":\"0x0e118a0aefaed57730214886764cb517b3aa4ef67da8b64388f68ba31fe5e740\",\"license\":\"MIT\"},\"contracts/stos/LockIdRegisterStorage2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"../libraries//LibLockId.sol\\\";\\n\\ncontract LockIdRegisterStorage2 {\\n\\n uint256 public constant MULTIPLIER = 1e18;\\n\\n uint256 public epochUnit;\\n uint256 public maxTime;\\n\\n // id - point , \\ud2b9\\uc815\\uc544\\uc774\\ub514\\uc758 \\ud3ec\\uc778\\ud2b8\\ub97c \\ubaa8\\ub450 \\uc800\\uc7a5\\n mapping(uint256 => LibLockId.SyncInfo[]) public pointHistoryByLockId;\\n\\n // \\uc2dc\\uac04\\ub300\\uc21c\\uc73c\\ub85c \\ubaa8\\ub4e0 stos\\ub97c \\uad00\\ub9ac\\ud558\\ub294 \\uc815\\ubcf4\\n // \\uc2dc\\uac04\\ub300\\uc758 \\ud0c0\\uc784 (\\ub9e4\\uc8fc\\ubaa9\\uc694\\uc77c0\\uc2dc) -> \\ud574\\ub2f9 \\uc2dc\\uac04\\ub300\\uc758 \\ud3ec\\uc778\\ud2b8 \\ubc30\\uc5f4\\n mapping(uint256 => LibLockId.SyncInfo[]) public pointHistoryByWeek;\\n\\n // \\uc5c5\\ub370\\uc774\\ud2b8\\uac00 \\uc788\\ub294 \\uc8fc(\\ud0c0\\uc784)\\uc5d0 \\ub300\\ud55c \\uc778\\ub371\\uc2f1\\n uint256[] public indexOfTimeset;\\n mapping(uint256 => bool) public indexCheckOfTimeset;\\n}\\n\",\"keccak256\":\"0xc62d5279764b6ef7aa91b311df7146bb384e7e804dfc0ddbad9102196f19b920\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b50620000246301ffc9a760e01b6200002a565b620000ae565b6001600160e01b03198082169003620000895760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600460205260409020805460ff19166001179055565b612dbb80620000be6000396000f3fe608060405234801561001057600080fd5b50600436106104215760003560e01c80638462151c11610235578063b94419e011610135578063e178ee20116100c8578063f3ae241511610097578063f88d1fef1161007c578063f88d1fef14610a01578063f975d9f314610a09578063fd2dcecf14610a1c57600080fd5b8063f3ae2415146109ce578063f6631718146109e157600080fd5b8063e178ee2014610964578063e985e9c514610977578063edc3bc3f1461098d578063f0329f6b146109bb57600080fd5b8063cea823cd11610104578063cea823cd14610923578063d28d885214610946578063de6961801461094e578063dece68541461095657600080fd5b8063b94419e0146108bc578063ba209fcf146108cf578063c87b56dd146108ef578063cdc4717c1461091057600080fd5b8063a7cc0136116101c8578063b01ac59111610197578063b2bdfa7b1161017c578063b2bdfa7b1461086c578063b88d4fde1461087f578063b911135f1461089357600080fd5b8063b01ac59114610856578063b09f12661461086457600080fd5b8063a7cc0136146107f2578063a898e9fa1461081b578063aa5965ae14610823578063aa88652b1461083657600080fd5b8063a22cb46511610204578063a22cb46514610791578063a2e9b4391461079f578063a36c36e5146107bf578063a7263665146107d257600080fd5b80638462151c1461074157806388290adc1461075457806394a509dd1461077b57806395d89b411461078957600080fd5b80633e47a4b1116103405780636352211e116102d357806370a08231116102a2578063743976a011610287578063743976a0146106fd5780637482313214610705578063796db3121461071857600080fd5b806370a08231146106d7578063743500ad146106ea57600080fd5b80636352211e1461068257806363a8fd89146106955780636c0360eb146106ba5780636ff97f1d146106c257600080fd5b80634f6ccce71161030f5780634f6ccce71461061057806350d2a27614610623578063550d01a31461064c5780635896f5281461066f57600080fd5b80633e47a4b1146105d957806342842e0e14610559578063481c6a75146105ec5780634f3c5f06146105fd57600080fd5b806317a3a79c116103b857806328f02c681161038757806328f02c681461056c5780632f745c59146105ab57806334067c3c146105be578063366c0ae7146105c657600080fd5b806317a3a79c1461051357806318160ddd1461054857806322e67e711461055057806323b872dd1461055957600080fd5b8063081812fc116103f4578063081812fc146104ad578063095ea7b3146104d95780630bb78ec1146104ed57806310c113601461050057600080fd5b806301ffc9a7146104265780630346759314610468578063059f8b161461048957806306fdde0314610498575b600080fd5b610453610434366004612411565b6001600160e01b03191660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61047b610476366004612459565b610a25565b60405190815260200161045f565b61047b670de0b6b3a764000081565b6104a0610a9a565b60405161045f91906124dc565b6104c16104bb3660046124ef565b50600090565b6040516001600160a01b03909116815260200161045f565b6104eb6104e7366004612508565b5050565b005b6104a06104fb3660046124ef565b610b2c565b61047b61050e3660046124ef565b610bc6565b6105366105213660046124ef565b60096020526000908152604090205460ff1681565b60405160ff909116815260200161045f565b60115461047b565b61047b60155481565b6104eb610567366004612532565b505050565b61057f61057a36600461256e565b610be7565b60408051948552602085019390935263ffffffff9182169284019290925216606082015260800161045f565b61047b6105b9366004612508565b610c3b565b61047b610ce2565b61047b6105d4366004612590565b610d25565b61047b6105e73660046125b3565b610d6c565b6005546001600160a01b03166104c1565b61047b61060b366004612508565b610ddd565b61047b61061e3660046124ef565b610e0e565b6104c1610631366004612411565b6003602052600090815260409020546001600160a01b031681565b61045361065a3660046125b3565b60026020526000908152604090205460ff1681565b61047b61067d3660046126b2565b610e9a565b6104c16106903660046124ef565b610f19565b6000546104539074010000000000000000000000000000000000000000900460ff1681565b6104a0610fa4565b6106ca610fb3565b60405161045f91906126dd565b61047b6106e53660046125b3565b61100a565b6104eb6106f8366004612721565b6110a4565b6104a0611205565b6104eb61071336600461287e565b611212565b6104c16107263660046124ef565b600b602052600090815260409020546001600160a01b031681565b6106ca61074f3660046125b3565b6112a8565b610762630a85bd0160e11b81565b6040516001600160e01b0319909116815260200161045f565b610762635b5e139f60e01b81565b6104a0611314565b6104eb6104e7366004612904565b61047b6107ad3660046124ef565b60106020526000908152604090205481565b61047b6107cd366004612940565b611323565b61047b6107e03660046124ef565b60126020526000908152604090205481565b6104c16108003660046124ef565b600c602052600090815260409020546001600160a01b031681565b6106ca611393565b61047b6108313660046124ef565b6113e9565b6108496108443660046124ef565b6113f9565b60405161045f919061295b565b61076263780e9d6360e01b81565b6104a06115f8565b6000546104c1906001600160a01b031681565b6104eb61088d366004612996565b50505050565b6104c16108a13660046124ef565b6001602052600090815260409020546001600160a01b031681565b61047b6108ca3660046124ef565b611605565b6108e26108dd3660046124ef565b6116ae565b60405161045f9190612a12565b6104a06108fd3660046124ef565b5060408051602081019091526000815290565b61047b61091e3660046124ef565b611752565b6104536109313660046124ef565b60196020526000908152604090205460ff1681565b6104a0611776565b61047b611783565b6107626380ac58cd60e01b81565b61057f61097236600461256e565b611796565b610453610985366004612a81565b600092915050565b61045361099b366004612a81565b600e60209081526000928352604080842090915290825290205460ff1681565b6005546104c1906001600160a01b031681565b6104536109dc3660046125b3565b6117b2565b61047b6109ef3660046125b3565b600d6020526000908152604090205481565b6108496117da565b6108e2610a173660046124ef565b611809565b61047b60145481565b600080610a31846112a8565b90508051600003610a46576000915050610a94565b60005b8151811015610a9157610a75828281518110610a6757610a67612aab565b602002602001015185610d25565b610a7f9084612ad7565b9250610a8a81612aea565b9050610a49565b50505b92915050565b606060068054610aa990612b03565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590612b03565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b60086020526000908152604090208054610b4590612b03565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7190612b03565b8015610bbe5780601f10610b9357610100808354040283529160200191610bbe565b820191906000526020600020905b815481529060010190602001808311610ba157829003601f168201915b505050505081565b60188181548110610bd657600080fd5b600091825260209091200154905081565b60176020528160005260406000208181548110610c0357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915063ffffffff8082169164010000000090041684565b6000610c468361100a565b8210610ca55760405162461bcd60e51b8152602060048201526024808201527f4c6f636b49644e46543a206f776e657220696e646578206f7574206f6620626f604482015263756e647360e01b60648201526084015b60405180910390fd5b6001600160a01b0383166000908152600f60205260409020805483908110610ccf57610ccf612aab565b9060005260206000200154905092915050565b6018546000908103610cf45750600090565b60188054610d0490600190612b3d565b81548110610d1457610d14612aab565b90600052602060002001545b905090565b600082815260166020526040812081908190610d419085611898565b915091508115610d6057610d5b818563ffffffff16610e9a565b610d63565b60005b95945050505050565b600080610d78836112a8565b90508051600003610d8c5750600092915050565b60005b8151811015610dd657610dba828281518110610dad57610dad612aab565b6020026020010151611605565b610dc49084612ad7565b9250610dcf81612aea565b9050610d8f565b5050919050565b600f6020528160005260406000208181548110610df957600080fd5b90600052602060002001600091509150505481565b6000610e1960115490565b8210610e755760405162461bcd60e51b815260206004820152602560248201527f4c6f636b49644e46543a20676c6f62616c20696e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610c9c565b60118281548110610e8857610e88612aab565b90600052602060002001549050919050565b6000826060015163ffffffff16821015610eb657506000610a94565b6000836040015163ffffffff1683610ece9190612b3d565b8451610eda9190612b50565b9050670de0b6b3a764000081856020015113610ef7576000610f07565b818560200151610f079190612b80565b610f119190612ba7565b949350505050565b6000818152600b60205260408120546001600160a01b031680610a945760405162461bcd60e51b815260206004820152602c60248201527f4c6f636b49644e46543a206f776e657220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610c9c565b6060600a8054610aa990612b03565b60606011805480602002602001604051908101604052809291908181526020018280548015610b2257602002820191906000526020600020905b815481526020019060010190808311610fed575050505050905090565b60006001600160a01b0382166110885760405162461bcd60e51b815260206004820152602d60248201527f4c6f636b49644e46543a2062616c616e636520717565727920666f722074686560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152608401610c9c565b506001600160a01b03166000908152600d602052604090205490565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820152600b60248201527f6e6f74206d616e616765720000000000000000000000000000000000000000006044820152606401610c9c565b80516000036111395760405162461bcd60e51b81526020600482015260076024820152666e6f206461746160c81b6044820152606401610c9c565b60005b81518110156105675761118382828151811061115a5761115a612aab565b6020026020010151600001516000908152600b60205260409020546001600160a01b0316151590565b6111ae576111ae8383838151811061119d5761119d612aab565b602002602001015160000151611a12565b6111f3838383815181106111c4576111c4612aab565b6020026020010151600001518484815181106111e2576111e2612aab565b602002602001015160200151611a2c565b806111fd81612aea565b91505061113c565b600a8054610b4590612b03565b6000546001600160a01b031633146112585760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610c9c565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038516179055600661128c8682612c17565b5060076112998582612c17565b50601491909155601555505050565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561130857602002820191906000526020600020905b8154815260200190600101908083116112f4575b50505050509050919050565b606060078054610aa990612b03565b60008060006113378463ffffffff16611e6b565b915091508161134a575060009392505050565b600081815260176020526040812081906113649087611898565b91509150816113795750600095945050505050565b611389818763ffffffff16610e9a565b9695505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610b225760200282019190600052602060002090815481526020019060010190808311610fed575050505050905090565b60118181548110610bd657600080fd5b60408051608081018252600080825260208201819052918101829052606081019190915281156115ca57600082815260176020908152604080832080548251818502810185019093528083529192909190849084015b828210156114b35760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff8082169385019390935264010000000090049091166060830152908352909201910161144f565b505050509050805160001461159f57604051806080016040528082600184516114dc9190612b3d565b815181106114ec576114ec612aab565b6020026020010151600001518152602001826001845161150c9190612b3d565b8151811061151c5761151c612aab565b6020026020010151602001518152602001826001845161153c9190612b3d565b8151811061154c5761154c612aab565b60200260200101516040015163ffffffff16815260200182600184516115729190612b3d565b8151811061158257611582612aab565b60200260200101516060015163ffffffff16815250915050919050565b5050604080516080810182526000808252602082018190529181018290526060810191909152919050565b505060408051608081018252600080825260208201819052918101829052606081019190915290565b919050565b60078054610b4590612b03565b60008181526016602052604081205480156116a457600083815260166020526040902061169f90611637600184612b3d565b8154811061164757611647612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff808216938301939093526401000000009004909116606082015242610e9a565b6116a7565b60005b9392505050565b606060166000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156117475760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff808216938501939093526401000000009004909116606083015290835290920191016116e3565b505050509050919050565b6014546000906117628180612ba7565b61176c9190612cd7565b610a949083612ad7565b60068054610b4590612b03565b6000610d206117906117da565b42610e9a565b60166020528160005260406000208181548110610c0357600080fd5b6005546000906001600160a01b038084169116036117d257506001919050565b506000919050565b604080516080810182526000808252602082018190529181018290526060810191909152610d20610844610ce2565b60008181526017602090815260408083208054825181850281018501909352808352606094929391929091840182156117475760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff808216938501939093526401000000009004909116606083015290835290920191016116e3565b604080516080810182526000808252602082018190529181018290526060810182905283546000036118cd5760009150611a0b565b83546000905b806118df836001612ad7565b101561195157600060026118f38385612ad7565b6118fd9190612ba7565b90508563ffffffff1687828154811061191857611918612aab565b6000918252602090912060039091020160020154640100000000900463ffffffff16116119475780925061194b565b8091505b506118d3565b8463ffffffff1686838154811061196a5761196a612aab565b6000918252602090912060039091020160020154640100000000900463ffffffff1611611a045760018683815481106119a5576119a5612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff80821693830193909352640100000000900490911660608201529094509250611a0b915050565b6000935050505b9250929050565b6104e7828260405180602001604052806000815250611f74565b60135460ff161515600103611a6c5760405162461bcd60e51b8152602060048201526006602482015265696e2075736560d01b6044820152606401610c9c565b6013805460ff19166001179055600082815260166020908152604080832054815160808101835284815292830184905290820183905260608201929092526040805160808101825284518152602080860151908201528482015163ffffffff908116928201929092524290911660608201528215611b66576000858152601660205260409020611afd600185612b3d565b81548110611b0d57611b0d612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff80821693830193909352640100000000900490911660608201529150611b9a565b60405180608001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525091505b6000604051806080016040528084600001518460000151611bbb9190612b80565b815260200184602001518460200151611bd49190612b80565b815260408088015163ffffffff908116602080850191909152428083169484019490945260008b8152601682528381208054600181810183559183528383208a5160039092020190815592890151908301559287015160029091018054606089015184166401000000000267ffffffffffffffff199091169290931691909117919091179055919250611c6690611752565b60008181526017602090815260408083205481516080810183528481529283018490529082018390526060820183905292935090829003611cb057611ca96117da565b9050611d2e565b6000838152601760205260409020611cc9600184612b3d565b81548110611cd957611cd9612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff808216938301939093526401000000009004909116606082015290505b6000604051806080016040528086600001518460000151611d4f9190612cee565b815260200186602001518460200151611d689190612cee565b81526040808c015163ffffffff90811660208085019190915242821693830193909352600088815260178452828120805460018181018355918352858320875160039092020190815586860151918101919091558584015160029091018054606088015185166401000000000267ffffffffffffffff19909116929094169190911792909217909155878152601990925290205490915060ff16611e54576000848152601960205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018490555b50506013805460ff19169055505050505050505050565b6018546014546000918291829080611e838188612ad7565b611e8d9190612cd7565b611e979190612ba7565b905081600003611eae575060009485945092505050565b6000825b80611ebe836001612ad7565b1015611f145760006002611ed28385612ad7565b611edc9190612ba7565b90508360188281548110611ef257611ef2612aab565b906000526020600020015411611f0a57809250611f0e565b8091505b50611eb2565b8260188381548110611f2857611f28612aab565b906000526020600020015411611f6557600160188381548110611f4d57611f4d612aab565b90600052602060002001549550955050505050915091565b50600096879650945050505050565b81600003611fc45760405162461bcd60e51b815260206004820152601360248201527f6e6f7420616c6c6f77656420746f6b656e4964000000000000000000000000006044820152606401610c9c565b611fce83836120c4565b6001600160a01b0383166000908152600f6020908152604080832080548685526010845282852081905560018082018355918552838520018690556011805487865260129094529184208390558201815582527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680183905561205290848484612204565b6105675760405162461bcd60e51b815260206004820152603560248201527f4c6f636b49644e46543a207472616e7366657220746f206e6f6e20455243373260448201527f31526563656976657220696d706c656d656e74657200000000000000000000006064820152608401610c9c565b6001600160a01b0382166121265760405162461bcd60e51b815260206004820152602360248201527f4c6f636b49644e46543a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c9c565b6000818152600b60205260409020546001600160a01b03161561218b5760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b49644e46543a20746f6b656e20616c7265616479206d696e746564006044820152606401610c9c565b6000818152600b60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716908117909155808452600d90925280832080546001019055518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b61221d57506001610f11565b600061229e63150b7a0260e01b338887876040516024016122419493929190612d0e565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060358152602001612d7a603591396001600160a01b03881691906122d5565b90506000818060200190518101906122b69190612d40565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6060610f11848460008585600080866001600160a01b031685876040516122fc9190612d5d565b60006040518083038185875af1925050503d8060008114612339576040519150601f19603f3d011682016040523d82523d6000602084013e61233e565b606091505b509150915061234f8783838761235a565b979650505050505050565b606083156123c95782516000036123c2576001600160a01b0385163b6123c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9c565b5081610f11565b610f1183838151156123de5781518083602001fd5b8060405162461bcd60e51b8152600401610c9c91906124dc565b6001600160e01b03198116811461240e57600080fd5b50565b60006020828403121561242357600080fd5b81356116a7816123f8565b80356001600160a01b03811681146115f357600080fd5b803563ffffffff811681146115f357600080fd5b6000806040838503121561246c57600080fd5b6124758361242e565b915061248360208401612445565b90509250929050565b60005b838110156124a757818101518382015260200161248f565b50506000910152565b600081518084526124c881602086016020860161248c565b601f01601f19169290920160200192915050565b6020815260006116a760208301846124b0565b60006020828403121561250157600080fd5b5035919050565b6000806040838503121561251b57600080fd5b6125248361242e565b946020939093013593505050565b60008060006060848603121561254757600080fd5b6125508461242e565b925061255e6020850161242e565b9150604084013590509250925092565b6000806040838503121561258157600080fd5b50508035926020909101359150565b600080604083850312156125a357600080fd5b8235915061248360208401612445565b6000602082840312156125c557600080fd5b6116a78261242e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612607576126076125ce565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612636576126366125ce565b604052919050565b60006080828403121561265057600080fd5b6040516080810181811067ffffffffffffffff82111715612673576126736125ce565b8060405250809150823581526020830135602082015261269560408401612445565b60408201526126a660608401612445565b60608201525092915050565b60008060a083850312156126c557600080fd5b6126cf848461263e565b946080939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015612715578351835292840192918401916001016126f9565b50909695505050505050565b6000806040838503121561273457600080fd5b61273d8361242e565b915060208084013567ffffffffffffffff8082111561275b57600080fd5b818601915086601f83011261276f57600080fd5b813581811115612781576127816125ce565b61278f848260051b0161260d565b818152848101925060a09182028401850191898311156127ae57600080fd5b938501935b828510156127f65780858b0312156127cb5760008081fd5b6127d36125e4565b853581526127e38b88880161263e565b81880152845293840193928501926127b3565b5080955050505050509250929050565b600067ffffffffffffffff831115612820576128206125ce565b612833601f8401601f191660200161260d565b905082815283838301111561284757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261286f57600080fd5b6116a783833560208501612806565b600080600080600060a0868803121561289657600080fd5b853567ffffffffffffffff808211156128ae57600080fd5b6128ba89838a0161285e565b965060208801359150808211156128d057600080fd5b506128dd8882890161285e565b9450506128ec6040870161242e565b94979396509394606081013594506080013592915050565b6000806040838503121561291757600080fd5b6129208361242e565b91506020830135801515811461293557600080fd5b809150509250929050565b60006020828403121561295257600080fd5b6116a782612445565b60808101610a9482848051825260208101516020830152604081015163ffffffff808216604085015280606084015116606085015250505050565b600080600080608085870312156129ac57600080fd5b6129b58561242e565b93506129c36020860161242e565b925060408501359150606085013567ffffffffffffffff8111156129e657600080fd5b8501601f810187136129f757600080fd5b612a0687823560208401612806565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561271557612a6e8385518051825260208101516020830152604081015163ffffffff808216604085015280606084015116606085015250505050565b9284019260809290920191600101612a2e565b60008060408385031215612a9457600080fd5b612a9d8361242e565b91506124836020840161242e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9457610a94612ac1565b600060018201612afc57612afc612ac1565b5060010190565b600181811c90821680612b1757607f821691505b602082108103612b3757634e487b7160e01b600052602260045260246000fd5b50919050565b81810381811115610a9457610a94612ac1565b80820260008212600160ff1b84141615612b6c57612b6c612ac1565b8181058314821517610a9457610a94612ac1565b8181036000831280158383131683831282161715612ba057612ba0612ac1565b5092915050565b600082612bc457634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561056757600081815260208120601f850160051c81016020861015612bf05750805b601f850160051c820191505b81811015612c0f57828155600101612bfc565b505050505050565b815167ffffffffffffffff811115612c3157612c316125ce565b612c4581612c3f8454612b03565b84612bc9565b602080601f831160018114612c7a5760008415612c625750858301515b600019600386901b1c1916600185901b178555612c0f565b600085815260208120601f198616915b82811015612ca957888601518255948401946001909101908401612c8a565b5085821015612cc75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610a9457610a94612ac1565b8082018281126000831280158216821582161715610a9157610a91612ac1565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261138960808301846124b0565b600060208284031215612d5257600080fd5b81516116a7816123f8565b60008251612d6f81846020870161248c565b919091019291505056fe4c6f636b49644e46543a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572a164736f6c6343000812000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104215760003560e01c80638462151c11610235578063b94419e011610135578063e178ee20116100c8578063f3ae241511610097578063f88d1fef1161007c578063f88d1fef14610a01578063f975d9f314610a09578063fd2dcecf14610a1c57600080fd5b8063f3ae2415146109ce578063f6631718146109e157600080fd5b8063e178ee2014610964578063e985e9c514610977578063edc3bc3f1461098d578063f0329f6b146109bb57600080fd5b8063cea823cd11610104578063cea823cd14610923578063d28d885214610946578063de6961801461094e578063dece68541461095657600080fd5b8063b94419e0146108bc578063ba209fcf146108cf578063c87b56dd146108ef578063cdc4717c1461091057600080fd5b8063a7cc0136116101c8578063b01ac59111610197578063b2bdfa7b1161017c578063b2bdfa7b1461086c578063b88d4fde1461087f578063b911135f1461089357600080fd5b8063b01ac59114610856578063b09f12661461086457600080fd5b8063a7cc0136146107f2578063a898e9fa1461081b578063aa5965ae14610823578063aa88652b1461083657600080fd5b8063a22cb46511610204578063a22cb46514610791578063a2e9b4391461079f578063a36c36e5146107bf578063a7263665146107d257600080fd5b80638462151c1461074157806388290adc1461075457806394a509dd1461077b57806395d89b411461078957600080fd5b80633e47a4b1116103405780636352211e116102d357806370a08231116102a2578063743976a011610287578063743976a0146106fd5780637482313214610705578063796db3121461071857600080fd5b806370a08231146106d7578063743500ad146106ea57600080fd5b80636352211e1461068257806363a8fd89146106955780636c0360eb146106ba5780636ff97f1d146106c257600080fd5b80634f6ccce71161030f5780634f6ccce71461061057806350d2a27614610623578063550d01a31461064c5780635896f5281461066f57600080fd5b80633e47a4b1146105d957806342842e0e14610559578063481c6a75146105ec5780634f3c5f06146105fd57600080fd5b806317a3a79c116103b857806328f02c681161038757806328f02c681461056c5780632f745c59146105ab57806334067c3c146105be578063366c0ae7146105c657600080fd5b806317a3a79c1461051357806318160ddd1461054857806322e67e711461055057806323b872dd1461055957600080fd5b8063081812fc116103f4578063081812fc146104ad578063095ea7b3146104d95780630bb78ec1146104ed57806310c113601461050057600080fd5b806301ffc9a7146104265780630346759314610468578063059f8b161461048957806306fdde0314610498575b600080fd5b610453610434366004612411565b6001600160e01b03191660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61047b610476366004612459565b610a25565b60405190815260200161045f565b61047b670de0b6b3a764000081565b6104a0610a9a565b60405161045f91906124dc565b6104c16104bb3660046124ef565b50600090565b6040516001600160a01b03909116815260200161045f565b6104eb6104e7366004612508565b5050565b005b6104a06104fb3660046124ef565b610b2c565b61047b61050e3660046124ef565b610bc6565b6105366105213660046124ef565b60096020526000908152604090205460ff1681565b60405160ff909116815260200161045f565b60115461047b565b61047b60155481565b6104eb610567366004612532565b505050565b61057f61057a36600461256e565b610be7565b60408051948552602085019390935263ffffffff9182169284019290925216606082015260800161045f565b61047b6105b9366004612508565b610c3b565b61047b610ce2565b61047b6105d4366004612590565b610d25565b61047b6105e73660046125b3565b610d6c565b6005546001600160a01b03166104c1565b61047b61060b366004612508565b610ddd565b61047b61061e3660046124ef565b610e0e565b6104c1610631366004612411565b6003602052600090815260409020546001600160a01b031681565b61045361065a3660046125b3565b60026020526000908152604090205460ff1681565b61047b61067d3660046126b2565b610e9a565b6104c16106903660046124ef565b610f19565b6000546104539074010000000000000000000000000000000000000000900460ff1681565b6104a0610fa4565b6106ca610fb3565b60405161045f91906126dd565b61047b6106e53660046125b3565b61100a565b6104eb6106f8366004612721565b6110a4565b6104a0611205565b6104eb61071336600461287e565b611212565b6104c16107263660046124ef565b600b602052600090815260409020546001600160a01b031681565b6106ca61074f3660046125b3565b6112a8565b610762630a85bd0160e11b81565b6040516001600160e01b0319909116815260200161045f565b610762635b5e139f60e01b81565b6104a0611314565b6104eb6104e7366004612904565b61047b6107ad3660046124ef565b60106020526000908152604090205481565b61047b6107cd366004612940565b611323565b61047b6107e03660046124ef565b60126020526000908152604090205481565b6104c16108003660046124ef565b600c602052600090815260409020546001600160a01b031681565b6106ca611393565b61047b6108313660046124ef565b6113e9565b6108496108443660046124ef565b6113f9565b60405161045f919061295b565b61076263780e9d6360e01b81565b6104a06115f8565b6000546104c1906001600160a01b031681565b6104eb61088d366004612996565b50505050565b6104c16108a13660046124ef565b6001602052600090815260409020546001600160a01b031681565b61047b6108ca3660046124ef565b611605565b6108e26108dd3660046124ef565b6116ae565b60405161045f9190612a12565b6104a06108fd3660046124ef565b5060408051602081019091526000815290565b61047b61091e3660046124ef565b611752565b6104536109313660046124ef565b60196020526000908152604090205460ff1681565b6104a0611776565b61047b611783565b6107626380ac58cd60e01b81565b61057f61097236600461256e565b611796565b610453610985366004612a81565b600092915050565b61045361099b366004612a81565b600e60209081526000928352604080842090915290825290205460ff1681565b6005546104c1906001600160a01b031681565b6104536109dc3660046125b3565b6117b2565b61047b6109ef3660046125b3565b600d6020526000908152604090205481565b6108496117da565b6108e2610a173660046124ef565b611809565b61047b60145481565b600080610a31846112a8565b90508051600003610a46576000915050610a94565b60005b8151811015610a9157610a75828281518110610a6757610a67612aab565b602002602001015185610d25565b610a7f9084612ad7565b9250610a8a81612aea565b9050610a49565b50505b92915050565b606060068054610aa990612b03565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590612b03565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b60086020526000908152604090208054610b4590612b03565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7190612b03565b8015610bbe5780601f10610b9357610100808354040283529160200191610bbe565b820191906000526020600020905b815481529060010190602001808311610ba157829003601f168201915b505050505081565b60188181548110610bd657600080fd5b600091825260209091200154905081565b60176020528160005260406000208181548110610c0357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915063ffffffff8082169164010000000090041684565b6000610c468361100a565b8210610ca55760405162461bcd60e51b8152602060048201526024808201527f4c6f636b49644e46543a206f776e657220696e646578206f7574206f6620626f604482015263756e647360e01b60648201526084015b60405180910390fd5b6001600160a01b0383166000908152600f60205260409020805483908110610ccf57610ccf612aab565b9060005260206000200154905092915050565b6018546000908103610cf45750600090565b60188054610d0490600190612b3d565b81548110610d1457610d14612aab565b90600052602060002001545b905090565b600082815260166020526040812081908190610d419085611898565b915091508115610d6057610d5b818563ffffffff16610e9a565b610d63565b60005b95945050505050565b600080610d78836112a8565b90508051600003610d8c5750600092915050565b60005b8151811015610dd657610dba828281518110610dad57610dad612aab565b6020026020010151611605565b610dc49084612ad7565b9250610dcf81612aea565b9050610d8f565b5050919050565b600f6020528160005260406000208181548110610df957600080fd5b90600052602060002001600091509150505481565b6000610e1960115490565b8210610e755760405162461bcd60e51b815260206004820152602560248201527f4c6f636b49644e46543a20676c6f62616c20696e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610c9c565b60118281548110610e8857610e88612aab565b90600052602060002001549050919050565b6000826060015163ffffffff16821015610eb657506000610a94565b6000836040015163ffffffff1683610ece9190612b3d565b8451610eda9190612b50565b9050670de0b6b3a764000081856020015113610ef7576000610f07565b818560200151610f079190612b80565b610f119190612ba7565b949350505050565b6000818152600b60205260408120546001600160a01b031680610a945760405162461bcd60e51b815260206004820152602c60248201527f4c6f636b49644e46543a206f776e657220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610c9c565b6060600a8054610aa990612b03565b60606011805480602002602001604051908101604052809291908181526020018280548015610b2257602002820191906000526020600020905b815481526020019060010190808311610fed575050505050905090565b60006001600160a01b0382166110885760405162461bcd60e51b815260206004820152602d60248201527f4c6f636b49644e46543a2062616c616e636520717565727920666f722074686560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152608401610c9c565b506001600160a01b03166000908152600d602052604090205490565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820152600b60248201527f6e6f74206d616e616765720000000000000000000000000000000000000000006044820152606401610c9c565b80516000036111395760405162461bcd60e51b81526020600482015260076024820152666e6f206461746160c81b6044820152606401610c9c565b60005b81518110156105675761118382828151811061115a5761115a612aab565b6020026020010151600001516000908152600b60205260409020546001600160a01b0316151590565b6111ae576111ae8383838151811061119d5761119d612aab565b602002602001015160000151611a12565b6111f3838383815181106111c4576111c4612aab565b6020026020010151600001518484815181106111e2576111e2612aab565b602002602001015160200151611a2c565b806111fd81612aea565b91505061113c565b600a8054610b4590612b03565b6000546001600160a01b031633146112585760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610c9c565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038516179055600661128c8682612c17565b5060076112998582612c17565b50601491909155601555505050565b6001600160a01b0381166000908152600f602090815260409182902080548351818402810184019094528084526060939283018282801561130857602002820191906000526020600020905b8154815260200190600101908083116112f4575b50505050509050919050565b606060078054610aa990612b03565b60008060006113378463ffffffff16611e6b565b915091508161134a575060009392505050565b600081815260176020526040812081906113649087611898565b91509150816113795750600095945050505050565b611389818763ffffffff16610e9a565b9695505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610b225760200282019190600052602060002090815481526020019060010190808311610fed575050505050905090565b60118181548110610bd657600080fd5b60408051608081018252600080825260208201819052918101829052606081019190915281156115ca57600082815260176020908152604080832080548251818502810185019093528083529192909190849084015b828210156114b35760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff8082169385019390935264010000000090049091166060830152908352909201910161144f565b505050509050805160001461159f57604051806080016040528082600184516114dc9190612b3d565b815181106114ec576114ec612aab565b6020026020010151600001518152602001826001845161150c9190612b3d565b8151811061151c5761151c612aab565b6020026020010151602001518152602001826001845161153c9190612b3d565b8151811061154c5761154c612aab565b60200260200101516040015163ffffffff16815260200182600184516115729190612b3d565b8151811061158257611582612aab565b60200260200101516060015163ffffffff16815250915050919050565b5050604080516080810182526000808252602082018190529181018290526060810191909152919050565b505060408051608081018252600080825260208201819052918101829052606081019190915290565b919050565b60078054610b4590612b03565b60008181526016602052604081205480156116a457600083815260166020526040902061169f90611637600184612b3d565b8154811061164757611647612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff808216938301939093526401000000009004909116606082015242610e9a565b6116a7565b60005b9392505050565b606060166000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156117475760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff808216938501939093526401000000009004909116606083015290835290920191016116e3565b505050509050919050565b6014546000906117628180612ba7565b61176c9190612cd7565b610a949083612ad7565b60068054610b4590612b03565b6000610d206117906117da565b42610e9a565b60166020528160005260406000208181548110610c0357600080fd5b6005546000906001600160a01b038084169116036117d257506001919050565b506000919050565b604080516080810182526000808252602082018190529181018290526060810191909152610d20610844610ce2565b60008181526017602090815260408083208054825181850281018501909352808352606094929391929091840182156117475760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015463ffffffff808216938501939093526401000000009004909116606083015290835290920191016116e3565b604080516080810182526000808252602082018190529181018290526060810182905283546000036118cd5760009150611a0b565b83546000905b806118df836001612ad7565b101561195157600060026118f38385612ad7565b6118fd9190612ba7565b90508563ffffffff1687828154811061191857611918612aab565b6000918252602090912060039091020160020154640100000000900463ffffffff16116119475780925061194b565b8091505b506118d3565b8463ffffffff1686838154811061196a5761196a612aab565b6000918252602090912060039091020160020154640100000000900463ffffffff1611611a045760018683815481106119a5576119a5612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff80821693830193909352640100000000900490911660608201529094509250611a0b915050565b6000935050505b9250929050565b6104e7828260405180602001604052806000815250611f74565b60135460ff161515600103611a6c5760405162461bcd60e51b8152602060048201526006602482015265696e2075736560d01b6044820152606401610c9c565b6013805460ff19166001179055600082815260166020908152604080832054815160808101835284815292830184905290820183905260608201929092526040805160808101825284518152602080860151908201528482015163ffffffff908116928201929092524290911660608201528215611b66576000858152601660205260409020611afd600185612b3d565b81548110611b0d57611b0d612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff80821693830193909352640100000000900490911660608201529150611b9a565b60405180608001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525091505b6000604051806080016040528084600001518460000151611bbb9190612b80565b815260200184602001518460200151611bd49190612b80565b815260408088015163ffffffff908116602080850191909152428083169484019490945260008b8152601682528381208054600181810183559183528383208a5160039092020190815592890151908301559287015160029091018054606089015184166401000000000267ffffffffffffffff199091169290931691909117919091179055919250611c6690611752565b60008181526017602090815260408083205481516080810183528481529283018490529082018390526060820183905292935090829003611cb057611ca96117da565b9050611d2e565b6000838152601760205260409020611cc9600184612b3d565b81548110611cd957611cd9612aab565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015463ffffffff808216938301939093526401000000009004909116606082015290505b6000604051806080016040528086600001518460000151611d4f9190612cee565b815260200186602001518460200151611d689190612cee565b81526040808c015163ffffffff90811660208085019190915242821693830193909352600088815260178452828120805460018181018355918352858320875160039092020190815586860151918101919091558584015160029091018054606088015185166401000000000267ffffffffffffffff19909116929094169190911792909217909155878152601990925290205490915060ff16611e54576000848152601960205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018490555b50506013805460ff19169055505050505050505050565b6018546014546000918291829080611e838188612ad7565b611e8d9190612cd7565b611e979190612ba7565b905081600003611eae575060009485945092505050565b6000825b80611ebe836001612ad7565b1015611f145760006002611ed28385612ad7565b611edc9190612ba7565b90508360188281548110611ef257611ef2612aab565b906000526020600020015411611f0a57809250611f0e565b8091505b50611eb2565b8260188381548110611f2857611f28612aab565b906000526020600020015411611f6557600160188381548110611f4d57611f4d612aab565b90600052602060002001549550955050505050915091565b50600096879650945050505050565b81600003611fc45760405162461bcd60e51b815260206004820152601360248201527f6e6f7420616c6c6f77656420746f6b656e4964000000000000000000000000006044820152606401610c9c565b611fce83836120c4565b6001600160a01b0383166000908152600f6020908152604080832080548685526010845282852081905560018082018355918552838520018690556011805487865260129094529184208390558201815582527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680183905561205290848484612204565b6105675760405162461bcd60e51b815260206004820152603560248201527f4c6f636b49644e46543a207472616e7366657220746f206e6f6e20455243373260448201527f31526563656976657220696d706c656d656e74657200000000000000000000006064820152608401610c9c565b6001600160a01b0382166121265760405162461bcd60e51b815260206004820152602360248201527f4c6f636b49644e46543a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c9c565b6000818152600b60205260409020546001600160a01b03161561218b5760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b49644e46543a20746f6b656e20616c7265616479206d696e746564006044820152606401610c9c565b6000818152600b60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716908117909155808452600d90925280832080546001019055518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b61221d57506001610f11565b600061229e63150b7a0260e01b338887876040516024016122419493929190612d0e565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060358152602001612d7a603591396001600160a01b03881691906122d5565b90506000818060200190518101906122b69190612d40565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6060610f11848460008585600080866001600160a01b031685876040516122fc9190612d5d565b60006040518083038185875af1925050503d8060008114612339576040519150601f19603f3d011682016040523d82523d6000602084013e61233e565b606091505b509150915061234f8783838761235a565b979650505050505050565b606083156123c95782516000036123c2576001600160a01b0385163b6123c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9c565b5081610f11565b610f1183838151156123de5781518083602001fd5b8060405162461bcd60e51b8152600401610c9c91906124dc565b6001600160e01b03198116811461240e57600080fd5b50565b60006020828403121561242357600080fd5b81356116a7816123f8565b80356001600160a01b03811681146115f357600080fd5b803563ffffffff811681146115f357600080fd5b6000806040838503121561246c57600080fd5b6124758361242e565b915061248360208401612445565b90509250929050565b60005b838110156124a757818101518382015260200161248f565b50506000910152565b600081518084526124c881602086016020860161248c565b601f01601f19169290920160200192915050565b6020815260006116a760208301846124b0565b60006020828403121561250157600080fd5b5035919050565b6000806040838503121561251b57600080fd5b6125248361242e565b946020939093013593505050565b60008060006060848603121561254757600080fd5b6125508461242e565b925061255e6020850161242e565b9150604084013590509250925092565b6000806040838503121561258157600080fd5b50508035926020909101359150565b600080604083850312156125a357600080fd5b8235915061248360208401612445565b6000602082840312156125c557600080fd5b6116a78261242e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612607576126076125ce565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612636576126366125ce565b604052919050565b60006080828403121561265057600080fd5b6040516080810181811067ffffffffffffffff82111715612673576126736125ce565b8060405250809150823581526020830135602082015261269560408401612445565b60408201526126a660608401612445565b60608201525092915050565b60008060a083850312156126c557600080fd5b6126cf848461263e565b946080939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015612715578351835292840192918401916001016126f9565b50909695505050505050565b6000806040838503121561273457600080fd5b61273d8361242e565b915060208084013567ffffffffffffffff8082111561275b57600080fd5b818601915086601f83011261276f57600080fd5b813581811115612781576127816125ce565b61278f848260051b0161260d565b818152848101925060a09182028401850191898311156127ae57600080fd5b938501935b828510156127f65780858b0312156127cb5760008081fd5b6127d36125e4565b853581526127e38b88880161263e565b81880152845293840193928501926127b3565b5080955050505050509250929050565b600067ffffffffffffffff831115612820576128206125ce565b612833601f8401601f191660200161260d565b905082815283838301111561284757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261286f57600080fd5b6116a783833560208501612806565b600080600080600060a0868803121561289657600080fd5b853567ffffffffffffffff808211156128ae57600080fd5b6128ba89838a0161285e565b965060208801359150808211156128d057600080fd5b506128dd8882890161285e565b9450506128ec6040870161242e565b94979396509394606081013594506080013592915050565b6000806040838503121561291757600080fd5b6129208361242e565b91506020830135801515811461293557600080fd5b809150509250929050565b60006020828403121561295257600080fd5b6116a782612445565b60808101610a9482848051825260208101516020830152604081015163ffffffff808216604085015280606084015116606085015250505050565b600080600080608085870312156129ac57600080fd5b6129b58561242e565b93506129c36020860161242e565b925060408501359150606085013567ffffffffffffffff8111156129e657600080fd5b8501601f810187136129f757600080fd5b612a0687823560208401612806565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561271557612a6e8385518051825260208101516020830152604081015163ffffffff808216604085015280606084015116606085015250505050565b9284019260809290920191600101612a2e565b60008060408385031215612a9457600080fd5b612a9d8361242e565b91506124836020840161242e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9457610a94612ac1565b600060018201612afc57612afc612ac1565b5060010190565b600181811c90821680612b1757607f821691505b602082108103612b3757634e487b7160e01b600052602260045260246000fd5b50919050565b81810381811115610a9457610a94612ac1565b80820260008212600160ff1b84141615612b6c57612b6c612ac1565b8181058314821517610a9457610a94612ac1565b8181036000831280158383131683831282161715612ba057612ba0612ac1565b5092915050565b600082612bc457634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561056757600081815260208120601f850160051c81016020861015612bf05750805b601f850160051c820191505b81811015612c0f57828155600101612bfc565b505050505050565b815167ffffffffffffffff811115612c3157612c316125ce565b612c4581612c3f8454612b03565b84612bc9565b602080601f831160018114612c7a5760008415612c625750858301515b600019600386901b1c1916600185901b178555612c0f565b600085815260208120601f198616915b82811015612ca957888601518255948401946001909101908401612c8a565b5085821015612cc75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610a9457610a94612ac1565b8082018281126000831280158216821582161715610a9157610a91612ac1565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261138960808301846124b0565b600060208284031215612d5257600080fd5b81516116a7816123f8565b60008251612d6f81846020870161248c565b919091019291505056fe4c6f636b49644e46543a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572a164736f6c6343000812000a", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token." - }, - "ApprovalForAll(address,address,bool)": { - "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `tokenId` token is transferred from `from` to `to`." - } - }, - "kind": "dev", - "methods": { - "approve(address,uint256)": { - "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event." - }, - "getApproved(uint256)": { - "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist." - }, - "name()": { - "details": "Returns the token collection name." - }, - "ownerOf(uint256)": { - "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist." - }, - "safeTransferFrom(address,address,uint256)": { - "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "symbol()": { - "details": "Returns the token collection symbol." - }, - "tokenByIndex(uint256)": { - "details": "Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens." - }, - "tokenURI(uint256)": { - "details": "Returns the Uniform Resource Identifier (URI) for `tokenId` token." +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" }, - "totalSupply()": { - "details": "Returns the total amount of tokens stored by the contract." + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" }, - "transferFrom(address,address,uint256)": { - "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event." + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" } - }, - "version": 1 + ], + "name": "Approval", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "balanceOfLock(address)": { - "notice": "특정 계정이 소유한 stos를 가져옴." - }, - "balanceOfLock(uint256)": { - "notice": "특정 락아이디의 현재 시간의 stos" - }, - "balanceOfLockAt(uint256,uint32)": { - "notice": "특정 락아이디의 현재 시간의 stos" - }, - "lastPointOfTimeIndex(uint256)": { - "notice": "해당 타임의 가장 최신 포인트" - }, - "pointHistoryOfTimeIndex(uint256)": { - "notice": "특정 타임인덱스의 전체 포인트 리스트" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" }, - "pointOfLastTimeIndex()": { - "notice": "가장 최근의 포인트" + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" }, - "totalSupplyLocks()": { - "notice": "현재 시간의 총 stos" + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" } - }, - "version": 1 + ], + "name": "ApprovalForAll", + "type": "event" }, - "storageLayout": { - "storage": [ + { + "anonymous": false, + "inputs": [ { - "astId": 1707, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" }, { - "astId": 1709, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "pauseProxy", - "offset": 20, - "slot": "0", - "type": "t_bool" + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" }, { - "astId": 1713, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" - }, + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "MULTIPLIER", + "outputs": [ { - "astId": 1717, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_ERC721_RECEIVED", + "outputs": [ { - "astId": 1721, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721", + "outputs": [ { - "astId": 1736, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_supportedInterfaces", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes4,t_bool)" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721_ENUMERABLE", + "outputs": [ { - "astId": 3378, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_manager", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721_METADATA", + "outputs": [ { - "astId": 3380, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_name", - "offset": 0, - "slot": "6", - "type": "t_string_storage" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3382, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_symbol", - "offset": 0, - "slot": "7", - "type": "t_string_storage" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_allTokens", + "outputs": [ { - "astId": 3386, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_tokenURIs", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_uint256,t_string_storage)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3390, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_tokenAttributes", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_uint256,t_uint8)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_allTokensIndex", + "outputs": [ { - "astId": 3392, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_baseURI", - "offset": 0, - "slot": "10", - "type": "t_string_storage" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_baseURI", + "outputs": [ { - "astId": 3396, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_tokenOwner", - "offset": 0, - "slot": "11", - "type": "t_mapping(t_uint256,t_address)" - }, + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_manager", + "outputs": [ { - "astId": 3400, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_tokenApprovals", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_uint256,t_address)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_name", + "outputs": [ { - "astId": 3404, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_ownedTokensCount", - "offset": 0, - "slot": "13", - "type": "t_mapping(t_address,t_uint256)" - }, + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3410, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_operatorApprovals", - "offset": 0, - "slot": "14", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + "internalType": "address", + "name": "", + "type": "address" }, { - "astId": 3415, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_ownedTokens", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_operatorApprovals", + "outputs": [ { - "astId": 3419, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_ownedTokensIndex", - "offset": 0, - "slot": "16", - "type": "t_mapping(t_uint256,t_uint256)" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3422, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_allTokens", - "offset": 0, - "slot": "17", - "type": "t_array(t_uint256)dyn_storage" + "internalType": "address", + "name": "", + "type": "address" }, { - "astId": 3426, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_allTokensIndex", - "offset": 0, - "slot": "18", - "type": "t_mapping(t_uint256,t_uint256)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_ownedTokens", + "outputs": [ { - "astId": 3428, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "_lock", - "offset": 0, - "slot": "19", - "type": "t_bool" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3477, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "epochUnit", - "offset": 0, - "slot": "20", - "type": "t_uint256" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_ownedTokensCount", + "outputs": [ { - "astId": 3479, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "maxTime", - "offset": 0, - "slot": "21", - "type": "t_uint256" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 3485, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "pointHistoryByLockId", - "offset": 0, - "slot": "22", - "type": "t_mapping(t_uint256,t_array(t_struct(SyncInfo)1691_storage)dyn_storage)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_ownedTokensIndex", + "outputs": [ { - "astId": 3491, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "pointHistoryByWeek", - "offset": 0, - "slot": "23", - "type": "t_mapping(t_uint256,t_array(t_struct(SyncInfo)1691_storage)dyn_storage)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_owner", + "outputs": [ { - "astId": 3494, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "indexOfTimeset", - "offset": 0, - "slot": "24", - "type": "t_array(t_uint256)dyn_storage" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_symbol", + "outputs": [ { - "astId": 3498, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "indexCheckOfTimeset", - "offset": 0, - "slot": "25", - "type": "t_mapping(t_uint256,t_bool)" + "internalType": "string", + "name": "", + "type": "string" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(SyncInfo)1691_storage)dyn_storage": { - "base": "t_struct(SyncInfo)1691_storage", - "encoding": "dynamic_array", - "label": "struct LibLockId.SyncInfo[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenApprovals", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenAttributes", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenURIs", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "allIndexOfTimes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "allTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "balanceOfLock", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "balanceOfLock", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" + { + "internalType": "uint32", + "name": "_timestamp", + "type": "uint32" + } + ], + "name": "balanceOfLockAt", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" }, - "t_int256": { - "encoding": "inplace", - "label": "int256", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "_timestamp", + "type": "uint32" + } + ], + "name": "balanceOfLockAt", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo", + "name": "point", + "type": "tuple" }, - "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256[])", - "numberOfBytes": "32", - "value": "t_array(t_uint256)dyn_storage" + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "balanceOfPoint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "indexCheckOfTimeset", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "indexOfTimeset", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "string", + "name": "symbol_", + "type": "string" }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" + { + "internalType": "address", + "name": "managerAddress", + "type": "address" }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "uint256", + "name": "epochUnit_", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "maxTime_", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" }, - "t_mapping(t_bytes4,t_bool)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "isManager", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastIndexOfTimeset", + "outputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "lastPointOfTimeIndex", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stime", + "type": "uint256" + } + ], + "name": "nextTimeIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pointHistoryByLockId", + "outputs": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" }, - "t_mapping(t_uint256,t_array(t_struct(SyncInfo)1691_storage)dyn_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct LibLockId.SyncInfo[])", - "numberOfBytes": "32", - "value": "t_array(t_struct(SyncInfo)1691_storage)dyn_storage" + { + "internalType": "int256", + "name": "bias", + "type": "int256" }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" }, - "t_mapping(t_uint256,t_string_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => string)", - "numberOfBytes": "32", - "value": "t_string_storage" + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pointHistoryByWeek", + "outputs": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" }, - "t_mapping(t_uint256,t_uint8)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint8)", - "numberOfBytes": "32", - "value": "t_uint8" + { + "internalType": "int256", + "name": "bias", + "type": "int256" }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" }, - "t_struct(SyncInfo)1691_storage": { - "encoding": "inplace", - "label": "struct LibLockId.SyncInfo", - "members": [ + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "pointHistoryOfId", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_timeIndex", + "type": "uint256" + } + ], + "name": "pointHistoryOfTimeIndex", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pointOfLastTimeIndex", + "outputs": [ + { + "components": [ { - "astId": 1684, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "slope", - "offset": 0, - "slot": "0", - "type": "t_int256" + "internalType": "int256", + "name": "slope", + "type": "int256" }, { - "astId": 1686, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "bias", - "offset": 0, - "slot": "1", - "type": "t_int256" + "internalType": "int256", + "name": "bias", + "type": "int256" }, { - "astId": 1688, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "timestamp", - "offset": 0, - "slot": "2", - "type": "t_uint32" + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "lockId", + "type": "uint256" }, { - "astId": 1690, - "contract": "contracts/stos/LockIdNftForRegister.sol:LockIdNftForRegister", - "label": "syncTime", - "offset": 4, - "slot": "2", - "type": "t_uint32" + "components": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "internalType": "struct LibLockId.SyncInfo", + "name": "packet", + "type": "tuple" } ], - "numberOfBytes": "96" + "internalType": "struct LibLockId.SyncPacket[]", + "name": "packets", + "type": "tuple[]" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" + { + "internalType": "bool", + "name": "approved", + "type": "bool" } - } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "name": "tokensOfOwner", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupplyLocks", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_timestamp", + "type": "uint32" + } + ], + "name": "totalSupplyLocksAt", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tonstarter/abi/LockIdNftForRegisterProxy.json b/contracts/data/tonstarter/abi/LockIdNftForRegisterProxy.json index f1990d9..538c424 100644 --- a/contracts/data/tonstarter/abi/LockIdNftForRegisterProxy.json +++ b/contracts/data/tonstarter/abi/LockIdNftForRegisterProxy.json @@ -1,1385 +1,865 @@ -{ - "address": "0x4b3fB26396C6740341cB36E2D3325b1163421385", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "ManagershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_ERC721_RECEIVED", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721_ENUMERABLE", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_INTERFACE_ID_ERC721_METADATA", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_allTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_allTokensIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "_operatorApprovals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_ownedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "_ownedTokensCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_ownedTokensIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenApprovals", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenAttributes", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "_tokenURIs", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochUnit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "indexCheckOfTimeset", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "indexOfTimeset", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pointHistoryByLockId", - "outputs": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pointHistoryByWeek", - "outputs": [ - { - "internalType": "int256", - "name": "slope", - "type": "int256" - }, - { - "internalType": "int256", - "name": "bias", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "timestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "syncTime", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceManagership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "transferManagership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xe65efb97a2264bda18ab952fa73ccffae60b73fc34bafa8854eaca6a6f7f70e0", - "receipt": { - "to": null, - "from": "0xc1eba383D94c6021160042491A5dfaF1d82694E6", - "contractAddress": "0x4b3fB26396C6740341cB36E2D3325b1163421385", - "transactionIndex": 0, - "gasUsed": "1616626", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000080000000800000000000000000000000108000000400400000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x088c761ff2a971db68b091139b540b95022d669895202db6e29adba971777d22", - "transactionHash": "0xe65efb97a2264bda18ab952fa73ccffae60b73fc34bafa8854eaca6a6f7f70e0", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 23636, - "transactionHash": "0xe65efb97a2264bda18ab952fa73ccffae60b73fc34bafa8854eaca6a6f7f70e0", - "address": "0x4b3fB26396C6740341cB36E2D3325b1163421385", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c1eba383d94c6021160042491a5dfaf1d82694e6" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x088c761ff2a971db68b091139b540b95022d669895202db6e29adba971777d22" - } - ], - "blockNumber": 23636, - "cumulativeGasUsed": "1616626", - "status": 1, - "byzantium": true +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" }, - "args": [], - "numDeployments": 1, - "solcInputHash": "0947a7a1e820c0246f32ef48593665d8", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"ManagershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"alive\",\"type\":\"bool\"}],\"name\":\"SetAliveImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"SetSelectorImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_ERC721_RECEIVED\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721_ENUMERABLE\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_INTERFACE_ID_ERC721_METADATA\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_allTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_allTokensIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_operatorApprovals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_ownedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_ownedTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_ownedTokensIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenApprovals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenAttributes\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tokenURIs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aliveImplementation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochUnit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"getSelectorImplementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"implementation2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"indexCheckOfTimeset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"indexOfTimeset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseProxy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pointHistoryByLockId\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pointHistoryByWeek\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"slope\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"bias\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"syncTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceManagership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"name\":\"selectorImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setAliveImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alive\",\"type\":\"bool\"}],\"name\":\"setImplementation2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_pause\",\"type\":\"bool\"}],\"name\":\"setProxyPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"name\":\"setSelectorImplementations2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferManagership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getSelectorImplementation2(bytes4)\":{\"details\":\"view implementation address of selector of function\",\"params\":{\"_selector\":\"selector of function\"},\"returns\":{\"impl\":\"address of the implementation\"}},\"implementation()\":{\"details\":\"returns the implementation\"},\"implementation2(uint256)\":{\"details\":\"view implementation address of the proxy[index]\",\"params\":{\"_index\":\"index of proxy\"},\"returns\":{\"_0\":\"address of the implementation\"}},\"setAliveImplementation2(address,bool)\":{\"details\":\"set alive status of implementation\",\"params\":{\"_alive\":\"alive status\",\"newImplementation\":\"Address of the new implementation.\"}},\"setImplementation2(address,uint256,bool)\":{\"details\":\"set the implementation address and status of the proxy[index]\",\"params\":{\"_alive\":\"_alive\",\"_index\":\"index\",\"newImplementation\":\"Address of the new implementation.\"}},\"setProxyPause(bool)\":{\"params\":{\"_pause\":\"true:pause or false:resume\"}},\"setSelectorImplementations2(bytes4[],address)\":{\"details\":\"set selectors of Implementation\",\"params\":{\"_imp\":\"implementation address\",\"_selectors\":\"being added selectors\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"upgradeTo(address)\":{\"params\":{\"impl\":\"New implementation contract address\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProxyPause(bool)\":{\"notice\":\"Set pause state\"},\"upgradeTo(address)\":{\"notice\":\"Set implementation contract\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/stos/LockIdNftForRegisterProxy.sol\":\"LockIdNftForRegisterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":625},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/interfaces/IIERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\npragma solidity ^0.8.9;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IIERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x909bdc2f1c48c72997c2d1ad227701a6d46157345692f3486673e591f698c476\",\"license\":\"MIT\"},\"contracts/interfaces/IProxyAction.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyAction\\ninterface IProxyAction {\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index\\n /// @param _alive _alive\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external;\\n\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n external;\\n\\n\\n /// @dev set selectors of Implementation\\n /// @param _selectors being added selectors\\n /// @param _imp implementation address\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) external ;\\n\\n\\n\\n /// onlyOwner\\n\\n /// @notice Set pause state\\n /// @param _pause true:pause or false:resume\\n function setProxyPause(bool _pause) external ;\\n\\n\\n /// anybody\\n\\n /// @dev view implementation address of selector of function\\n /// @param _selector selector of function\\n /// @return impl address of the implementation\\n function getSelectorImplementation2(bytes4 _selector)\\n external\\n view\\n returns (address impl);\\n\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return address of the implementation\\n function implementation2(uint256 _index) external view returns (address) ;\\n}\\n\\n\",\"keccak256\":\"0x16ff956d9ccccadd56ce168390a7daa64883fda68f00dbf5110ae67bceaa6fcb\",\"license\":\"Unlicense\"},\"contracts/interfaces/IProxyEvent.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\n\\n/// @title IProxyEvent\\ninterface IProxyEvent {\\n\\n event Upgraded(address indexed implementation);\\n\\n event SetAliveImplementation(address indexed impl, bool alive);\\n event SetSelectorImplementation(bytes4 indexed selector, address indexed impl);\\n\\n\\n}\\n\",\"keccak256\":\"0x2a1e50808aa448c7a64fdea7ab2a7a2aa614e66ce974cc9e081bb70187716754\",\"license\":\"Unlicense\"},\"contracts/libraries/LibLockId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * @title LibLockId\\n */\\nlibrary LibLockId {\\n\\n // LockId\\uc758 \\ud3ec\\uc778\\ud2b8 \\uc815\\ubcf4\\n struct Point {\\n int256 slope;\\n int256 bias;\\n uint256 timestamp; // \\ub4f1\\ub85d(\\uc2dc\\uc791)\\uc2dc\\uc810\\n }\\n\\n // LockId\\uc758 \\uc794\\uace0\\n struct LockedInfo {\\n uint256 start;\\n uint256 end;\\n uint256 amount;\\n uint256 withdrawlTime;\\n }\\n\\n // SyncInfo\\n struct SyncInfo {\\n int256 slope;\\n int256 bias;\\n uint32 timestamp; // point \\uc815\\ubcf4\\uc5d0 \\uc788\\ub294 \\uc778\\ub371\\uc2a4\\uc5d0 \\ud574\\ub2f9\\ud558\\ub294 timestamp\\n uint32 syncTime; // \\ub3d9\\uae30\\ud654 \\uc2dc\\uc810\\n }\\n\\n struct SyncPacket {\\n uint256 lockId;\\n SyncInfo packet;\\n }\\n\\n struct UnlimitedAmount {\\n uint32 timestamp;\\n uint256 amount;\\n }\\n\\n}\",\"keccak256\":\"0xf1a7a0153b2bd0a20c1dd536adfa44e1c7c3dc7336a37eef2e3166c44285792e\",\"license\":\"MIT\"},\"contracts/proxy/Proxy2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\nimport \\\"./ProxyStorage2.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport \\\"../interfaces/IProxyEvent.sol\\\";\\nimport \\\"../interfaces/IProxyAction.sol\\\";\\n// import \\\"hardhat/console.sol\\\";\\n\\ncontract Proxy2 is ProxyStorage2, IProxyEvent, IProxyAction\\n{\\n\\n /* ========== DEPENDENCIES ========== */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n modifier onlyOwner() {\\n require(_owner == msg.sender, \\\"not owner\\\");\\n _;\\n }\\n\\n /* ========== CONSTRUCTOR ========== */\\n constructor () {\\n _owner = msg.sender;\\n emit OwnershipTransferred(address(0), _owner);\\n }\\n\\n /* ========== onlyOwner ========== */\\n\\n function renounceOwnership() external onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n require(newOwner != address(0), \\\"new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setProxyPause(bool _pause) external onlyOwner {\\n pauseProxy = _pause;\\n }\\n\\n /// @notice Set implementation contract\\n /// @param impl New implementation contract address\\n function upgradeTo(address impl) external onlyOwner {\\n require(impl != address(0), \\\"input is zero\\\");\\n require(\\n _implementation2(0) != impl,\\n \\\"same addr\\\"\\n );\\n _setImplementation2(impl, 0, true);\\n emit Upgraded(impl);\\n }\\n\\n /**\\n * @notice Set the implementation and call a function in a single transaction. Useful to ensure\\n * atomic execution of initialization-based upgrades.\\n *\\n * @param _implementation Address of the implementation contract.\\n * @param _data Calldata to delegatecall the new implementation with.\\n */\\n function upgradeToAndCall(address _implementation, bytes calldata _data)\\n public\\n payable\\n virtual\\n onlyOwner\\n returns (bytes memory)\\n {\\n // _setImplementation(_implementation);\\n _setImplementation2(_implementation, 0, true);\\n\\n (bool success, bytes memory returndata) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy: delegatecall to new implementation contract failed\\\");\\n return returndata;\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) external override onlyOwner {\\n _setImplementation2(newImplementation, _index, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setAliveImplementation2(address newImplementation, bool _alive)\\n public override onlyOwner\\n {\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function setSelectorImplementations2(\\n bytes4[] calldata _selectors,\\n address _imp\\n ) public override onlyOwner {\\n require(\\n _selectors.length > 0,\\n \\\"Proxy: _selectors's size is zero\\\"\\n );\\n require(aliveImplementation[_imp], \\\"Proxy: _imp is not alive\\\");\\n\\n for (uint256 i = 0; i < _selectors.length; i++) {\\n require(\\n selectorImplementation[_selectors[i]] != _imp,\\n \\\"LiquidityVaultProxy: same imp\\\"\\n );\\n selectorImplementation[_selectors[i]] = _imp;\\n emit SetSelectorImplementation(_selectors[i], _imp);\\n }\\n }\\n\\n /* ========== Anyone can ========== */\\n\\n\\n\\n /* ========== VIEW ========== */\\n\\n /// @dev returns the implementation\\n function implementation() external view returns (address) {\\n return _implementation2(0);\\n }\\n\\n /// @inheritdoc IProxyAction\\n function implementation2(uint256 _index) external override view returns (address) {\\n return _implementation2(_index);\\n }\\n\\n\\n /// @inheritdoc IProxyAction\\n function getSelectorImplementation2(bytes4 _selector)\\n public override\\n view\\n returns (address impl)\\n {\\n if (selectorImplementation[_selector] == address(0))\\n return proxyImplementation[0];\\n else if (aliveImplementation[selectorImplementation[_selector]]){\\n return selectorImplementation[_selector];\\n }\\n else return proxyImplementation[0];\\n }\\n\\n\\n /// @dev receive ether\\n receive() external payable {\\n revert(\\\"cannot receive Ether\\\");\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /* === ======= internal ========== */\\n\\n /// @dev view implementation address of the proxy[index]\\n /// @param _index index of proxy\\n /// @return impl address of the implementation\\n function _implementation2(uint256 _index)\\n internal\\n view\\n returns (address impl)\\n {\\n return proxyImplementation[_index];\\n }\\n\\n /// @dev fallback function , execute on undefined function call\\n function _fallback() internal {\\n address _impl = getSelectorImplementation2(msg.sig);\\n\\n require(\\n _impl != address(0) && !pauseProxy,\\n \\\"Proxy: impl OR proxy is false\\\"\\n );\\n\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /// @dev set the implementation address and status of the proxy[index]\\n /// @param newImplementation Address of the new implementation.\\n /// @param _index index of proxy\\n /// @param _alive alive status\\n function _setImplementation2(\\n address newImplementation,\\n uint256 _index,\\n bool _alive\\n ) internal {\\n require(\\n Address.isContract(newImplementation),\\n \\\"Proxy: not contract address\\\"\\n );\\n if (_alive) proxyImplementation[_index] = newImplementation;\\n _setAliveImplementation2(newImplementation, _alive);\\n }\\n\\n /// @dev set alive status of implementation\\n /// @param newImplementation Address of the new implementation.\\n /// @param _alive alive status\\n function _setAliveImplementation2(address newImplementation, bool _alive)\\n internal\\n {\\n aliveImplementation[newImplementation] = _alive;\\n emit SetAliveImplementation(newImplementation, _alive);\\n }\\n\\n}\",\"keccak256\":\"0x7d0a7c4411d5aba121d4afe73effde4df0c418aa2a3be22400058104ec1fab50\",\"license\":\"Unlicense\"},\"contracts/proxy/ProxyStorage2.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity ^0.8.4;\\n\\ncontract ProxyStorage2 {\\n\\n address public _owner;\\n bool public pauseProxy;\\n\\n mapping(uint256 => address) public proxyImplementation;\\n mapping(address => bool) public aliveImplementation;\\n mapping(bytes4 => address) public selectorImplementation;\\n\\n\\n}\",\"keccak256\":\"0x143792b4a69ee77d8ac3bf521938acc34f9e6800751d4db9bae90333b4749a4a\",\"license\":\"Unlicense\"},\"contracts/stos/ERC165P.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"../interfaces/IIERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\ncontract ERC165P is IIERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) internal _supportedInterfaces;\\n\\n constructor () {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\",\"keccak256\":\"0x005572f46a5db276ca3af9344099070a4d8070456e313e20048ce6eca9619550\",\"license\":\"MIT\"},\"contracts/stos/LockIdNftForRegisterProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"../proxy/Proxy2.sol\\\";\\nimport \\\"./LockIdRegisterStorage1.sol\\\";\\nimport \\\"./LockIdRegisterStorage2.sol\\\";\\n\\ncontract LockIdNftForRegisterProxy is Proxy2, LockIdRegisterStorage1, LockIdRegisterStorage2\\n{\\n event ManagershipTransferred(address indexed previousManager, address indexed newManager);\\n\\n constructor() {\\n _manager = msg.sender;\\n }\\n\\n function renounceManagership() external onlyManager {\\n emit ManagershipTransferred(_manager, address(0));\\n _manager = address(0);\\n }\\n\\n function transferManagership(address newManager) external onlyManager {\\n require(newManager != address(0), \\\"new manager is the zero address\\\");\\n emit ManagershipTransferred(_manager, newManager);\\n _manager = newManager;\\n }\\n\\n}\\n\",\"keccak256\":\"0x5c6c0500f2a14a475e32e8401287110a02b30bb1d41f1ac6ef4a07d9ef91e956\",\"license\":\"MIT\"},\"contracts/stos/LockIdRegisterStorage1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"./ERC165P.sol\\\";\\n\\ncontract LockIdRegisterStorage1 is ERC165P {\\n\\n // Equals to `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`\\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\\n bytes4 public constant _ERC721_RECEIVED = 0x150b7a02;\\n\\n address public _manager;\\n\\n // Token name\\n string public _name;\\n\\n // Token symbol\\n string public _symbol;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) public _tokenURIs;\\n\\n // attributes\\n mapping (uint256 => uint8) public _tokenAttributes;\\n\\n // Base URI\\n string public _baseURI;\\n\\n // Mapping from token ID to owner\\n mapping (uint256 => address) public _tokenOwner; // _owners\\n\\n // Mapping from token ID to approved address\\n mapping (uint256 => address) public _tokenApprovals;\\n\\n // Mapping from owner to number of owned token\\n mapping (address => uint256) public _ownedTokensCount; // _balances\\n\\n // Mapping from owner to operator approvals\\n mapping (address => mapping (address => bool)) public _operatorApprovals;\\n\\n // Mapping from owner to list of owned token IDs\\n mapping(address => uint256[]) public _ownedTokens;\\n\\n // Mapping from token ID to index of the owner tokens list\\n mapping(uint256 => uint256) public _ownedTokensIndex;\\n\\n // Array with all token ids, used for enumeration\\n uint256[] public _allTokens;\\n\\n // Mapping from token id to position in the allTokens array\\n mapping(uint256 => uint256) public _allTokensIndex;\\n\\n bool internal _lock;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n /*\\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\\n *\\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\\n */\\n bytes4 public constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n modifier onlyManager() {\\n require(_manager == msg.sender, \\\"not manager\\\");\\n _;\\n }\\n\\n modifier ifFree {\\n require(_lock != true, \\\"in use\\\");\\n _lock = true;\\n _;\\n _lock = false;\\n }\\n\\n}\\n\",\"keccak256\":\"0x0e118a0aefaed57730214886764cb517b3aa4ef67da8b64388f68ba31fe5e740\",\"license\":\"MIT\"},\"contracts/stos/LockIdRegisterStorage2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport \\\"../libraries//LibLockId.sol\\\";\\n\\ncontract LockIdRegisterStorage2 {\\n\\n uint256 public constant MULTIPLIER = 1e18;\\n\\n uint256 public epochUnit;\\n uint256 public maxTime;\\n\\n // id - point , \\ud2b9\\uc815\\uc544\\uc774\\ub514\\uc758 \\ud3ec\\uc778\\ud2b8\\ub97c \\ubaa8\\ub450 \\uc800\\uc7a5\\n mapping(uint256 => LibLockId.SyncInfo[]) public pointHistoryByLockId;\\n\\n // \\uc2dc\\uac04\\ub300\\uc21c\\uc73c\\ub85c \\ubaa8\\ub4e0 stos\\ub97c \\uad00\\ub9ac\\ud558\\ub294 \\uc815\\ubcf4\\n // \\uc2dc\\uac04\\ub300\\uc758 \\ud0c0\\uc784 (\\ub9e4\\uc8fc\\ubaa9\\uc694\\uc77c0\\uc2dc) -> \\ud574\\ub2f9 \\uc2dc\\uac04\\ub300\\uc758 \\ud3ec\\uc778\\ud2b8 \\ubc30\\uc5f4\\n mapping(uint256 => LibLockId.SyncInfo[]) public pointHistoryByWeek;\\n\\n // \\uc5c5\\ub370\\uc774\\ud2b8\\uac00 \\uc788\\ub294 \\uc8fc(\\ud0c0\\uc784)\\uc5d0 \\ub300\\ud55c \\uc778\\ub371\\uc2f1\\n uint256[] public indexOfTimeset;\\n mapping(uint256 => bool) public indexCheckOfTimeset;\\n}\\n\",\"keccak256\":\"0xc62d5279764b6ef7aa91b311df7146bb384e7e804dfc0ddbad9102196f19b920\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36100606301ffc9a760e01b610077565b600580546001600160a01b031916331790556100fa565b6001600160e01b031980821690036100d55760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600460205260409020805460ff19166001179055565b611b01806101096000396000f3fe6080604052600436106102eb5760003560e01c806388290adc11610184578063b911135f116100d6578063e178ee201161008a578063f2fde38b11610064578063f2fde38b146109b4578063f6631718146109d4578063fd2dcecf14610a015761033d565b8063e178ee2014610939578063edc3bc3f14610959578063f0329f6b146109945761033d565b8063cea823cd116100bb578063cea823cd146108d9578063d28d885214610909578063dece68541461091e5761033d565b8063b911135f14610883578063ccc39909146108b95761033d565b8063a726366511610138578063b01ac59111610112578063b01ac59114610833578063b09f12661461084e578063b2bdfa7b146108635761033d565b8063a7263665146107b0578063a7cc0136146107dd578063aa5965ae146108135761033d565b80638d4fdb40116101695780638d4fdb401461074857806394a509dd14610768578063a2e9b439146107835761033d565b806388290adc146106de5780638b8f4a65146107125761033d565b806350d2a2761161023d5780636c146d9b116101f1578063796db312116101cb578063796db312146106685780637cb00d251461069e5780637cd5f663146106be5761033d565b80636c146d9b14610629578063715018a61461063e578063743976a0146106535761033d565b80635c60da1b116102225780635c60da1b146105a25780635cc797d8146105e857806363a8fd89146106085761033d565b806350d2a27614610524578063550d01a3146105725761033d565b806322e67e711161029f5780634a5df50f116102795780634a5df50f146104d15780634f1ef286146104f15780634f3c5f06146105045761033d565b806322e67e711461044f57806328f02c68146104655780633659cfe6146104b15761033d565b80630bb78ec1116102d05780630bb78ec1146103c057806310c11360146103ed57806317a3a79c1461040d5761033d565b806301ffc9a714610347578063059f8b16146103965761033d565b3661033d5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610345610a17565b005b34801561035357600080fd5b5061038161036236600461178a565b6001600160e01b03191660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156103a257600080fd5b506103b2670de0b6b3a764000081565b60405190815260200161038d565b3480156103cc57600080fd5b506103e06103db3660046117bb565b610ac7565b60405161038d919061181a565b3480156103f957600080fd5b506103b26104083660046117bb565b610b61565b34801561041957600080fd5b5061043d6104283660046117bb565b60096020526000908152604090205460ff1681565b60405160ff909116815260200161038d565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b5061048561048036600461182d565b610b82565b60408051948552602085019390935263ffffffff9182169284019290925216606082015260800161038d565b3480156104bd57600080fd5b506103456104cc366004611866565b610bd6565b3480156104dd57600080fd5b506103456104ec366004611881565b610d27565b6103e06104ff366004611905565b610fbf565b34801561051057600080fd5b506103b261051f366004611988565b6110f3565b34801561053057600080fd5b5061055a61053f36600461178a565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161038d565b34801561057e57600080fd5b5061038161058d366004611866565b60026020526000908152604090205460ff1681565b3480156105ae57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031661055a565b3480156105f457600080fd5b506103456106033660046119c2565b611124565b34801561061457600080fd5b5060005461038190600160a01b900460ff1681565b34801561063557600080fd5b50610345611178565b34801561064a57600080fd5b5061034561120a565b34801561065f57600080fd5b506103e061129a565b34801561067457600080fd5b5061055a6106833660046117bb565b600b602052600090815260409020546001600160a01b031681565b3480156106aa57600080fd5b506103456106b93660046119f5565b6112a7565b3480156106ca57600080fd5b506103456106d9366004611a10565b61131c565b3480156106ea57600080fd5b506106f9630a85bd0160e11b81565b6040516001600160e01b0319909116815260200161038d565b34801561071e57600080fd5b5061055a61072d3660046117bb565b6000908152600160205260409020546001600160a01b031690565b34801561075457600080fd5b5061055a61076336600461178a565b61136d565b34801561077457600080fd5b506106f9635b5e139f60e01b81565b34801561078f57600080fd5b506103b261079e3660046117bb565b60106020526000908152604090205481565b3480156107bc57600080fd5b506103b26107cb3660046117bb565b60126020526000908152604090205481565b3480156107e957600080fd5b5061055a6107f83660046117bb565b600c602052600090815260409020546001600160a01b031681565b34801561081f57600080fd5b506103b261082e3660046117bb565b611469565b34801561083f57600080fd5b506106f963780e9d6360e01b81565b34801561085a57600080fd5b506103e0611479565b34801561086f57600080fd5b5060005461055a906001600160a01b031681565b34801561088f57600080fd5b5061055a61089e3660046117bb565b6001602052600090815260409020546001600160a01b031681565b3480156108c557600080fd5b506103456108d4366004611866565b611486565b3480156108e557600080fd5b506103816108f43660046117bb565b60196020526000908152604090205460ff1681565b34801561091557600080fd5b506103e0611580565b34801561092a57600080fd5b506106f96380ac58cd60e01b81565b34801561094557600080fd5b5061048561095436600461182d565b61158d565b34801561096557600080fd5b50610381610974366004611a43565b600e60209081526000928352604080842090915290825290205460ff1681565b3480156109a057600080fd5b5060055461055a906001600160a01b031681565b3480156109c057600080fd5b506103456109cf366004611866565b6115a9565b3480156109e057600080fd5b506103b26109ef366004611866565b600d6020526000908152604090205481565b348015610a0d57600080fd5b506103b260145481565b6000610a2e6000356001600160e01b03191661136d565b90506001600160a01b03811615801590610a525750600054600160a01b900460ff16155b610a9e5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610334565b3660008037600080366000845af43d6000803e808015610abd573d6000f35b3d6000fd5b505050565b60086020526000908152604090208054610ae090611a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0c90611a6d565b8015610b595780601f10610b2e57610100808354040283529160200191610b59565b820191906000526020600020905b815481529060010190602001808311610b3c57829003601f168201915b505050505081565b60188181548110610b7157600080fd5b600091825260209091200154905081565b60176020528160005260406000208181548110610b9e57600080fd5b600091825260209091206003909102018054600182015460029092015490935090915063ffffffff8082169164010000000090041684565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b6001600160a01b038116610c725760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610334565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610ce35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610334565b610cf081600060016116a0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b03163314610d6d5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b81610dba5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610334565b6001600160a01b03811660009081526002602052604090205460ff16610e225760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610334565b60005b82811015610fb957816001600160a01b031660036000868685818110610e4d57610e4d611aa7565b9050602002016020810190610e62919061178a565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ed35760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610334565b8160036000868685818110610eea57610eea611aa7565b9050602002016020810190610eff919061178a565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558216848483818110610f4757610f47611aa7565b9050602002016020810190610f5c919061178a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610fb181611abd565b915050610e25565b50505050565b6000546060906001600160a01b031633146110085760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b61101584600060016116a0565b600080856001600160a01b03168585604051611032929190611ae4565b600060405180830381855af49150503d806000811461106d576040519150601f19603f3d011682016040523d82523d6000602084013e611072565b606091505b5091509150816110ea5760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c6564000000000000006064820152608401610334565b95945050505050565b600f602052816000526040600020818154811061110f57600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b0316331461116a5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b611174828261172b565b5050565b6005546001600160a01b031633146111c05760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610334565b6005546040516000916001600160a01b0316907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf5683908390a3600580546001600160a01b0319169055565b6000546001600160a01b031633146112505760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a8054610ae090611a6d565b6000546001600160a01b031633146112ed5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b60008054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b610ac28383836116a0565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166113cd5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561142b57506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b60118181548110610b7157600080fd5b60078054610ae090611a6d565b6005546001600160a01b031633146114ce5760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610334565b6001600160a01b0381166115245760405162461bcd60e51b815260206004820152601f60248201527f6e6577206d616e6167657220697320746865207a65726f2061646472657373006044820152606401610334565b6005546040516001600160a01b038084169216907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf568390600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60068054610ae090611a6d565b60166020528160005260406000208181548110610b9e57600080fd5b6000546001600160a01b031633146115ef5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610334565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b6116f75760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610334565b801561172557600082815260016020526040902080546001600160a01b0319166001600160a01b0385161790555b610ac283825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60006020828403121561179c57600080fd5b81356001600160e01b0319811681146117b457600080fd5b9392505050565b6000602082840312156117cd57600080fd5b5035919050565b6000815180845260005b818110156117fa576020818501810151868301820152016117de565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006117b460208301846117d4565b6000806040838503121561184057600080fd5b50508035926020909101359150565b80356001600160a01b038116811461146457600080fd5b60006020828403121561187857600080fd5b6117b48261184f565b60008060006040848603121561189657600080fd5b833567ffffffffffffffff808211156118ae57600080fd5b818601915086601f8301126118c257600080fd5b8135818111156118d157600080fd5b8760208260051b85010111156118e657600080fd5b6020928301955093506118fc918601905061184f565b90509250925092565b60008060006040848603121561191a57600080fd5b6119238461184f565b9250602084013567ffffffffffffffff8082111561194057600080fd5b818601915086601f83011261195457600080fd5b81358181111561196357600080fd5b87602082850101111561197557600080fd5b6020830194508093505050509250925092565b6000806040838503121561199b57600080fd5b6119a48361184f565b946020939093013593505050565b8035801515811461146457600080fd5b600080604083850312156119d557600080fd5b6119de8361184f565b91506119ec602084016119b2565b90509250929050565b600060208284031215611a0757600080fd5b6117b4826119b2565b600080600060608486031215611a2557600080fd5b611a2e8461184f565b9250602084013591506118fc604085016119b2565b60008060408385031215611a5657600080fd5b611a5f8361184f565b91506119ec6020840161184f565b600181811c90821680611a8157607f821691505b602082108103611aa157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611add57634e487b7160e01b600052601160045260246000fd5b5060010190565b818382376000910190815291905056fea164736f6c6343000812000a", - "deployedBytecode": "0x6080604052600436106102eb5760003560e01c806388290adc11610184578063b911135f116100d6578063e178ee201161008a578063f2fde38b11610064578063f2fde38b146109b4578063f6631718146109d4578063fd2dcecf14610a015761033d565b8063e178ee2014610939578063edc3bc3f14610959578063f0329f6b146109945761033d565b8063cea823cd116100bb578063cea823cd146108d9578063d28d885214610909578063dece68541461091e5761033d565b8063b911135f14610883578063ccc39909146108b95761033d565b8063a726366511610138578063b01ac59111610112578063b01ac59114610833578063b09f12661461084e578063b2bdfa7b146108635761033d565b8063a7263665146107b0578063a7cc0136146107dd578063aa5965ae146108135761033d565b80638d4fdb40116101695780638d4fdb401461074857806394a509dd14610768578063a2e9b439146107835761033d565b806388290adc146106de5780638b8f4a65146107125761033d565b806350d2a2761161023d5780636c146d9b116101f1578063796db312116101cb578063796db312146106685780637cb00d251461069e5780637cd5f663146106be5761033d565b80636c146d9b14610629578063715018a61461063e578063743976a0146106535761033d565b80635c60da1b116102225780635c60da1b146105a25780635cc797d8146105e857806363a8fd89146106085761033d565b806350d2a27614610524578063550d01a3146105725761033d565b806322e67e711161029f5780634a5df50f116102795780634a5df50f146104d15780634f1ef286146104f15780634f3c5f06146105045761033d565b806322e67e711461044f57806328f02c68146104655780633659cfe6146104b15761033d565b80630bb78ec1116102d05780630bb78ec1146103c057806310c11360146103ed57806317a3a79c1461040d5761033d565b806301ffc9a714610347578063059f8b16146103965761033d565b3661033d5760405162461bcd60e51b815260206004820152601460248201527f63616e6e6f74207265636569766520457468657200000000000000000000000060448201526064015b60405180910390fd5b610345610a17565b005b34801561035357600080fd5b5061038161036236600461178a565b6001600160e01b03191660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156103a257600080fd5b506103b2670de0b6b3a764000081565b60405190815260200161038d565b3480156103cc57600080fd5b506103e06103db3660046117bb565b610ac7565b60405161038d919061181a565b3480156103f957600080fd5b506103b26104083660046117bb565b610b61565b34801561041957600080fd5b5061043d6104283660046117bb565b60096020526000908152604090205460ff1681565b60405160ff909116815260200161038d565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b5061048561048036600461182d565b610b82565b60408051948552602085019390935263ffffffff9182169284019290925216606082015260800161038d565b3480156104bd57600080fd5b506103456104cc366004611866565b610bd6565b3480156104dd57600080fd5b506103456104ec366004611881565b610d27565b6103e06104ff366004611905565b610fbf565b34801561051057600080fd5b506103b261051f366004611988565b6110f3565b34801561053057600080fd5b5061055a61053f36600461178a565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161038d565b34801561057e57600080fd5b5061038161058d366004611866565b60026020526000908152604090205460ff1681565b3480156105ae57600080fd5b506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031661055a565b3480156105f457600080fd5b506103456106033660046119c2565b611124565b34801561061457600080fd5b5060005461038190600160a01b900460ff1681565b34801561063557600080fd5b50610345611178565b34801561064a57600080fd5b5061034561120a565b34801561065f57600080fd5b506103e061129a565b34801561067457600080fd5b5061055a6106833660046117bb565b600b602052600090815260409020546001600160a01b031681565b3480156106aa57600080fd5b506103456106b93660046119f5565b6112a7565b3480156106ca57600080fd5b506103456106d9366004611a10565b61131c565b3480156106ea57600080fd5b506106f9630a85bd0160e11b81565b6040516001600160e01b0319909116815260200161038d565b34801561071e57600080fd5b5061055a61072d3660046117bb565b6000908152600160205260409020546001600160a01b031690565b34801561075457600080fd5b5061055a61076336600461178a565b61136d565b34801561077457600080fd5b506106f9635b5e139f60e01b81565b34801561078f57600080fd5b506103b261079e3660046117bb565b60106020526000908152604090205481565b3480156107bc57600080fd5b506103b26107cb3660046117bb565b60126020526000908152604090205481565b3480156107e957600080fd5b5061055a6107f83660046117bb565b600c602052600090815260409020546001600160a01b031681565b34801561081f57600080fd5b506103b261082e3660046117bb565b611469565b34801561083f57600080fd5b506106f963780e9d6360e01b81565b34801561085a57600080fd5b506103e0611479565b34801561086f57600080fd5b5060005461055a906001600160a01b031681565b34801561088f57600080fd5b5061055a61089e3660046117bb565b6001602052600090815260409020546001600160a01b031681565b3480156108c557600080fd5b506103456108d4366004611866565b611486565b3480156108e557600080fd5b506103816108f43660046117bb565b60196020526000908152604090205460ff1681565b34801561091557600080fd5b506103e0611580565b34801561092a57600080fd5b506106f96380ac58cd60e01b81565b34801561094557600080fd5b5061048561095436600461182d565b61158d565b34801561096557600080fd5b50610381610974366004611a43565b600e60209081526000928352604080842090915290825290205460ff1681565b3480156109a057600080fd5b5060055461055a906001600160a01b031681565b3480156109c057600080fd5b506103456109cf366004611866565b6115a9565b3480156109e057600080fd5b506103b26109ef366004611866565b600d6020526000908152604090205481565b348015610a0d57600080fd5b506103b260145481565b6000610a2e6000356001600160e01b03191661136d565b90506001600160a01b03811615801590610a525750600054600160a01b900460ff16155b610a9e5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610334565b3660008037600080366000845af43d6000803e808015610abd573d6000f35b3d6000fd5b505050565b60086020526000908152604090208054610ae090611a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0c90611a6d565b8015610b595780601f10610b2e57610100808354040283529160200191610b59565b820191906000526020600020905b815481529060010190602001808311610b3c57829003601f168201915b505050505081565b60188181548110610b7157600080fd5b600091825260209091200154905081565b60176020528160005260406000208181548110610b9e57600080fd5b600091825260209091206003909102018054600182015460029092015490935090915063ffffffff8082169164010000000090041684565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b6001600160a01b038116610c725760405162461bcd60e51b815260206004820152600d60248201527f696e707574206973207a65726f000000000000000000000000000000000000006044820152606401610334565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b03828116911603610ce35760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610334565b610cf081600060016116a0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000546001600160a01b03163314610d6d5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b81610dba5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610334565b6001600160a01b03811660009081526002602052604090205460ff16610e225760405162461bcd60e51b815260206004820152601860248201527f50726f78793a205f696d70206973206e6f7420616c69766500000000000000006044820152606401610334565b60005b82811015610fb957816001600160a01b031660036000868685818110610e4d57610e4d611aa7565b9050602002016020810190610e62919061178a565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031603610ed35760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610334565b8160036000868685818110610eea57610eea611aa7565b9050602002016020810190610eff919061178a565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558216848483818110610f4757610f47611aa7565b9050602002016020810190610f5c919061178a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610fb181611abd565b915050610e25565b50505050565b6000546060906001600160a01b031633146110085760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b61101584600060016116a0565b600080856001600160a01b03168585604051611032929190611ae4565b600060405180830381855af49150503d806000811461106d576040519150601f19603f3d011682016040523d82523d6000602084013e611072565b606091505b5091509150816110ea5760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c6564000000000000006064820152608401610334565b95945050505050565b600f602052816000526040600020818154811061110f57600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b0316331461116a5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b611174828261172b565b5050565b6005546001600160a01b031633146111c05760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610334565b6005546040516000916001600160a01b0316907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf5683908390a3600580546001600160a01b0319169055565b6000546001600160a01b031633146112505760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a8054610ae090611a6d565b6000546001600160a01b031633146112ed5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b60008054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b610ac28383836116a0565b6001600160e01b031981166000908152600360205260408120546001600160a01b03166113cd5750506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b6001600160e01b031982166000908152600360209081526040808320546001600160a01b03168352600290915290205460ff161561142b57506001600160e01b0319166000908152600360205260409020546001600160a01b031690565b50506000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546001600160a01b031690565b919050565b60118181548110610b7157600080fd5b60078054610ae090611a6d565b6005546001600160a01b031633146114ce5760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b6044820152606401610334565b6001600160a01b0381166115245760405162461bcd60e51b815260206004820152601f60248201527f6e6577206d616e6167657220697320746865207a65726f2061646472657373006044820152606401610334565b6005546040516001600160a01b038084169216907f697e4e68d3879b0dd3414a88905117bac8f0a54b0cd8e7779f909bf1a1cf568390600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60068054610ae090611a6d565b60166020528160005260406000208181548110610b9e57600080fd5b6000546001600160a01b031633146115ef5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610334565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610334565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b6116f75760405162461bcd60e51b815260206004820152601b60248201527f50726f78793a206e6f7420636f6e7472616374206164647265737300000000006044820152606401610334565b801561172557600082815260016020526040902080546001600160a01b0319166001600160a01b0385161790555b610ac283825b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b60006020828403121561179c57600080fd5b81356001600160e01b0319811681146117b457600080fd5b9392505050565b6000602082840312156117cd57600080fd5b5035919050565b6000815180845260005b818110156117fa576020818501810151868301820152016117de565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006117b460208301846117d4565b6000806040838503121561184057600080fd5b50508035926020909101359150565b80356001600160a01b038116811461146457600080fd5b60006020828403121561187857600080fd5b6117b48261184f565b60008060006040848603121561189657600080fd5b833567ffffffffffffffff808211156118ae57600080fd5b818601915086601f8301126118c257600080fd5b8135818111156118d157600080fd5b8760208260051b85010111156118e657600080fd5b6020928301955093506118fc918601905061184f565b90509250925092565b60008060006040848603121561191a57600080fd5b6119238461184f565b9250602084013567ffffffffffffffff8082111561194057600080fd5b818601915086601f83011261195457600080fd5b81358181111561196357600080fd5b87602082850101111561197557600080fd5b6020830194508093505050509250925092565b6000806040838503121561199b57600080fd5b6119a48361184f565b946020939093013593505050565b8035801515811461146457600080fd5b600080604083850312156119d557600080fd5b6119de8361184f565b91506119ec602084016119b2565b90509250929050565b600060208284031215611a0757600080fd5b6117b4826119b2565b600080600060608486031215611a2557600080fd5b611a2e8461184f565b9250602084013591506118fc604085016119b2565b60008060408385031215611a5657600080fd5b611a5f8361184f565b91506119ec6020840161184f565b600181811c90821680611a8157607f821691505b602082108103611aa157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611add57634e487b7160e01b600052601160045260246000fd5b5060010190565b818382376000910190815291905056fea164736f6c6343000812000a", - "devdoc": { - "kind": "dev", - "methods": { - "getSelectorImplementation2(bytes4)": { - "details": "view implementation address of selector of function", - "params": { - "_selector": "selector of function" - }, - "returns": { - "impl": "address of the implementation" - } - }, - "implementation()": { - "details": "returns the implementation" - }, - "implementation2(uint256)": { - "details": "view implementation address of the proxy[index]", - "params": { - "_index": "index of proxy" - }, - "returns": { - "_0": "address of the implementation" - } - }, - "setAliveImplementation2(address,bool)": { - "details": "set alive status of implementation", - "params": { - "_alive": "alive status", - "newImplementation": "Address of the new implementation." - } - }, - "setImplementation2(address,uint256,bool)": { - "details": "set the implementation address and status of the proxy[index]", - "params": { - "_alive": "_alive", - "_index": "index", - "newImplementation": "Address of the new implementation." - } - }, - "setProxyPause(bool)": { - "params": { - "_pause": "true:pause or false:resume" - } - }, - "setSelectorImplementations2(bytes4[],address)": { - "details": "set selectors of Implementation", - "params": { - "_imp": "implementation address", - "_selectors": "being added selectors" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." - }, - "upgradeTo(address)": { - "params": { - "impl": "New implementation contract address" - } + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousManager", + "type": "address" }, - "upgradeToAndCall(address,bytes)": { - "params": { - "_data": "Calldata to delegatecall the new implementation with.", - "_implementation": "Address of the implementation contract." - } - } - }, - "version": 1 + { + "indexed": true, + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "ManagershipTransferred", + "type": "event" }, - "userdoc": { - "kind": "user", - "methods": { - "setProxyPause(bool)": { - "notice": "Set pause state" - }, - "upgradeTo(address)": { - "notice": "Set implementation contract" + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" }, - "upgradeToAndCall(address,bytes)": { - "notice": "Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades." + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" } - }, - "version": 1 + ], + "name": "OwnershipTransferred", + "type": "event" }, - "storageLayout": { - "storage": [ - { - "astId": 916, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, + { + "anonymous": false, + "inputs": [ { - "astId": 918, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "pauseProxy", - "offset": 20, - "slot": "0", - "type": "t_bool" + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" }, { - "astId": 922, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "proxyImplementation", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_address)" - }, + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" + } + ], + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 926, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "aliveImplementation", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" }, { - "astId": 930, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "selectorImplementation", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes4,t_address)" - }, + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { - "astId": 945, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_supportedInterfaces", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes4,t_bool)" - }, + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "MULTIPLIER", + "outputs": [ { - "astId": 1072, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_manager", - "offset": 0, - "slot": "5", - "type": "t_address" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_ERC721_RECEIVED", + "outputs": [ { - "astId": 1074, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_name", - "offset": 0, - "slot": "6", - "type": "t_string_storage" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721", + "outputs": [ { - "astId": 1076, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_symbol", - "offset": 0, - "slot": "7", - "type": "t_string_storage" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721_ENUMERABLE", + "outputs": [ { - "astId": 1080, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_tokenURIs", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_uint256,t_string_storage)" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_INTERFACE_ID_ERC721_METADATA", + "outputs": [ { - "astId": 1084, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_tokenAttributes", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_uint256,t_uint8)" - }, + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1086, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_baseURI", - "offset": 0, - "slot": "10", - "type": "t_string_storage" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_allTokens", + "outputs": [ { - "astId": 1090, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_tokenOwner", - "offset": 0, - "slot": "11", - "type": "t_mapping(t_uint256,t_address)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1094, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_tokenApprovals", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_uint256,t_address)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_allTokensIndex", + "outputs": [ { - "astId": 1098, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_ownedTokensCount", - "offset": 0, - "slot": "13", - "type": "t_mapping(t_address,t_uint256)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_baseURI", + "outputs": [ { - "astId": 1104, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_operatorApprovals", - "offset": 0, - "slot": "14", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" - }, + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_manager", + "outputs": [ { - "astId": 1109, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_ownedTokens", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_name", + "outputs": [ { - "astId": 1113, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_ownedTokensIndex", - "offset": 0, - "slot": "16", - "type": "t_mapping(t_uint256,t_uint256)" - }, + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1116, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_allTokens", - "offset": 0, - "slot": "17", - "type": "t_array(t_uint256)dyn_storage" + "internalType": "address", + "name": "", + "type": "address" }, { - "astId": 1120, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_allTokensIndex", - "offset": 0, - "slot": "18", - "type": "t_mapping(t_uint256,t_uint256)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_operatorApprovals", + "outputs": [ { - "astId": 1122, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "_lock", - "offset": 0, - "slot": "19", - "type": "t_bool" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1171, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "epochUnit", - "offset": 0, - "slot": "20", - "type": "t_uint256" + "internalType": "address", + "name": "", + "type": "address" }, { - "astId": 1173, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "maxTime", - "offset": 0, - "slot": "21", - "type": "t_uint256" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_ownedTokens", + "outputs": [ { - "astId": 1179, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "pointHistoryByLockId", - "offset": 0, - "slot": "22", - "type": "t_mapping(t_uint256,t_array(t_struct(SyncInfo)442_storage)dyn_storage)" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1185, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "pointHistoryByWeek", - "offset": 0, - "slot": "23", - "type": "t_mapping(t_uint256,t_array(t_struct(SyncInfo)442_storage)dyn_storage)" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_ownedTokensCount", + "outputs": [ { - "astId": 1188, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "indexOfTimeset", - "offset": 0, - "slot": "24", - "type": "t_array(t_uint256)dyn_storage" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "astId": 1192, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "indexCheckOfTimeset", - "offset": 0, - "slot": "25", - "type": "t_mapping(t_uint256,t_bool)" + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(SyncInfo)442_storage)dyn_storage": { - "base": "t_struct(SyncInfo)442_storage", - "encoding": "dynamic_array", - "label": "struct LibLockId.SyncInfo[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_int256": { - "encoding": "inplace", - "label": "int256", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256[])", - "numberOfBytes": "32", - "value": "t_array(t_uint256)dyn_storage" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + "name": "_ownedTokensIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenApprovals", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenAttributes", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_tokenURIs", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "indexCheckOfTimeset", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "indexOfTimeset", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pointHistoryByLockId", + "outputs": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" }, - "t_mapping(t_bytes4,t_bool)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "int256", + "name": "bias", + "type": "int256" }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" }, - "t_mapping(t_uint256,t_array(t_struct(SyncInfo)442_storage)dyn_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct LibLockId.SyncInfo[])", - "numberOfBytes": "32", - "value": "t_array(t_struct(SyncInfo)442_storage)dyn_storage" + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pointHistoryByWeek", + "outputs": [ + { + "internalType": "int256", + "name": "slope", + "type": "int256" }, - "t_mapping(t_uint256,t_string_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => string)", - "numberOfBytes": "32", - "value": "t_string_storage" + { + "internalType": "int256", + "name": "bias", + "type": "int256" }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" }, - "t_mapping(t_uint256,t_uint8)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint8)", - "numberOfBytes": "32", - "value": "t_uint8" + { + "internalType": "uint32", + "name": "syncTime", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceManagership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" }, - "t_struct(SyncInfo)442_storage": { - "encoding": "inplace", - "label": "struct LibLockId.SyncInfo", - "members": [ - { - "astId": 435, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "slope", - "offset": 0, - "slot": "0", - "type": "t_int256" - }, - { - "astId": 437, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "bias", - "offset": 0, - "slot": "1", - "type": "t_int256" - }, - { - "astId": 439, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "timestamp", - "offset": 0, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 441, - "contract": "contracts/stos/LockIdNftForRegisterProxy.sol:LockIdNftForRegisterProxy", - "label": "syncTime", - "offset": 4, - "slot": "2", - "type": "t_uint32" - } - ], - "numberOfBytes": "96" + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "transferManagership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" } - } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } -} \ No newline at end of file +] \ No newline at end of file diff --git a/contracts/data/tosv2/abi/BondDepository.json b/contracts/data/tosv2/abi/BondDepository.json index c1f4710..1af30aa 100644 --- a/contracts/data/tosv2/abi/BondDepository.json +++ b/contracts/data/tosv2/abi/BondDepository.json @@ -1,1139 +1,1130 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "BondDepository", - "sourceName": "contracts/BondDepository.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_increaseFlag", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_increaseAmount", - "type": "uint256" - } - ], - "name": "ChangedCapacity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "closeTime", - "type": "uint256" - } - ], - "name": "ChangedCloseTime", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "ChangedMaxPayout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_tosPrice", - "type": "uint256" - } - ], - "name": "ChangedPrice", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - } - ], - "name": "ClosedMarket", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "market", - "type": "uint256[4]" - } - ], - "name": "CreatedMarket", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payout", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "isEth", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "mintAmount", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tosValuation", - "type": "uint256" - } - ], - "name": "ETHDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lockWeeks", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tosValuation", - "type": "uint256" - } - ], - "name": "ETHDepositedWithSTOS", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "calculatorAddress", - "type": "address" - } - ], - "name": "SetCalculator", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "ETHDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "payout_", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lockWeeks", - "type": "uint256" - } - ], - "name": "ETHDepositWithSTOS", - "outputs": [ - { - "internalType": "uint256", - "name": "payout_", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addPolicy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "addProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "calculateTosAmountForAsset", - "outputs": [ - { - "internalType": "uint256", - "name": "payout", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "calculator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_increaseFlag", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_increaseAmount", - "type": "uint256" - } - ], - "name": "changeCapacity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closeTime", - "type": "uint256" - } - ], - "name": "changeCloseTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeMaxPayout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_tosPrice", - "type": "uint256" - } - ], - "name": "changePrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - } - ], - "name": "close", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256[4]", - "name": "_market", - "type": "uint256[4]" - } - ], - "name": "create", - "outputs": [ - { - "internalType": "uint256", - "name": "id_", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "deletePolicy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "dtos", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBonds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMarketList", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - } - ], - "name": "isOpened", - "outputs": [ - { - "internalType": "bool", - "name": "closedBool", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isPolicy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isProxyAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "marketList", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "markets", - "outputs": [ - { - "internalType": "address", - "name": "quoteToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "capacity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endSaleTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPayout", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxPayout", - "type": "uint256" - } - ], - "name": "purchasableAssetAmountAtOneTime", - "outputs": [ - { - "internalType": "uint256", - "name": "maxPayout_", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "removePolicy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "removeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_calculator", - "type": "address" - } - ], - "name": "setCalculator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract IStaking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tos", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalMarketCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "treasury", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_marketId", - "type": "uint256" - } - ], - "name": "viewMarket", - "outputs": [ - { - "internalType": "address", - "name": "quoteToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "capacity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endSaleTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPayout", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50612ff1806100206000396000f3fe6080604052600436106102725760003560e01c806375829def1161014f578063b1667adf116100c1578063d547741f1161007a578063d547741f146107e5578063d6e0eee414610805578063f29310c114610825578063f47f2f1d14610838578063f98e422f14610858578063fad1c85c1461087857600080fd5b8063b1667adf146106fc578063b3de019c14610750578063b84ef08114610770578063be72f2d314610790578063c53468f0146107a5578063ce3e39c0146107c557600080fd5b806391d148541161011357806391d148541461060d57806396f1557c1461062d5780639a202d471461064d5780639e8332cd14610662578063a217fddf14610682578063b1283e771461069757600080fd5b806375829def1461056557806375b238fc146105855780638356ca4f146105a757806389f395de146105c75780638b140f6b146105e757600080fd5b80634cf088d9116101e85780635faf46bb116101ac5780635faf46bb146104b057806360a66f58146104d057806361d027b3146104f057806365cb3a83146105105780637048027514610525578063708d5c151461054557600080fd5b80634cf088d9146103f65780635b5491821461042e5780635b9907a41461044e5780635fabdf7c146104705780635fabfedc1461049057600080fd5b8063248a9ca31161023a578063248a9ca31461033157806324d7806c146103615780632f2ff15d1461038157806336568abe146103a15780633bb4f50b146103c15780634c8df535146103e157600080fd5b806301ffc9a7146102775780630aebeb4e146102ac57806312fcee80146102ce57806322985246146102ef578063232b956c14610311575b600080fd5b34801561028357600080fd5b50610297610292366004612a29565b610898565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c73660046129e6565b6108cf565b005b6102e16102dc366004612aa4565b610a08565b6040519081526020016102a3565b3480156102fb57600080fd5b506102e1600080516020612f9c83398151915281565b34801561031d57600080fd5b506102e161032c3660046129e6565b610c55565b34801561033d57600080fd5b506102e161034c3660046129e6565b60009081526008602052604090206001015490565b34801561036d57600080fd5b5061029761037c366004612994565b610c76565b34801561038d57600080fd5b506102cc61039c3660046129fe565b610c90565b3480156103ad57600080fd5b506102cc6103bc3660046129fe565b610cbb565b3480156103cd57600080fd5b506102e16103dc366004612aa4565b610d39565b3480156103ed57600080fd5b506006546102e1565b34801561040257600080fd5b50600154610416906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561043a57600080fd5b50600454610416906001600160a01b031681565b34801561045a57600080fd5b50610463610d5f565b6040516102a39190612bcd565b34801561047c57600080fd5b506102cc61048b366004612994565b610db7565b34801561049c57600080fd5b506102cc6104ab366004612aa4565b610df7565b3480156104bc57600080fd5b506102976104cb3660046129e6565b610ef2565b3480156104dc57600080fd5b506102e16104eb366004612aa4565b610f25565b3480156104fc57600080fd5b50600254610416906001600160a01b031681565b34801561051c57600080fd5b506102cc610f3a565b34801561053157600080fd5b506102cc610540366004612994565b610f79565b34801561055157600080fd5b506102cc610560366004612aa4565b610fb6565b34801561057157600080fd5b506102cc610580366004612994565b6110d1565b34801561059157600080fd5b506102e1600080516020612f7c83398151915281565b3480156105b357600080fd5b506102cc6105c2366004612994565b6111d8565b3480156105d357600080fd5b50600054610416906001600160a01b031681565b3480156105f357600080fd5b506105fc6112b6565b6040516102a3959493929190612be0565b34801561061957600080fd5b506102976106283660046129fe565b6116c3565b34801561063957600080fd5b506102cc610648366004612994565b6116ee565b34801561065957600080fd5b506102cc61171e565b34801561066e57600080fd5b506102cc61067d366004612a69565b61176a565b34801561068e57600080fd5b506102e1600081565b3480156106a357600080fd5b506106eb6106b23660046129e6565b600760205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b6040516102a3959493929190612b9f565b34801561070857600080fd5b506106eb6107173660046129e6565b600090815260076020526040902080546001820154600283015460038401546004909401546001600160a01b0390931694919390929091565b34801561075c57600080fd5b506102cc61076b366004612aa4565b6118e5565b34801561077c57600080fd5b506102cc61078b366004612994565b6119d5565b34801561079c57600080fd5b506102cc611a12565b3480156107b157600080fd5b506102cc6107c0366004612994565b611a42565b3480156107d157600080fd5b50600354610416906001600160a01b031681565b3480156107f157600080fd5b506102cc6108003660046129fe565b611b59565b34801561081157600080fd5b506102e16108203660046129ae565b611b7f565b6102e1610833366004612ac5565b611f54565b34801561084457600080fd5b50610297610853366004612994565b612230565b34801561086457600080fd5b50600554610416906001600160a01b031681565b34801561088457600080fd5b50610297610893366004612994565b61223c565b60006001600160e01b03198216637965db0b60e01b14806108c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108d83361223c565b6108fd5760405162461bcd60e51b81526004016108f490612e22565b60405180910390fd5b60008181526007602052604090206002015461094a5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481b585c9ad95d60a21b60448201526064016108f4565b6000818152600760205260409020600201544210806109785750600081815260076020526040902060010154155b6109b55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e4818db1bdcd95960921b60448201526064016108f4565b60008181526007602090815260408083204260028201556001810193909355518381527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d6391015b60405180910390a15050565b60008281526007602052604081206002015483904210610a3a5760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154610a685760405162461bcd60e51b81526004016108f490612da7565b60008481526007602052604090205484906001600160a01b0316158015610a9f575060008181526007602052604090206002015415155b610aeb5760405162461bcd60e51b815260206004820152601e60248201527f426f6e644465706f7369746f72793a206e6f7420455448206d61726b6574000060448201526064016108f4565b8380610b095760405162461bcd60e51b81526004016108f490612d70565b843414610b285760405162461bcd60e51b81526004016108f490612dde565b6000610b35338789612256565b60015460405163332b01f360e01b815233600482015260248101849052604481018b9052606481018390529297509092506000916001600160a01b039091169063332b01f390608401602060405180830381600087803b158015610b9857600080fd5b505af1158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190612a51565b6002546040519192506001600160a01b0316903480156108fc02916000818181858888f19350505050158015610c0a573d6000803e3d6000fd5b507fe6842e3c66982eec53fbf127ab93e36198f7d048a044b2761abd0e131b3f84a43389838a8a604051610c42959493929190612b9f565b60405180910390a1505050505092915050565b60068181548110610c6557600080fd5b600091825260209091200154905081565b60006108c9600080516020612f7c833981519152836116c3565b600082815260086020526040902060010154610cac813361263b565b610cb6838361269f565b505050565b6001600160a01b0381163314610d2b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108f4565b610d358282612725565b5050565b6000670de0b6b3a7640000610d4e8484612ecd565b610d589190612ead565b9392505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610dad57602002820191906000526020600020905b815481526020019060010190808311610d99575b5050505050905090565b610dc033612230565b610ddc5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f9c83398151915282611b59565b50565b610e003361223c565b610e1c5760405162461bcd60e51b81526004016108f490612e22565b60008281526007602052604090206002015482904210610e4e5760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154610e7c5760405162461bcd60e51b81526004016108f490612da7565b8180610e9a5760405162461bcd60e51b81526004016108f490612d70565b600084815260076020908152604091829020600381018690558251878152918201869052917f13067d803552eac6ffd9ed0180e377884374b0ee53d2efa798e1c6d6974db44191015b60405180910390a15050505050565b600081815260076020526040812060020154421080156108c9575050600090815260076020526040902060010154151590565b600082610d4e83670de0b6b3a7640000612ecd565b610f433361223c565b610f5f5760405162461bcd60e51b81526004016108f490612e22565b610f77600080516020612f9c83398151915233610cbb565b565b610f8233612230565b610f9e5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f7c83398151915282610c90565b610fbf3361223c565b610fdb5760405162461bcd60e51b81526004016108f490612e22565b600082815260076020526040902060030154829061103b5760405162461bcd60e51b815260206004820181905260248201527f426f6e644465706f7369746f72793a206e6f6e2d6578697374206d61726b657460448201526064016108f4565b42821161107b5760405162461bcd60e51b815260206004820152600e60248201526d7061737420636c6f736554696d6560901b60448201526064016108f4565b600083815260076020908152604091829020600281018590558251868152918201859052917fc3daa84eedfacd6851bbf80d00ce11271bf926ac96c3d361c0307023c939d4b3910160405180910390a150505050565b6110da33610c76565b806110e957506110e933612230565b6111055760405162461bcd60e51b81526004016108f490612caf565b6001600160a01b0381166111565760405162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b60448201526064016108f4565b336001600160a01b03821614156111a85760405162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b60448201526064016108f4565b6111c0600080516020612f7c83398151915282610c90565b610df4600080516020612f7c83398151915233610cbb565b6111e133612230565b6111fd5760405162461bcd60e51b81526004016108f490612cf1565b6001600160a01b03811661124e5760405162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b60448201526064016108f4565b336001600160a01b03821614156112a05760405162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b60448201526064016108f4565b6112ab600082610c90565b610df4600033610cbb565b600654606090819081908190819060008167ffffffffffffffff8111156112ed57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611316578160200160208202803683370190505b50905060008267ffffffffffffffff81111561134257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561136b578160200160208202803683370190505b50905060008367ffffffffffffffff81111561139757634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113c0578160200160208202803683370190505b50905060008467ffffffffffffffff8111156113ec57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611415578160200160208202803683370190505b50905060008567ffffffffffffffff81111561144157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561146a578160200160208202803683370190505b50905060005b868110156116b0576006818154811061149957634e487b7160e01b600052603260045260246000fd5b90600052602060002001548682815181106114c457634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600760008783815181106114f457634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031685828151811061154157634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506007600087838151811061158557634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600101548482815181106115bf57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600760008783815181106115ef57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206002015483828151811061162957634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506007600087838151811061165957634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206004015482828151811061169357634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806116a881612f4a565b915050611470565b50939a9299509097509550909350915050565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6116f733612230565b6117135760405162461bcd60e51b81526004016108f490612cf1565b610df460008261278c565b61172733610c76565b80611736575061173633612230565b6117525760405162461bcd60e51b81526004016108f490612caf565b610f77600080516020612f7c83398151915233610cbb565b6117733361223c565b61178f5760405162461bcd60e51b81526004016108f490612e22565b80806117ad5760405162461bcd60e51b81526004016108f490612d70565b600084815260076020526040902060030154849061180d5760405162461bcd60e51b815260206004820181905260248201527f426f6e644465706f7369746f72793a206e6f6e2d6578697374206d61726b657460448201526064016108f4565b6000858152600760205260409020841561184057838160010160008282546118359190612e95565b9091555061189b9050565b806001015484101561186057838160010160008282546118359190612eec565b600060018201556040518681527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d639060200160405180910390a15b6040805187815286151560208201529081018590527f5e6b6b7fc7d8fb3137611da2ee2b2529d67d6d9e3ae513c9431123de9aa8b88e9060600160405180910390a1505050505050565b6118ee3361223c565b61190a5760405162461bcd60e51b81526004016108f490612e22565b6000828152600760205260409020600201548290421061193c5760405162461bcd60e51b81526004016108f490612d39565b60008181526007602052604090206001015461196a5760405162461bcd60e51b81526004016108f490612da7565b81806119885760405162461bcd60e51b81526004016108f490612d70565b600084815260076020908152604091829020600481018690558251878152918201869052917f8d41eafd4a0911818359bda81daed68115ba0312f42a7098075150da886cd0a49101610ee3565b6119de33612230565b6119fa5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f9c83398151915282610c90565b611a1b33612230565b611a375760405162461bcd60e51b81526004016108f490612cf1565b610f77600033610cbb565b806001600160a01b038116611a995760405162461bcd60e51b815260206004820152601b60248201527f426f6e644465706f7369746f72793a7a65726f2061646472657373000000000060448201526064016108f4565b611aa233612230565b611abe5760405162461bcd60e51b81526004016108f490612cf1565b6003546001600160a01b0383811691161415611b0b5760405162461bcd60e51b815260206004820152600c60248201526b73616d65206164647265737360a01b60448201526064016108f4565b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527f7816a90568840c698b302fddaa32068d3ac1ecf5aa9ab4060e2ff9463583c23c906020016109fc565b600082815260086020526040902060010154611b75813361263b565b610cb68383612725565b6000611b8a3361223c565b611ba65760405162461bcd60e51b81526004016108f490612e22565b813580611bc55760405162461bcd60e51b81526004016108f490612d70565b604083013580611be75760405162461bcd60e51b81526004016108f490612d70565b606084013580611c095760405162461bcd60e51b81526004016108f490612d70565b68056bc75e2d63100000853511611c625760405162461bcd60e51b815260206004820152601e60248201527f6e6565642074686520746f74616c53616c65416d6f756e74203e20313030000060448201526064016108f4565b600160009054906101000a90046001600160a01b03166001600160a01b03166330e06e8b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190612a51565b60008181526007602052604090206002015490945015611d4c5760405162461bcd60e51b815260206004820152601960248201527f616c72656164792072656769737465726564206d61726b65740000000000000060448201526064016108f4565b42602086013511611d985760405162461bcd60e51b8152602060048201526016602482015275195b9914d85b19551a5b59481a185cc81c185cdcd95960521b60448201526064016108f4565b6040805160a0810182526001600160a01b0388168152863560208201529081018660016020020135815260200186600360048110611de657634e487b7160e01b600052603260045260246000fd5b6020020135815260200186600260048110611e1157634e487b7160e01b600052603260045260246000fd5b602090810291909101359091526000868152600782526040808220845181546001600160a01b0319166001600160a01b03918216178255938501516001808301919091559185015160028201556060850151600382015560809094015160049094019390935560068054938401815590527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101859055861615611f1057600254604051639ea6498560e01b81526001600160a01b03888116600483015290911690639ea6498590602401600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b505050505b7f9743ac71f9a2bcf57afd56006eb7c6027c94927d2d01c874438472819d40f5c5848787604051611f4393929190612e6b565b60405180910390a150505092915050565b60008381526007602052604081206002015484904210611f865760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154611fb45760405162461bcd60e51b81526004016108f490612da7565b60008581526007602052604090205485906001600160a01b0316158015611feb575060008181526007602052604090206002015415155b6120375760405162461bcd60e51b815260206004820152601e60248201527f426f6e644465706f7369746f72793a206e6f7420455448206d61726b6574000060448201526064016108f4565b84806120555760405162461bcd60e51b81526004016108f490612d70565b84806120735760405162461bcd60e51b81526004016108f490612d70565b8634146120925760405162461bcd60e51b81526004016108f490612dde565b600186116120f25760405162461bcd60e51b815260206004820152602760248201527f5f6c6f636b5765656b73206d7573742062652067726561746572207468616e2060448201526618903bb2b2b59760c91b60648201526084016108f4565b60006120ff33898b612256565b60015460405163980b109760e01b81529298509092506000916001600160a01b039091169063980b1097906121409033908b908f908e908990600401612b9f565b602060405180830381600087803b15801561215a57600080fd5b505af115801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190612a51565b6002546040519192506001600160a01b0316903480156108fc02916000818181858888f193505050501580156121cc573d6000803e3d6000fd5b5060408051338152602081018c9052908101829052606081018a90526080810189905260a081018890527fd04d64d5a1460d8c5a8c5ffb4d6ddb0f4e5cf774c894a27c5bb73c4fc41698809060c00160405180910390a15050505050509392505050565b60006108c981836116c3565b60006108c9600080516020612f9c833981519152836116c3565b600080600560149054906101000a900460ff1615156001151514156122bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108f4565b506005805460ff60a01b1916600160a01b1790556000828152600760205260409020600481015460038201549091906122f7908390610f25565b8511156123465760405162461bcd60e51b815260206004820152601860248201527f4465706f7369746f7279203a206f766572206d6178506179000000000000000060448201526064016108f4565b6123508286610d39565b9250600083116123985760405162461bcd60e51b81526020600482015260136024820152721e995c9bc81cdd185ada5b99c8185b5bdd5b9d606a1b60448201526064016108f4565b6000670de0b6b3a7640000600260009054906101000a90046001600160a01b03166001600160a01b03166396f0bd616040518163ffffffff1660e01b815260040160206040518083038186803b1580156123f157600080fd5b505afa158015612405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124299190612a51565b6124339088612ecd565b61243d9190612ead565b9050838110156124a35760405162461bcd60e51b815260206004820152602b60248201527f6d696e7461626c65416d6f756e74206973206c657373207468616e207374616b60448201526a34b7339030b6b7bab73a1760a91b60648201526084016108f4565b81600101548411156124ee5760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d1bdc9e4e881cdbdb19081bdd5d60621b60448201526064016108f4565b838260010160008282546125029190612eec565b9091555050600182015468056bc75e2d631000001061255657600060018301556040518581527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d639060200160405180910390a15b60025460405163ef7c6c0f60e01b81526004810183905260248101869052600160448201526001600160a01b039091169063ef7c6c0f90606401600060405180830381600087803b1580156125aa57600080fd5b505af11580156125be573d6000803e3d6000fd5b5050604080516001600160a01b038b16815260208101899052908101899052606081018790526001608082015260a081018490527fef81711614d4ac7faee84826311bec7d949a272a2e7e4f39f3a3b72527767d69925060c001905060405180910390a150506005805460ff60a01b191690559094909350915050565b61264582826116c3565b610d355761265d816001600160a01b03166014612796565b612668836020612796565b604051602001612679929190612b2a565b60408051601f198184030181529082905262461bcd60e51b82526108f491600401612c7c565b6126a982826116c3565b610d355760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556126e13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61272f82826116c3565b15610d355760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610d35828261269f565b606060006127a5836002612ecd565b6127b0906002612e95565b67ffffffffffffffff8111156127d657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612800576020820181803683370190505b509050600360fc1b8160008151811061282957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061286657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061288a846002612ecd565b612895906001612e95565b90505b6001811115612929576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106128d757634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106128fb57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361292281612f33565b9050612898565b508315610d585760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108f4565b80356001600160a01b038116811461298f57600080fd5b919050565b6000602082840312156129a5578081fd5b610d5882612978565b60008060a083850312156129c0578081fd5b6129c983612978565b91508360a0840111156129da578081fd5b50926020919091019150565b6000602082840312156129f7578081fd5b5035919050565b60008060408385031215612a10578182fd5b82359150612a2060208401612978565b90509250929050565b600060208284031215612a3a578081fd5b81356001600160e01b031981168114610d58578182fd5b600060208284031215612a62578081fd5b5051919050565b600080600060608486031215612a7d578081fd5b8335925060208401358015158114612a93578182fd5b929592945050506040919091013590565b60008060408385031215612ab6578182fd5b50508035926020909101359150565b600080600060608486031215612ad9578283fd5b505081359360208301359350604090920135919050565b6000815180845260208085019450808401835b83811015612b1f57815187529582019590820190600101612b03565b509495945050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b62816017850160208801612f03565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b93816028840160208801612f03565b01602801949350505050565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b602081526000610d586020830184612af0565b60a081526000612bf360a0830188612af0565b828103602084810191909152875180835288820192820190845b81811015612c325784516001600160a01b031683529383019391830191600101612c0d565b50508481036040860152612c468189612af0565b925050508281036060840152612c5c8186612af0565b90508281036080840152612c708185612af0565b98975050505050505050565b6020815260008251806020840152612c9b816040850160208701612f03565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b6020808252601d908201527f426f6e644465706f7369746f72793a20636c6f736564206d61726b6574000000604082015260600190565b60208082526019908201527f426f6e644465706f7369746f72793a207a65726f2075696e7400000000000000604082015260600190565b6020808252601d908201527f426f6e644465706f7369746f72793a207a65726f206361706163697479000000604082015260600190565b60208082526024908201527f4465706f7369746f72793a2045544820616d6f756e747320646f206e6f74206d6040820152630c2e8c6d60e31b606082015260800190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b8381526001600160a01b038316602082015260c08101608083604084013760008152949350505050565b60008219821115612ea857612ea8612f65565b500190565b600082612ec857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612ee757612ee7612f65565b500290565b600082821015612efe57612efe612f65565b500390565b60005b83811015612f1e578181015183820152602001612f06565b83811115612f2d576000848401525b50505050565b600081612f4257612f42612f65565b506000190190565b6000600019821415612f5e57612f5e612f65565b5060010190565b634e487b7160e01b600052601160045260246000fdfedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220f5c1f5416533d00f493a6f16fd5412242693b7c9e050bedbb5834d5291e3f56564736f6c63430008040033", - "deployedBytecode": "0x6080604052600436106102725760003560e01c806375829def1161014f578063b1667adf116100c1578063d547741f1161007a578063d547741f146107e5578063d6e0eee414610805578063f29310c114610825578063f47f2f1d14610838578063f98e422f14610858578063fad1c85c1461087857600080fd5b8063b1667adf146106fc578063b3de019c14610750578063b84ef08114610770578063be72f2d314610790578063c53468f0146107a5578063ce3e39c0146107c557600080fd5b806391d148541161011357806391d148541461060d57806396f1557c1461062d5780639a202d471461064d5780639e8332cd14610662578063a217fddf14610682578063b1283e771461069757600080fd5b806375829def1461056557806375b238fc146105855780638356ca4f146105a757806389f395de146105c75780638b140f6b146105e757600080fd5b80634cf088d9116101e85780635faf46bb116101ac5780635faf46bb146104b057806360a66f58146104d057806361d027b3146104f057806365cb3a83146105105780637048027514610525578063708d5c151461054557600080fd5b80634cf088d9146103f65780635b5491821461042e5780635b9907a41461044e5780635fabdf7c146104705780635fabfedc1461049057600080fd5b8063248a9ca31161023a578063248a9ca31461033157806324d7806c146103615780632f2ff15d1461038157806336568abe146103a15780633bb4f50b146103c15780634c8df535146103e157600080fd5b806301ffc9a7146102775780630aebeb4e146102ac57806312fcee80146102ce57806322985246146102ef578063232b956c14610311575b600080fd5b34801561028357600080fd5b50610297610292366004612a29565b610898565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c73660046129e6565b6108cf565b005b6102e16102dc366004612aa4565b610a08565b6040519081526020016102a3565b3480156102fb57600080fd5b506102e1600080516020612f9c83398151915281565b34801561031d57600080fd5b506102e161032c3660046129e6565b610c55565b34801561033d57600080fd5b506102e161034c3660046129e6565b60009081526008602052604090206001015490565b34801561036d57600080fd5b5061029761037c366004612994565b610c76565b34801561038d57600080fd5b506102cc61039c3660046129fe565b610c90565b3480156103ad57600080fd5b506102cc6103bc3660046129fe565b610cbb565b3480156103cd57600080fd5b506102e16103dc366004612aa4565b610d39565b3480156103ed57600080fd5b506006546102e1565b34801561040257600080fd5b50600154610416906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561043a57600080fd5b50600454610416906001600160a01b031681565b34801561045a57600080fd5b50610463610d5f565b6040516102a39190612bcd565b34801561047c57600080fd5b506102cc61048b366004612994565b610db7565b34801561049c57600080fd5b506102cc6104ab366004612aa4565b610df7565b3480156104bc57600080fd5b506102976104cb3660046129e6565b610ef2565b3480156104dc57600080fd5b506102e16104eb366004612aa4565b610f25565b3480156104fc57600080fd5b50600254610416906001600160a01b031681565b34801561051c57600080fd5b506102cc610f3a565b34801561053157600080fd5b506102cc610540366004612994565b610f79565b34801561055157600080fd5b506102cc610560366004612aa4565b610fb6565b34801561057157600080fd5b506102cc610580366004612994565b6110d1565b34801561059157600080fd5b506102e1600080516020612f7c83398151915281565b3480156105b357600080fd5b506102cc6105c2366004612994565b6111d8565b3480156105d357600080fd5b50600054610416906001600160a01b031681565b3480156105f357600080fd5b506105fc6112b6565b6040516102a3959493929190612be0565b34801561061957600080fd5b506102976106283660046129fe565b6116c3565b34801561063957600080fd5b506102cc610648366004612994565b6116ee565b34801561065957600080fd5b506102cc61171e565b34801561066e57600080fd5b506102cc61067d366004612a69565b61176a565b34801561068e57600080fd5b506102e1600081565b3480156106a357600080fd5b506106eb6106b23660046129e6565b600760205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b6040516102a3959493929190612b9f565b34801561070857600080fd5b506106eb6107173660046129e6565b600090815260076020526040902080546001820154600283015460038401546004909401546001600160a01b0390931694919390929091565b34801561075c57600080fd5b506102cc61076b366004612aa4565b6118e5565b34801561077c57600080fd5b506102cc61078b366004612994565b6119d5565b34801561079c57600080fd5b506102cc611a12565b3480156107b157600080fd5b506102cc6107c0366004612994565b611a42565b3480156107d157600080fd5b50600354610416906001600160a01b031681565b3480156107f157600080fd5b506102cc6108003660046129fe565b611b59565b34801561081157600080fd5b506102e16108203660046129ae565b611b7f565b6102e1610833366004612ac5565b611f54565b34801561084457600080fd5b50610297610853366004612994565b612230565b34801561086457600080fd5b50600554610416906001600160a01b031681565b34801561088457600080fd5b50610297610893366004612994565b61223c565b60006001600160e01b03198216637965db0b60e01b14806108c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108d83361223c565b6108fd5760405162461bcd60e51b81526004016108f490612e22565b60405180910390fd5b60008181526007602052604090206002015461094a5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481b585c9ad95d60a21b60448201526064016108f4565b6000818152600760205260409020600201544210806109785750600081815260076020526040902060010154155b6109b55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e4818db1bdcd95960921b60448201526064016108f4565b60008181526007602090815260408083204260028201556001810193909355518381527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d6391015b60405180910390a15050565b60008281526007602052604081206002015483904210610a3a5760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154610a685760405162461bcd60e51b81526004016108f490612da7565b60008481526007602052604090205484906001600160a01b0316158015610a9f575060008181526007602052604090206002015415155b610aeb5760405162461bcd60e51b815260206004820152601e60248201527f426f6e644465706f7369746f72793a206e6f7420455448206d61726b6574000060448201526064016108f4565b8380610b095760405162461bcd60e51b81526004016108f490612d70565b843414610b285760405162461bcd60e51b81526004016108f490612dde565b6000610b35338789612256565b60015460405163332b01f360e01b815233600482015260248101849052604481018b9052606481018390529297509092506000916001600160a01b039091169063332b01f390608401602060405180830381600087803b158015610b9857600080fd5b505af1158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190612a51565b6002546040519192506001600160a01b0316903480156108fc02916000818181858888f19350505050158015610c0a573d6000803e3d6000fd5b507fe6842e3c66982eec53fbf127ab93e36198f7d048a044b2761abd0e131b3f84a43389838a8a604051610c42959493929190612b9f565b60405180910390a1505050505092915050565b60068181548110610c6557600080fd5b600091825260209091200154905081565b60006108c9600080516020612f7c833981519152836116c3565b600082815260086020526040902060010154610cac813361263b565b610cb6838361269f565b505050565b6001600160a01b0381163314610d2b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108f4565b610d358282612725565b5050565b6000670de0b6b3a7640000610d4e8484612ecd565b610d589190612ead565b9392505050565b60606006805480602002602001604051908101604052809291908181526020018280548015610dad57602002820191906000526020600020905b815481526020019060010190808311610d99575b5050505050905090565b610dc033612230565b610ddc5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f9c83398151915282611b59565b50565b610e003361223c565b610e1c5760405162461bcd60e51b81526004016108f490612e22565b60008281526007602052604090206002015482904210610e4e5760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154610e7c5760405162461bcd60e51b81526004016108f490612da7565b8180610e9a5760405162461bcd60e51b81526004016108f490612d70565b600084815260076020908152604091829020600381018690558251878152918201869052917f13067d803552eac6ffd9ed0180e377884374b0ee53d2efa798e1c6d6974db44191015b60405180910390a15050505050565b600081815260076020526040812060020154421080156108c9575050600090815260076020526040902060010154151590565b600082610d4e83670de0b6b3a7640000612ecd565b610f433361223c565b610f5f5760405162461bcd60e51b81526004016108f490612e22565b610f77600080516020612f9c83398151915233610cbb565b565b610f8233612230565b610f9e5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f7c83398151915282610c90565b610fbf3361223c565b610fdb5760405162461bcd60e51b81526004016108f490612e22565b600082815260076020526040902060030154829061103b5760405162461bcd60e51b815260206004820181905260248201527f426f6e644465706f7369746f72793a206e6f6e2d6578697374206d61726b657460448201526064016108f4565b42821161107b5760405162461bcd60e51b815260206004820152600e60248201526d7061737420636c6f736554696d6560901b60448201526064016108f4565b600083815260076020908152604091829020600281018590558251868152918201859052917fc3daa84eedfacd6851bbf80d00ce11271bf926ac96c3d361c0307023c939d4b3910160405180910390a150505050565b6110da33610c76565b806110e957506110e933612230565b6111055760405162461bcd60e51b81526004016108f490612caf565b6001600160a01b0381166111565760405162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b60448201526064016108f4565b336001600160a01b03821614156111a85760405162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b60448201526064016108f4565b6111c0600080516020612f7c83398151915282610c90565b610df4600080516020612f7c83398151915233610cbb565b6111e133612230565b6111fd5760405162461bcd60e51b81526004016108f490612cf1565b6001600160a01b03811661124e5760405162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b60448201526064016108f4565b336001600160a01b03821614156112a05760405162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b60448201526064016108f4565b6112ab600082610c90565b610df4600033610cbb565b600654606090819081908190819060008167ffffffffffffffff8111156112ed57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611316578160200160208202803683370190505b50905060008267ffffffffffffffff81111561134257634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561136b578160200160208202803683370190505b50905060008367ffffffffffffffff81111561139757634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113c0578160200160208202803683370190505b50905060008467ffffffffffffffff8111156113ec57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611415578160200160208202803683370190505b50905060008567ffffffffffffffff81111561144157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561146a578160200160208202803683370190505b50905060005b868110156116b0576006818154811061149957634e487b7160e01b600052603260045260246000fd5b90600052602060002001548682815181106114c457634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600760008783815181106114f457634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031685828151811061154157634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506007600087838151811061158557634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600101548482815181106115bf57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600760008783815181106115ef57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206002015483828151811061162957634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506007600087838151811061165957634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206004015482828151811061169357634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806116a881612f4a565b915050611470565b50939a9299509097509550909350915050565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6116f733612230565b6117135760405162461bcd60e51b81526004016108f490612cf1565b610df460008261278c565b61172733610c76565b80611736575061173633612230565b6117525760405162461bcd60e51b81526004016108f490612caf565b610f77600080516020612f7c83398151915233610cbb565b6117733361223c565b61178f5760405162461bcd60e51b81526004016108f490612e22565b80806117ad5760405162461bcd60e51b81526004016108f490612d70565b600084815260076020526040902060030154849061180d5760405162461bcd60e51b815260206004820181905260248201527f426f6e644465706f7369746f72793a206e6f6e2d6578697374206d61726b657460448201526064016108f4565b6000858152600760205260409020841561184057838160010160008282546118359190612e95565b9091555061189b9050565b806001015484101561186057838160010160008282546118359190612eec565b600060018201556040518681527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d639060200160405180910390a15b6040805187815286151560208201529081018590527f5e6b6b7fc7d8fb3137611da2ee2b2529d67d6d9e3ae513c9431123de9aa8b88e9060600160405180910390a1505050505050565b6118ee3361223c565b61190a5760405162461bcd60e51b81526004016108f490612e22565b6000828152600760205260409020600201548290421061193c5760405162461bcd60e51b81526004016108f490612d39565b60008181526007602052604090206001015461196a5760405162461bcd60e51b81526004016108f490612da7565b81806119885760405162461bcd60e51b81526004016108f490612d70565b600084815260076020908152604091829020600481018690558251878152918201869052917f8d41eafd4a0911818359bda81daed68115ba0312f42a7098075150da886cd0a49101610ee3565b6119de33612230565b6119fa5760405162461bcd60e51b81526004016108f490612cf1565b610df4600080516020612f9c83398151915282610c90565b611a1b33612230565b611a375760405162461bcd60e51b81526004016108f490612cf1565b610f77600033610cbb565b806001600160a01b038116611a995760405162461bcd60e51b815260206004820152601b60248201527f426f6e644465706f7369746f72793a7a65726f2061646472657373000000000060448201526064016108f4565b611aa233612230565b611abe5760405162461bcd60e51b81526004016108f490612cf1565b6003546001600160a01b0383811691161415611b0b5760405162461bcd60e51b815260206004820152600c60248201526b73616d65206164647265737360a01b60448201526064016108f4565b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527f7816a90568840c698b302fddaa32068d3ac1ecf5aa9ab4060e2ff9463583c23c906020016109fc565b600082815260086020526040902060010154611b75813361263b565b610cb68383612725565b6000611b8a3361223c565b611ba65760405162461bcd60e51b81526004016108f490612e22565b813580611bc55760405162461bcd60e51b81526004016108f490612d70565b604083013580611be75760405162461bcd60e51b81526004016108f490612d70565b606084013580611c095760405162461bcd60e51b81526004016108f490612d70565b68056bc75e2d63100000853511611c625760405162461bcd60e51b815260206004820152601e60248201527f6e6565642074686520746f74616c53616c65416d6f756e74203e20313030000060448201526064016108f4565b600160009054906101000a90046001600160a01b03166001600160a01b03166330e06e8b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190612a51565b60008181526007602052604090206002015490945015611d4c5760405162461bcd60e51b815260206004820152601960248201527f616c72656164792072656769737465726564206d61726b65740000000000000060448201526064016108f4565b42602086013511611d985760405162461bcd60e51b8152602060048201526016602482015275195b9914d85b19551a5b59481a185cc81c185cdcd95960521b60448201526064016108f4565b6040805160a0810182526001600160a01b0388168152863560208201529081018660016020020135815260200186600360048110611de657634e487b7160e01b600052603260045260246000fd5b6020020135815260200186600260048110611e1157634e487b7160e01b600052603260045260246000fd5b602090810291909101359091526000868152600782526040808220845181546001600160a01b0319166001600160a01b03918216178255938501516001808301919091559185015160028201556060850151600382015560809094015160049094019390935560068054938401815590527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101859055861615611f1057600254604051639ea6498560e01b81526001600160a01b03888116600483015290911690639ea6498590602401600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b505050505b7f9743ac71f9a2bcf57afd56006eb7c6027c94927d2d01c874438472819d40f5c5848787604051611f4393929190612e6b565b60405180910390a150505092915050565b60008381526007602052604081206002015484904210611f865760405162461bcd60e51b81526004016108f490612d39565b600081815260076020526040902060010154611fb45760405162461bcd60e51b81526004016108f490612da7565b60008581526007602052604090205485906001600160a01b0316158015611feb575060008181526007602052604090206002015415155b6120375760405162461bcd60e51b815260206004820152601e60248201527f426f6e644465706f7369746f72793a206e6f7420455448206d61726b6574000060448201526064016108f4565b84806120555760405162461bcd60e51b81526004016108f490612d70565b84806120735760405162461bcd60e51b81526004016108f490612d70565b8634146120925760405162461bcd60e51b81526004016108f490612dde565b600186116120f25760405162461bcd60e51b815260206004820152602760248201527f5f6c6f636b5765656b73206d7573742062652067726561746572207468616e2060448201526618903bb2b2b59760c91b60648201526084016108f4565b60006120ff33898b612256565b60015460405163980b109760e01b81529298509092506000916001600160a01b039091169063980b1097906121409033908b908f908e908990600401612b9f565b602060405180830381600087803b15801561215a57600080fd5b505af115801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190612a51565b6002546040519192506001600160a01b0316903480156108fc02916000818181858888f193505050501580156121cc573d6000803e3d6000fd5b5060408051338152602081018c9052908101829052606081018a90526080810189905260a081018890527fd04d64d5a1460d8c5a8c5ffb4d6ddb0f4e5cf774c894a27c5bb73c4fc41698809060c00160405180910390a15050505050509392505050565b60006108c981836116c3565b60006108c9600080516020612f9c833981519152836116c3565b600080600560149054906101000a900460ff1615156001151514156122bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108f4565b506005805460ff60a01b1916600160a01b1790556000828152600760205260409020600481015460038201549091906122f7908390610f25565b8511156123465760405162461bcd60e51b815260206004820152601860248201527f4465706f7369746f7279203a206f766572206d6178506179000000000000000060448201526064016108f4565b6123508286610d39565b9250600083116123985760405162461bcd60e51b81526020600482015260136024820152721e995c9bc81cdd185ada5b99c8185b5bdd5b9d606a1b60448201526064016108f4565b6000670de0b6b3a7640000600260009054906101000a90046001600160a01b03166001600160a01b03166396f0bd616040518163ffffffff1660e01b815260040160206040518083038186803b1580156123f157600080fd5b505afa158015612405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124299190612a51565b6124339088612ecd565b61243d9190612ead565b9050838110156124a35760405162461bcd60e51b815260206004820152602b60248201527f6d696e7461626c65416d6f756e74206973206c657373207468616e207374616b60448201526a34b7339030b6b7bab73a1760a91b60648201526084016108f4565b81600101548411156124ee5760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d1bdc9e4e881cdbdb19081bdd5d60621b60448201526064016108f4565b838260010160008282546125029190612eec565b9091555050600182015468056bc75e2d631000001061255657600060018301556040518581527f065f36f0cc9a946e058a78fcf529ed8629c0ad3f6d065007c3c9162fd2c39d639060200160405180910390a15b60025460405163ef7c6c0f60e01b81526004810183905260248101869052600160448201526001600160a01b039091169063ef7c6c0f90606401600060405180830381600087803b1580156125aa57600080fd5b505af11580156125be573d6000803e3d6000fd5b5050604080516001600160a01b038b16815260208101899052908101899052606081018790526001608082015260a081018490527fef81711614d4ac7faee84826311bec7d949a272a2e7e4f39f3a3b72527767d69925060c001905060405180910390a150506005805460ff60a01b191690559094909350915050565b61264582826116c3565b610d355761265d816001600160a01b03166014612796565b612668836020612796565b604051602001612679929190612b2a565b60408051601f198184030181529082905262461bcd60e51b82526108f491600401612c7c565b6126a982826116c3565b610d355760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556126e13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61272f82826116c3565b15610d355760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610d35828261269f565b606060006127a5836002612ecd565b6127b0906002612e95565b67ffffffffffffffff8111156127d657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612800576020820181803683370190505b509050600360fc1b8160008151811061282957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061286657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061288a846002612ecd565b612895906001612e95565b90505b6001811115612929576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106128d757634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106128fb57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361292281612f33565b9050612898565b508315610d585760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108f4565b80356001600160a01b038116811461298f57600080fd5b919050565b6000602082840312156129a5578081fd5b610d5882612978565b60008060a083850312156129c0578081fd5b6129c983612978565b91508360a0840111156129da578081fd5b50926020919091019150565b6000602082840312156129f7578081fd5b5035919050565b60008060408385031215612a10578182fd5b82359150612a2060208401612978565b90509250929050565b600060208284031215612a3a578081fd5b81356001600160e01b031981168114610d58578182fd5b600060208284031215612a62578081fd5b5051919050565b600080600060608486031215612a7d578081fd5b8335925060208401358015158114612a93578182fd5b929592945050506040919091013590565b60008060408385031215612ab6578182fd5b50508035926020909101359150565b600080600060608486031215612ad9578283fd5b505081359360208301359350604090920135919050565b6000815180845260208085019450808401835b83811015612b1f57815187529582019590820190600101612b03565b509495945050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b62816017850160208801612f03565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b93816028840160208801612f03565b01602801949350505050565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b602081526000610d586020830184612af0565b60a081526000612bf360a0830188612af0565b828103602084810191909152875180835288820192820190845b81811015612c325784516001600160a01b031683529383019391830191600101612c0d565b50508481036040860152612c468189612af0565b925050508281036060840152612c5c8186612af0565b90508281036080840152612c708185612af0565b98975050505050505050565b6020815260008251806020840152612c9b816040850160208701612f03565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b6020808252601d908201527f426f6e644465706f7369746f72793a20636c6f736564206d61726b6574000000604082015260600190565b60208082526019908201527f426f6e644465706f7369746f72793a207a65726f2075696e7400000000000000604082015260600190565b6020808252601d908201527f426f6e644465706f7369746f72793a207a65726f206361706163697479000000604082015260600190565b60208082526024908201527f4465706f7369746f72793a2045544820616d6f756e747320646f206e6f74206d6040820152630c2e8c6d60e31b606082015260800190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b8381526001600160a01b038316602082015260c08101608083604084013760008152949350505050565b60008219821115612ea857612ea8612f65565b500190565b600082612ec857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612ee757612ee7612f65565b500290565b600082821015612efe57612efe612f65565b500390565b60005b83811015612f1e578181015183820152602001612f06565b83811115612f2d576000848401525b50505050565b600081612f4257612f42612f65565b506000190190565b6000600019821415612f5e57612f5e612f65565b5060010190565b634e487b7160e01b600052601160045260246000fdfedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220f5c1f5416533d00f493a6f16fd5412242693b7c9e050bedbb5834d5291e3f56564736f6c63430008040033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "_increaseFlag", + "type": "bool" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_increaseAmount", + "type": "uint256" + } + ], + "name": "ChangedCapacity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "closeTime", + "type": "uint256" + } + ], + "name": "ChangedCloseTime", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "ChangedMaxPayout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_tosPrice", + "type": "uint256" + } + ], + "name": "ChangedPrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + } + ], + "name": "ClosedMarket", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[4]", + "name": "market", + "type": "uint256[4]" + } + ], + "name": "CreatedMarket", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "payout", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isEth", + "type": "bool" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "Deposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tosValuation", + "type": "uint256" + } + ], + "name": "ETHDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockWeeks", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tosValuation", + "type": "uint256" + } + ], + "name": "ETHDepositedWithSTOS", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "calculatorAddress", + "type": "address" + } + ], + "name": "SetCalculator", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "ETHDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "payout_", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lockWeeks", + "type": "uint256" + } + ], + "name": "ETHDepositWithSTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "payout_", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "calculateTosAmountForAsset", + "outputs": [ + { + "internalType": "uint256", + "name": "payout", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "calculator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_increaseFlag", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "_increaseAmount", + "type": "uint256" + } + ], + "name": "changeCapacity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closeTime", + "type": "uint256" + } + ], + "name": "changeCloseTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "changeMaxPayout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tosPrice", + "type": "uint256" + } + ], + "name": "changePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "close", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256[4]", + "name": "_market", + "type": "uint256[4]" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "id_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "deletePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "dtos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBonds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMarketList", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + } + ], + "name": "isOpened", + "outputs": [ + { + "internalType": "bool", + "name": "closedBool", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "marketList", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "markets", + "outputs": [ + { + "internalType": "address", + "name": "quoteToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "capacity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endSaleTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPayout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxPayout", + "type": "uint256" + } + ], + "name": "purchasableAssetAmountAtOneTime", + "outputs": [ + { + "internalType": "uint256", + "name": "maxPayout_", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_calculator", + "type": "address" + } + ], + "name": "setCalculator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "staking", + "outputs": [ + { + "internalType": "contract IStaking", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalMarketCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "treasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + } + ], + "name": "viewMarket", + "outputs": [ + { + "internalType": "address", + "name": "quoteToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "capacity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endSaleTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPayout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/contracts/data/tosv2/abi/BondDepositoryProxy.json b/contracts/data/tosv2/abi/BondDepositoryProxy.json index 6369609..dee13ba 100644 --- a/contracts/data/tosv2/abi/BondDepositoryProxy.json +++ b/contracts/data/tosv2/abi/BondDepositoryProxy.json @@ -1,999 +1,990 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "BondDepositoryProxy", - "sourceName": "contracts/BondDepositoryProxy.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "alive", - "type": "bool" - } - ], - "name": "SetAliveImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" - }, - { - "indexed": true, - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "SetSelectorImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BURNER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POLICY_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROJECT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addPolicy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "addProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliveImplementation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "calculator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dTOS", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint256", - "name": "marketId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakeId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "getSelectorImplementation2", - "outputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "implementation2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tos", - "type": "address" - }, - { - "internalType": "address", - "name": "_staking", - "type": "address" - }, - { - "internalType": "address", - "name": "_treasury", - "type": "address" - }, - { - "internalType": "address", - "name": "_calculator", - "type": "address" - }, - { - "internalType": "address", - "name": "_uniswapV3Factory", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isPolicy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isProxyAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "marketList", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "markets", - "outputs": [ - { - "internalType": "bool", - "name": "method", - "type": "bool" - }, - { - "internalType": "address", - "name": "quoteToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "capacity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endSaleTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPayout", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "metadata", - "outputs": [ - { - "internalType": "address", - "name": "poolAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tosPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalSaleAmount", - "type": "uint256" - }, - { - "internalType": "uint24", - "name": "fee", - "type": "uint24" - }, - { - "internalType": "bool", - "name": "ethMarket", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "metadataList", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseProxy", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "proxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "removePolicy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "removeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "name": "selectorImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setAliveImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alive", - "type": "bool" - } - ], - "name": "setImplementation2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_pause", - "type": "bool" - } - ], - "name": "setProxyPause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - }, - { - "internalType": "address", - "name": "_imp", - "type": "address" - } - ], - "name": "setSelectorImplementations2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract IStaking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tos", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDepositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferPolicyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "transferProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "treasury", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "uniswapV3Factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "userList", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506200003e7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130806200007d565b6200006a7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b13033620000c8565b62000077600033620000c8565b6200017c565b6000828152600e6020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000d48282620000d8565b5050565b6000828152600e602090815260408083206001600160a01b038516845290915290205460ff16620000d4576000828152600e602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001383390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612075806200018c6000396000f3fe60806040526004361061023d5760003560e01c806301ffc9a7146102905780631459457a146102c557806322985246146102e5578063232b956c14610315578063248a9ca31461033557806324d7806c14610355578063282c51f3146103755780632f2ff15d146103a957806336568abe146103c95780633659cfe6146103e957806341c04d5e146104095780634a5df50f1461042b5780634cf088d91461044b57806350d2a27614610483578063550d01a3146104b95780635b549182146104e95780635c4fbd5d146105095780635c60da1b146105295780635cc797d81461053e57806361d027b31461055e57806363a8fd891461057e57806365cb3a831461059857806370480275146105ad57806375829def146105cd57806375b238fc146105ed5780637cb00d25146106215780637cd5f663146106415780638356ca4f1461066157806389f395de146106815780638b8f4a65146106a15780638d4fdb40146106c157806391d14854146106e157806396f1557c146107015780639a202d47146107215780639f4216e814610736578063a217fddf14610756578063b1283e771461076b578063b2abb487146107fb578063b84ef0811461081b578063b911135f1461083b578063be72f2d314610871578063ce3e39c014610886578063d5391393146108a6578063d547741f146108da578063d6343867146108fa578063d6d6817714610910578063e3684e3914610945578063f1c8c922146109e9578063f47f2f1d14610a09578063fad1c85c14610a2957610286565b366102865760405162461bcd60e51b815260206004820152601460248201527331b0b73737ba103932b1b2b4bb329022ba3432b960611b60448201526064015b60405180910390fd5b61028e610a49565b005b34801561029c57600080fd5b506102b06102ab366004611d00565b610af2565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004611b3d565b610b29565b3480156102f157600080fd5b5061030760008051602061202083398151915281565b6040519081526020016102bc565b34801561032157600080fd5b50610307610330366004611cc6565b610c76565b34801561034157600080fd5b50610307610350366004611cc6565b610c97565b34801561036157600080fd5b506102b0610370366004611b23565b610cac565b34801561038157600080fd5b506103077f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b3480156103b557600080fd5b5061028e6103c4366004611cde565b610cc6565b3480156103d557600080fd5b5061028e6103e4366004611cde565b610ce3565b3480156103f557600080fd5b5061028e610404366004611b23565b610d61565b34801561041557600080fd5b50610307600080516020611fe083398151915281565b34801561043757600080fd5b5061028e610446366004611c37565b610e67565b34801561045757600080fd5b5060085461046b906001600160a01b031681565b6040516001600160a01b0390911681526020016102bc565b34801561048f57600080fd5b5061046b61049e366004611d00565b6012602052600090815260409020546001600160a01b031681565b3480156104c557600080fd5b506102b06104d4366004611b23565b60116020526000908152604090205460ff1681565b3480156104f557600080fd5b50600b5461046b906001600160a01b031681565b34801561051557600080fd5b50610307610524366004611cc6565b6110ef565b34801561053557600080fd5b5061046b6110ff565b34801561054a57600080fd5b5061028e610559366004611ba1565b611110565b34801561056a57600080fd5b5060095461046b906001600160a01b031681565b34801561058a57600080fd5b50600f546102b09060ff1681565b3480156105a457600080fd5b5061028e61113f565b3480156105b957600080fd5b5061028e6105c8366004611b23565b61117e565b3480156105d957600080fd5b5061028e6105e8366004611b23565b6111be565b3480156105f957600080fd5b506103077fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561062d57600080fd5b5061028e61063c366004611cac565b611271565b34801561064d57600080fd5b5061028e61065c366004611bfc565b6112b8565b34801561066d57600080fd5b5061028e61067c366004611b23565b6112e8565b34801561068d57600080fd5b5060065461046b906001600160a01b031681565b3480156106ad57600080fd5b5061046b6106bc366004611cc6565b611372565b3480156106cd57600080fd5b5061046b6106dc366004611d00565b61137d565b3480156106ed57600080fd5b506102b06106fc366004611cde565b611455565b34801561070d57600080fd5b5061028e61071c366004611b23565b611480565b34801561072d57600080fd5b5061028e6114b0565b34801561074257600080fd5b5061046b610751366004611cc6565b6114fc565b34801561076257600080fd5b50610307600081565b34801561077757600080fd5b506107c4610786366004611cc6565b6000602081905290815260409020805460018201546002830154600384015460049094015460ff8416946101009094046001600160a01b0316939086565b6040805196151587526001600160a01b039095166020870152938501929092526060840152608083015260a082015260c0016102bc565b34801561080757600080fd5b5060075461046b906001600160a01b031681565b34801561082757600080fd5b5061028e610836366004611b23565b611526565b34801561084757600080fd5b5061046b610856366004611cc6565b6010602052600090815260409020546001600160a01b031681565b34801561087d57600080fd5b5061028e611563565b34801561089257600080fd5b50600a5461046b906001600160a01b031681565b3480156108b257600080fd5b506103077ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156108e657600080fd5b5061028e6108f5366004611cde565b611593565b34801561090657600080fd5b50610307600c5481565b34801561091c57600080fd5b5061093061092b366004611bd3565b6115b0565b604080519283526020830191909152016102bc565b34801561095157600080fd5b506109ab610960366004611cc6565b6001602081905260009182526040909120805491810154600282015460038301546004909301546001600160a01b03909416939192909162ffffff8116906301000000900460ff1686565b604080516001600160a01b039097168752602087019590955293850192909252606084015262ffffff166080830152151560a082015260c0016102bc565b3480156109f557600080fd5b5061028e610a04366004611b23565b6115ec565b348015610a1557600080fd5b506102b0610a24366004611b23565b611690565b348015610a3557600080fd5b506102b0610a44366004611b23565b61169c565b6000610a606000356001600160e01b03191661137d565b90506001600160a01b03811615801590610a7d5750600f5460ff16155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161027d565b3660008037600080366000845af43d6000803e808015610ae8573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610b2357506301ffc9a760e01b6001600160e01b03198316145b92915050565b610b3233611690565b610b4e5760405162461bcd60e51b815260040161027d90611e3e565b846001600160a01b038116610b755760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610b9c5760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610bc35760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610bea5760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610c115760405162461bcd60e51b815260040161027d90611eb6565b5050600680546001600160a01b03199081166001600160a01b039a8b1617909155600880548216988a1698909817909755505060098054861694871694909417909355600a8054851692861692909217909155600b8054909316931692909217905550565b60038181548110610c8657600080fd5b600091825260209091200154905081565b6000908152600e602052604090206001015490565b6000610b23600080516020611fe083398151915283611455565b610ccf82610c97565b610cd981336116b6565b610aed838361171a565b6001600160a01b0381163314610d535760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161027d565b610d5d82826117a0565b5050565b610d6a33611690565b610d865760405162461bcd60e51b815260040161027d90611e3e565b6001600160a01b038116610dcc5760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b604482015260640161027d565b806001600160a01b0316610de06000611807565b6001600160a01b03161415610e235760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161027d565b610e308160006001611822565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610e7033611690565b610e8c5760405162461bcd60e51b815260040161027d90611e3e565b81610ed95760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161027d565b6001600160a01b03811660009081526011602052604090205460ff16610f3c5760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b604482015260640161027d565b60005b828110156110e957816001600160a01b031660126000868685818110610f7557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610f8a9190611d00565b6001600160e01b03191681526020810191909152604001600020546001600160a01b03161415610ffc5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161027d565b816012600086868581811061102157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110369190611d00565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061108c57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110a19190611d00565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806110e181611fae565b915050610f3f565b50505050565b60048181548110610c8657600080fd5b600061110b6000611807565b905090565b61111933611690565b6111355760405162461bcd60e51b815260040161027d90611e3e565b610d5d82826118ab565b6111483361169c565b6111645760405162461bcd60e51b815260040161027d90611eeb565b61117c60008051602061202083398151915233610ce3565b565b61118733611690565b6111a35760405162461bcd60e51b815260040161027d90611e3e565b6111bb600080516020611fe083398151915282610cc6565b50565b6111c733610cac565b806111d657506111d633611690565b6111f25760405162461bcd60e51b815260040161027d90611dca565b6001600160a01b0381166112185760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b03821614156112415760405162461bcd60e51b815260040161027d90611e86565b611259600080516020611fe083398151915282610cc6565b6111bb600080516020611fe083398151915233610ce3565b61127a33610cac565b80611289575061128933611690565b6112a55760405162461bcd60e51b815260040161027d90611dca565b600f805460ff1916911515919091179055565b6112c133611690565b6112dd5760405162461bcd60e51b815260040161027d90611e3e565b610aed838383611822565b6112f133611690565b61130d5760405162461bcd60e51b815260040161027d90611e3e565b6001600160a01b0381166113335760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b038216141561135c5760405162461bcd60e51b815260040161027d90611e86565b611367600082610cc6565b6111bb600033610ce3565b6000610b2382611807565b6001600160e01b031981166000908152601260205260408120546001600160a01b03166113cb575050600080526010602052600080516020612000833981519152546001600160a01b031690565b6001600160e01b031982166000908152601260209081526040808320546001600160a01b03168352601190915290205460ff161561142957506001600160e01b0319166000908152601260205260409020546001600160a01b031690565b5050600080526010602052600080516020612000833981519152546001600160a01b031690565b919050565b6000918252600e602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61148933611690565b6114a55760405162461bcd60e51b815260040161027d90611e3e565b6111bb60008261190a565b6114b933610cac565b806114c857506114c833611690565b6114e45760405162461bcd60e51b815260040161027d90611dca565b61117c600080516020611fe083398151915233610ce3565b6005818154811061150c57600080fd5b6000918252602090912001546001600160a01b0316905081565b61152f33611690565b61154b5760405162461bcd60e51b815260040161027d90611e3e565b6111bb60008051602061202083398151915282610cc6565b61156c33611690565b6115885760405162461bcd60e51b815260040161027d90611e3e565b61117c600033610ce3565b61159c82610c97565b6115a681336116b6565b610aed83836117a0565b600260205281600052604060002081815481106115cc57600080fd5b600091825260209091206002909102018054600190910154909250905082565b6115f53361169c565b6116115760405162461bcd60e51b815260040161027d90611eeb565b6001600160a01b0381166116375760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b03821614156116605760405162461bcd60e51b815260040161027d90611e86565b61167860008051602061202083398151915282610cc6565b6111bb60008051602061202083398151915233610ce3565b6000610b238183611455565b6000610b2360008051602061202083398151915283611455565b6116c08282611455565b610d5d576116d8816001600160a01b03166014611914565b6116e3836020611914565b6040516020016116f4929190611d28565b60408051601f198184030181529082905262461bcd60e51b825261027d91600401611d97565b6117248282611455565b610d5d576000828152600e602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561175c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117aa8282611455565b15610d5d576000828152600e602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601060205260409020546001600160a01b031690565b6001600160a01b0383163b6118775760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b604482015260640161027d565b80156118a557600082815260106020526040902080546001600160a01b0319166001600160a01b0385161790555b610aed83825b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610d5d828261171a565b60606000611923836002611f4c565b61192e906002611f34565b6001600160401b0381111561195357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561197d576020820181803683370190505b509050600360fc1b816000815181106119a657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119e357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611a07846002611f4c565b611a12906001611f34565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a5457634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a7857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a9f81611f97565b9050611a15565b508315611af55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161027d565b9392505050565b80356001600160a01b038116811461145057600080fd5b8035801515811461145057600080fd5b600060208284031215611b34578081fd5b611af582611afc565b600080600080600060a08688031215611b54578081fd5b611b5d86611afc565b9450611b6b60208701611afc565b9350611b7960408701611afc565b9250611b8760608701611afc565b9150611b9560808701611afc565b90509295509295909350565b60008060408385031215611bb3578182fd5b611bbc83611afc565b9150611bca60208401611b13565b90509250929050565b60008060408385031215611be5578182fd5b611bee83611afc565b946020939093013593505050565b600080600060608486031215611c10578283fd5b611c1984611afc565b925060208401359150611c2e60408501611b13565b90509250925092565b600080600060408486031215611c4b578283fd5b83356001600160401b0380821115611c61578485fd5b818601915086601f830112611c74578485fd5b813581811115611c82578586fd5b8760208260051b8501011115611c96578586fd5b602092830195509350611c2e9186019050611afc565b600060208284031215611cbd578081fd5b611af582611b13565b600060208284031215611cd7578081fd5b5035919050565b60008060408385031215611cf0578182fd5b82359150611bca60208401611afc565b600060208284031215611d11578081fd5b81356001600160e01b031981168114611af5578182fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611d5a816017850160208801611f6b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611d8b816028840160208801611f6b565b01602801949350505050565b6020815260008251806020840152611db6816040850160208701611f6b565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b6020808252601b908201527a426f6e644465706f7369746f72793a7a65726f206164647265737360281b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b60008219821115611f4757611f47611fc9565b500190565b6000816000190483118215151615611f6657611f66611fc9565b500290565b60005b83811015611f86578181015183820152602001611f6e565b838111156110e95750506000910152565b600081611fa657611fa6611fc9565b506000190190565b6000600019821415611fc257611fc2611fc9565b5060010190565b634e487b7160e01b600052601160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1306e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220d7290cb220505a38e211c4fa7ee357683089f7404b0009b162b666c941559aec64736f6c63430008040033", - "deployedBytecode": "0x60806040526004361061023d5760003560e01c806301ffc9a7146102905780631459457a146102c557806322985246146102e5578063232b956c14610315578063248a9ca31461033557806324d7806c14610355578063282c51f3146103755780632f2ff15d146103a957806336568abe146103c95780633659cfe6146103e957806341c04d5e146104095780634a5df50f1461042b5780634cf088d91461044b57806350d2a27614610483578063550d01a3146104b95780635b549182146104e95780635c4fbd5d146105095780635c60da1b146105295780635cc797d81461053e57806361d027b31461055e57806363a8fd891461057e57806365cb3a831461059857806370480275146105ad57806375829def146105cd57806375b238fc146105ed5780637cb00d25146106215780637cd5f663146106415780638356ca4f1461066157806389f395de146106815780638b8f4a65146106a15780638d4fdb40146106c157806391d14854146106e157806396f1557c146107015780639a202d47146107215780639f4216e814610736578063a217fddf14610756578063b1283e771461076b578063b2abb487146107fb578063b84ef0811461081b578063b911135f1461083b578063be72f2d314610871578063ce3e39c014610886578063d5391393146108a6578063d547741f146108da578063d6343867146108fa578063d6d6817714610910578063e3684e3914610945578063f1c8c922146109e9578063f47f2f1d14610a09578063fad1c85c14610a2957610286565b366102865760405162461bcd60e51b815260206004820152601460248201527331b0b73737ba103932b1b2b4bb329022ba3432b960611b60448201526064015b60405180910390fd5b61028e610a49565b005b34801561029c57600080fd5b506102b06102ab366004611d00565b610af2565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004611b3d565b610b29565b3480156102f157600080fd5b5061030760008051602061202083398151915281565b6040519081526020016102bc565b34801561032157600080fd5b50610307610330366004611cc6565b610c76565b34801561034157600080fd5b50610307610350366004611cc6565b610c97565b34801561036157600080fd5b506102b0610370366004611b23565b610cac565b34801561038157600080fd5b506103077f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b3480156103b557600080fd5b5061028e6103c4366004611cde565b610cc6565b3480156103d557600080fd5b5061028e6103e4366004611cde565b610ce3565b3480156103f557600080fd5b5061028e610404366004611b23565b610d61565b34801561041557600080fd5b50610307600080516020611fe083398151915281565b34801561043757600080fd5b5061028e610446366004611c37565b610e67565b34801561045757600080fd5b5060085461046b906001600160a01b031681565b6040516001600160a01b0390911681526020016102bc565b34801561048f57600080fd5b5061046b61049e366004611d00565b6012602052600090815260409020546001600160a01b031681565b3480156104c557600080fd5b506102b06104d4366004611b23565b60116020526000908152604090205460ff1681565b3480156104f557600080fd5b50600b5461046b906001600160a01b031681565b34801561051557600080fd5b50610307610524366004611cc6565b6110ef565b34801561053557600080fd5b5061046b6110ff565b34801561054a57600080fd5b5061028e610559366004611ba1565b611110565b34801561056a57600080fd5b5060095461046b906001600160a01b031681565b34801561058a57600080fd5b50600f546102b09060ff1681565b3480156105a457600080fd5b5061028e61113f565b3480156105b957600080fd5b5061028e6105c8366004611b23565b61117e565b3480156105d957600080fd5b5061028e6105e8366004611b23565b6111be565b3480156105f957600080fd5b506103077fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561062d57600080fd5b5061028e61063c366004611cac565b611271565b34801561064d57600080fd5b5061028e61065c366004611bfc565b6112b8565b34801561066d57600080fd5b5061028e61067c366004611b23565b6112e8565b34801561068d57600080fd5b5060065461046b906001600160a01b031681565b3480156106ad57600080fd5b5061046b6106bc366004611cc6565b611372565b3480156106cd57600080fd5b5061046b6106dc366004611d00565b61137d565b3480156106ed57600080fd5b506102b06106fc366004611cde565b611455565b34801561070d57600080fd5b5061028e61071c366004611b23565b611480565b34801561072d57600080fd5b5061028e6114b0565b34801561074257600080fd5b5061046b610751366004611cc6565b6114fc565b34801561076257600080fd5b50610307600081565b34801561077757600080fd5b506107c4610786366004611cc6565b6000602081905290815260409020805460018201546002830154600384015460049094015460ff8416946101009094046001600160a01b0316939086565b6040805196151587526001600160a01b039095166020870152938501929092526060840152608083015260a082015260c0016102bc565b34801561080757600080fd5b5060075461046b906001600160a01b031681565b34801561082757600080fd5b5061028e610836366004611b23565b611526565b34801561084757600080fd5b5061046b610856366004611cc6565b6010602052600090815260409020546001600160a01b031681565b34801561087d57600080fd5b5061028e611563565b34801561089257600080fd5b50600a5461046b906001600160a01b031681565b3480156108b257600080fd5b506103077ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156108e657600080fd5b5061028e6108f5366004611cde565b611593565b34801561090657600080fd5b50610307600c5481565b34801561091c57600080fd5b5061093061092b366004611bd3565b6115b0565b604080519283526020830191909152016102bc565b34801561095157600080fd5b506109ab610960366004611cc6565b6001602081905260009182526040909120805491810154600282015460038301546004909301546001600160a01b03909416939192909162ffffff8116906301000000900460ff1686565b604080516001600160a01b039097168752602087019590955293850192909252606084015262ffffff166080830152151560a082015260c0016102bc565b3480156109f557600080fd5b5061028e610a04366004611b23565b6115ec565b348015610a1557600080fd5b506102b0610a24366004611b23565b611690565b348015610a3557600080fd5b506102b0610a44366004611b23565b61169c565b6000610a606000356001600160e01b03191661137d565b90506001600160a01b03811615801590610a7d5750600f5460ff16155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c7365000000604482015260640161027d565b3660008037600080366000845af43d6000803e808015610ae8573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610b2357506301ffc9a760e01b6001600160e01b03198316145b92915050565b610b3233611690565b610b4e5760405162461bcd60e51b815260040161027d90611e3e565b846001600160a01b038116610b755760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610b9c5760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610bc35760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610bea5760405162461bcd60e51b815260040161027d90611eb6565b846001600160a01b038116610c115760405162461bcd60e51b815260040161027d90611eb6565b5050600680546001600160a01b03199081166001600160a01b039a8b1617909155600880548216988a1698909817909755505060098054861694871694909417909355600a8054851692861692909217909155600b8054909316931692909217905550565b60038181548110610c8657600080fd5b600091825260209091200154905081565b6000908152600e602052604090206001015490565b6000610b23600080516020611fe083398151915283611455565b610ccf82610c97565b610cd981336116b6565b610aed838361171a565b6001600160a01b0381163314610d535760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161027d565b610d5d82826117a0565b5050565b610d6a33611690565b610d865760405162461bcd60e51b815260040161027d90611e3e565b6001600160a01b038116610dcc5760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b604482015260640161027d565b806001600160a01b0316610de06000611807565b6001600160a01b03161415610e235760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b604482015260640161027d565b610e308160006001611822565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610e7033611690565b610e8c5760405162461bcd60e51b815260040161027d90611e3e565b81610ed95760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f604482015260640161027d565b6001600160a01b03811660009081526011602052604090205460ff16610f3c5760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b604482015260640161027d565b60005b828110156110e957816001600160a01b031660126000868685818110610f7557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610f8a9190611d00565b6001600160e01b03191681526020810191909152604001600020546001600160a01b03161415610ffc5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d70000000604482015260640161027d565b816012600086868581811061102157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110369190611d00565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061108c57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110a19190611d00565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806110e181611fae565b915050610f3f565b50505050565b60048181548110610c8657600080fd5b600061110b6000611807565b905090565b61111933611690565b6111355760405162461bcd60e51b815260040161027d90611e3e565b610d5d82826118ab565b6111483361169c565b6111645760405162461bcd60e51b815260040161027d90611eeb565b61117c60008051602061202083398151915233610ce3565b565b61118733611690565b6111a35760405162461bcd60e51b815260040161027d90611e3e565b6111bb600080516020611fe083398151915282610cc6565b50565b6111c733610cac565b806111d657506111d633611690565b6111f25760405162461bcd60e51b815260040161027d90611dca565b6001600160a01b0381166112185760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b03821614156112415760405162461bcd60e51b815260040161027d90611e86565b611259600080516020611fe083398151915282610cc6565b6111bb600080516020611fe083398151915233610ce3565b61127a33610cac565b80611289575061128933611690565b6112a55760405162461bcd60e51b815260040161027d90611dca565b600f805460ff1916911515919091179055565b6112c133611690565b6112dd5760405162461bcd60e51b815260040161027d90611e3e565b610aed838383611822565b6112f133611690565b61130d5760405162461bcd60e51b815260040161027d90611e3e565b6001600160a01b0381166113335760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b038216141561135c5760405162461bcd60e51b815260040161027d90611e86565b611367600082610cc6565b6111bb600033610ce3565b6000610b2382611807565b6001600160e01b031981166000908152601260205260408120546001600160a01b03166113cb575050600080526010602052600080516020612000833981519152546001600160a01b031690565b6001600160e01b031982166000908152601260209081526040808320546001600160a01b03168352601190915290205460ff161561142957506001600160e01b0319166000908152601260205260409020546001600160a01b031690565b5050600080526010602052600080516020612000833981519152546001600160a01b031690565b919050565b6000918252600e602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61148933611690565b6114a55760405162461bcd60e51b815260040161027d90611e3e565b6111bb60008261190a565b6114b933610cac565b806114c857506114c833611690565b6114e45760405162461bcd60e51b815260040161027d90611dca565b61117c600080516020611fe083398151915233610ce3565b6005818154811061150c57600080fd5b6000918252602090912001546001600160a01b0316905081565b61152f33611690565b61154b5760405162461bcd60e51b815260040161027d90611e3e565b6111bb60008051602061202083398151915282610cc6565b61156c33611690565b6115885760405162461bcd60e51b815260040161027d90611e3e565b61117c600033610ce3565b61159c82610c97565b6115a681336116b6565b610aed83836117a0565b600260205281600052604060002081815481106115cc57600080fd5b600091825260209091206002909102018054600190910154909250905082565b6115f53361169c565b6116115760405162461bcd60e51b815260040161027d90611eeb565b6001600160a01b0381166116375760405162461bcd60e51b815260040161027d90611e0c565b336001600160a01b03821614156116605760405162461bcd60e51b815260040161027d90611e86565b61167860008051602061202083398151915282610cc6565b6111bb60008051602061202083398151915233610ce3565b6000610b238183611455565b6000610b2360008051602061202083398151915283611455565b6116c08282611455565b610d5d576116d8816001600160a01b03166014611914565b6116e3836020611914565b6040516020016116f4929190611d28565b60408051601f198184030181529082905262461bcd60e51b825261027d91600401611d97565b6117248282611455565b610d5d576000828152600e602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561175c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117aa8282611455565b15610d5d576000828152600e602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601060205260409020546001600160a01b031690565b6001600160a01b0383163b6118775760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b604482015260640161027d565b80156118a557600082815260106020526040902080546001600160a01b0319166001600160a01b0385161790555b610aed83825b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610d5d828261171a565b60606000611923836002611f4c565b61192e906002611f34565b6001600160401b0381111561195357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561197d576020820181803683370190505b509050600360fc1b816000815181106119a657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119e357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611a07846002611f4c565b611a12906001611f34565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a5457634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a7857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a9f81611f97565b9050611a15565b508315611af55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161027d565b9392505050565b80356001600160a01b038116811461145057600080fd5b8035801515811461145057600080fd5b600060208284031215611b34578081fd5b611af582611afc565b600080600080600060a08688031215611b54578081fd5b611b5d86611afc565b9450611b6b60208701611afc565b9350611b7960408701611afc565b9250611b8760608701611afc565b9150611b9560808701611afc565b90509295509295909350565b60008060408385031215611bb3578182fd5b611bbc83611afc565b9150611bca60208401611b13565b90509250929050565b60008060408385031215611be5578182fd5b611bee83611afc565b946020939093013593505050565b600080600060608486031215611c10578283fd5b611c1984611afc565b925060208401359150611c2e60408501611b13565b90509250925092565b600080600060408486031215611c4b578283fd5b83356001600160401b0380821115611c61578485fd5b818601915086601f830112611c74578485fd5b813581811115611c82578586fd5b8760208260051b8501011115611c96578586fd5b602092830195509350611c2e9186019050611afc565b600060208284031215611cbd578081fd5b611af582611b13565b600060208284031215611cd7578081fd5b5035919050565b60008060408385031215611cf0578182fd5b82359150611bca60208401611afc565b600060208284031215611d11578081fd5b81356001600160e01b031981168114611af5578182fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611d5a816017850160208801611f6b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611d8b816028840160208801611f6b565b01602801949350505050565b6020815260008251806020840152611db6816040850160208701611f6b565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b6020808252601b908201527a426f6e644465706f7369746f72793a7a65726f206164647265737360281b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b60008219821115611f4757611f47611fc9565b500190565b6000816000190483118215151615611f6657611f66611fc9565b500290565b60005b83811015611f86578181015183820152602001611f6e565b838111156110e95750506000910152565b600081611fa657611fa6611fc9565b506000190190565b6000600019821415611fc257611fc2611fc9565b5060010190565b634e487b7160e01b600052601160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1306e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220d7290cb220505a38e211c4fa7ee357683089f7404b0009b162b666c941559aec64736f6c63430008040033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" + } + ], + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BURNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "calculator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dTOS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "deposits", + "outputs": [ + { + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tos", + "type": "address" + }, + { + "internalType": "address", + "name": "_staking", + "type": "address" + }, + { + "internalType": "address", + "name": "_treasury", + "type": "address" + }, + { + "internalType": "address", + "name": "_calculator", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniswapV3Factory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "marketList", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "method", + "type": "bool" + }, + { + "internalType": "address", + "name": "quoteToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "capacity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endSaleTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPayout", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "metadata", + "outputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSaleAmount", + "type": "uint256" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "bool", + "name": "ethMarket", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "metadataList", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + }, + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "staking", + "outputs": [ + { + "internalType": "contract IStaking", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalDepositCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferPolicyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "treasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userList", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/contracts/src/trimAbis.ts b/contracts/src/trimAbis.ts index e2f7d0d..6ee796b 100644 --- a/contracts/src/trimAbis.ts +++ b/contracts/src/trimAbis.ts @@ -6,7 +6,8 @@ const trimAbis = () => { const contracts = fs.readdirSync(dir) for (const contract of contracts) { - const abiFiles = fs.readdirSync(path.join(dir, contract, 'abi')) + const thisAbiDirectory = path.join(dir, contract, 'abi') + const abiFiles = fs.readdirSync(thisAbiDirectory) for (const abiFileName of abiFiles) { const abiFilePath = path.join(dir, contract, 'abi', abiFileName) const abiFileContent = fs.readFileSync(abiFilePath, 'utf8') @@ -17,7 +18,7 @@ const trimAbis = () => { console.log('test') console.log(JSON.stringify(abiObject.abi, null, 2)) fs.writeFile( - path.join(abiFilePath, `${abiFileName}.json`), + path.join(thisAbiDirectory, abiFileName), JSON.stringify(abiObject.abi, null, 2), 'utf8', (err) => {