{
  "_format": "hh-sol-artifact-1",
  "contractName": "LockedSOV",
  "sourceName": "contracts/locked/LockedSOV.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_SOV",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vestingRegistry",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_admins",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_removedAdmin",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_sovAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_basisPoint",
          "type": "uint256"
        }
      ],
      "name": "Deposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newLockedSOV",
          "type": "address"
        }
      ],
      "name": "MigrationStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_vestingRegistry",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "RegistryCliffAndDurationUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokenStaked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "UserTransfered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_vesting",
          "type": "address"
        }
      ],
      "name": "VestingCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_sovAmount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_BASIS_POINT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_DURATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SOV",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newAdmin",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "adminStatus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_status",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingRegistry",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "changeRegistryCliffAndDuration",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cliff",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "createVesting",
      "outputs": [
        {
          "internalType": "address",
          "name": "_vestingAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "createVestingAndStake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_sovAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_basisPoint",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_sovAmount",
          "type": "uint256"
        }
      ],
      "name": "depositSOV",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "duration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "getLockedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "getUnlockedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "migration",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newLockedSOV",
      "outputs": [
        {
          "internalType": "contract ILockedSOV",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_adminToRemove",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "stakeTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newLockedSOV",
          "type": "address"
        }
      ],
      "name": "startMigration",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "transfer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingRegistry",
      "outputs": [
        {
          "internalType": "contract VestingRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_receiverAddress",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_receiverAddress",
          "type": "address"
        }
      ],
      "name": "withdrawAndStakeTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "withdrawAndStakeTokensFrom",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620019d1380380620019d1833981810160405260a08110156200003757600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007357600080fd5b9083019060208201858111156200008957600080fd5b8251866020820283011164010000000082111715620000a757600080fd5b82525081516020918201928201910280838360005b83811015620000d6578181015183820152602001620000bc565b5050505091909101604052505050506001600160a01b03851662000141576040805162461bcd60e51b815260206004820152601460248201527f496e76616c696420534f5620416464726573732e000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038416620001885760405162461bcd60e51b8152600401808060200182810382526024815260200180620019ad6024913960400191505060405180910390fd5b60258210620001de576040805162461bcd60e51b815260206004820152601560248201527f4475726174696f6e20697320746f6f206c6f6e672e0000000000000000000000604482015290519081900360640190fd5b600380546001600160a01b038088166001600160a01b03199283161790925560048054928716929091169190911790556224ea00808402600155820260025560005b815181101562000278576001600860008484815181106200023d57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000220565b50505050505061171f806200028e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637195823e116100c3578063c40868931161007c578063c408689314610357578063cc6f03331461037d578063ce46643b14610385578063d74910931461038d578063e554586414610395578063f33bf9a1146103bb57610158565b80637195823e146102df5780638a4068dd146102e7578063904c5b8f146102ef578063a0f52da0146102f7578063b1724b461461031d578063bb3ff62a1461032557610158565b80631785f53c116101155780631785f53c146102195780632b6df82a1461023f5780633e4a89d1146102655780634558269f1461028b57806351cff8d91461029357806370480275146102b957610158565b806308dcb3601461015d5780630efe6a8b146101815780630fb5a6b4146101b5578063129de5bf146101cf57806313d033c0146101f55780631705a3bd146101fd575b600080fd5b6101656103e7565b604080516001600160a01b039092168252519081900360200190f35b6101b36004803603606081101561019757600080fd5b506001600160a01b0381351690602081013590604001356103f6565b005b6101bd610406565b60408051918252519081900360200190f35b6101bd600480360360208110156101e557600080fd5b50356001600160a01b031661040c565b6101bd610427565b61020561042d565b604080519115158252519081900360200190f35b6101b36004803603602081101561022f57600080fd5b50356001600160a01b0316610436565b6101b36004803603602081101561025557600080fd5b50356001600160a01b031661054d565b6102056004803603602081101561027b57600080fd5b50356001600160a01b0316610563565b6101b3610581565b6101b3600480360360208110156102a957600080fd5b50356001600160a01b031661058c565b6101b3600480360360208110156102cf57600080fd5b50356001600160a01b0316610596565b6101656106ff565b6101b361070e565b61016561081c565b6101b36004803603602081101561030d57600080fd5b50356001600160a01b031661082b565b6101bd610a29565b6101b36004803603606081101561033b57600080fd5b506001600160a01b038135169060208101359060400135610a2e565b6101bd6004803603602081101561036d57600080fd5b50356001600160a01b0316610be6565b610165610c01565b6101b3610c11565b6101bd610d53565b6101b3600480360360208110156103ab57600080fd5b50356001600160a01b0316610d59565b6101b3600480360360408110156103d157600080fd5b506001600160a01b038135169060200135610d6c565b6003546001600160a01b031681565b610401838383610d7c565b505050565b60025481565b6001600160a01b031660009081526007602052604090205490565b60015481565b60005460ff1681565b3360009081526008602052604090205460ff16610496576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610503576040805162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e2061646d696e2e0000000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260086020526040808220805460ff191690555133917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b6105578182610f79565b610560816110af565b50565b6001600160a01b031660009081526008602052604090205460ff1690565b61058a336110af565b565b6105603382610f79565b3360009081526008602052604090205460ff166105f6576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b038116610644576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21020b2323932b9b99760811b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16156106b2576040805162461bcd60e51b815260206004820152601960248201527f4164647265737320697320616c72656164792061646d696e2e00000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260086020526040808220805460ff191660011790555133917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6005546001600160a01b031681565b60005460ff16610765576040805162461bcd60e51b815260206004820152601e60248201527f4d6967726174696f6e20686173206e6f742079657420737461727465642e0000604482015290519081900360640190fd5b33600081815260066020526040808220805490839055600554825163f33bf9a160e01b8152600481019590955260248501829052915190936001600160a01b039092169263f33bf9a1926044808201939182900301818387803b1580156107cb57600080fd5b505af11580156107df573d6000803e3d6000fd5b50506040805184815290513393507fe4d132f68e97bb85bfbf6346414f11bd7f666e31cf86fe80669273c01c1aec9392509081900360200190a250565b6004546001600160a01b031681565b3360009081526008602052604090205460ff1661088b576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b0381166108d05760405162461bcd60e51b81526004018080602001828103825260228152602001806116486022913960400191505060405180910390fd5b600580546001600160a01b0319166001600160a01b0383811691909117909155600354604080516370a0823160e01b81523060048201529051919092169163095ea7b391849184916370a0823191602480820192602092909190829003018186803b15801561093e57600080fd5b505afa158015610952573d6000803e3d6000fd5b505050506040513d602081101561096857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156109b957600080fd5b505af11580156109cd573d6000803e3d6000fd5b505050506040513d60208110156109e357600080fd5b50506000805460ff191660011781556040516001600160a01b0383169133917fcb867aacde0a366be34dd5a67c52d14fe1a849217e927e74b490e2a12427c1829190a350565b602581565b3360009081526008602052604090205460ff16610a8e576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6004546001600160a01b0384811691161415610adb5760405162461bcd60e51b81526004018080602001828103825260458152602001806116036045913960600191505060405180910390fd5b80610b2d576040805162461bcd60e51b815260206004820152601860248201527f4475726174696f6e2063616e6e6f74206265207a65726f2e0000000000000000604482015290519081900360640190fd5b60258110610b7a576040805162461bcd60e51b8152602060048201526015602482015274223ab930ba34b7b71034b9903a37b7903637b7339760591b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0385169081179091556224ea0083810260015582026002556040805184815260208101849052815133927f11e1e2758f8144de109ed6dc1603825d8c1dac764d01766d27ad893edac53ae1928290030190a3505050565b6001600160a01b031660009081526006602052604090205490565b6000610c0c336110e0565b905090565b6000610c1c336111c1565b9050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d6020811015610c8157600080fd5b5051600154148015610cf85750806001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051600254145b610d49576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672056657374696e67205363686564756c652e000000000000000000604482015290519081900360640190fd5b6105603382611246565b61271081565b610d633382610f79565b610560336110af565b610d7882826000610d7c565b5050565b6127108110610dbc5760405162461bcd60e51b81526004018080602001828103825260268152602001806116c56026913960400191505060405180910390fd5b600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b505050506040513d6020811015610e3f57600080fd5b5051905080610e7f5760405162461bcd60e51b815260040180806020018281038252603a81526020018061168b603a913960400191505060405180910390fd5b6000610ea3612710610e97868663ffffffff6113c616565b9063ffffffff61142816565b6001600160a01b038616600090815260076020526040902054909150610ecf908263ffffffff61146a16565b6001600160a01b038616600090815260076020908152604080832093909355600690522054610f16908290610f0a908763ffffffff61146a16565b9063ffffffff6114c416565b6001600160a01b0386166000818152600660209081526040918290209390935580518781529283018690528051919233927ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5929181900390910190a35050505050565b806001600160a01b038116610f8b5750815b6001600160a01b038084166000908152600760209081526040808320805490849055600354825163a9059cbb60e01b815287871660048201526024810183905292519195169263a9059cbb926044808201939182900301818787803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050506040513d602081101561101d57600080fd5b505190508061105d5760405162461bcd60e51b815260040180806020018281038252603a81526020018061168b603a913960400191505060405180910390fd5b826001600160a01b0316856001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb846040518082815260200191505060405180910390a35050505050565b60006110ba826111c1565b90506001600160a01b0381166110d6576110d3826110e0565b90505b610d788282611246565b6004805460015460025460408051630665a06f60e01b81526001600160a01b03878116968201969096526000602482018190526044820194909452606481019290925251919390921691630665a06f916084808301928692919082900301818387803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b50505050611170826111c1565b9050806001600160a01b0316826001600160a01b0316336001600160a01b03167fbca00eff836738917bc04c3b9c08d4bb6af3f58f9eb021d294e6b17bc6a3b86560405160405180910390a4919050565b600480546040805163cc49ede760e01b81526001600160a01b038581169482019490945290516000939092169163cc49ede791602480820192602092909190829003018186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d602081101561123e57600080fd5b505192915050565b6001600160a01b038083166000908152600660209081526040808320805490849055600354825163095ea7b360e01b815287871660048201526024810183905292519195169363095ea7b393604480850194919392918390030190829087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b5051611321576040805162461bcd60e51b815260206004820152600f60248201526e20b8383937bb32903330b4b632b21760891b604482015290519081900360640190fd5b816001600160a01b0316637547c7a3826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506040805184815290516001600160a01b038087169450871692507f17a90bf25d618e67de9bc66de5762d97787b11707d112164ab54c37111467f2b9181900360200190a3505050565b6000826113d557506000611422565b828202828482816113e257fe5b041461141f5760405162461bcd60e51b815260040180806020018281038252602181526020018061166a6021913960400191505060405180910390fd5b90505b92915050565b600061141f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611506565b60008282018381101561141f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061141f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115a8565b600081836115925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561155757818101518382015260200161153f565b50505050905090810190601f1680156115845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161159e57fe5b0495945050505050565b600081848411156115fa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561155757818101518382015260200161153f565b50505090039056fe56657374696e672052656769737472792068617320746f20626520646966666572656e7420666f72206368616e67696e67206475726174696f6e20616e6420636c6966662e4e6577204c6f636b656420534f56204164647265737320697320496e76616c69642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e207472616e7366657220776173206e6f74207375636365737366756c2e20436865636b20726563656976657220616464726573732e426173697320506f696e742068617320746f206265206c657373207468616e2031303030302ea265627a7a72315820439920183213df7e44ae05ae2e295f960beeded8ec3b30c112ffc764170783f964736f6c6343000511003256657374696e67207265676973747279206164647265737320697320696e76616c69642e",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c80637195823e116100c3578063c40868931161007c578063c408689314610357578063cc6f03331461037d578063ce46643b14610385578063d74910931461038d578063e554586414610395578063f33bf9a1146103bb57610158565b80637195823e146102df5780638a4068dd146102e7578063904c5b8f146102ef578063a0f52da0146102f7578063b1724b461461031d578063bb3ff62a1461032557610158565b80631785f53c116101155780631785f53c146102195780632b6df82a1461023f5780633e4a89d1146102655780634558269f1461028b57806351cff8d91461029357806370480275146102b957610158565b806308dcb3601461015d5780630efe6a8b146101815780630fb5a6b4146101b5578063129de5bf146101cf57806313d033c0146101f55780631705a3bd146101fd575b600080fd5b6101656103e7565b604080516001600160a01b039092168252519081900360200190f35b6101b36004803603606081101561019757600080fd5b506001600160a01b0381351690602081013590604001356103f6565b005b6101bd610406565b60408051918252519081900360200190f35b6101bd600480360360208110156101e557600080fd5b50356001600160a01b031661040c565b6101bd610427565b61020561042d565b604080519115158252519081900360200190f35b6101b36004803603602081101561022f57600080fd5b50356001600160a01b0316610436565b6101b36004803603602081101561025557600080fd5b50356001600160a01b031661054d565b6102056004803603602081101561027b57600080fd5b50356001600160a01b0316610563565b6101b3610581565b6101b3600480360360208110156102a957600080fd5b50356001600160a01b031661058c565b6101b3600480360360208110156102cf57600080fd5b50356001600160a01b0316610596565b6101656106ff565b6101b361070e565b61016561081c565b6101b36004803603602081101561030d57600080fd5b50356001600160a01b031661082b565b6101bd610a29565b6101b36004803603606081101561033b57600080fd5b506001600160a01b038135169060208101359060400135610a2e565b6101bd6004803603602081101561036d57600080fd5b50356001600160a01b0316610be6565b610165610c01565b6101b3610c11565b6101bd610d53565b6101b3600480360360208110156103ab57600080fd5b50356001600160a01b0316610d59565b6101b3600480360360408110156103d157600080fd5b506001600160a01b038135169060200135610d6c565b6003546001600160a01b031681565b610401838383610d7c565b505050565b60025481565b6001600160a01b031660009081526007602052604090205490565b60015481565b60005460ff1681565b3360009081526008602052604090205460ff16610496576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610503576040805162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e2061646d696e2e0000000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260086020526040808220805460ff191690555133917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b6105578182610f79565b610560816110af565b50565b6001600160a01b031660009081526008602052604090205460ff1690565b61058a336110af565b565b6105603382610f79565b3360009081526008602052604090205460ff166105f6576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b038116610644576040805162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21020b2323932b9b99760811b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16156106b2576040805162461bcd60e51b815260206004820152601960248201527f4164647265737320697320616c72656164792061646d696e2e00000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260086020526040808220805460ff191660011790555133917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6005546001600160a01b031681565b60005460ff16610765576040805162461bcd60e51b815260206004820152601e60248201527f4d6967726174696f6e20686173206e6f742079657420737461727465642e0000604482015290519081900360640190fd5b33600081815260066020526040808220805490839055600554825163f33bf9a160e01b8152600481019590955260248501829052915190936001600160a01b039092169263f33bf9a1926044808201939182900301818387803b1580156107cb57600080fd5b505af11580156107df573d6000803e3d6000fd5b50506040805184815290513393507fe4d132f68e97bb85bfbf6346414f11bd7f666e31cf86fe80669273c01c1aec9392509081900360200190a250565b6004546001600160a01b031681565b3360009081526008602052604090205460ff1661088b576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6001600160a01b0381166108d05760405162461bcd60e51b81526004018080602001828103825260228152602001806116486022913960400191505060405180910390fd5b600580546001600160a01b0319166001600160a01b0383811691909117909155600354604080516370a0823160e01b81523060048201529051919092169163095ea7b391849184916370a0823191602480820192602092909190829003018186803b15801561093e57600080fd5b505afa158015610952573d6000803e3d6000fd5b505050506040513d602081101561096857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156109b957600080fd5b505af11580156109cd573d6000803e3d6000fd5b505050506040513d60208110156109e357600080fd5b50506000805460ff191660011781556040516001600160a01b0383169133917fcb867aacde0a366be34dd5a67c52d14fe1a849217e927e74b490e2a12427c1829190a350565b602581565b3360009081526008602052604090205460ff16610a8e576040805162461bcd60e51b815260206004820152601960248201527827b7363c9030b236b4b71031b0b71031b0b636103a3434b99760391b604482015290519081900360640190fd5b6004546001600160a01b0384811691161415610adb5760405162461bcd60e51b81526004018080602001828103825260458152602001806116036045913960600191505060405180910390fd5b80610b2d576040805162461bcd60e51b815260206004820152601860248201527f4475726174696f6e2063616e6e6f74206265207a65726f2e0000000000000000604482015290519081900360640190fd5b60258110610b7a576040805162461bcd60e51b8152602060048201526015602482015274223ab930ba34b7b71034b9903a37b7903637b7339760591b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0385169081179091556224ea0083810260015582026002556040805184815260208101849052815133927f11e1e2758f8144de109ed6dc1603825d8c1dac764d01766d27ad893edac53ae1928290030190a3505050565b6001600160a01b031660009081526006602052604090205490565b6000610c0c336110e0565b905090565b6000610c1c336111c1565b9050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d6020811015610c8157600080fd5b5051600154148015610cf85750806001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051600254145b610d49576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672056657374696e67205363686564756c652e000000000000000000604482015290519081900360640190fd5b6105603382611246565b61271081565b610d633382610f79565b610560336110af565b610d7882826000610d7c565b5050565b6127108110610dbc5760405162461bcd60e51b81526004018080602001828103825260268152602001806116c56026913960400191505060405180910390fd5b600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b505050506040513d6020811015610e3f57600080fd5b5051905080610e7f5760405162461bcd60e51b815260040180806020018281038252603a81526020018061168b603a913960400191505060405180910390fd5b6000610ea3612710610e97868663ffffffff6113c616565b9063ffffffff61142816565b6001600160a01b038616600090815260076020526040902054909150610ecf908263ffffffff61146a16565b6001600160a01b038616600090815260076020908152604080832093909355600690522054610f16908290610f0a908763ffffffff61146a16565b9063ffffffff6114c416565b6001600160a01b0386166000818152600660209081526040918290209390935580518781529283018690528051919233927ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5929181900390910190a35050505050565b806001600160a01b038116610f8b5750815b6001600160a01b038084166000908152600760209081526040808320805490849055600354825163a9059cbb60e01b815287871660048201526024810183905292519195169263a9059cbb926044808201939182900301818787803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050506040513d602081101561101d57600080fd5b505190508061105d5760405162461bcd60e51b815260040180806020018281038252603a81526020018061168b603a913960400191505060405180910390fd5b826001600160a01b0316856001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb846040518082815260200191505060405180910390a35050505050565b60006110ba826111c1565b90506001600160a01b0381166110d6576110d3826110e0565b90505b610d788282611246565b6004805460015460025460408051630665a06f60e01b81526001600160a01b03878116968201969096526000602482018190526044820194909452606481019290925251919390921691630665a06f916084808301928692919082900301818387803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b50505050611170826111c1565b9050806001600160a01b0316826001600160a01b0316336001600160a01b03167fbca00eff836738917bc04c3b9c08d4bb6af3f58f9eb021d294e6b17bc6a3b86560405160405180910390a4919050565b600480546040805163cc49ede760e01b81526001600160a01b038581169482019490945290516000939092169163cc49ede791602480820192602092909190829003018186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d602081101561123e57600080fd5b505192915050565b6001600160a01b038083166000908152600660209081526040808320805490849055600354825163095ea7b360e01b815287871660048201526024810183905292519195169363095ea7b393604480850194919392918390030190829087803b1580156112b257600080fd5b505af11580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b5051611321576040805162461bcd60e51b815260206004820152600f60248201526e20b8383937bb32903330b4b632b21760891b604482015290519081900360640190fd5b816001600160a01b0316637547c7a3826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506040805184815290516001600160a01b038087169450871692507f17a90bf25d618e67de9bc66de5762d97787b11707d112164ab54c37111467f2b9181900360200190a3505050565b6000826113d557506000611422565b828202828482816113e257fe5b041461141f5760405162461bcd60e51b815260040180806020018281038252602181526020018061166a6021913960400191505060405180910390fd5b90505b92915050565b600061141f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611506565b60008282018381101561141f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061141f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115a8565b600081836115925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561155757818101518382015260200161153f565b50505050905090810190601f1680156115845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161159e57fe5b0495945050505050565b600081848411156115fa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561155757818101518382015260200161153f565b50505090039056fe56657374696e672052656769737472792068617320746f20626520646966666572656e7420666f72206368616e67696e67206475726174696f6e20616e6420636c6966662e4e6577204c6f636b656420534f56204164647265737320697320496e76616c69642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e207472616e7366657220776173206e6f74207375636365737366756c2e20436865636b20726563656976657220616464726573732e426173697320506f696e742068617320746f206265206c657373207468616e2031303030302ea265627a7a72315820439920183213df7e44ae05ae2e295f960beeded8ec3b30c112ffc764170783f964736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
