{
  "_format": "hh-sol-artifact-1",
  "contractName": "VenusERC4626Factory",
  "sourceName": "contracts/ERC4626/VenusERC4626Factory.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loopsLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requiredLoops",
          "type": "uint256"
        }
      ],
      "name": "MaxLoopsLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "calledContract",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        }
      ],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VenusERC4626Factory__ERC4626AlreadyExists",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VenusERC4626Factory__InvalidVToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract VTokenInterface",
          "name": "vToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract ERC4626Upgradeable",
          "name": "vault",
          "type": "address"
        }
      ],
      "name": "CreateERC4626",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLoopsLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newmaxLoopsLimit",
          "type": "uint256"
        }
      ],
      "name": "MaxLoopsLimitUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAccessControlManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAccessControlManager",
          "type": "address"
        }
      ],
      "name": "NewAccessControlManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "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": "oldRecipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "RewardRecipientUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "SALT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accessControlManager",
      "outputs": [
        {
          "internalType": "contract IAccessControlManagerV8",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "beacon",
      "outputs": [
        {
          "internalType": "contract UpgradeableBeacon",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken",
          "type": "address"
        }
      ],
      "name": "computeVaultAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken",
          "type": "address"
        }
      ],
      "name": "createERC4626",
      "outputs": [
        {
          "internalType": "contract ERC4626Upgradeable",
          "name": "vault",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken",
          "type": "address"
        }
      ],
      "name": "createdVaults",
      "outputs": [
        {
          "internalType": "contract ERC4626Upgradeable",
          "name": "vault",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolRegistryAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rewardRecipientAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "venusERC4626Implementation",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "loopsLimitNumber",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLoopsLimit",
      "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": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolRegistry",
      "outputs": [
        {
          "internalType": "contract PoolRegistryInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "setAccessControlManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loopsLimit",
          "type": "uint256"
        }
      ],
      "name": "setMaxLoopsLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRecipient",
          "type": "address"
        }
      ],
      "name": "setRewardRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b610105565b600054610100900460ff161561004f5760405162461bcd60e51b8152600401610046906100a5565b60405180910390fd5b60005460ff908116146100a3576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161009a916100f6565b60405180910390a15b565b602080825281016100f081602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100f0565b612161806101146000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063afcff50f116100a2578063be26317e11610071578063be26317e14610254578063e30c39781461025d578063e521136f1461026e578063f2fde38b14610281578063f7013ef61461029457600080fd5b8063afcff50f146101d3578063b4a0bdf3146101e6578063b599410a146101f7578063ba9a91a51461022057600080fd5b806379ba5097116100e957806379ba50971461018157806380d45a2d146101895780638da5cb5b1461019c578063a9e50471146101ad578063abeccaa4146101c057600080fd5b80630e32cb861461011b57806317f333401461013057806359659e9014610159578063715018a614610179575b600080fd5b61012e610129366004610e07565b6102a7565b005b60fd54610143906001600160a01b031681565b6040516101509190610e3f565b60405180910390f35b60fb5461016c906001600160a01b031681565b6040516101509190610e7d565b61012e6102bb565b61012e6102cf565b61012e610197366004610e9c565b61030d565b6033546001600160a01b0316610143565b6101436101bb366004610e07565b610354565b61016c6101ce366004610e07565b61046a565b60fc5461016c906001600160a01b031681565b6097546001600160a01b031661016c565b61016c610205366004610e07565b60fe602052600090815260409020546001600160a01b031681565b6102477f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b981565b6040516101509190610ec3565b61024760c95481565b6065546001600160a01b0316610143565b61012e61027c366004610e07565b6107c4565b61012e61028f366004610e07565b610867565b61012e6102a2366004610ed1565b6108d8565b6102af610ac3565b6102b881610aed565b50565b6102c3610ac3565b6102cd6000610b72565b565b60655433906001600160a01b031681146103045760405162461bcd60e51b81526004016102fb90610f92565b60405180910390fd5b6102b881610b72565b61034b6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250610b8b565b6102b881610c29565b600060ff60f81b307f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b96040518060200161038d90610dbb565b601f1982820381018352601f90910116604081905260fb546001600160a01b03169063189acdbd60e31b906103c6908990602401610e3f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b03199095169490941790935251610405939201610ff8565b60408051601f1981840301815290829052610423929160200161103a565b6040516020818303038152906040528051906020012060405160200161044c949392919061108a565b60408051601f19818403018152919052805160209091012092915050565b600061047582610c84565b6001600160a01b03828116600090815260fe602052604090205416156104ae57604051634fa32ea760e01b815260040160405180910390fd5b60008290506000816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906110f1565b905060fc60009054906101000a90046001600160a01b03166001600160a01b031663266e0a7f82846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061111d565b6040518363ffffffff1660e01b81526004016105bd92919061113e565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe919061111d565b6001600160a01b0316846001600160a01b03161461062f57604051630a74323b60e21b815260040160405180910390fd5b60fb546040516000917f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9916001600160a01b039091169063189acdbd60e31b9061067d908990602401610e3f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516106ba90610dbb565b6106c5929190610ff8565b8190604051809103906000f59050801580156106e5573d6000803e3d6000fd5b5060975460fd5460c9546033546040516320f08d2d60e11b81529495506001600160a01b03808716956341e11a5a9561072c95908316949083169390921690600401611160565b600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b505050506001600160a01b03858116600090815260fe602052604080822080546001600160a01b0319168585169081179091559051939650869390928616917fcbd4e5d1362721c7fd10daaabb1a046344447d4798be55684b8a6b4fc1765d7291a3505050919050565b6108026040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250610b8b565b61080b81610c84565b60fd546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a360fd80546001600160a01b0319166001600160a01b0392909216919091179055565b61086f610ac3565b606580546001600160a01b0383166001600160a01b031990911681179091556108a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff16158080156108f85750600054600160ff909116105b806109125750303b158015610912575060005460ff166001145b61092e5760405162461bcd60e51b81526004016102fb906111e9565b6000805460ff191660011790558015610951576000805461ff0019166101001790555b61095a86610c84565b61096385610c84565b61096c84610c84565b61097583610c84565b61097e86610cab565b60fc80546001600160a01b038088166001600160a01b03199283161790925560fd8054928716929091169190911790556109b782610c29565b826040516109c490610dc8565b6109ce9190610e3f565b604051809103906000f0801580156109ea573d6000803e3d6000fd5b5060fb80546001600160a01b03929092166001600160a01b03199092168217905563f2fde38b610a226033546001600160a01b031690565b6040518263ffffffff1660e01b8152600401610a3e9190610e3f565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050508015610abb576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ab29060019061120d565b60405180910390a15b505050505050565b6033546001600160a01b031633146102cd5760405162461bcd60e51b81526004016102fb9061121b565b6001600160a01b038116610b135760405162461bcd60e51b81526004016102fb90611297565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b66908390859061113e565b60405180910390a15050565b606580546001600160a01b03191690556102b881610ce3565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90610bbe9033908690600401610ff8565b602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906112ba565b905080610c2557333083604051634a3fa29360e01b81526004016102fb939291906112db565b5050565b60c9548111610c4a5760405162461bcd60e51b81526004016102fb90611347565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610b669083908590611357565b6001600160a01b0381166102b8576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16610cd25760405162461bcd60e51b81526004016102fb906113ba565b610cda610d35565b6102b881610d64565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d5c5760405162461bcd60e51b81526004016102fb906113ba565b6102cd610d8b565b600054610100900460ff166102af5760405162461bcd60e51b81526004016102fb906113ba565b600054610100900460ff16610db25760405162461bcd60e51b81526004016102fb906113ba565b6102cd33610b72565b6107ea806113cb83390190565b61057780611bb583390190565b60006001600160a01b0382165b92915050565b610df181610dd5565b81146102b857600080fd5b8035610de281610de8565b600060208284031215610e1c57610e1c600080fd5b6000610e288484610dfc565b949350505050565b610e3981610dd5565b82525050565b60208101610de28284610e30565b60006001600160a01b038216610de2565b6000610de282610e4d565b6000610de282610e5e565b610e3981610e69565b60208101610de28284610e74565b80610df1565b8035610de281610e8b565b600060208284031215610eb157610eb1600080fd5b6000610e288484610e91565b80610e39565b60208101610de28284610ebd565b600080600080600060a08688031215610eec57610eec600080fd5b6000610ef88888610dfc565b9550506020610f0988828901610dfc565b9450506040610f1a88828901610dfc565b9350506060610f2b88828901610dfc565b9250506080610f3c88828901610e91565b9150509295509295909350565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610de281610f49565b60005b83811015610fbd578181015183820152602001610fa5565b50506000910152565b6000610fd0825190565b808452602084019350610fe7818560208601610fa2565b601f01601f19169290920192915050565b604081016110068285610e30565b8181036020830152610e288184610fc6565b6000611022825190565b611030818560208601610fa2565b9290920192915050565b60006110468285611018565b9150610e288284611018565b6001600160f81b03198116610e39565b6000610de28260601b90565b6000610de282611062565b610e3961108582610dd5565b61106e565b60006110968287611052565b6001820191506110a68286611079565b6014820191506110b68285610ebd565b6020820191506110c68284610ebd565b50602001949350505050565b6000610de282610dd5565b610df1816110d2565b8051610de2816110dd565b60006020828403121561110657611106600080fd5b6000610e2884846110e6565b8051610de281610de8565b60006020828403121561113257611132600080fd5b6000610e288484611112565b6040810161114c8285610e30565b6111596020830184610e30565b9392505050565b6080810161116e8287610e30565b61117b6020830186610e30565b6111886040830185610ebd565b6111956060830184610e30565b95945050505050565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610f8b565b60208082528101610de28161119e565b600060ff8216610de2565b610e39816111f9565b60208101610de28284611204565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604083015260608201610de2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610f8b565b60208082528101610de281611255565b801515610df1565b8051610de2816112a7565b6000602082840312156112cf576112cf600080fd5b6000610e2884846112af565b606081016112e98286610e30565b6112f66020830185610e30565b81810360408301526111958184610fc6565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150610f8b565b60208082528101610de281611308565b604081016113658285610ebd565b6111596020830184610ebd565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610f8b565b60208082528101610de28161137256fe60806040526040516107ea3803806107ea8339810160408190526100229161045d565b61002e82826000610035565b505061063a565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104b4565b836101f7565b505b505050565b6001600160a01b0381163b6101265760405162461bcd60e51b815260040161011d9061051a565b60405180910390fd5b61019a816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018b91906104b4565b6001600160a01b03163b151590565b6101b65760405162461bcd60e51b815260040161011d90610577565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061021c83836040518060600160405280602781526020016107c360279139610225565b90505b92915050565b6060600080856001600160a01b03168560405161024291906105a9565b600060405180830381855af49150503d806000811461027d576040519150601f19603f3d011682016040523d82523d6000602084013e610282565b606091505b5090925090506102948683838761029e565b9695505050505050565b606083156102dd5782516000036102d6576001600160a01b0385163b6102d65760405162461bcd60e51b815260040161011d906105bc565b50816102e7565b6102e783836102ef565b949350505050565b8151156102ff5781518083602001fd5b8060405162461bcd60e51b815260040161011d9190610629565b60006001600160a01b03821661021f565b61033381610319565b811461033e57600080fd5b50565b805161021f8161032a565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103875761038761034c565b6040525050565b600061039960405190565b90506103a58282610362565b919050565b60006001600160401b038211156103c3576103c361034c565b601f19601f83011660200192915050565b60005b838110156103ef5781810151838201526020016103d7565b50506000910152565b600061040b610406846103aa565b61038e565b90508281526020810184848401111561042657610426600080fd5b6104318482856103d4565b509392505050565b600082601f83011261044d5761044d600080fd5b81516102e78482602086016103f8565b6000806040838503121561047357610473600080fd5b600061047f8585610341565b92505060208301516001600160401b0381111561049e5761049e600080fd5b6104aa85828601610439565b9150509250929050565b6000602082840312156104c9576104c9600080fd5b60006102e78484610341565b602581526000602082017f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e8152641d1c9858dd60da1b602082015291505b5060400190565b6020808252810161021f816104d5565b603081526000602082017f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206981526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60208201529150610513565b6020808252810161021f8161052a565b6000610591825190565b61059f8185602086016103d4565b9290920192915050565b60006105b58284610587565b9392505050565b6020808252810161021f81601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000602082015260400190565b6000610601825190565b8084526020840193506106188185602086016103d4565b601f01601f19169290920192915050565b6020808252810161021c81846105f7565b61017a806106496000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5060405161057738038061057783398101604081905261002f9161011e565b61003833610047565b61004181610097565b506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6100c75760405162461bcd60e51b81526004016100be90610147565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382165b92915050565b610105816100e9565b811461011057600080fd5b50565b80516100f6816100fc565b60006020828403121561013357610133600080fd5b600061013f8484610113565b949350505050565b602080825281016100f681603381527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60208201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000604082015260600190565b6103c0806101b76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033a2646970667358221220411845db159c9c102443c0f4ebfdae7048ed739cb793e7a9d9e30ba71dbccf3664736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063afcff50f116100a2578063be26317e11610071578063be26317e14610254578063e30c39781461025d578063e521136f1461026e578063f2fde38b14610281578063f7013ef61461029457600080fd5b8063afcff50f146101d3578063b4a0bdf3146101e6578063b599410a146101f7578063ba9a91a51461022057600080fd5b806379ba5097116100e957806379ba50971461018157806380d45a2d146101895780638da5cb5b1461019c578063a9e50471146101ad578063abeccaa4146101c057600080fd5b80630e32cb861461011b57806317f333401461013057806359659e9014610159578063715018a614610179575b600080fd5b61012e610129366004610e07565b6102a7565b005b60fd54610143906001600160a01b031681565b6040516101509190610e3f565b60405180910390f35b60fb5461016c906001600160a01b031681565b6040516101509190610e7d565b61012e6102bb565b61012e6102cf565b61012e610197366004610e9c565b61030d565b6033546001600160a01b0316610143565b6101436101bb366004610e07565b610354565b61016c6101ce366004610e07565b61046a565b60fc5461016c906001600160a01b031681565b6097546001600160a01b031661016c565b61016c610205366004610e07565b60fe602052600090815260409020546001600160a01b031681565b6102477f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b981565b6040516101509190610ec3565b61024760c95481565b6065546001600160a01b0316610143565b61012e61027c366004610e07565b6107c4565b61012e61028f366004610e07565b610867565b61012e6102a2366004610ed1565b6108d8565b6102af610ac3565b6102b881610aed565b50565b6102c3610ac3565b6102cd6000610b72565b565b60655433906001600160a01b031681146103045760405162461bcd60e51b81526004016102fb90610f92565b60405180910390fd5b6102b881610b72565b61034b6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250610b8b565b6102b881610c29565b600060ff60f81b307f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b96040518060200161038d90610dbb565b601f1982820381018352601f90910116604081905260fb546001600160a01b03169063189acdbd60e31b906103c6908990602401610e3f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b03199095169490941790935251610405939201610ff8565b60408051601f1981840301815290829052610423929160200161103a565b6040516020818303038152906040528051906020012060405160200161044c949392919061108a565b60408051601f19818403018152919052805160209091012092915050565b600061047582610c84565b6001600160a01b03828116600090815260fe602052604090205416156104ae57604051634fa32ea760e01b815260040160405180910390fd5b60008290506000816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906110f1565b905060fc60009054906101000a90046001600160a01b03166001600160a01b031663266e0a7f82846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061111d565b6040518363ffffffff1660e01b81526004016105bd92919061113e565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe919061111d565b6001600160a01b0316846001600160a01b03161461062f57604051630a74323b60e21b815260040160405180910390fd5b60fb546040516000917f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9916001600160a01b039091169063189acdbd60e31b9061067d908990602401610e3f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516106ba90610dbb565b6106c5929190610ff8565b8190604051809103906000f59050801580156106e5573d6000803e3d6000fd5b5060975460fd5460c9546033546040516320f08d2d60e11b81529495506001600160a01b03808716956341e11a5a9561072c95908316949083169390921690600401611160565b600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b505050506001600160a01b03858116600090815260fe602052604080822080546001600160a01b0319168585169081179091559051939650869390928616917fcbd4e5d1362721c7fd10daaabb1a046344447d4798be55684b8a6b4fc1765d7291a3505050919050565b6108026040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250610b8b565b61080b81610c84565b60fd546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a360fd80546001600160a01b0319166001600160a01b0392909216919091179055565b61086f610ac3565b606580546001600160a01b0383166001600160a01b031990911681179091556108a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff16158080156108f85750600054600160ff909116105b806109125750303b158015610912575060005460ff166001145b61092e5760405162461bcd60e51b81526004016102fb906111e9565b6000805460ff191660011790558015610951576000805461ff0019166101001790555b61095a86610c84565b61096385610c84565b61096c84610c84565b61097583610c84565b61097e86610cab565b60fc80546001600160a01b038088166001600160a01b03199283161790925560fd8054928716929091169190911790556109b782610c29565b826040516109c490610dc8565b6109ce9190610e3f565b604051809103906000f0801580156109ea573d6000803e3d6000fd5b5060fb80546001600160a01b03929092166001600160a01b03199092168217905563f2fde38b610a226033546001600160a01b031690565b6040518263ffffffff1660e01b8152600401610a3e9190610e3f565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050508015610abb576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ab29060019061120d565b60405180910390a15b505050505050565b6033546001600160a01b031633146102cd5760405162461bcd60e51b81526004016102fb9061121b565b6001600160a01b038116610b135760405162461bcd60e51b81526004016102fb90611297565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b66908390859061113e565b60405180910390a15050565b606580546001600160a01b03191690556102b881610ce3565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90610bbe9033908690600401610ff8565b602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906112ba565b905080610c2557333083604051634a3fa29360e01b81526004016102fb939291906112db565b5050565b60c9548111610c4a5760405162461bcd60e51b81526004016102fb90611347565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610b669083908590611357565b6001600160a01b0381166102b8576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16610cd25760405162461bcd60e51b81526004016102fb906113ba565b610cda610d35565b6102b881610d64565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d5c5760405162461bcd60e51b81526004016102fb906113ba565b6102cd610d8b565b600054610100900460ff166102af5760405162461bcd60e51b81526004016102fb906113ba565b600054610100900460ff16610db25760405162461bcd60e51b81526004016102fb906113ba565b6102cd33610b72565b6107ea806113cb83390190565b61057780611bb583390190565b60006001600160a01b0382165b92915050565b610df181610dd5565b81146102b857600080fd5b8035610de281610de8565b600060208284031215610e1c57610e1c600080fd5b6000610e288484610dfc565b949350505050565b610e3981610dd5565b82525050565b60208101610de28284610e30565b60006001600160a01b038216610de2565b6000610de282610e4d565b6000610de282610e5e565b610e3981610e69565b60208101610de28284610e74565b80610df1565b8035610de281610e8b565b600060208284031215610eb157610eb1600080fd5b6000610e288484610e91565b80610e39565b60208101610de28284610ebd565b600080600080600060a08688031215610eec57610eec600080fd5b6000610ef88888610dfc565b9550506020610f0988828901610dfc565b9450506040610f1a88828901610dfc565b9350506060610f2b88828901610dfc565b9250506080610f3c88828901610e91565b9150509295509295909350565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610de281610f49565b60005b83811015610fbd578181015183820152602001610fa5565b50506000910152565b6000610fd0825190565b808452602084019350610fe7818560208601610fa2565b601f01601f19169290920192915050565b604081016110068285610e30565b8181036020830152610e288184610fc6565b6000611022825190565b611030818560208601610fa2565b9290920192915050565b60006110468285611018565b9150610e288284611018565b6001600160f81b03198116610e39565b6000610de28260601b90565b6000610de282611062565b610e3961108582610dd5565b61106e565b60006110968287611052565b6001820191506110a68286611079565b6014820191506110b68285610ebd565b6020820191506110c68284610ebd565b50602001949350505050565b6000610de282610dd5565b610df1816110d2565b8051610de2816110dd565b60006020828403121561110657611106600080fd5b6000610e2884846110e6565b8051610de281610de8565b60006020828403121561113257611132600080fd5b6000610e288484611112565b6040810161114c8285610e30565b6111596020830184610e30565b9392505050565b6080810161116e8287610e30565b61117b6020830186610e30565b6111886040830185610ebd565b6111956060830184610e30565b95945050505050565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610f8b565b60208082528101610de28161119e565b600060ff8216610de2565b610e39816111f9565b60208101610de28284611204565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604083015260608201610de2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610f8b565b60208082528101610de281611255565b801515610df1565b8051610de2816112a7565b6000602082840312156112cf576112cf600080fd5b6000610e2884846112af565b606081016112e98286610e30565b6112f66020830185610e30565b81810360408301526111958184610fc6565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150610f8b565b60208082528101610de281611308565b604081016113658285610ebd565b6111596020830184610ebd565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610f8b565b60208082528101610de28161137256fe60806040526040516107ea3803806107ea8339810160408190526100229161045d565b61002e82826000610035565b505061063a565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104b4565b836101f7565b505b505050565b6001600160a01b0381163b6101265760405162461bcd60e51b815260040161011d9061051a565b60405180910390fd5b61019a816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018b91906104b4565b6001600160a01b03163b151590565b6101b65760405162461bcd60e51b815260040161011d90610577565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061021c83836040518060600160405280602781526020016107c360279139610225565b90505b92915050565b6060600080856001600160a01b03168560405161024291906105a9565b600060405180830381855af49150503d806000811461027d576040519150601f19603f3d011682016040523d82523d6000602084013e610282565b606091505b5090925090506102948683838761029e565b9695505050505050565b606083156102dd5782516000036102d6576001600160a01b0385163b6102d65760405162461bcd60e51b815260040161011d906105bc565b50816102e7565b6102e783836102ef565b949350505050565b8151156102ff5781518083602001fd5b8060405162461bcd60e51b815260040161011d9190610629565b60006001600160a01b03821661021f565b61033381610319565b811461033e57600080fd5b50565b805161021f8161032a565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103875761038761034c565b6040525050565b600061039960405190565b90506103a58282610362565b919050565b60006001600160401b038211156103c3576103c361034c565b601f19601f83011660200192915050565b60005b838110156103ef5781810151838201526020016103d7565b50506000910152565b600061040b610406846103aa565b61038e565b90508281526020810184848401111561042657610426600080fd5b6104318482856103d4565b509392505050565b600082601f83011261044d5761044d600080fd5b81516102e78482602086016103f8565b6000806040838503121561047357610473600080fd5b600061047f8585610341565b92505060208301516001600160401b0381111561049e5761049e600080fd5b6104aa85828601610439565b9150509250929050565b6000602082840312156104c9576104c9600080fd5b60006102e78484610341565b602581526000602082017f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e8152641d1c9858dd60da1b602082015291505b5060400190565b6020808252810161021f816104d5565b603081526000602082017f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206981526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60208201529150610513565b6020808252810161021f8161052a565b6000610591825190565b61059f8185602086016103d4565b9290920192915050565b60006105b58284610587565b9392505050565b6020808252810161021f81601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000602082015260400190565b6000610601825190565b8084526020840193506106188185602086016103d4565b601f01601f19169290920192915050565b6020808252810161021c81846105f7565b61017a806106496000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5060405161057738038061057783398101604081905261002f9161011e565b61003833610047565b61004181610097565b506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6100c75760405162461bcd60e51b81526004016100be90610147565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382165b92915050565b610105816100e9565b811461011057600080fd5b50565b80516100f6816100fc565b60006020828403121561013357610133600080fd5b600061013f8484610113565b949350505050565b602080825281016100f681603381527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60208201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000604082015260600190565b6103c0806101b76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033a2646970667358221220411845db159c9c102443c0f4ebfdae7048ed739cb793e7a9d9e30ba71dbccf3664736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
