{
  "_format": "hh-sol-artifact-1",
  "contractName": "FeeDistributor",
  "sourceName": "contracts/fees/FeeDistributor.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_votingEscrow",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pendingFeeDistributor",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokens",
          "type": "uint256"
        }
      ],
      "name": "CheckpointToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nftId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimEpoch",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxEpoch",
          "type": "uint256"
        }
      ],
      "name": "Claimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOperator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOperator",
          "type": "address"
        }
      ],
      "name": "OperatorTransferred",
      "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": false,
          "internalType": "bool",
          "name": "toggleFlag",
          "type": "bool"
        }
      ],
      "name": "ToggleAllowCheckpointToken",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "TOKEN_CHECKPOINT_DEADLINE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WEEK",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "canCheckpointToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "checkpointToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "checkpointTotalSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "claim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "nftIds",
          "type": "uint256[]"
        }
      ],
      "name": "claimMany",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_reward",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "_proof",
          "type": "bytes32[]"
        }
      ],
      "name": "claimWithPendingRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isKilled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "killMe",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastTokenTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "locker",
      "outputs": [
        {
          "internalType": "contract INFTLocker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "operator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingFeeDistributor",
      "outputs": [
        {
          "internalType": "contract IPendingFeeDistributor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_coin",
          "type": "address"
        }
      ],
      "name": "recoverBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_what",
          "type": "address"
        }
      ],
      "name": "setPendingFeeDistributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "timeCursor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "timeCursorOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "toggleAllowCheckpointToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenLastBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokensPerWeek",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOperator_",
          "type": "address"
        }
      ],
      "name": "transferOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "userEpochOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "veSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405266071afd498d000c805461ff0019166101001790553480156200002657600080fd5b506040516200239238038062002392833981016040819052620000499162000199565b62000054336200012c565b600180546001600160a01b031916339081179091556040516000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a36001600255600062093a80620000ab8142620001e2565b620000b7919062000203565b600481905560088190556005555066038d7ea4c6800a80546001600160a01b03199081166001600160a01b039485161790915566038d7ea4c6800980549091169383169390931790925566071afd498d000c805462010000600160b01b0319166201000093909216929092021790556200022f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019457600080fd5b919050565b600080600060608486031215620001ae578283fd5b620001b9846200017c565b9250620001c9602085016200017c565b9150620001d9604085016200017c565b90509250925092565b600082620001fe57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200022a57634e487b7160e01b81526011600452602481fd5b500290565b612153806200023f6000396000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c8063899519be116100e4578063b603cd8011610092578063b603cd801461033d578063bee5dc3214610345578063d7b96d4e1461034d578063e32890c414610366578063ed0f65aa14610386578063f2fde38b14610399578063f4359ce5146103ac578063fc0c546a146103b657600080fd5b8063899519be146102d15780638da5cb5b146102e45780638ec8468a146102f55780638fe8a10114610304578063925489a814610317578063939ea66b1461032a578063a5420e981461033357600080fd5b80634607bf601161014c5780634607bf6014610243578063570ca7351461026357806368662ea01461027d578063715018a61461029057806378e97925146102985780637d2294d0146102a15780638721b785146102c05780638736659b146102c857600080fd5b80630cc672e41461019f5780630f6592ef146101cc57806329605e77146101ed5780632971aa8e14610202578063326a940714610215578063379607f51461021d5780634456eda214610230575b600080fd5b66071afd498d000c546101b790610100900460ff1681565b60405190151581526020015b60405180910390f35b6101df6101da366004611d4c565b6103cf565b6040519081526020016101c3565b6102006101fb366004611beb565b6103f2565b005b6101df610210366004611d7c565b610406565b61020061051b565b6101df61022b366004611d4c565b610526565b6001546001600160a01b031633146101b7565b6101df610251366004611d4c565b60066020526000908152604090205481565b6001546001600160a01b03165b6040516101c39190611e35565b61020061028b366004611beb565b610562565b610200610663565b6101df60045481565b66071afd498d000c54610270906201000090046001600160a01b031681565b610200610675565b6101df60055481565b6101df6102df366004611d4c565b6106e5565b6000546001600160a01b0316610270565b6101df66038d7ea4c6800b5481565b66071afd498d000c546101b79060ff1681565b6101b7610325366004611c23565b6106fb565b6101df60085481565b6101df6201518081565b610200610986565b610200610aa0565b66038d7ea4c6800954610270906001600160a01b031681565b6101df610374366004611d4c565b60076020526000908152604090205481565b610200610394366004611beb565b610b35565b6102006103a7366004611beb565b610b6d565b6101df62093a8081565b66038d7ea4c6800a54610270906001600160a01b031681565b66038d7ea4c6800c8166038d7ea4c6800081106103eb57600080fd5b0154905081565b6103fa610be3565b61040381610c3d565b50565b60006002805414156104335760405162461bcd60e51b815260040161042a90611e82565b60405180910390fd5b60028055600061044286610d01565b66071afd498d000c549091506201000090046001600160a01b031661046857905061050e565b66071afd498d000c54604051632599081560e11b81526000916201000090046001600160a01b031690634b32102a906104ab908a908a908a908a90600401611eb9565b602060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190611d64565b90506105098183611f71565b925050505b6001600255949350505050565b61052442610ee6565b565b600060028054141561054a5760405162461bcd60e51b815260040161042a90611e82565b6002805561055782610d01565b600160025592915050565b61056a610be3565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a08231906105a0903090600401611e35565b60206040518083038186803b1580156105b857600080fd5b505afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f09190611d64565b6040518363ffffffff1660e01b815260040161060d929190611e49565b602060405180830381600087803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190611cbb565b5050565b61066b610be3565b61052460006110cb565b61067d610be3565b66071afd498d000c805460ff610100808304821615810261ff001990931692909217928390556040517fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b2936106db9390049091161515815260200190565b60405180910390a1565b60098166038d7ea4c6800081106103eb57600080fd5b600060028054141561071f5760405162461bcd60e51b815260040161042a90611e82565b6002805566071afd498d000c5460ff161561074c5760405162461bcd60e51b815260040161042a90611e62565b600554421061075e5761075e42610ee6565b60085466071afd498d000c54610100900460ff16801561078d57506201518060085461078a9190611f71565b42115b1561079e5761079b4261111b565b50425b62093a806107ac8183611f89565b6107b6919061203b565b905060005b83518110156109765760006107f78583815181106107e957634e487b7160e01b600052603260045260246000fd5b6020026020010151846113c6565b66038d7ea4c680095486519192506000916001600160a01b0390911690636352211e9088908690811061083a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161086091815260200190565b60206040518083038186803b15801561087857600080fd5b505afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611c07565b90508115610961578166038d7ea4c6800b60008282546108d091906120aa565b909155505066038d7ea4c6800a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061090d9084908690600401611e49565b602060405180830381600087803b15801561092757600080fd5b505af115801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095f9190611cbb565b505b5050808061096e906120c1565b9150506107bb565b5060019150506001600255919050565b61098e610be3565b66071afd498d000c805460ff1916600117905566038d7ea4c6800a546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90339083906370a08231906109e1903090600401611e35565b60206040518083038186803b1580156109f957600080fd5b505afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190611d64565b6040518363ffffffff1660e01b8152600401610a4e929190611e49565b602060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104039190611cbb565b6001546001600160a01b0316331480610ae0575066071afd498d000c54610100900460ff168015610ae0575062015180600854610add9190611f71565b42115b610b2c5760405162461bcd60e51b815260206004820152601b60248201527f6e6f74206f70657261746f72206f72206e6f7420616c6c6f7765640000000000604482015260640161042a565b6105244261111b565b610b3d610be3565b66071afd498d000c80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b610b75610be3565b6001600160a01b038116610bda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042a565b610403816110cb565b6000546001600160a01b031633146105245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042a565b6001600160a01b038116610ca95760405162461bcd60e51b815260206004820152602d60248201527f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260448201526c103732bb9037b832b930ba37b960991b606482015260840161042a565b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b66071afd498d000c5460009060ff1615610d2d5760405162461bcd60e51b815260040161042a90611e62565b6005544210610d3f57610d3f42610ee6565b60085466071afd498d000c54610100900460ff168015610d6e575062015180600854610d6b9190611f71565b42115b15610d7f57610d7c4261111b565b50425b62093a80610d8d8183611f89565b610d97919061203b565b90506000610da584836113c6565b66038d7ea4c68009546040516331a9108f60e11b8152600481018790529192506000916001600160a01b0390911690636352211e9060240160206040518083038186803b158015610df557600080fd5b505afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611c07565b90508115610ede578166038d7ea4c6800b6000828254610e4d91906120aa565b909155505066038d7ea4c6800a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610e8a9084908690600401611e49565b602060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190611cbb565b505b509392505050565b600554600062093a80610ef98185611f89565b610f03919061203b565b905066038d7ea4c6800960009054906101000a90046001600160a01b03166001600160a01b031663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505060005b60148110156110c35781831115610f8c576110c3565b6000610f9784611901565b66038d7ea4c6800954604051638ad4c44760e01b8152600481018390529192506000916001600160a01b0390911690638ad4c4479060240160806040518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611cdb565b90506000816040015186111561104157604082015161103e90876120aa565b90505b6110708183602001516110549190611fa9565b8351611060919061205a565b6001600160801b03166000611a9c565b66038d7ea4c6800c8766038d7ea4c68000811061109d57634e487b7160e01b600052603260045260246000fd5b01555050506110af62093a8084611f71565b9250806110bb816120c1565b915050610f76565b505060055550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b66038d7ea4c6800a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611152903090600401611e35565b60206040518083038186803b15801561116a57600080fd5b505afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a29190611d64565b9050600066038d7ea4c6800b54826111ba91906120aa565b66038d7ea4c6800b83905560085490915060006111d782866120aa565b60088690559050600062093a806111ee8185611f89565b6111f8919061203b565b90506000805b60148110156113835761121462093a8084611f71565b9150818810156112b9578315801561122b57508488145b15611273578560098466038d7ea4c68000811061125857634e487b7160e01b600052603260045260246000fd5b0160008282546112689190611f71565b909155506113839050565b8361127e868a6120aa565b611288908861203b565b6112929190611f89565b60098466038d7ea4c68000811061125857634e487b7160e01b600052603260045260246000fd5b831580156112c657508482145b1561130e578560098466038d7ea4c6800081106112f357634e487b7160e01b600052603260045260246000fd5b0160008282546113039190611f71565b9091555061136a9050565b8361131986846120aa565b611323908861203b565b61132d9190611f89565b60098466038d7ea4c68000811061135457634e487b7160e01b600052603260045260246000fd5b0160008282546113649190611f71565b90915550505b819450819250808061137b906120c1565b9150506111fe565b5060408051888152602081018790527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6910160405180910390a150505050505050565b66038d7ea4c6800954604051635d528fc360e11b8152600481018490526000916001600160a01b03169063baa51f869060240160206040518083038186803b15801561141157600080fd5b505afa158015611425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114499190611cbb565b6114865760405162461bcd60e51b815260206004820152600e60248201526d1b999d081b9bdd081cdd185ad95960921b604482015260640161042a565b66038d7ea4c680095460405163e58f594760e01b815260048101859052600091829182916001600160a01b03169063e58f59479060240160206040518083038186803b1580156114d557600080fd5b505afa1580156114e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150d9190611d64565b600454909150816115255760009450505050506118fb565b6000878152600660205260409020548061154b57611544888385611ab5565b945061155d565b60008881526007602052604090205494505b8461156757600194505b66038d7ea4c68009546040516322565a1560e11b8152600481018a9052602481018790526000916001600160a01b0316906344acb42a9060440160806040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190611cdb565b9050816116335762093a8080600162093a8084604001516116129190611f71565b61161c91906120aa565b6116269190611f89565b611630919061203b565b91505b87821061164957600096505050505050506118fb565b82821015611655578291505b6040805160808101825260008082526020820181905291810182905260608101829052905b60328110156118755789841061168f57611875565b826040015184101580156116a35750858811155b15611782576116b3600189611f71565b9750829150858811156116f25760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250611863565b66038d7ea4c68009546040516322565a1560e11b8152600481018d9052602481018a90526001600160a01b03909116906344acb42a9060440160806040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190611cdb565b9250611863565b600082604001518561179491906120aa565b905060006117b78460200151836117ab9190611fa9565b8551611060919061205a565b9050801580156117c65750878a115b156117d2575050611875565b80156118515766038d7ea4c6800c8666038d7ea4c68000811061180557634e487b7160e01b600052603260045260246000fd5b015460098766038d7ea4c68000811061182e57634e487b7160e01b600052603260045260246000fd5b015461183a908361203b565b6118449190611f89565b61184e908a611f71565b98505b61185e62093a8087611f71565b955050505b8061186d816120c1565b91505061167a565b5061188a8561188560018a6120aa565b611bc5565b60008b8152600760209081526040808320849055600682529182902086905581518d8152908101899052908101829052606081018790529097507fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f009060800160405180910390a15093955050505050505b92915050565b60008060009050600066038d7ea4c6800960009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195e57600080fd5b505afa158015611972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119969190611d64565b905060005b6080811015611a93578183106119b057611a93565b600060026119be8486611f71565b6119c9906002611f71565b6119d39190611f89565b66038d7ea4c6800954604051638ad4c44760e01b8152600481018390529192506000916001600160a01b0390911690638ad4c4479060240160806040518083038186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b9190611cdb565b905086816040015111611a7057819450611a7e565b611a7b6001836120aa565b93505b50508080611a8b906120c1565b91505061199b565b50909392505050565b600081831015611aac5781611aae565b825b9392505050565b60008082815b6080811015611bba57818310611ad057611bba565b60006002611ade8486611f71565b611ae9906002611f71565b611af39190611f89565b66038d7ea4c68009546040516322565a1560e11b8152600481018b9052602481018390529192506000916001600160a01b03909116906344acb42a9060440160806040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190611cdb565b905087816040015111611b9757819450611ba5565b611ba26001836120aa565b93505b50508080611bb2906120c1565b915050611abb565b509095945050505050565b6000818310611aac5781611aae565b8051600f81900b8114611be657600080fd5b919050565b600060208284031215611bfc578081fd5b8135611aae81612108565b600060208284031215611c18578081fd5b8151611aae81612108565b60006020808385031215611c35578182fd5b823567ffffffffffffffff811115611c4b578283fd5b8301601f81018513611c5b578283fd5b8035611c6e611c6982611f4d565b611f1c565b80828252848201915084840188868560051b8701011115611c8d578687fd5b8694505b83851015611caf578035835260019490940193918501918501611c91565b50979650505050505050565b600060208284031215611ccc578081fd5b81518015158114611aae578182fd5b600060808284031215611cec578081fd5b6040516080810181811067ffffffffffffffff82111715611d0f57611d0f6120f2565b604052611d1b83611bd4565b8152611d2960208401611bd4565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611d5d578081fd5b5035919050565b600060208284031215611d75578081fd5b5051919050565b60008060008060808587031215611d91578283fd5b84359350602080860135611da481612108565b935060408601359250606086013567ffffffffffffffff811115611dc6578283fd5b8601601f81018813611dd6578283fd5b8035611de4611c6982611f4d565b8082825284820191508484018b868560051b8701011115611e03578687fd5b8694505b83851015611e25578035835260019490940193918501918501611e07565b50979a9699509497505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600690820152651ada5b1b195960d21b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060808201868352602060018060a01b038716818501528560408501526080606085015281855180845260a0860191508287019350845b81811015611f0d57845183529383019391830191600101611ef1565b50909998505050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f4557611f456120f2565b604052919050565b600067ffffffffffffffff821115611f6757611f676120f2565b5060051b60200190565b60008219821115611f8457611f846120dc565b500190565b600082611fa457634e487b7160e01b81526012600452602481fd5b500490565b6000600f82810b9084900b60016001607f1b0383821384841380821684840486111615611fd857611fd86120dc565b60016001607f1b031986851282811687830587121615611ffa57611ffa6120dc565b878712925085820587128484161615612015576120156120dc565b8585058712818416161561202b5761202b6120dc565b5050509290910295945050505050565b6000816000190483118215151615612055576120556120dc565b500290565b6000600f82810b9084900b828112801560016001607f1b0319830184121615612085576120856120dc565b60016001607f1b03820183138116156120a0576120a06120dc565b5090039392505050565b6000828210156120bc576120bc6120dc565b500390565b60006000198214156120d5576120d56120dc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461040357600080fdfea264697066735822122081e3bb9385bfad6cae80759e6b2ceacd10cf4983bbaf1ecf37889eee3ed472db64736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061019a5760003560e01c8063899519be116100e4578063b603cd8011610092578063b603cd801461033d578063bee5dc3214610345578063d7b96d4e1461034d578063e32890c414610366578063ed0f65aa14610386578063f2fde38b14610399578063f4359ce5146103ac578063fc0c546a146103b657600080fd5b8063899519be146102d15780638da5cb5b146102e45780638ec8468a146102f55780638fe8a10114610304578063925489a814610317578063939ea66b1461032a578063a5420e981461033357600080fd5b80634607bf601161014c5780634607bf6014610243578063570ca7351461026357806368662ea01461027d578063715018a61461029057806378e97925146102985780637d2294d0146102a15780638721b785146102c05780638736659b146102c857600080fd5b80630cc672e41461019f5780630f6592ef146101cc57806329605e77146101ed5780632971aa8e14610202578063326a940714610215578063379607f51461021d5780634456eda214610230575b600080fd5b66071afd498d000c546101b790610100900460ff1681565b60405190151581526020015b60405180910390f35b6101df6101da366004611d4c565b6103cf565b6040519081526020016101c3565b6102006101fb366004611beb565b6103f2565b005b6101df610210366004611d7c565b610406565b61020061051b565b6101df61022b366004611d4c565b610526565b6001546001600160a01b031633146101b7565b6101df610251366004611d4c565b60066020526000908152604090205481565b6001546001600160a01b03165b6040516101c39190611e35565b61020061028b366004611beb565b610562565b610200610663565b6101df60045481565b66071afd498d000c54610270906201000090046001600160a01b031681565b610200610675565b6101df60055481565b6101df6102df366004611d4c565b6106e5565b6000546001600160a01b0316610270565b6101df66038d7ea4c6800b5481565b66071afd498d000c546101b79060ff1681565b6101b7610325366004611c23565b6106fb565b6101df60085481565b6101df6201518081565b610200610986565b610200610aa0565b66038d7ea4c6800954610270906001600160a01b031681565b6101df610374366004611d4c565b60076020526000908152604090205481565b610200610394366004611beb565b610b35565b6102006103a7366004611beb565b610b6d565b6101df62093a8081565b66038d7ea4c6800a54610270906001600160a01b031681565b66038d7ea4c6800c8166038d7ea4c6800081106103eb57600080fd5b0154905081565b6103fa610be3565b61040381610c3d565b50565b60006002805414156104335760405162461bcd60e51b815260040161042a90611e82565b60405180910390fd5b60028055600061044286610d01565b66071afd498d000c549091506201000090046001600160a01b031661046857905061050e565b66071afd498d000c54604051632599081560e11b81526000916201000090046001600160a01b031690634b32102a906104ab908a908a908a908a90600401611eb9565b602060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190611d64565b90506105098183611f71565b925050505b6001600255949350505050565b61052442610ee6565b565b600060028054141561054a5760405162461bcd60e51b815260040161042a90611e82565b6002805561055782610d01565b600160025592915050565b61056a610be3565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a08231906105a0903090600401611e35565b60206040518083038186803b1580156105b857600080fd5b505afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f09190611d64565b6040518363ffffffff1660e01b815260040161060d929190611e49565b602060405180830381600087803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190611cbb565b5050565b61066b610be3565b61052460006110cb565b61067d610be3565b66071afd498d000c805460ff610100808304821615810261ff001990931692909217928390556040517fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b2936106db9390049091161515815260200190565b60405180910390a1565b60098166038d7ea4c6800081106103eb57600080fd5b600060028054141561071f5760405162461bcd60e51b815260040161042a90611e82565b6002805566071afd498d000c5460ff161561074c5760405162461bcd60e51b815260040161042a90611e62565b600554421061075e5761075e42610ee6565b60085466071afd498d000c54610100900460ff16801561078d57506201518060085461078a9190611f71565b42115b1561079e5761079b4261111b565b50425b62093a806107ac8183611f89565b6107b6919061203b565b905060005b83518110156109765760006107f78583815181106107e957634e487b7160e01b600052603260045260246000fd5b6020026020010151846113c6565b66038d7ea4c680095486519192506000916001600160a01b0390911690636352211e9088908690811061083a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161086091815260200190565b60206040518083038186803b15801561087857600080fd5b505afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611c07565b90508115610961578166038d7ea4c6800b60008282546108d091906120aa565b909155505066038d7ea4c6800a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061090d9084908690600401611e49565b602060405180830381600087803b15801561092757600080fd5b505af115801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095f9190611cbb565b505b5050808061096e906120c1565b9150506107bb565b5060019150506001600255919050565b61098e610be3565b66071afd498d000c805460ff1916600117905566038d7ea4c6800a546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90339083906370a08231906109e1903090600401611e35565b60206040518083038186803b1580156109f957600080fd5b505afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190611d64565b6040518363ffffffff1660e01b8152600401610a4e929190611e49565b602060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104039190611cbb565b6001546001600160a01b0316331480610ae0575066071afd498d000c54610100900460ff168015610ae0575062015180600854610add9190611f71565b42115b610b2c5760405162461bcd60e51b815260206004820152601b60248201527f6e6f74206f70657261746f72206f72206e6f7420616c6c6f7765640000000000604482015260640161042a565b6105244261111b565b610b3d610be3565b66071afd498d000c80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b610b75610be3565b6001600160a01b038116610bda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042a565b610403816110cb565b6000546001600160a01b031633146105245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042a565b6001600160a01b038116610ca95760405162461bcd60e51b815260206004820152602d60248201527f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260448201526c103732bb9037b832b930ba37b960991b606482015260840161042a565b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b66071afd498d000c5460009060ff1615610d2d5760405162461bcd60e51b815260040161042a90611e62565b6005544210610d3f57610d3f42610ee6565b60085466071afd498d000c54610100900460ff168015610d6e575062015180600854610d6b9190611f71565b42115b15610d7f57610d7c4261111b565b50425b62093a80610d8d8183611f89565b610d97919061203b565b90506000610da584836113c6565b66038d7ea4c68009546040516331a9108f60e11b8152600481018790529192506000916001600160a01b0390911690636352211e9060240160206040518083038186803b158015610df557600080fd5b505afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611c07565b90508115610ede578166038d7ea4c6800b6000828254610e4d91906120aa565b909155505066038d7ea4c6800a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610e8a9084908690600401611e49565b602060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190611cbb565b505b509392505050565b600554600062093a80610ef98185611f89565b610f03919061203b565b905066038d7ea4c6800960009054906101000a90046001600160a01b03166001600160a01b031663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505060005b60148110156110c35781831115610f8c576110c3565b6000610f9784611901565b66038d7ea4c6800954604051638ad4c44760e01b8152600481018390529192506000916001600160a01b0390911690638ad4c4479060240160806040518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611cdb565b90506000816040015186111561104157604082015161103e90876120aa565b90505b6110708183602001516110549190611fa9565b8351611060919061205a565b6001600160801b03166000611a9c565b66038d7ea4c6800c8766038d7ea4c68000811061109d57634e487b7160e01b600052603260045260246000fd5b01555050506110af62093a8084611f71565b9250806110bb816120c1565b915050610f76565b505060055550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b66038d7ea4c6800a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611152903090600401611e35565b60206040518083038186803b15801561116a57600080fd5b505afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a29190611d64565b9050600066038d7ea4c6800b54826111ba91906120aa565b66038d7ea4c6800b83905560085490915060006111d782866120aa565b60088690559050600062093a806111ee8185611f89565b6111f8919061203b565b90506000805b60148110156113835761121462093a8084611f71565b9150818810156112b9578315801561122b57508488145b15611273578560098466038d7ea4c68000811061125857634e487b7160e01b600052603260045260246000fd5b0160008282546112689190611f71565b909155506113839050565b8361127e868a6120aa565b611288908861203b565b6112929190611f89565b60098466038d7ea4c68000811061125857634e487b7160e01b600052603260045260246000fd5b831580156112c657508482145b1561130e578560098466038d7ea4c6800081106112f357634e487b7160e01b600052603260045260246000fd5b0160008282546113039190611f71565b9091555061136a9050565b8361131986846120aa565b611323908861203b565b61132d9190611f89565b60098466038d7ea4c68000811061135457634e487b7160e01b600052603260045260246000fd5b0160008282546113649190611f71565b90915550505b819450819250808061137b906120c1565b9150506111fe565b5060408051888152602081018790527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6910160405180910390a150505050505050565b66038d7ea4c6800954604051635d528fc360e11b8152600481018490526000916001600160a01b03169063baa51f869060240160206040518083038186803b15801561141157600080fd5b505afa158015611425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114499190611cbb565b6114865760405162461bcd60e51b815260206004820152600e60248201526d1b999d081b9bdd081cdd185ad95960921b604482015260640161042a565b66038d7ea4c680095460405163e58f594760e01b815260048101859052600091829182916001600160a01b03169063e58f59479060240160206040518083038186803b1580156114d557600080fd5b505afa1580156114e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150d9190611d64565b600454909150816115255760009450505050506118fb565b6000878152600660205260409020548061154b57611544888385611ab5565b945061155d565b60008881526007602052604090205494505b8461156757600194505b66038d7ea4c68009546040516322565a1560e11b8152600481018a9052602481018790526000916001600160a01b0316906344acb42a9060440160806040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190611cdb565b9050816116335762093a8080600162093a8084604001516116129190611f71565b61161c91906120aa565b6116269190611f89565b611630919061203b565b91505b87821061164957600096505050505050506118fb565b82821015611655578291505b6040805160808101825260008082526020820181905291810182905260608101829052905b60328110156118755789841061168f57611875565b826040015184101580156116a35750858811155b15611782576116b3600189611f71565b9750829150858811156116f25760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250611863565b66038d7ea4c68009546040516322565a1560e11b8152600481018d9052602481018a90526001600160a01b03909116906344acb42a9060440160806040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190611cdb565b9250611863565b600082604001518561179491906120aa565b905060006117b78460200151836117ab9190611fa9565b8551611060919061205a565b9050801580156117c65750878a115b156117d2575050611875565b80156118515766038d7ea4c6800c8666038d7ea4c68000811061180557634e487b7160e01b600052603260045260246000fd5b015460098766038d7ea4c68000811061182e57634e487b7160e01b600052603260045260246000fd5b015461183a908361203b565b6118449190611f89565b61184e908a611f71565b98505b61185e62093a8087611f71565b955050505b8061186d816120c1565b91505061167a565b5061188a8561188560018a6120aa565b611bc5565b60008b8152600760209081526040808320849055600682529182902086905581518d8152908101899052908101829052606081018790529097507fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f009060800160405180910390a15093955050505050505b92915050565b60008060009050600066038d7ea4c6800960009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195e57600080fd5b505afa158015611972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119969190611d64565b905060005b6080811015611a93578183106119b057611a93565b600060026119be8486611f71565b6119c9906002611f71565b6119d39190611f89565b66038d7ea4c6800954604051638ad4c44760e01b8152600481018390529192506000916001600160a01b0390911690638ad4c4479060240160806040518083038186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b9190611cdb565b905086816040015111611a7057819450611a7e565b611a7b6001836120aa565b93505b50508080611a8b906120c1565b91505061199b565b50909392505050565b600081831015611aac5781611aae565b825b9392505050565b60008082815b6080811015611bba57818310611ad057611bba565b60006002611ade8486611f71565b611ae9906002611f71565b611af39190611f89565b66038d7ea4c68009546040516322565a1560e11b8152600481018b9052602481018390529192506000916001600160a01b03909116906344acb42a9060440160806040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190611cdb565b905087816040015111611b9757819450611ba5565b611ba26001836120aa565b93505b50508080611bb2906120c1565b915050611abb565b509095945050505050565b6000818310611aac5781611aae565b8051600f81900b8114611be657600080fd5b919050565b600060208284031215611bfc578081fd5b8135611aae81612108565b600060208284031215611c18578081fd5b8151611aae81612108565b60006020808385031215611c35578182fd5b823567ffffffffffffffff811115611c4b578283fd5b8301601f81018513611c5b578283fd5b8035611c6e611c6982611f4d565b611f1c565b80828252848201915084840188868560051b8701011115611c8d578687fd5b8694505b83851015611caf578035835260019490940193918501918501611c91565b50979650505050505050565b600060208284031215611ccc578081fd5b81518015158114611aae578182fd5b600060808284031215611cec578081fd5b6040516080810181811067ffffffffffffffff82111715611d0f57611d0f6120f2565b604052611d1b83611bd4565b8152611d2960208401611bd4565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611d5d578081fd5b5035919050565b600060208284031215611d75578081fd5b5051919050565b60008060008060808587031215611d91578283fd5b84359350602080860135611da481612108565b935060408601359250606086013567ffffffffffffffff811115611dc6578283fd5b8601601f81018813611dd6578283fd5b8035611de4611c6982611f4d565b8082825284820191508484018b868560051b8701011115611e03578687fd5b8694505b83851015611e25578035835260019490940193918501918501611e07565b50979a9699509497505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600690820152651ada5b1b195960d21b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060808201868352602060018060a01b038716818501528560408501526080606085015281855180845260a0860191508287019350845b81811015611f0d57845183529383019391830191600101611ef1565b50909998505050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f4557611f456120f2565b604052919050565b600067ffffffffffffffff821115611f6757611f676120f2565b5060051b60200190565b60008219821115611f8457611f846120dc565b500190565b600082611fa457634e487b7160e01b81526012600452602481fd5b500490565b6000600f82810b9084900b60016001607f1b0383821384841380821684840486111615611fd857611fd86120dc565b60016001607f1b031986851282811687830587121615611ffa57611ffa6120dc565b878712925085820587128484161615612015576120156120dc565b8585058712818416161561202b5761202b6120dc565b5050509290910295945050505050565b6000816000190483118215151615612055576120556120dc565b500290565b6000600f82810b9084900b828112801560016001607f1b0319830184121615612085576120856120dc565b60016001607f1b03820183138116156120a0576120a06120dc565b5090039392505050565b6000828210156120bc576120bc6120dc565b500390565b60006000198214156120d5576120d56120dc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461040357600080fdfea264697066735822122081e3bb9385bfad6cae80759e6b2ceacd10cf4983bbaf1ecf37889eee3ed472db64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
