{
  "_format": "hh-sol-artifact-1",
  "contractName": "ClaimModule",
  "sourceName": "contracts/protocol/modules/v1/ClaimModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_anyoneClaim",
          "type": "bool"
        }
      ],
      "name": "AnyoneClaimUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IClaimAdapter",
          "name": "_adapter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "RewardClaimed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_integrationName",
          "type": "string"
        }
      ],
      "name": "addClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "anyoneClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_rewardPools",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "_integrationNames",
          "type": "string[]"
        }
      ],
      "name": "batchAddClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_rewardPools",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "_integrationNames",
          "type": "string[]"
        }
      ],
      "name": "batchClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_rewardPools",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "_integrationNames",
          "type": "string[]"
        }
      ],
      "name": "batchRemoveClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_integrationName",
          "type": "string"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "claimSettings",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "claimSettingsStatus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        }
      ],
      "name": "getRewardPoolClaims",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getRewardPools",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_integrationName",
          "type": "string"
        }
      ],
      "name": "getRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_anyoneClaim",
          "type": "bool"
        },
        {
          "internalType": "address[]",
          "name": "_rewardPools",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "_integrationNames",
          "type": "string[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        }
      ],
      "name": "isRewardPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_integrationName",
          "type": "string"
        }
      ],
      "name": "isRewardPoolClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardPool",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_integrationName",
          "type": "string"
        }
      ],
      "name": "removeClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewardPoolList",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardPoolStatus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_anyoneClaim",
          "type": "bool"
        }
      ],
      "name": "updateAnyoneClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051620024253803806200242583398101604081905261003191610056565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b600060208284031215610067578081fd5b81516001600160a01b038116811461007d578182fd5b9392505050565b61239180620000946000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a98627cb116100ad578063d051796f11610071578063d051796f14610282578063e981828414610295578063ecf274da146102a8578063f4c872f8146102bb578063f77c4791146102ce5761012c565b8063a98627cb14610223578063af91baf514610236578063b2bfb0ad14610249578063bca39c201461025c578063bf614b131461026f5761012c565b8063847ef08d116100f4578063847ef08d146101c25780638e0f3418146101ca5780639bf0889d146101ea578063a4a56926146101fd578063a8045a8e146102105761012c565b80634100e3cb1461013157806352a4037b1461015a5780635d9026b21461017a578063620814e91461018f57806367462d91146101af575b600080fd5b61014461013f366004611ca8565b6102d6565b6040516101519190611fc6565b60405180910390f35b61016d610168366004611b47565b610355565b6040516101519190611f79565b61018d610188366004611ca8565b6103cb565b005b6101a261019d366004611eb6565b6103e8565b6040516101519190611f25565b61018d6101bd366004611d77565b61041d565b61018d610500565b6101dd6101d8366004611ca8565b6107d6565b60405161015191906122bc565b61018d6101f8366004611df7565b610870565b61018d61020b366004611d77565b6108db565b61016d61021e366004611c26565b61098e565b6101a2610231366004611d37565b610a11565b61018d610244366004611ca8565b610a53565b610144610257366004611c26565b610a69565b61018d61026a366004611d77565b610a89565b61014461027d366004611c26565b610aa8565b610144610290366004611b47565b610ad6565b6101446102a3366004611c5e565b610aeb565b61018d6102b6366004611e24565b610b11565b61018d6102c9366004611ca8565b610bae565b6101a2610bea565b60008061031884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b039687166000908152600560209081526040808320988a168352978152878220929098168152965250505091205460ff16919050565b6001600160a01b0381166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156103bf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103a1575b50505050509050919050565b836103d581610c17565b6103e185858585610c62565b5050505050565b6002602052816000526040600020818154811061040157fe5b6000918252602090912001546001600160a01b03169150829050565b8461042781610c3d565b8561043181610dd9565b6104565760405162461bcd60e51b815260040161044d9061202d565b60405180910390fd5b6000610498878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250889150610e0b9050565b905060005b818110156104f5576104ed898989848181106104b557fe5b90506020020160208101906104ca9190611b47565b8888858181106104d657fe5b90506020028101906104e891906122c5565b610e57565b60010161049d565b505050505050505050565b336000908152600160209081526040808320805460ff19169055600282529182902080548351818402810184019094528084526060939283018282801561057057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610552575b50939450600093505050505b815181101561071157336000908152600460205260408120835182908590859081106105a457fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020905060008090505b81548110156106b35760008282815481106105eb57fe5b600091825260208083209091015433835260059091526040822087516001600160a01b03909216935090829088908890811061062357fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082828154811061069157fe5b600091825260209091200180546001600160a01b0319169055506001016105d4565b5033600090815260046020526040812084519091908590859081106106d457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006107089190611a4f565b5060010161057c565b5060005b336000908152600260205260409020548110156107ba5733600090815260026020526040812080548390811061074757fe5b6000918252602080832090910154338084526003835260408085206001600160a01b03909316808652928452808520805460ff19169055908452600290925291208054919250908390811061079857fe5b600091825260209091200180546001600160a01b031916905550600101610715565b503360009081526002602052604081206107d391611a4f565b50565b6000806107e586868686611187565b60405163412a04f160e11b81529091506001600160a01b0382169063825409e2906108169089908990600401611fd1565b60206040518083038186803b15801561082e57600080fd5b505afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190611ee1565b9695505050505050565b8161087a81610c17565b6001600160a01b03831660008181526001602052604090819020805460ff1916851515179055517ffc5fc0cfabd873d47a6133c597c0e71ed6d2662ddaf66bec70ac075043ec9a5d906108ce908590611fc6565b60405180910390a2505050565b846108e581610c17565b6000610927868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250879150610e0b9050565b905060005b818110156109845761097c8888888481811061094457fe5b90506020020160208101906109599190611b47565b87878581811061096557fe5b905060200281019061097791906122c5565b610c62565b60010161092c565b5050505050505050565b6001600160a01b038083166000908152600460209081526040808320938516835292815290829020805483518184028101840190945280845260609392830182828015610a0457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109e6575b5050505050905092915050565b60046020528260005260406000206020528160005260406000208181548110610a3657fe5b6000918252602090912001546001600160a01b0316925083915050565b83610a5d81610c17565b6103e185858585611224565b600360209081526000928352604080842090915290825290205460ff1681565b84610a9381610c17565b610aa086868686866113b3565b505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60016020526000908152604090205460ff1681565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b8533610b1d828261145b565b87610b2781611485565b610b3489888888886113b3565b6001600160a01b038916600081815260016020526040808220805460ff19168c151517905580516307ff078f60e11b81529051630ffe0f1e9260048084019391929182900301818387803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050505050565b83610bb881610c3d565b84610bc281610dd9565b610bde5760405162461bcd60e51b815260040161044d9061202d565b610aa086868686610e57565b6000546001600160a01b031681565b600080610c0583611546565b9050610c1081611551565b9392505050565b610c21813361160e565b610c3d5760405162461bcd60e51b815260040161044d90612217565b610c468161169c565b6107d35760405162461bcd60e51b815260040161044d9061208a565b6000610ca383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b038087166000908152600560209081526040808320898516845282528083209385168352929052205490915060ff16610cf55760405162461bcd60e51b815260040161044d9061219d565b6001600160a01b038086166000908152600460209081526040808320938816835292905220610d2a908263ffffffff6117a016565b6001600160a01b0380861660008181526005602090815260408083208986168085529083528184209587168452948252808320805460ff1916905592825260048152828220938252929092529020546103e1576001600160a01b0385166000908152600260205260409020610da5908563ffffffff6117a016565b6001600160a01b038086166000908152600360209081526040808320938816835292905220805460ff191690555050505050565b6001600160a01b03811660009081526001602052604081205460ff1680610e055750610e05823361160e565b92915050565b8251600090828114610e2f5760405162461bcd60e51b815260040161044d9061205b565b60008111610e4f5760405162461bcd60e51b815260040161044d90612285565b949350505050565b610e618484610aa8565b610e7d5760405162461bcd60e51b815260040161044d9061216d565b6000610e8b85858585611187565b90506000816001600160a01b031663b8d7b669866040518263ffffffff1660e01b8152600401610ebb9190611f25565b60206040518083038186803b158015610ed357600080fd5b505afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190611b63565b90506000816001600160a01b03166370a08231886040518263ffffffff1660e01b8152600401610f3b9190611f25565b60206040518083038186803b158015610f5357600080fd5b505afa158015610f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8b9190611ee1565b90506000806060856001600160a01b0316630f1ff4ba8b8b6040518363ffffffff1660e01b8152600401610fc0929190611fd1565b60006040518083038186803b158015610fd857600080fd5b505afa158015610fec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110149190810190611b7f565b925092509250896001600160a01b0316638f6f03328484846040518463ffffffff1660e01b815260040161104a93929190611f52565b600060405180830381600087803b15801561106457600080fd5b505af1158015611078573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110a09190810190611bf3565b506040516370a0823160e01b81526000906001600160a01b038716906370a08231906110d0908e90600401611f25565b60206040518083038186803b1580156110e857600080fd5b505afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611ee1565b90506001600160a01b03808816908b8116908d167f2422cac5e23c46c890fdcf42d0c64757409df6832174df639337558f09d99c68611165858a63ffffffff6118cd16565b60405161117291906122bc565b60405180910390a45050505050505050505050565b6000806111c984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b0380881660009081526005602090815260408083208a8516845282528083209385168352929052205490915060ff1661121b5760405162461bcd60e51b815260040161044d9061224e565b95945050505050565b600061126583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b0380871660008181526004602090815260408083208a8616808552908352818420948452600583528184209084528252808320948616835293905291909120549192509060ff16156112d05760405162461bcd60e51b815260040161044d90612138565b8054600180820183556000838152602080822090930180546001600160a01b0319166001600160a01b038781169182179092558a8216808452600586526040808520938c16808652938752808520928552918652818420805460ff19169095179094559282526003845282822090825290925290205460ff16610aa057505050506001600160a01b0391821660008181526002602090815260408083208054600180820183559185528385200180546001600160a01b0319169690971695861790965592825260038152828220938252929092529020805460ff19169091179055565b60006113f5858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250869150610e0b9050565b905060005b818110156114525761144a8787878481811061141257fe5b90506020020160208101906114279190611b47565b86868581811061143357fe5b905060200281019061144591906122c5565b611224565b6001016113fa565b50505050505050565b611465828261160e565b6114815760405162461bcd60e51b815260040161044d90612217565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906114b5908490600401611f25565b60206040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190611bd7565b6115215760405162461bcd60e51b815260040161044d906121d4565b61152a8161190f565b6107d35760405162461bcd60e51b815260040161044d906120d2565b805160209091012090565b600080548190611569906001600160a01b031661193e565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401611596929190611f39565b60206040518083038186803b1580156115ae57600080fd5b505afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190611b63565b90506001600160a01b038116610e055760405162461bcd60e51b815260040161044d90612109565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561165357600080fd5b505afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b9190611b63565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906116cd908590600401611f25565b60206040518083038186803b1580156116e557600080fd5b505afa1580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190611bd7565b8015610e0557506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611750903090600401611f25565b60206040518083038186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190611bd7565b600080611806848054806020026020016040519081016040528092919081815260200182805480156117fb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117dd575b5050505050846119bd565b91509150806118275760405162461bcd60e51b815260040161044d90611ffe565b8354600019018281146118995784818154811061184057fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061186a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806118a357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b50505050565b6000610c1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a23565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611750903090600401611f25565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced69061196d9084906004016122bc565b60206040518083038186803b15801561198557600080fd5b505afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190611b63565b81516000908190815b81811015611a1057846001600160a01b03168682815181106119e457fe5b60200260200101516001600160a01b03161415611a0857925060019150611a1c9050565b6001016119c6565b50600019600092509250505b9250929050565b60008184841115611a475760405162461bcd60e51b815260040161044d9190611feb565b505050900390565b50805460008255906000526020600020908101906107d39190611a8691905b80821115611a825760008155600101611a6e565b5090565b90565b60008083601f840112611a9a578182fd5b50813567ffffffffffffffff811115611ab1578182fd5b6020830191508360208083028501011115611a1c57600080fd5b600082601f830112611adb578081fd5b815167ffffffffffffffff80821115611af2578283fd5b604051601f8301601f191681016020018281118282101715611b12578485fd5b604052828152925082848301602001861015611b2d57600080fd5b611b3e83602083016020880161230c565b50505092915050565b600060208284031215611b58578081fd5b8135610c1081612338565b600060208284031215611b74578081fd5b8151610c1081612338565b600080600060608486031215611b93578182fd5b8351611b9e81612338565b60208501516040860151919450925067ffffffffffffffff811115611bc1578182fd5b611bcd86828701611acb565b9150509250925092565b600060208284031215611be8578081fd5b8151610c108161234d565b600060208284031215611c04578081fd5b815167ffffffffffffffff811115611c1a578182fd5b610e4f84828501611acb565b60008060408385031215611c38578182fd5b8235611c4381612338565b91506020830135611c5381612338565b809150509250929050565b600080600060608486031215611c72578283fd5b8335611c7d81612338565b92506020840135611c8d81612338565b91506040840135611c9d81612338565b809150509250925092565b60008060008060608587031215611cbd578081fd5b8435611cc881612338565b93506020850135611cd881612338565b9250604085013567ffffffffffffffff80821115611cf4578283fd5b81870188601f820112611d05578384fd5b8035925081831115611d15578384fd5b886020848301011115611d26578384fd5b959894975050602090940194505050565b600080600060608486031215611d4b578283fd5b8335611d5681612338565b92506020840135611d6681612338565b929592945050506040919091013590565b600080600080600060608688031215611d8e578081fd5b8535611d9981612338565b9450602086013567ffffffffffffffff80821115611db5578283fd5b611dc189838a01611a89565b90965094506040880135915080821115611dd9578283fd5b50611de688828901611a89565b969995985093965092949392505050565b60008060408385031215611e09578182fd5b8235611e1481612338565b91506020830135611c538161234d565b60008060008060008060808789031215611e3c578384fd5b8635611e4781612338565b95506020870135611e578161234d565b9450604087013567ffffffffffffffff80821115611e73578586fd5b611e7f8a838b01611a89565b90965094506060890135915080821115611e97578283fd5b50611ea489828a01611a89565b979a9699509497509295939492505050565b60008060408385031215611ec8578182fd5b8235611ed381612338565b946020939093013593505050565b600060208284031215611ef2578081fd5b5051919050565b60008151808452611f1181602086016020860161230c565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b03851682528360208301526060604083015261121b6060830184611ef9565b6020808252825182820181905260009190848201906040850190845b81811015611fba5783516001600160a01b031683529284019291840191600101611f95565b50909695505050505050565b901515815260200190565b6001600160a01b0392831681529116602082015260400190565b600060208252610c106020830184611ef9565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526014908201527326bab9ba103132903b30b634b21031b0b63632b960611b604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f496e746567726174696f6e206e616d6573206d75737420626520756e69717565604082015260600190565b60208082526016908201527514995dd85c99141bdbdb081b9bdd081c1c995cd95b9d60521b604082015260600190565b60208082526019908201527f496e746567726174696f6e206d75737420626520616464656400000000000000604082015260600190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f4164617074657220696e746567726174696f6e206e6f742070726573656e7400604082015260600190565b60208082526018908201527f417272617973206d757374206e6f7420626520656d7074790000000000000000604082015260600190565b90815260200190565b6000808335601e198436030181126122db578283fd5b8084018035925067ffffffffffffffff8311156122f6578384fd5b60200192505036819003821315611a1c57600080fd5b60005b8381101561232757818101518382015260200161230f565b838111156118c75750506000910152565b6001600160a01b03811681146107d357600080fd5b80151581146107d357600080fdfea264697066735822122093b87087afca7ab307fcaae74c651cfbcb28bfbf494392b3798bddfe0678224064736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a98627cb116100ad578063d051796f11610071578063d051796f14610282578063e981828414610295578063ecf274da146102a8578063f4c872f8146102bb578063f77c4791146102ce5761012c565b8063a98627cb14610223578063af91baf514610236578063b2bfb0ad14610249578063bca39c201461025c578063bf614b131461026f5761012c565b8063847ef08d116100f4578063847ef08d146101c25780638e0f3418146101ca5780639bf0889d146101ea578063a4a56926146101fd578063a8045a8e146102105761012c565b80634100e3cb1461013157806352a4037b1461015a5780635d9026b21461017a578063620814e91461018f57806367462d91146101af575b600080fd5b61014461013f366004611ca8565b6102d6565b6040516101519190611fc6565b60405180910390f35b61016d610168366004611b47565b610355565b6040516101519190611f79565b61018d610188366004611ca8565b6103cb565b005b6101a261019d366004611eb6565b6103e8565b6040516101519190611f25565b61018d6101bd366004611d77565b61041d565b61018d610500565b6101dd6101d8366004611ca8565b6107d6565b60405161015191906122bc565b61018d6101f8366004611df7565b610870565b61018d61020b366004611d77565b6108db565b61016d61021e366004611c26565b61098e565b6101a2610231366004611d37565b610a11565b61018d610244366004611ca8565b610a53565b610144610257366004611c26565b610a69565b61018d61026a366004611d77565b610a89565b61014461027d366004611c26565b610aa8565b610144610290366004611b47565b610ad6565b6101446102a3366004611c5e565b610aeb565b61018d6102b6366004611e24565b610b11565b61018d6102c9366004611ca8565b610bae565b6101a2610bea565b60008061031884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b039687166000908152600560209081526040808320988a168352978152878220929098168152965250505091205460ff16919050565b6001600160a01b0381166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156103bf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103a1575b50505050509050919050565b836103d581610c17565b6103e185858585610c62565b5050505050565b6002602052816000526040600020818154811061040157fe5b6000918252602090912001546001600160a01b03169150829050565b8461042781610c3d565b8561043181610dd9565b6104565760405162461bcd60e51b815260040161044d9061202d565b60405180910390fd5b6000610498878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250889150610e0b9050565b905060005b818110156104f5576104ed898989848181106104b557fe5b90506020020160208101906104ca9190611b47565b8888858181106104d657fe5b90506020028101906104e891906122c5565b610e57565b60010161049d565b505050505050505050565b336000908152600160209081526040808320805460ff19169055600282529182902080548351818402810184019094528084526060939283018282801561057057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610552575b50939450600093505050505b815181101561071157336000908152600460205260408120835182908590859081106105a457fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020905060008090505b81548110156106b35760008282815481106105eb57fe5b600091825260208083209091015433835260059091526040822087516001600160a01b03909216935090829088908890811061062357fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082828154811061069157fe5b600091825260209091200180546001600160a01b0319169055506001016105d4565b5033600090815260046020526040812084519091908590859081106106d457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006107089190611a4f565b5060010161057c565b5060005b336000908152600260205260409020548110156107ba5733600090815260026020526040812080548390811061074757fe5b6000918252602080832090910154338084526003835260408085206001600160a01b03909316808652928452808520805460ff19169055908452600290925291208054919250908390811061079857fe5b600091825260209091200180546001600160a01b031916905550600101610715565b503360009081526002602052604081206107d391611a4f565b50565b6000806107e586868686611187565b60405163412a04f160e11b81529091506001600160a01b0382169063825409e2906108169089908990600401611fd1565b60206040518083038186803b15801561082e57600080fd5b505afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190611ee1565b9695505050505050565b8161087a81610c17565b6001600160a01b03831660008181526001602052604090819020805460ff1916851515179055517ffc5fc0cfabd873d47a6133c597c0e71ed6d2662ddaf66bec70ac075043ec9a5d906108ce908590611fc6565b60405180910390a2505050565b846108e581610c17565b6000610927868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250879150610e0b9050565b905060005b818110156109845761097c8888888481811061094457fe5b90506020020160208101906109599190611b47565b87878581811061096557fe5b905060200281019061097791906122c5565b610c62565b60010161092c565b5050505050505050565b6001600160a01b038083166000908152600460209081526040808320938516835292815290829020805483518184028101840190945280845260609392830182828015610a0457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109e6575b5050505050905092915050565b60046020528260005260406000206020528160005260406000208181548110610a3657fe5b6000918252602090912001546001600160a01b0316925083915050565b83610a5d81610c17565b6103e185858585611224565b600360209081526000928352604080842090915290825290205460ff1681565b84610a9381610c17565b610aa086868686866113b3565b505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60016020526000908152604090205460ff1681565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b8533610b1d828261145b565b87610b2781611485565b610b3489888888886113b3565b6001600160a01b038916600081815260016020526040808220805460ff19168c151517905580516307ff078f60e11b81529051630ffe0f1e9260048084019391929182900301818387803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050505050565b83610bb881610c3d565b84610bc281610dd9565b610bde5760405162461bcd60e51b815260040161044d9061202d565b610aa086868686610e57565b6000546001600160a01b031681565b600080610c0583611546565b9050610c1081611551565b9392505050565b610c21813361160e565b610c3d5760405162461bcd60e51b815260040161044d90612217565b610c468161169c565b6107d35760405162461bcd60e51b815260040161044d9061208a565b6000610ca383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b038087166000908152600560209081526040808320898516845282528083209385168352929052205490915060ff16610cf55760405162461bcd60e51b815260040161044d9061219d565b6001600160a01b038086166000908152600460209081526040808320938816835292905220610d2a908263ffffffff6117a016565b6001600160a01b0380861660008181526005602090815260408083208986168085529083528184209587168452948252808320805460ff1916905592825260048152828220938252929092529020546103e1576001600160a01b0385166000908152600260205260409020610da5908563ffffffff6117a016565b6001600160a01b038086166000908152600360209081526040808320938816835292905220805460ff191690555050505050565b6001600160a01b03811660009081526001602052604081205460ff1680610e055750610e05823361160e565b92915050565b8251600090828114610e2f5760405162461bcd60e51b815260040161044d9061205b565b60008111610e4f5760405162461bcd60e51b815260040161044d90612285565b949350505050565b610e618484610aa8565b610e7d5760405162461bcd60e51b815260040161044d9061216d565b6000610e8b85858585611187565b90506000816001600160a01b031663b8d7b669866040518263ffffffff1660e01b8152600401610ebb9190611f25565b60206040518083038186803b158015610ed357600080fd5b505afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190611b63565b90506000816001600160a01b03166370a08231886040518263ffffffff1660e01b8152600401610f3b9190611f25565b60206040518083038186803b158015610f5357600080fd5b505afa158015610f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8b9190611ee1565b90506000806060856001600160a01b0316630f1ff4ba8b8b6040518363ffffffff1660e01b8152600401610fc0929190611fd1565b60006040518083038186803b158015610fd857600080fd5b505afa158015610fec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110149190810190611b7f565b925092509250896001600160a01b0316638f6f03328484846040518463ffffffff1660e01b815260040161104a93929190611f52565b600060405180830381600087803b15801561106457600080fd5b505af1158015611078573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110a09190810190611bf3565b506040516370a0823160e01b81526000906001600160a01b038716906370a08231906110d0908e90600401611f25565b60206040518083038186803b1580156110e857600080fd5b505afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611ee1565b90506001600160a01b03808816908b8116908d167f2422cac5e23c46c890fdcf42d0c64757409df6832174df639337558f09d99c68611165858a63ffffffff6118cd16565b60405161117291906122bc565b60405180910390a45050505050505050505050565b6000806111c984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b0380881660009081526005602090815260408083208a8516845282528083209385168352929052205490915060ff1661121b5760405162461bcd60e51b815260040161044d9061224e565b95945050505050565b600061126583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf992505050565b6001600160a01b0380871660008181526004602090815260408083208a8616808552908352818420948452600583528184209084528252808320948616835293905291909120549192509060ff16156112d05760405162461bcd60e51b815260040161044d90612138565b8054600180820183556000838152602080822090930180546001600160a01b0319166001600160a01b038781169182179092558a8216808452600586526040808520938c16808652938752808520928552918652818420805460ff19169095179094559282526003845282822090825290925290205460ff16610aa057505050506001600160a01b0391821660008181526002602090815260408083208054600180820183559185528385200180546001600160a01b0319169690971695861790965592825260038152828220938252929092529020805460ff19169091179055565b60006113f5858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250869150610e0b9050565b905060005b818110156114525761144a8787878481811061141257fe5b90506020020160208101906114279190611b47565b86868581811061143357fe5b905060200281019061144591906122c5565b611224565b6001016113fa565b50505050505050565b611465828261160e565b6114815760405162461bcd60e51b815260040161044d90612217565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906114b5908490600401611f25565b60206040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190611bd7565b6115215760405162461bcd60e51b815260040161044d906121d4565b61152a8161190f565b6107d35760405162461bcd60e51b815260040161044d906120d2565b805160209091012090565b600080548190611569906001600160a01b031661193e565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401611596929190611f39565b60206040518083038186803b1580156115ae57600080fd5b505afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190611b63565b90506001600160a01b038116610e055760405162461bcd60e51b815260040161044d90612109565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561165357600080fd5b505afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b9190611b63565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906116cd908590600401611f25565b60206040518083038186803b1580156116e557600080fd5b505afa1580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190611bd7565b8015610e0557506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611750903090600401611f25565b60206040518083038186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190611bd7565b600080611806848054806020026020016040519081016040528092919081815260200182805480156117fb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117dd575b5050505050846119bd565b91509150806118275760405162461bcd60e51b815260040161044d90611ffe565b8354600019018281146118995784818154811061184057fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061186a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806118a357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b50505050565b6000610c1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a23565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611750903090600401611f25565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced69061196d9084906004016122bc565b60206040518083038186803b15801561198557600080fd5b505afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190611b63565b81516000908190815b81811015611a1057846001600160a01b03168682815181106119e457fe5b60200260200101516001600160a01b03161415611a0857925060019150611a1c9050565b6001016119c6565b50600019600092509250505b9250929050565b60008184841115611a475760405162461bcd60e51b815260040161044d9190611feb565b505050900390565b50805460008255906000526020600020908101906107d39190611a8691905b80821115611a825760008155600101611a6e565b5090565b90565b60008083601f840112611a9a578182fd5b50813567ffffffffffffffff811115611ab1578182fd5b6020830191508360208083028501011115611a1c57600080fd5b600082601f830112611adb578081fd5b815167ffffffffffffffff80821115611af2578283fd5b604051601f8301601f191681016020018281118282101715611b12578485fd5b604052828152925082848301602001861015611b2d57600080fd5b611b3e83602083016020880161230c565b50505092915050565b600060208284031215611b58578081fd5b8135610c1081612338565b600060208284031215611b74578081fd5b8151610c1081612338565b600080600060608486031215611b93578182fd5b8351611b9e81612338565b60208501516040860151919450925067ffffffffffffffff811115611bc1578182fd5b611bcd86828701611acb565b9150509250925092565b600060208284031215611be8578081fd5b8151610c108161234d565b600060208284031215611c04578081fd5b815167ffffffffffffffff811115611c1a578182fd5b610e4f84828501611acb565b60008060408385031215611c38578182fd5b8235611c4381612338565b91506020830135611c5381612338565b809150509250929050565b600080600060608486031215611c72578283fd5b8335611c7d81612338565b92506020840135611c8d81612338565b91506040840135611c9d81612338565b809150509250925092565b60008060008060608587031215611cbd578081fd5b8435611cc881612338565b93506020850135611cd881612338565b9250604085013567ffffffffffffffff80821115611cf4578283fd5b81870188601f820112611d05578384fd5b8035925081831115611d15578384fd5b886020848301011115611d26578384fd5b959894975050602090940194505050565b600080600060608486031215611d4b578283fd5b8335611d5681612338565b92506020840135611d6681612338565b929592945050506040919091013590565b600080600080600060608688031215611d8e578081fd5b8535611d9981612338565b9450602086013567ffffffffffffffff80821115611db5578283fd5b611dc189838a01611a89565b90965094506040880135915080821115611dd9578283fd5b50611de688828901611a89565b969995985093965092949392505050565b60008060408385031215611e09578182fd5b8235611e1481612338565b91506020830135611c538161234d565b60008060008060008060808789031215611e3c578384fd5b8635611e4781612338565b95506020870135611e578161234d565b9450604087013567ffffffffffffffff80821115611e73578586fd5b611e7f8a838b01611a89565b90965094506060890135915080821115611e97578283fd5b50611ea489828a01611a89565b979a9699509497509295939492505050565b60008060408385031215611ec8578182fd5b8235611ed381612338565b946020939093013593505050565b600060208284031215611ef2578081fd5b5051919050565b60008151808452611f1181602086016020860161230c565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b03851682528360208301526060604083015261121b6060830184611ef9565b6020808252825182820181905260009190848201906040850190845b81811015611fba5783516001600160a01b031683529284019291840191600101611f95565b50909695505050505050565b901515815260200190565b6001600160a01b0392831681529116602082015260400190565b600060208252610c106020830184611ef9565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526014908201527326bab9ba103132903b30b634b21031b0b63632b960611b604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f496e746567726174696f6e206e616d6573206d75737420626520756e69717565604082015260600190565b60208082526016908201527514995dd85c99141bdbdb081b9bdd081c1c995cd95b9d60521b604082015260600190565b60208082526019908201527f496e746567726174696f6e206d75737420626520616464656400000000000000604082015260600190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f4164617074657220696e746567726174696f6e206e6f742070726573656e7400604082015260600190565b60208082526018908201527f417272617973206d757374206e6f7420626520656d7074790000000000000000604082015260600190565b90815260200190565b6000808335601e198436030181126122db578283fd5b8084018035925067ffffffffffffffff8311156122f6578384fd5b60200192505036819003821315611a1c57600080fd5b60005b8381101561232757818101518382015260200161230f565b838111156118c75750506000910152565b6001600160a01b03811681146107d357600080fd5b80151581146107d357600080fdfea264697066735822122093b87087afca7ab307fcaae74c651cfbcb28bfbf494392b3798bddfe0678224064736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
