{
  "_format": "hh-sol-artifact-1",
  "contractName": "LockdropFactory",
  "sourceName": "contracts/soma/Lockdrop/LockdropFactory.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "templateVersion",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "instance",
          "type": "address"
        }
      ],
      "name": "LockdropCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "deployment",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TemplateDeployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TokensRecovered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CREATE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FACTORY",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "INIT_CODE_HASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TEMPLATE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TEMPLATE_VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_RECOVERY_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "withdrawTo",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint48",
              "name": "startDate",
              "type": "uint48"
            },
            {
              "internalType": "uint48",
              "name": "removeDelegationEnd",
              "type": "uint48"
            },
            {
              "internalType": "uint48",
              "name": "endDate",
              "type": "uint48"
            }
          ],
          "internalType": "struct ILockdrop.DateConfig",
          "name": "dateConfig",
          "type": "tuple"
        }
      ],
      "name": "create",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "deployed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "deployment",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "deploymentInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "exists",
              "type": "bool"
            },
            {
              "internalType": "uint64",
              "name": "block",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "timestamp",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "templateId",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "version",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "functionCalls",
              "type": "bytes[]"
            },
            {
              "internalType": "bool",
              "name": "cloned",
              "type": "bool"
            }
          ],
          "internalType": "struct ITemplateFactory.DeploymentInfo",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "recoverTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalDeployments",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x61012060405273812dd6988ca35be1ba27095d90864298722f915a608052730f3dc00189dbcd1d0c574e48031270cae04c4adf610100523480156200004357600080fd5b5060405162001eb138038062001eb183398101604081905262000066916200014a565b6704c6f636b64726f760c41b60c081905260e0829052608051604051631de0a1b760e21b81526004810183905260248101849052606060448201526000606482015283916001600160a01b03169063778286dc90608401602060405180830381865afa158015620000db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010191906200014a565b60a05250506001805460ff191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15062000164565b6000602082840312156200015d57600080fd5b5051919050565b60805160a05160c05160e05161010051611cbb620001f66000396000818161026a01528181610392015281816105a8015281816106440152818161072a0152818161090f015281816109ab0152610aae01526000818161020b0152610f610152600081816102bf0152610f40015260006101a50152600081816101cc01528181610d000152610f1e0152611cbb6000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806363727fc2116100ad57806391d148541161007157806391d14854146102e1578063ac9650d8146102f4578063ce3220f614610314578063d869759814610334578063fb35b4e41461035b57600080fd5b806363727fc2146102655780637016b1981461028c5780638456cb591461029f57806385bb3923146102a75780638bfd9174146102ba57600080fd5b80632e23efce116100f45780632e23efce14610206578063396cf9f81461022d5780633f4ba83a146102425780635c975abb1461024a5780635f3e849f1461025257600080fd5b80626f53c91461013057806301ffc9a71461016a578063248a9ca31461018d578063257671f5146101a05780632dd31000146101c7575b600080fd5b6101577f412095b6026cac052b663a3f33f4405a9cdd02f0ec373c8d1c24274e0e9829f881565b6040519081526020015b60405180910390f35b61017d610178366004611487565b610363565b6040519015158152602001610161565b61015761019b3660046114b1565b61038e565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610161565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b61024061023b3660046114df565b610480565b005b610240610597565b61017d610726565b610240610260366004611532565b6107bf565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b6101ee61029a3660046114b1565b6108cf565b6102406108fe565b61017d6102b5366004611573565b610a8a565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b61017d6102ef366004611590565b610aaa565b6103076103023660046115c0565b610ba8565b60405161016191906116da565b610327610322366004611573565b610c9d565b60405161016191906116ed565b6101577f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b600054610157565b60006001600160e01b03198216638757f10760e01b1480610388575061038882610d6f565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041291906117ba565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161043f91815260200190565b602060405180830381865afa15801561045c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038891906117d7565b7f412095b6026cac052b663a3f33f4405a9cdd02f0ec373c8d1c24274e0e9829f86104ab8133610aaa565b6104d05760405162461bcd60e51b81526004016104c7906117f0565b60405180910390fd5b60008054906104de82610d94565b6040516373e9382960e01b81529091506001600160a01b038216906373e93829906105139085908a908a908a9060040161186d565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b5050604080518581526001600160a01b038a8116602083015285168183015290517f4f2f5176063f804002d8260556d5d46b3eb7e6da40fc0ea25fe008bd11dcbc979350908190036060019150a1505050505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062891906117ba565b6001600160a01b031614806106cf5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c491906117ba565b6001600160a01b0316145b61071b5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016104c7565b610723610daf565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906118e2565b806107ba57505060015460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd6107ea8133610aaa565b6108065760405162461bcd60e51b81526004016104c7906117f0565b610811600285610e01565b1561085e5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016104c7565b6108726001600160a01b0385168484610e23565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d538856040516108c191815260200190565b60405180910390a450505050565b60008082815481106108e3576108e36118fd565b6000918252602090912001546001600160a01b031692915050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098f91906117ba565b6001600160a01b03161480610a365750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b91906117ba565b6001600160a01b0316145b610a825760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016104c7565b610723610e7a565b600030610a9683610c9d565b606001516001600160a01b03161492915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e91906117ba565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba191906118e2565b9392505050565b60608167ffffffffffffffff811115610bc357610bc3611913565b604051908082528060200260200182016040528015610bf657816020015b6060815260200190600190039081610be15790505b50905060005b82811015610c9657610c6630858584818110610c1a57610c1a6118fd565b9050602002810190610c2c9190611929565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eb592505050565b828281518110610c7857610c786118fd565b60200260200101819052508080610c8e90611977565b915050610bfc565b5092915050565b604080516101208101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830181905260e08301526101008201529051636719107b60e11b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ce3220f690602401600060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103889190810190611b14565b60006001600160e01b0319821663b55bd4f760e01b1480610388575061038882610eda565b60006103886040518060200160405280600081525083610f0f565b610db7611005565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526001830160205260408120541515610ba1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e75908490611052565b505050565b610e82611124565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610de4565b6060610ba18383604051806060016040528060278152602001611c886027913961116c565b60006001600160e01b0319821663d86f1ca160e01b148061038857506301ffc9a760e01b6001600160e01b0319831614610388565b6000610f876001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008686611249565b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b038416908117909155604051929350339290917fbb335adc2c61b7badda271abf9381de878cc630d6d425e20cc1e58a3cad6f01591a392915050565b61100d610726565b6110505760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c7565b565b60006110a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661128d9092919063ffffffff16565b805190915015610e7557808060200190518101906110c591906118e2565b610e755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104c7565b61112c610726565b156110505760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c7565b60606001600160a01b0384163b6111d45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c7565b600080856001600160a01b0316856040516111ef9190611c14565b600060405180830381855af49150503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b509150915061123f8282866112a4565b9695505050505050565b600061123f868686868560405190808252806020026020018201604052801561128657816020015b60608152602001906001900390816112715790505b50876112dd565b606061129c8484600085611361565b949350505050565b606083156112b3575081610ba1565b8251156112c35782518084602001fd5b8160405162461bcd60e51b81526004016104c79190611c30565b6040516294d4bf60e51b81526000906001600160a01b0388169063129a97e0906113139089908990899089908990600401611c43565b6020604051808303816000875af1158015611332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135691906117ba565b979650505050505050565b6060824710156113c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104c7565b6001600160a01b0385163b6114195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104c7565b600080866001600160a01b031685876040516114359190611c14565b60006040518083038185875af1925050503d8060008114611472576040519150601f19603f3d011682016040523d82523d6000602084013e611477565b606091505b50915091506113568282866112a4565b60006020828403121561149957600080fd5b81356001600160e01b031981168114610ba157600080fd5b6000602082840312156114c357600080fd5b5035919050565b6001600160a01b038116811461072357600080fd5b600080600083850360a08112156114f557600080fd5b8435611500816114ca565b93506020850135611510816114ca565b92506060603f198201121561152457600080fd5b506040840190509250925092565b60008060006060848603121561154757600080fd5b8335611552816114ca565b92506020840135611562816114ca565b929592945050506040919091013590565b60006020828403121561158557600080fd5b8135610ba1816114ca565b600080604083850312156115a357600080fd5b8235915060208301356115b5816114ca565b809150509250929050565b600080602083850312156115d357600080fd5b823567ffffffffffffffff808211156115eb57600080fd5b818501915085601f8301126115ff57600080fd5b81358181111561160e57600080fd5b8660208260051b850101111561162357600080fd5b60209290920196919550909350505050565b60005b83811015611650578181015183820152602001611638565b50506000910152565b60008151808452611671816020860160208601611635565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156116cd5782840389526116bb848351611659565b988501989350908401906001016116a3565b5091979650505050505050565b602081526000610ba16020830184611685565b6020815261170060208201835115159052565b6000602083015161171d604084018267ffffffffffffffff169052565b50604083015167ffffffffffffffff811660608401525060608301516001600160a01b038116608084015250608083015160a083015260a083015160c083015260c08301516101208060e0850152611779610140850183611659565b915060e0850151610100601f1986850301818701526117988483611685565b96015115159190940152509192915050565b80516117b5816114ca565b919050565b6000602082840312156117cc57600080fd5b8151610ba1816114ca565b6000602082840312156117e957600080fd5b5051919050565b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b803565ffffffffffff811681146117b557600080fd5b8481526001600160a01b0384811660208301528316604082015260c0810165ffffffffffff8061189c85611857565b166060840152806118af60208601611857565b166080840152806118c260408601611857565b1660a08401525095945050505050565b805180151581146117b557600080fd5b6000602082840312156118f457600080fd5b610ba1826118d2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6000808335601e1984360301811261194057600080fd5b83018035915067ffffffffffffffff82111561195b57600080fd5b60200191503681900382131561197057600080fd5b9250929050565b60006001820161199757634e487b7160e01b600052601160045260246000fd5b5060010190565b604051610120810167ffffffffffffffff811182821017156119c2576119c2611913565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119f1576119f1611913565b604052919050565b805167ffffffffffffffff811681146117b557600080fd5b600082601f830112611a2257600080fd5b815167ffffffffffffffff811115611a3c57611a3c611913565b611a4f601f8201601f19166020016119c8565b818152846020838601011115611a6457600080fd5b61129c826020830160208701611635565b600082601f830112611a8657600080fd5b8151602067ffffffffffffffff80831115611aa357611aa3611913565b8260051b611ab28382016119c8565b9384528581018301938381019088861115611acc57600080fd5b84880192505b85831015611b0857825184811115611aea5760008081fd5b611af88a87838c0101611a11565b8352509184019190840190611ad2565b98975050505050505050565b600060208284031215611b2657600080fd5b815167ffffffffffffffff80821115611b3e57600080fd5b908301906101208286031215611b5357600080fd5b611b5b61199e565b611b64836118d2565b8152611b72602084016119f9565b6020820152611b83604084016119f9565b6040820152611b94606084016117aa565b60608201526080830151608082015260a083015160a082015260c083015182811115611bbf57600080fd5b611bcb87828601611a11565b60c08301525060e083015182811115611be357600080fd5b611bef87828601611a75565b60e0830152506101009150611c058284016118d2565b91810191909152949350505050565b60008251611c26818460208701611635565b9190910192915050565b602081526000610ba16020830184611659565b85815284602082015260a060408201526000611c6260a0830186611659565b8281036060840152611c748186611685565b915050826080830152969550505050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012b5760003560e01c806363727fc2116100ad57806391d148541161007157806391d14854146102e1578063ac9650d8146102f4578063ce3220f614610314578063d869759814610334578063fb35b4e41461035b57600080fd5b806363727fc2146102655780637016b1981461028c5780638456cb591461029f57806385bb3923146102a75780638bfd9174146102ba57600080fd5b80632e23efce116100f45780632e23efce14610206578063396cf9f81461022d5780633f4ba83a146102425780635c975abb1461024a5780635f3e849f1461025257600080fd5b80626f53c91461013057806301ffc9a71461016a578063248a9ca31461018d578063257671f5146101a05780632dd31000146101c7575b600080fd5b6101577f412095b6026cac052b663a3f33f4405a9cdd02f0ec373c8d1c24274e0e9829f881565b6040519081526020015b60405180910390f35b61017d610178366004611487565b610363565b6040519015158152602001610161565b61015761019b3660046114b1565b61038e565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610161565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b61024061023b3660046114df565b610480565b005b610240610597565b61017d610726565b610240610260366004611532565b6107bf565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b6101ee61029a3660046114b1565b6108cf565b6102406108fe565b61017d6102b5366004611573565b610a8a565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b61017d6102ef366004611590565b610aaa565b6103076103023660046115c0565b610ba8565b60405161016191906116da565b610327610322366004611573565b610c9d565b60405161016191906116ed565b6101577f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b600054610157565b60006001600160e01b03198216638757f10760e01b1480610388575061038882610d6f565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041291906117ba565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161043f91815260200190565b602060405180830381865afa15801561045c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038891906117d7565b7f412095b6026cac052b663a3f33f4405a9cdd02f0ec373c8d1c24274e0e9829f86104ab8133610aaa565b6104d05760405162461bcd60e51b81526004016104c7906117f0565b60405180910390fd5b60008054906104de82610d94565b6040516373e9382960e01b81529091506001600160a01b038216906373e93829906105139085908a908a908a9060040161186d565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b5050604080518581526001600160a01b038a8116602083015285168183015290517f4f2f5176063f804002d8260556d5d46b3eb7e6da40fc0ea25fe008bd11dcbc979350908190036060019150a1505050505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062891906117ba565b6001600160a01b031614806106cf5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c491906117ba565b6001600160a01b0316145b61071b5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016104c7565b610723610daf565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906118e2565b806107ba57505060015460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd6107ea8133610aaa565b6108065760405162461bcd60e51b81526004016104c7906117f0565b610811600285610e01565b1561085e5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016104c7565b6108726001600160a01b0385168484610e23565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d538856040516108c191815260200190565b60405180910390a450505050565b60008082815481106108e3576108e36118fd565b6000918252602090912001546001600160a01b031692915050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098f91906117ba565b6001600160a01b03161480610a365750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b91906117ba565b6001600160a01b0316145b610a825760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016104c7565b610723610e7a565b600030610a9683610c9d565b606001516001600160a01b03161492915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e91906117ba565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba191906118e2565b9392505050565b60608167ffffffffffffffff811115610bc357610bc3611913565b604051908082528060200260200182016040528015610bf657816020015b6060815260200190600190039081610be15790505b50905060005b82811015610c9657610c6630858584818110610c1a57610c1a6118fd565b9050602002810190610c2c9190611929565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eb592505050565b828281518110610c7857610c786118fd565b60200260200101819052508080610c8e90611977565b915050610bfc565b5092915050565b604080516101208101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830181905260e08301526101008201529051636719107b60e11b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ce3220f690602401600060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103889190810190611b14565b60006001600160e01b0319821663b55bd4f760e01b1480610388575061038882610eda565b60006103886040518060200160405280600081525083610f0f565b610db7611005565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526001830160205260408120541515610ba1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e75908490611052565b505050565b610e82611124565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610de4565b6060610ba18383604051806060016040528060278152602001611c886027913961116c565b60006001600160e01b0319821663d86f1ca160e01b148061038857506301ffc9a760e01b6001600160e01b0319831614610388565b6000610f876001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008686611249565b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b038416908117909155604051929350339290917fbb335adc2c61b7badda271abf9381de878cc630d6d425e20cc1e58a3cad6f01591a392915050565b61100d610726565b6110505760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104c7565b565b60006110a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661128d9092919063ffffffff16565b805190915015610e7557808060200190518101906110c591906118e2565b610e755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104c7565b61112c610726565b156110505760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c7565b60606001600160a01b0384163b6111d45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104c7565b600080856001600160a01b0316856040516111ef9190611c14565b600060405180830381855af49150503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b509150915061123f8282866112a4565b9695505050505050565b600061123f868686868560405190808252806020026020018201604052801561128657816020015b60608152602001906001900390816112715790505b50876112dd565b606061129c8484600085611361565b949350505050565b606083156112b3575081610ba1565b8251156112c35782518084602001fd5b8160405162461bcd60e51b81526004016104c79190611c30565b6040516294d4bf60e51b81526000906001600160a01b0388169063129a97e0906113139089908990899089908990600401611c43565b6020604051808303816000875af1158015611332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135691906117ba565b979650505050505050565b6060824710156113c25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104c7565b6001600160a01b0385163b6114195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104c7565b600080866001600160a01b031685876040516114359190611c14565b60006040518083038185875af1925050503d8060008114611472576040519150601f19603f3d011682016040523d82523d6000602084013e611477565b606091505b50915091506113568282866112a4565b60006020828403121561149957600080fd5b81356001600160e01b031981168114610ba157600080fd5b6000602082840312156114c357600080fd5b5035919050565b6001600160a01b038116811461072357600080fd5b600080600083850360a08112156114f557600080fd5b8435611500816114ca565b93506020850135611510816114ca565b92506060603f198201121561152457600080fd5b506040840190509250925092565b60008060006060848603121561154757600080fd5b8335611552816114ca565b92506020840135611562816114ca565b929592945050506040919091013590565b60006020828403121561158557600080fd5b8135610ba1816114ca565b600080604083850312156115a357600080fd5b8235915060208301356115b5816114ca565b809150509250929050565b600080602083850312156115d357600080fd5b823567ffffffffffffffff808211156115eb57600080fd5b818501915085601f8301126115ff57600080fd5b81358181111561160e57600080fd5b8660208260051b850101111561162357600080fd5b60209290920196919550909350505050565b60005b83811015611650578181015183820152602001611638565b50506000910152565b60008151808452611671816020860160208601611635565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156116cd5782840389526116bb848351611659565b988501989350908401906001016116a3565b5091979650505050505050565b602081526000610ba16020830184611685565b6020815261170060208201835115159052565b6000602083015161171d604084018267ffffffffffffffff169052565b50604083015167ffffffffffffffff811660608401525060608301516001600160a01b038116608084015250608083015160a083015260a083015160c083015260c08301516101208060e0850152611779610140850183611659565b915060e0850151610100601f1986850301818701526117988483611685565b96015115159190940152509192915050565b80516117b5816114ca565b919050565b6000602082840312156117cc57600080fd5b8151610ba1816114ca565b6000602082840312156117e957600080fd5b5051919050565b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b803565ffffffffffff811681146117b557600080fd5b8481526001600160a01b0384811660208301528316604082015260c0810165ffffffffffff8061189c85611857565b166060840152806118af60208601611857565b166080840152806118c260408601611857565b1660a08401525095945050505050565b805180151581146117b557600080fd5b6000602082840312156118f457600080fd5b610ba1826118d2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6000808335601e1984360301811261194057600080fd5b83018035915067ffffffffffffffff82111561195b57600080fd5b60200191503681900382131561197057600080fd5b9250929050565b60006001820161199757634e487b7160e01b600052601160045260246000fd5b5060010190565b604051610120810167ffffffffffffffff811182821017156119c2576119c2611913565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119f1576119f1611913565b604052919050565b805167ffffffffffffffff811681146117b557600080fd5b600082601f830112611a2257600080fd5b815167ffffffffffffffff811115611a3c57611a3c611913565b611a4f601f8201601f19166020016119c8565b818152846020838601011115611a6457600080fd5b61129c826020830160208701611635565b600082601f830112611a8657600080fd5b8151602067ffffffffffffffff80831115611aa357611aa3611913565b8260051b611ab28382016119c8565b9384528581018301938381019088861115611acc57600080fd5b84880192505b85831015611b0857825184811115611aea5760008081fd5b611af88a87838c0101611a11565b8352509184019190840190611ad2565b98975050505050505050565b600060208284031215611b2657600080fd5b815167ffffffffffffffff80821115611b3e57600080fd5b908301906101208286031215611b5357600080fd5b611b5b61199e565b611b64836118d2565b8152611b72602084016119f9565b6020820152611b83604084016119f9565b6040820152611b94606084016117aa565b60608201526080830151608082015260a083015160a082015260c083015182811115611bbf57600080fd5b611bcb87828601611a11565b60c08301525060e083015182811115611be357600080fd5b611bef87828601611a75565b60e0830152506101009150611c058284016118d2565b91810191909152949350505050565b60008251611c26818460208701611635565b9190910192915050565b602081526000610ba16020830184611659565b85815284602082015260a060408201526000611c6260a0830186611659565b8281036060840152611c748186611685565b915050826080830152969550505050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
