{
  "_format": "hh-sol-artifact-1",
  "contractName": "VestingRegistry2",
  "sourceName": "contracts/governance/Vesting/VestingRegistry2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_SOV",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_CSOVtokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_priceSats",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_staking",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeSharingProxy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vestingOwner",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CSOVTokensExchanged",
      "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": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SOVTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TeamVestingCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensStaked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VestingCreated",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CSOV_VESTING_CLIFF",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CSOV_VESTING_DURATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "CSOVtokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FOUR_WEEKS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SOV",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "admins",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "blacklist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "budget",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "createTeamVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "createVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "deposit",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeSharingProxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        }
      ],
      "name": "getTeamVesting",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        }
      ],
      "name": "getVesting",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lockedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "priceSats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "processedList",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_blacklisted",
          "type": "bool"
        }
      ],
      "name": "setBlacklistFlag",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_CSOVtokens",
          "type": "address[]"
        }
      ],
      "name": "setCSOVtokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "setLockedAmount",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingFactory",
          "type": "address"
        }
      ],
      "name": "setVestingFactory",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vesting",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "stakeTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "staking",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferSOV",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "vestingContracts",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingFactory",
      "outputs": [
        {
          "internalType": "contract IVestingFactory",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawAll",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162001d1038038062001d10833981810160405260e08110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82518660208202830111640100000000821117156200009757600080fd5b82525081516020918201928201910280838360005b83811015620000c6578181015183820152602001620000ac565b505050509190910160409081526020830151908301516060840151608090940151919550935090506000620001036001600160e01b036200034216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038616620001a9576040805162461bcd60e51b815260206004820152601360248201527f534f56206164647265737320696e76616c696400000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831662000205576040805162461bcd60e51b815260206004820152601760248201527f7374616b696e67206164647265737320696e76616c6964000000000000000000604482015290519081900360640190fd5b6001600160a01b03821662000261576040805162461bcd60e51b815260206004820152601f60248201527f66656553686172696e6750726f7879206164647265737320696e76616c696400604482015290519081900360640190fd5b6001600160a01b038116620002bd576040805162461bcd60e51b815260206004820152601c60248201527f76657374696e674f776e6572206164647265737320696e76616c696400000000604482015290519081900360640190fd5b620002d1876001600160e01b036200034716565b620002e5856001600160e01b03620003c516565b600280546001600160a01b039788166001600160a01b031991821617909155600494909455600580549387169385169390931790925560068054918616918416919091179055600780549190941691161790915550620005039050565b335b90565b6001600160a01b038116620003a3576040805162461bcd60e51b815260206004820152601e60248201527f76657374696e67466163746f7279206164647265737320696e76616c69640000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015620004585760006001600160a01b0316828281518110620003ea57fe5b60200260200101516001600160a01b031614156200044f576040805162461bcd60e51b815260206004820152601460248201527f43534f56206164647265737320696e76616c6964000000000000000000000000604482015290519081900360640190fd5b600101620003c8565b5080516200046e90600390602084019062000472565b5050565b828054828255906000526020600020908101928215620004ca579160200282015b82811115620004ca57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000493565b50620004d8929150620004dc565b5090565b6200034491905b80821115620004d85780546001600160a01b0319168155600101620004e3565b6117fd80620005136000396000f3fe6080604052600436106101ee5760003560e01c8063a153e7081161010d578063d0e30db0116100a0578063f2fde38b1161006f578063f2fde38b1461072c578063f60826ee1461075f578063f6d6189e1461058f578063f9f92be414610774578063fa09e630146107a7576101ee565b8063d0e30db01461069d578063df8bd747146106a5578063ed01bf29146106de578063f2becf17146106f3576101ee565b8063bd8f732b116100dc578063bd8f732b146105b9578063c680c0b7146105fe578063c810a3e314610637578063cc49ede71461066a576101ee565b8063a153e70814610547578063b33f914a1461057a578063b4ebc0411461058f578063bd7b5908146105a4576101ee565b80636a26b57f1161018557806382999a391161015457806382999a39146104435780638da5cb5b146104f35780638f32d59b1461050857806399336b361461051d576101ee565b80636a26b57f14610387578063704802751461039c57806379a83f5a146103cf57806381d2e4bb14610408576101ee565b8063377220fd116101c1578063377220fd146102e5578063429b62e5146103185780634cf088d91461034b578063661f216114610360576101ee565b80630665a06f146101f357806308dcb3601461023a5780631785f53c1461026b5780632eee57fa1461029e575b600080fd5b3480156101ff57600080fd5b506102386004803603608081101561021657600080fd5b506001600160a01b0381351690602081013590604081013590606001356107da565b005b34801561024657600080fd5b5061024f6108a8565b604080516001600160a01b039092168252519081900360200190f35b34801561027757600080fd5b506102386004803603602081101561028e57600080fd5b50356001600160a01b03166108b7565b3480156102aa57600080fd5b506102d1600480360360208110156102c157600080fd5b50356001600160a01b0316610957565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102386004803603602081101561030857600080fd5b50356001600160a01b031661096c565b34801561032457600080fd5b506102d16004803603602081101561033b57600080fd5b50356001600160a01b03166109c0565b34801561035757600080fd5b5061024f6109d5565b34801561036c57600080fd5b506103756109e4565b60408051918252519081900360200190f35b34801561039357600080fd5b5061024f6109ea565b3480156103a857600080fd5b50610238600480360360208110156103bf57600080fd5b50356001600160a01b03166109f9565b3480156103db57600080fd5b50610238600480360360408110156103f257600080fd5b506001600160a01b038135169060200135610a9c565b34801561041457600080fd5b506102386004803603604081101561042b57600080fd5b506001600160a01b0381351690602001351515610cc4565b34801561044f57600080fd5b506102386004803603602081101561046657600080fd5b81019060208101813564010000000081111561048157600080fd5b82018360208201111561049357600080fd5b803590602001918460208302840111640100000000831117156104b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d8c945050505050565b3480156104ff57600080fd5b5061024f610ddd565b34801561051457600080fd5b506102d1610ded565b34801561052957600080fd5b5061024f6004803603602081101561054057600080fd5b5035610e11565b34801561055357600080fd5b506103756004803603602081101561056a57600080fd5b50356001600160a01b0316610e38565b34801561058657600080fd5b50610375610e4a565b34801561059b57600080fd5b50610375610e52565b3480156105b057600080fd5b5061024f610e59565b3480156105c557600080fd5b50610238600480360360808110156105dc57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e68565b34801561060a57600080fd5b506102386004803603604081101561062157600080fd5b506001600160a01b038135169060200135610f36565b34801561064357600080fd5b5061024f6004803603602081101561065a57600080fd5b50356001600160a01b03166110e1565b34801561067657600080fd5b5061024f6004803603602081101561068d57600080fd5b50356001600160a01b031661111c565b61023861113c565b3480156106b157600080fd5b50610238600480360360408110156106c857600080fd5b506001600160a01b03813516906020013561113e565b3480156106ea57600080fd5b5061037561123a565b3480156106ff57600080fd5b5061024f6004803603604081101561071657600080fd5b506001600160a01b03813516906020013561123e565b34801561073857600080fd5b506102386004803603602081101561074f57600080fd5b50356001600160a01b0316611264565b34801561076b57600080fd5b5061024f6112b5565b34801561078057600080fd5b506102d16004803603602081101561079757600080fd5b50356001600160a01b03166112c4565b3480156107b357600080fd5b50610238600480360360208110156107ca57600080fd5b50356001600160a01b03166112d9565b6107e2610ded565b806107fc5750336000908152600c602052604090205460ff165b61083c576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600061084985848461135a565b604080516001600160a01b03808416825260208201879052818301869052606082018890529151929350908716917f66a644acab4366c0125120794335c517775a2b44b4315b5d90f0d163dae07fea9181900360800190a25050505050565b6002546001600160a01b031681565b6108bf610ded565b6108ff576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19169055815192835290517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9281900390910190a150565b60096020526000908152604090205460ff1681565b610974610ded565b6109b4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd816114a6565b50565b600c6020526000908152604090205460ff1681565b6005546001600160a01b031681565b60045481565b6006546001600160a01b031681565b610a01610ded565b610a41576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19166001179055815192835290517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399281900390910190a150565b610aa4610ded565b80610abe5750336000908152600c602052604090205460ff165b610afe576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610b59576040805162461bcd60e51b815260206004820152601760248201527f76657374696e67206164647265737320696e76616c6964000000000000000000604482015290519081900360640190fd5b60008111610b9f576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6002546040805163095ea7b360e01b81526001600160a01b038581166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505060408051637547c7a360e01b81526004810183905290516001600160a01b03841691637547c7a391602480830192600092919082900301818387803b158015610c6957600080fd5b505af1158015610c7d573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef92509081900360200190a25050565b610ccc610ded565b610d0c576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610d61576040805162461bcd60e51b81526020600482015260176024820152761858d8dbdd5b9d081859191c995cdcc81a5b9d985b1a59604a1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610d94610ded565b610dd4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd81611523565b6000546001600160a01b03165b90565b600080546001600160a01b0316610e026115bd565b6001600160a01b031614905090565b60038181548110610e1e57fe5b6000918252602090912001546001600160a01b0316905081565b600b6020526000908152604090205481565b630171240081565b6224ea0081565b6007546001600160a01b031681565b610e70610ded565b80610e8a5750336000908152600c602052604090205460ff165b610eca576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6000610ed78584846115c1565b604080516001600160a01b03808416825260208201879052818301869052606082018890529151929350908716917f6f0b5adf3d5b3548ea2b06e9be6e7f72e125253fd8c948f6ef4024be653c1c179181900360800190a25050505050565b610f3e610ded565b610f7e576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610fd9576040805162461bcd60e51b815260206004820152601860248201527f7265636569766572206164647265737320696e76616c69640000000000000000604482015290519081900360640190fd5b8061101c576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6002546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b505050506040513d602081101561109c57600080fd5b50506040805182815290516001600160a01b038416917fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad919081900360200190a25050565b6001600160a01b038116600090815260086020526040812081805b81526020810191909152604001600020546001600160a01b031692915050565b6001600160a01b03811660009081526008602052604081208160016110fc565b565b611146610ded565b611186576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0382166111db576040805162461bcd60e51b81526020600482015260176024820152761858d8dbdd5b9d081859191c995cdcc81a5b9d985b1a59604a1b604482015290519081900360640190fd5b8061121e576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6001600160a01b039091166000908152600b6020526040902055565b4790565b60086020908152600092835260408084209091529082529020546001600160a01b031681565b61126c610ded565b6112ac576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd81611679565b6001546001600160a01b031681565b600a6020526000908152604090205460ff1681565b6112e1610ded565b611321576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611356573d6000803e3d6000fd5b5050565b6001600160a01b0383811660009081526008602090815260408083206001808552925282205491929091166114785760015460025460055460065460408051637d2fbb8f60e11b81526001600160a01b039485166004820152928416602484015289841660448401819052606484018a90526084840189905291841660a484015260c483019190915251600093929092169163fa5f771e9160e48082019260209290919082900301818787803b15801561141357600080fd5b505af1158015611427573d6000803e3d6000fd5b505050506040513d602081101561143d57600080fd5b50516001600160a01b038781166000908152600860209081526040808320878452909152902080546001600160a01b03191691909216179055505b6001600160a01b03948516600090815260086020908152604080832093835292905220549093169392505050565b6001600160a01b038116611501576040805162461bcd60e51b815260206004820152601e60248201527f76657374696e67466163746f7279206164647265737320696e76616c69640000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b81518110156115a95760006001600160a01b031682828151811061154657fe5b60200260200101516001600160a01b031614156115a1576040805162461bcd60e51b815260206004820152601460248201527310d4d3d5881859191c995cdcc81a5b9d985b1a5960621b604482015290519081900360640190fd5b600101611526565b508051611356906003906020840190611719565b3390565b6001600160a01b03838116600090815260086020908152604080832083805290915281205490918291166114785760015460025460055460065460075460408051630546344f60e41b81526001600160a01b03958616600482015293851660248501528a85166044850152606484018a90526084840189905291841660a4840152831660c483015251600093929092169163546344f09160e48082019260209290919082900301818787803b15801561141357600080fd5b6001600160a01b0381166116be5760405162461bcd60e51b81526004018080602001828103825260268152602001806117a36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b82805482825590600052602060002090810192821561176e579160200282015b8281111561176e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611739565b5061177a92915061177e565b5090565b610dea91905b8082111561177a5780546001600160a01b031916815560010161178456fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820c5f0015b52da6a7f51cb7a9a7c84c6798dfba691b154cf9dfeeaa0f2835ec2a864736f6c63430005110032",
  "deployedBytecode": "0x6080604052600436106101ee5760003560e01c8063a153e7081161010d578063d0e30db0116100a0578063f2fde38b1161006f578063f2fde38b1461072c578063f60826ee1461075f578063f6d6189e1461058f578063f9f92be414610774578063fa09e630146107a7576101ee565b8063d0e30db01461069d578063df8bd747146106a5578063ed01bf29146106de578063f2becf17146106f3576101ee565b8063bd8f732b116100dc578063bd8f732b146105b9578063c680c0b7146105fe578063c810a3e314610637578063cc49ede71461066a576101ee565b8063a153e70814610547578063b33f914a1461057a578063b4ebc0411461058f578063bd7b5908146105a4576101ee565b80636a26b57f1161018557806382999a391161015457806382999a39146104435780638da5cb5b146104f35780638f32d59b1461050857806399336b361461051d576101ee565b80636a26b57f14610387578063704802751461039c57806379a83f5a146103cf57806381d2e4bb14610408576101ee565b8063377220fd116101c1578063377220fd146102e5578063429b62e5146103185780634cf088d91461034b578063661f216114610360576101ee565b80630665a06f146101f357806308dcb3601461023a5780631785f53c1461026b5780632eee57fa1461029e575b600080fd5b3480156101ff57600080fd5b506102386004803603608081101561021657600080fd5b506001600160a01b0381351690602081013590604081013590606001356107da565b005b34801561024657600080fd5b5061024f6108a8565b604080516001600160a01b039092168252519081900360200190f35b34801561027757600080fd5b506102386004803603602081101561028e57600080fd5b50356001600160a01b03166108b7565b3480156102aa57600080fd5b506102d1600480360360208110156102c157600080fd5b50356001600160a01b0316610957565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102386004803603602081101561030857600080fd5b50356001600160a01b031661096c565b34801561032457600080fd5b506102d16004803603602081101561033b57600080fd5b50356001600160a01b03166109c0565b34801561035757600080fd5b5061024f6109d5565b34801561036c57600080fd5b506103756109e4565b60408051918252519081900360200190f35b34801561039357600080fd5b5061024f6109ea565b3480156103a857600080fd5b50610238600480360360208110156103bf57600080fd5b50356001600160a01b03166109f9565b3480156103db57600080fd5b50610238600480360360408110156103f257600080fd5b506001600160a01b038135169060200135610a9c565b34801561041457600080fd5b506102386004803603604081101561042b57600080fd5b506001600160a01b0381351690602001351515610cc4565b34801561044f57600080fd5b506102386004803603602081101561046657600080fd5b81019060208101813564010000000081111561048157600080fd5b82018360208201111561049357600080fd5b803590602001918460208302840111640100000000831117156104b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d8c945050505050565b3480156104ff57600080fd5b5061024f610ddd565b34801561051457600080fd5b506102d1610ded565b34801561052957600080fd5b5061024f6004803603602081101561054057600080fd5b5035610e11565b34801561055357600080fd5b506103756004803603602081101561056a57600080fd5b50356001600160a01b0316610e38565b34801561058657600080fd5b50610375610e4a565b34801561059b57600080fd5b50610375610e52565b3480156105b057600080fd5b5061024f610e59565b3480156105c557600080fd5b50610238600480360360808110156105dc57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e68565b34801561060a57600080fd5b506102386004803603604081101561062157600080fd5b506001600160a01b038135169060200135610f36565b34801561064357600080fd5b5061024f6004803603602081101561065a57600080fd5b50356001600160a01b03166110e1565b34801561067657600080fd5b5061024f6004803603602081101561068d57600080fd5b50356001600160a01b031661111c565b61023861113c565b3480156106b157600080fd5b50610238600480360360408110156106c857600080fd5b506001600160a01b03813516906020013561113e565b3480156106ea57600080fd5b5061037561123a565b3480156106ff57600080fd5b5061024f6004803603604081101561071657600080fd5b506001600160a01b03813516906020013561123e565b34801561073857600080fd5b506102386004803603602081101561074f57600080fd5b50356001600160a01b0316611264565b34801561076b57600080fd5b5061024f6112b5565b34801561078057600080fd5b506102d16004803603602081101561079757600080fd5b50356001600160a01b03166112c4565b3480156107b357600080fd5b50610238600480360360208110156107ca57600080fd5b50356001600160a01b03166112d9565b6107e2610ded565b806107fc5750336000908152600c602052604090205460ff165b61083c576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600061084985848461135a565b604080516001600160a01b03808416825260208201879052818301869052606082018890529151929350908716917f66a644acab4366c0125120794335c517775a2b44b4315b5d90f0d163dae07fea9181900360800190a25050505050565b6002546001600160a01b031681565b6108bf610ded565b6108ff576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19169055815192835290517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9281900390910190a150565b60096020526000908152604090205460ff1681565b610974610ded565b6109b4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd816114a6565b50565b600c6020526000908152604090205460ff1681565b6005546001600160a01b031681565b60045481565b6006546001600160a01b031681565b610a01610ded565b610a41576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19166001179055815192835290517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399281900390910190a150565b610aa4610ded565b80610abe5750336000908152600c602052604090205460ff165b610afe576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610b59576040805162461bcd60e51b815260206004820152601760248201527f76657374696e67206164647265737320696e76616c6964000000000000000000604482015290519081900360640190fd5b60008111610b9f576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6002546040805163095ea7b360e01b81526001600160a01b038581166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505060408051637547c7a360e01b81526004810183905290516001600160a01b03841691637547c7a391602480830192600092919082900301818387803b158015610c6957600080fd5b505af1158015610c7d573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef92509081900360200190a25050565b610ccc610ded565b610d0c576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610d61576040805162461bcd60e51b81526020600482015260176024820152761858d8dbdd5b9d081859191c995cdcc81a5b9d985b1a59604a1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610d94610ded565b610dd4576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd81611523565b6000546001600160a01b03165b90565b600080546001600160a01b0316610e026115bd565b6001600160a01b031614905090565b60038181548110610e1e57fe5b6000918252602090912001546001600160a01b0316905081565b600b6020526000908152604090205481565b630171240081565b6224ea0081565b6007546001600160a01b031681565b610e70610ded565b80610e8a5750336000908152600c602052604090205460ff165b610eca576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6000610ed78584846115c1565b604080516001600160a01b03808416825260208201879052818301869052606082018890529151929350908716917f6f0b5adf3d5b3548ea2b06e9be6e7f72e125253fd8c948f6ef4024be653c1c179181900360800190a25050505050565b610f3e610ded565b610f7e576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038216610fd9576040805162461bcd60e51b815260206004820152601860248201527f7265636569766572206164647265737320696e76616c69640000000000000000604482015290519081900360640190fd5b8061101c576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6002546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b505050506040513d602081101561109c57600080fd5b50506040805182815290516001600160a01b038416917fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad919081900360200190a25050565b6001600160a01b038116600090815260086020526040812081805b81526020810191909152604001600020546001600160a01b031692915050565b6001600160a01b03811660009081526008602052604081208160016110fc565b565b611146610ded565b611186576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0382166111db576040805162461bcd60e51b81526020600482015260176024820152761858d8dbdd5b9d081859191c995cdcc81a5b9d985b1a59604a1b604482015290519081900360640190fd5b8061121e576040805162461bcd60e51b815260206004820152600e60248201526d185b5bdd5b9d081a5b9d985b1a5960921b604482015290519081900360640190fd5b6001600160a01b039091166000908152600b6020526040902055565b4790565b60086020908152600092835260408084209091529082529020546001600160a01b031681565b61126c610ded565b6112ac576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6109bd81611679565b6001546001600160a01b031681565b600a6020526000908152604090205460ff1681565b6112e1610ded565b611321576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611356573d6000803e3d6000fd5b5050565b6001600160a01b0383811660009081526008602090815260408083206001808552925282205491929091166114785760015460025460055460065460408051637d2fbb8f60e11b81526001600160a01b039485166004820152928416602484015289841660448401819052606484018a90526084840189905291841660a484015260c483019190915251600093929092169163fa5f771e9160e48082019260209290919082900301818787803b15801561141357600080fd5b505af1158015611427573d6000803e3d6000fd5b505050506040513d602081101561143d57600080fd5b50516001600160a01b038781166000908152600860209081526040808320878452909152902080546001600160a01b03191691909216179055505b6001600160a01b03948516600090815260086020908152604080832093835292905220549093169392505050565b6001600160a01b038116611501576040805162461bcd60e51b815260206004820152601e60248201527f76657374696e67466163746f7279206164647265737320696e76616c69640000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b81518110156115a95760006001600160a01b031682828151811061154657fe5b60200260200101516001600160a01b031614156115a1576040805162461bcd60e51b815260206004820152601460248201527310d4d3d5881859191c995cdcc81a5b9d985b1a5960621b604482015290519081900360640190fd5b600101611526565b508051611356906003906020840190611719565b3390565b6001600160a01b03838116600090815260086020908152604080832083805290915281205490918291166114785760015460025460055460065460075460408051630546344f60e41b81526001600160a01b03958616600482015293851660248501528a85166044850152606484018a90526084840189905291841660a4840152831660c483015251600093929092169163546344f09160e48082019260209290919082900301818787803b15801561141357600080fd5b6001600160a01b0381166116be5760405162461bcd60e51b81526004018080602001828103825260268152602001806117a36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b82805482825590600052602060002090810192821561176e579160200282015b8281111561176e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611739565b5061177a92915061177e565b5090565b610dea91905b8082111561177a5780546001600160a01b031916815560010161178456fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a72315820c5f0015b52da6a7f51cb7a9a7c84c6798dfba691b154cf9dfeeaa0f2835ec2a864736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
