{
  "_format": "hh-sol-artifact-1",
  "contractName": "DonateGDClone",
  "sourceName": "contracts/utils/BuyGDClone.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "_router",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_cusd",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gd",
          "type": "address"
        },
        {
          "internalType": "contract IStaticOracle",
          "name": "_oracle",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "error",
          "type": "bytes"
        }
      ],
      "name": "EXEC_FAILED",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NO_BALANCE",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "REFUND_FAILED",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "outAmount",
          "type": "uint256"
        }
      ],
      "name": "Bought",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "donor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenDonated",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountDonated",
          "type": "uint256"
        }
      ],
      "name": "Donated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "callData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "celo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cusd",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "withSwap",
          "type": "bool"
        }
      ],
      "name": "exec",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gd",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_recoverTo",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_donateTo",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_callData",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "period",
          "type": "uint32"
        }
      ],
      "name": "minAmountByTWAP",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minTwap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quote",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract IStaticOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "recover",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "recoverTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "router",
      "outputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swapCelo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swapCusd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "twapPeriod",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101206040523480156200001257600080fd5b506040516200210a3803806200210a833981016040819052620000359162000078565b6001600160a01b0393841660805291831660c052821660e052166101005261012c60a052620000e0565b6001600160a01b03811681146200007557600080fd5b50565b600080600080608085870312156200008f57600080fd5b84516200009c816200005f565b6020860151909450620000af816200005f565b6040860151909350620000c2816200005f565b6060860151909250620000d5816200005f565b939692955090935050565b60805160a05160c05160e05161010051611f1a620001f0600039600081816101a00152818161061c015281816106da01526107f701526000818161024f0152818161072b01528181610a1d01528181610ddd015281816112d3015281816113d00152818161154a01526115d10152600081816101280152818161064d015281816107090152818161082e015281816109db01528181610be401528181610c8301528181610cf401528181610d9b01528181610ef8015281816111d5015281816113540152818161147e015261150501526000818161032a015281816108d70152610ca40152600081816103730152818161093901528181610a8b01528181610d210152610e4b0152611f1a6000f3fe6080604052600436106100d25760003560e01c8063051ed8ef146100de5780630c577bdc146101165780630cd865ec1461014a5780634e417a981461016c5780637dc0d1d01461018e578063821dc910146101c257806386b12bab146101f75780638da5cb5b14610217578063a5e598fc1461023d578063aa6bfa9d14610271578063b1a5fa9f14610292578063c4d66de8146102b2578063cf7a1d77146102d2578063d3986f08146102f2578063de983c2814610305578063f620732614610318578063f887ea401461036157600080fd5b366100d957005b600080fd5b3480156100ea57600080fd5b50610100600080516020611ea583398151915281565b60405161010d91906117a3565b60405180910390f35b34801561012257600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b34801561015657600080fd5b5061016a6101653660046117cc565b610395565b005b34801561017857600080fd5b50610181610501565b60405161010d9190611836565b34801561019a57600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ce57600080fd5b506101e26101dd366004611849565b61058f565b6040805192835260208301919091520161010d565b34801561020357600080fd5b50600154610100906001600160a01b031681565b34801561022357600080fd5b50600054610100906201000090046001600160a01b031681565b34801561024957600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b61028461027f366004611894565b6107c2565b60405190815260200161010d565b34801561029e57600080fd5b506102846102ad366004611894565b610ba4565b3480156102be57600080fd5b5061016a6102cd3660046117cc565b610f72565b3480156102de57600080fd5b5061016a6102ed36600461190a565b61104b565b610284610300366004611894565b611153565b61016a6103133660046119d1565b61127c565b34801561032457600080fd5b5061034c7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161010d565b34801561036d57600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038116610422576001546040516000916001600160a01b03169047908381818185875af1925050503d80600081146103f0576040519150601f19603f3d011682016040523d82523d6000602084013e6103f5565b606091505b505090508061041e5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6001546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a082319061045d9030906004016117a3565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611a08565b6040518363ffffffff1660e01b81526004016104bb929190611a21565b6020604051808303816000875af11580156104da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190611a3a565b50565b6002805461050e90611a57565b80601f016020809104026020016040519081016040528092919081815260200182805461053a90611a57565b80156105875780601f1061055c57610100808354040283529160200191610587565b820191906000526020600020905b81548152906001019060200180831161056a57829003601f168201915b505050505081565b6040805160018082528183019092526000918291829160208083019080368337019050509050612710816000815181106105cb576105cb611a91565b62ffffff909216602092830291909101909101528573471ece3750da237f93b8e339c536989b8978a437196001600160a01b038716016106c357604051630757bc8160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630757bc81906106779084908a907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611aa7565b600060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bc9190810190611add565b5092508290505b604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca906107579084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401611b9c565b600060405180830381865afa158015610774573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079c9190810190611add565b50925060646107ac846062611c38565b6107b69190611c4f565b93505050935093915050565b6000805481906001600160a01b038481166201000090920416146108b257604051630757bc8160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630757bc81906108699067016345785d8a0000907f000000000000000000000000000000000000000000000000000000000000000090600080516020611ea583398151915290603c90600401611aa7565b600060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190611add565b5090505b60006108be8247611c71565b905060006108fb82600080516020611ea58339815191527f000000000000000000000000000000000000000000000000000000000000000061058f565b50905080861161090b578061090d565b855b60405163095ea7b360e01b8152909650600080516020611ea58339815191529063095ea7b390610963907f0000000000000000000000000000000000000000000000000000000000000000908690600401611a21565b6020604051808303816000875af1158015610982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a69190611a3a565b50604080516080810182527308e3d9c6ea1b446ff2771c6738a6d313712f148760631b60a082015261017760eb1b60b48201527f0000000000000000000000000000000000000000000000000000000000000000606090811b6001600160601b031990811660b784015261027160ec1b60cb8401527f0000000000000000000000000000000000000000000000000000000000000000821b1660ce830152825160c281840301815260e28301845282526000546201000090046001600160a01b039081166020840152828401869052908201899052915163b858183f60e01b815290917f0000000000000000000000000000000000000000000000000000000000000000169063b858183f90610ac0908490600401611c84565b6020604051808303816000875af1158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b039190611a08565b6000549095506001600160a01b03878116620100009092041614610b9a576000866001600160a01b03168560405160006040518083038185875af1925050503d8060008114610b6e576040519150601f19603f3d011682016040523d82523d6000602084013e610b73565b606091505b5050905080610b985760405163e2a1cc9160e01b815260048101869052602401610415565b505b5050505092915050565b6000805481906001600160a01b0362010000909104811690841603610bca576000610bd4565b67016345785d8a00005b6001600160401b031690506000817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610c2e91906117a3565b602060405180830381865afa158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190611a08565b610c799190611c71565b90506000610cc8827f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061058f565b509050808611610cd85780610cda565b855b60405163095ea7b360e01b81529096506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390610d4b907f0000000000000000000000000000000000000000000000000000000000000000908690600401611a21565b6020604051808303816000875af1158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190611a3a565b50604080516080810182527f0000000000000000000000000000000000000000000000000000000000000000606090811b6001600160601b031990811660a084015261027160ec1b60b48401527f0000000000000000000000000000000000000000000000000000000000000000821b1660b7830152825160ab81840301815260cb8301845282526000546201000090046001600160a01b039081166020840152828401869052908201899052915163b858183f60e01b815290917f0000000000000000000000000000000000000000000000000000000000000000169063b858183f90610e80908490600401611c84565b6020604051808303816000875af1158015610e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec39190611a08565b6000549095506001600160a01b03878116620100009092041614610b9a5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610f2f9089908890600401611a21565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b989190611a3a565b600054610100900460ff1615808015610f925750600054600160ff909116105b80610fb35750610fa130611794565b158015610fb3575060005460ff166001145b610fcf5760405162461bcd60e51b815260040161041590611cd2565b6000805460ff191660011790558015610ff2576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b03851602179055801561041e576000805461ff001916905560405160018152600080516020611ec58339815191529060200160405180910390a15050565b600054610100900460ff161580801561106b5750600054600160ff909116105b8061108c575061107a30611794565b15801561108c575060005460ff166001145b6110a85760405162461bcd60e51b815260040161041590611cd2565b6000805460ff1916600117905580156110cb576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038681169190910291909117909155600180546001600160a01b03191691861691909117905560026111188382611d6f565b50801561114d576000805461ff001916905560405160018152600080516020611ec58339815191529060200160405180910390a15b50505050565b60004780156111be5761116684846107c2565b60408051600080516020611ea58339815191528152602081018490529081018290529092507fa9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c9060600160405180910390a150611276565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061120a9030906004016117a3565b602060405180830381865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b9190611a08565b9050801561125d576111668484610ba4565b60405163701b93d160e11b815260040160405180910390fd5b92915050565b6000546201000090046001600160a01b03168180156112a957506000600280546112a590611a57565b9050115b156112c8576000805462010000600160b01b0319163062010000021790555b6000808315611323577f000000000000000000000000000000000000000000000000000000000000000091506112fe8686611153565b6000805462010000600160b01b031916620100006001600160a01b0387160217905590505b60006002805461133290611a57565b9050111561172d576040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906113899030906004016117a3565b602060405180830381865afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190611a08565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161141a91906117a3565b602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a08565b905047821561152a5760005460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b3926114bf9262010000909204909116908790600401611a21565b6020604051808303816000875af11580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190611a3a565b507f000000000000000000000000000000000000000000000000000000000000000094508293505b81156115f65760005460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b39261158b9262010000909204909116908690600401611a21565b6020604051808303816000875af11580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190611a3a565b507f000000000000000000000000000000000000000000000000000000000000000094508193505b80156116995760005460405163095ea7b360e01b8152600080516020611ea58339815191529163095ea7b391611640916201000090046001600160a01b0316908590600401611a21565b6020604051808303816000875af115801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116839190611a3a565b50600080516020611ea583398151915294508093505b6000805460405182916201000090046001600160a01b03169082906116c090600290611e2e565b60006040518083038185875af1925050503d80600081146116fd576040519150601f19603f3d011682016040523d82523d6000602084013e611702565b606091505b50915091508161172757806040516382c5e96b60e01b81526004016104159190611836565b50505050505b600154600054604080516001600160a01b0393841681526201000090920483166020830152918416818301526060810183905290517f53a00c43aa8edf6592dddb131949163c9cae5899ad4b8ea6887115dde624b1349181900360800190a1505050505050565b6001600160a01b03163b151590565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146104fe57600080fd5b6000602082840312156117de57600080fd5b81356117e9816117b7565b9392505050565b6000815180845260005b81811015611816576020818501810151868301820152016117fa565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006117e960208301846117f0565b60008060006060848603121561185e57600080fd5b833592506020840135611870816117b7565b9150604084013563ffffffff8116811461188957600080fd5b809150509250925092565b600080604083850312156118a757600080fd5b8235915060208301356118b9816117b7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611902576119026118c4565b604052919050565b60008060006060848603121561191f57600080fd5b833561192a816117b7565b925060208481013561193b816117b7565b925060408501356001600160401b038082111561195757600080fd5b818701915087601f83011261196b57600080fd5b81358181111561197d5761197d6118c4565b61198f601f8201601f191685016118da565b915080825288848285010111156119a557600080fd5b80848401858401376000848284010152508093505050509250925092565b80151581146104fe57600080fd5b6000806000606084860312156119e657600080fd5b8335925060208401356119f8816117b7565b91506040840135611889816119c3565b600060208284031215611a1a57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215611a4c57600080fd5b81516117e9816119c3565b600181811c90821680611a6b57607f821691505b602082108103611a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6001600160801b039490941684526001600160a01b0392831660208501529116604083015263ffffffff16606082015260800190565b60008060408385031215611af057600080fd5b8251602080850151919350906001600160401b0380821115611b1157600080fd5b818601915086601f830112611b2557600080fd5b815181811115611b3757611b376118c4565b8060051b9150611b488483016118da565b8181529183018401918481019089841115611b6257600080fd5b938501935b83851015611b8c5784519250611b7c836117b7565b8282529385019390850190611b67565b8096505050505050509250929050565b6001600160801b03861681526001600160a01b03858116602080840191909152908516604083015260a06060830181905284519083018190526000918581019160c0850190845b81811015611c0457845162ffffff1683529383019391830191600101611be3565b505080935050505063ffffffff831660808301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761127657611276611c22565b600082611c6c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561127657611276611c22565b602081526000825160806020840152611ca060a08401826117f0565b905060018060a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b601f821115611d6a57600081815260208120601f850160051c81016020861015611d475750805b601f850160051c820191505b81811015611d6657828155600101611d53565b5050505b505050565b81516001600160401b03811115611d8857611d886118c4565b611d9c81611d968454611a57565b84611d20565b602080601f831160018114611dd15760008415611db95750858301515b600019600386901b1c1916600185901b178555611d66565b600085815260208120601f198616915b82811015611e0057888601518255948401946001909101908401611de1565b5085821015611e1e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354611e3c81611a57565b60018281168015611e545760018114611e6957611e98565b60ff1984168752821515830287019450611e98565b8760005260208060002060005b85811015611e8f5781548a820152908401908201611e76565b50505082870194505b5092969550505050505056fe000000000000000000000000471ece3750da237f93b8e339c536989b8978a4387f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498a2646970667358221220854ec5e401fb5a768edd82fdfb820e0758e4b5c96f215446b2aa9387c611507564736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106100d25760003560e01c8063051ed8ef146100de5780630c577bdc146101165780630cd865ec1461014a5780634e417a981461016c5780637dc0d1d01461018e578063821dc910146101c257806386b12bab146101f75780638da5cb5b14610217578063a5e598fc1461023d578063aa6bfa9d14610271578063b1a5fa9f14610292578063c4d66de8146102b2578063cf7a1d77146102d2578063d3986f08146102f2578063de983c2814610305578063f620732614610318578063f887ea401461036157600080fd5b366100d957005b600080fd5b3480156100ea57600080fd5b50610100600080516020611ea583398151915281565b60405161010d91906117a3565b60405180910390f35b34801561012257600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b34801561015657600080fd5b5061016a6101653660046117cc565b610395565b005b34801561017857600080fd5b50610181610501565b60405161010d9190611836565b34801561019a57600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ce57600080fd5b506101e26101dd366004611849565b61058f565b6040805192835260208301919091520161010d565b34801561020357600080fd5b50600154610100906001600160a01b031681565b34801561022357600080fd5b50600054610100906201000090046001600160a01b031681565b34801561024957600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b61028461027f366004611894565b6107c2565b60405190815260200161010d565b34801561029e57600080fd5b506102846102ad366004611894565b610ba4565b3480156102be57600080fd5b5061016a6102cd3660046117cc565b610f72565b3480156102de57600080fd5b5061016a6102ed36600461190a565b61104b565b610284610300366004611894565b611153565b61016a6103133660046119d1565b61127c565b34801561032457600080fd5b5061034c7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161010d565b34801561036d57600080fd5b506101007f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038116610422576001546040516000916001600160a01b03169047908381818185875af1925050503d80600081146103f0576040519150601f19603f3d011682016040523d82523d6000602084013e6103f5565b606091505b505090508061041e5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6001546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a082319061045d9030906004016117a3565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611a08565b6040518363ffffffff1660e01b81526004016104bb929190611a21565b6020604051808303816000875af11580156104da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190611a3a565b50565b6002805461050e90611a57565b80601f016020809104026020016040519081016040528092919081815260200182805461053a90611a57565b80156105875780601f1061055c57610100808354040283529160200191610587565b820191906000526020600020905b81548152906001019060200180831161056a57829003601f168201915b505050505081565b6040805160018082528183019092526000918291829160208083019080368337019050509050612710816000815181106105cb576105cb611a91565b62ffffff909216602092830291909101909101528573471ece3750da237f93b8e339c536989b8978a437196001600160a01b038716016106c357604051630757bc8160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630757bc81906106779084908a907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611aa7565b600060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bc9190810190611add565b5092508290505b604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca906107579084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401611b9c565b600060405180830381865afa158015610774573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079c9190810190611add565b50925060646107ac846062611c38565b6107b69190611c4f565b93505050935093915050565b6000805481906001600160a01b038481166201000090920416146108b257604051630757bc8160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630757bc81906108699067016345785d8a0000907f000000000000000000000000000000000000000000000000000000000000000090600080516020611ea583398151915290603c90600401611aa7565b600060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190611add565b5090505b60006108be8247611c71565b905060006108fb82600080516020611ea58339815191527f000000000000000000000000000000000000000000000000000000000000000061058f565b50905080861161090b578061090d565b855b60405163095ea7b360e01b8152909650600080516020611ea58339815191529063095ea7b390610963907f0000000000000000000000000000000000000000000000000000000000000000908690600401611a21565b6020604051808303816000875af1158015610982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a69190611a3a565b50604080516080810182527308e3d9c6ea1b446ff2771c6738a6d313712f148760631b60a082015261017760eb1b60b48201527f0000000000000000000000000000000000000000000000000000000000000000606090811b6001600160601b031990811660b784015261027160ec1b60cb8401527f0000000000000000000000000000000000000000000000000000000000000000821b1660ce830152825160c281840301815260e28301845282526000546201000090046001600160a01b039081166020840152828401869052908201899052915163b858183f60e01b815290917f0000000000000000000000000000000000000000000000000000000000000000169063b858183f90610ac0908490600401611c84565b6020604051808303816000875af1158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b039190611a08565b6000549095506001600160a01b03878116620100009092041614610b9a576000866001600160a01b03168560405160006040518083038185875af1925050503d8060008114610b6e576040519150601f19603f3d011682016040523d82523d6000602084013e610b73565b606091505b5050905080610b985760405163e2a1cc9160e01b815260048101869052602401610415565b505b5050505092915050565b6000805481906001600160a01b0362010000909104811690841603610bca576000610bd4565b67016345785d8a00005b6001600160401b031690506000817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610c2e91906117a3565b602060405180830381865afa158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190611a08565b610c799190611c71565b90506000610cc8827f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061058f565b509050808611610cd85780610cda565b855b60405163095ea7b360e01b81529096506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390610d4b907f0000000000000000000000000000000000000000000000000000000000000000908690600401611a21565b6020604051808303816000875af1158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190611a3a565b50604080516080810182527f0000000000000000000000000000000000000000000000000000000000000000606090811b6001600160601b031990811660a084015261027160ec1b60b48401527f0000000000000000000000000000000000000000000000000000000000000000821b1660b7830152825160ab81840301815260cb8301845282526000546201000090046001600160a01b039081166020840152828401869052908201899052915163b858183f60e01b815290917f0000000000000000000000000000000000000000000000000000000000000000169063b858183f90610e80908490600401611c84565b6020604051808303816000875af1158015610e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec39190611a08565b6000549095506001600160a01b03878116620100009092041614610b9a5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610f2f9089908890600401611a21565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b989190611a3a565b600054610100900460ff1615808015610f925750600054600160ff909116105b80610fb35750610fa130611794565b158015610fb3575060005460ff166001145b610fcf5760405162461bcd60e51b815260040161041590611cd2565b6000805460ff191660011790558015610ff2576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b03851602179055801561041e576000805461ff001916905560405160018152600080516020611ec58339815191529060200160405180910390a15050565b600054610100900460ff161580801561106b5750600054600160ff909116105b8061108c575061107a30611794565b15801561108c575060005460ff166001145b6110a85760405162461bcd60e51b815260040161041590611cd2565b6000805460ff1916600117905580156110cb576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038681169190910291909117909155600180546001600160a01b03191691861691909117905560026111188382611d6f565b50801561114d576000805461ff001916905560405160018152600080516020611ec58339815191529060200160405180910390a15b50505050565b60004780156111be5761116684846107c2565b60408051600080516020611ea58339815191528152602081018490529081018290529092507fa9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c9060600160405180910390a150611276565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061120a9030906004016117a3565b602060405180830381865afa158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b9190611a08565b9050801561125d576111668484610ba4565b60405163701b93d160e11b815260040160405180910390fd5b92915050565b6000546201000090046001600160a01b03168180156112a957506000600280546112a590611a57565b9050115b156112c8576000805462010000600160b01b0319163062010000021790555b6000808315611323577f000000000000000000000000000000000000000000000000000000000000000091506112fe8686611153565b6000805462010000600160b01b031916620100006001600160a01b0387160217905590505b60006002805461133290611a57565b9050111561172d576040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906113899030906004016117a3565b602060405180830381865afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190611a08565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161141a91906117a3565b602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a08565b905047821561152a5760005460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b3926114bf9262010000909204909116908790600401611a21565b6020604051808303816000875af11580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190611a3a565b507f000000000000000000000000000000000000000000000000000000000000000094508293505b81156115f65760005460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b39261158b9262010000909204909116908690600401611a21565b6020604051808303816000875af11580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190611a3a565b507f000000000000000000000000000000000000000000000000000000000000000094508193505b80156116995760005460405163095ea7b360e01b8152600080516020611ea58339815191529163095ea7b391611640916201000090046001600160a01b0316908590600401611a21565b6020604051808303816000875af115801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116839190611a3a565b50600080516020611ea583398151915294508093505b6000805460405182916201000090046001600160a01b03169082906116c090600290611e2e565b60006040518083038185875af1925050503d80600081146116fd576040519150601f19603f3d011682016040523d82523d6000602084013e611702565b606091505b50915091508161172757806040516382c5e96b60e01b81526004016104159190611836565b50505050505b600154600054604080516001600160a01b0393841681526201000090920483166020830152918416818301526060810183905290517f53a00c43aa8edf6592dddb131949163c9cae5899ad4b8ea6887115dde624b1349181900360800190a1505050505050565b6001600160a01b03163b151590565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146104fe57600080fd5b6000602082840312156117de57600080fd5b81356117e9816117b7565b9392505050565b6000815180845260005b81811015611816576020818501810151868301820152016117fa565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006117e960208301846117f0565b60008060006060848603121561185e57600080fd5b833592506020840135611870816117b7565b9150604084013563ffffffff8116811461188957600080fd5b809150509250925092565b600080604083850312156118a757600080fd5b8235915060208301356118b9816117b7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611902576119026118c4565b604052919050565b60008060006060848603121561191f57600080fd5b833561192a816117b7565b925060208481013561193b816117b7565b925060408501356001600160401b038082111561195757600080fd5b818701915087601f83011261196b57600080fd5b81358181111561197d5761197d6118c4565b61198f601f8201601f191685016118da565b915080825288848285010111156119a557600080fd5b80848401858401376000848284010152508093505050509250925092565b80151581146104fe57600080fd5b6000806000606084860312156119e657600080fd5b8335925060208401356119f8816117b7565b91506040840135611889816119c3565b600060208284031215611a1a57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215611a4c57600080fd5b81516117e9816119c3565b600181811c90821680611a6b57607f821691505b602082108103611a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6001600160801b039490941684526001600160a01b0392831660208501529116604083015263ffffffff16606082015260800190565b60008060408385031215611af057600080fd5b8251602080850151919350906001600160401b0380821115611b1157600080fd5b818601915086601f830112611b2557600080fd5b815181811115611b3757611b376118c4565b8060051b9150611b488483016118da565b8181529183018401918481019089841115611b6257600080fd5b938501935b83851015611b8c5784519250611b7c836117b7565b8282529385019390850190611b67565b8096505050505050509250929050565b6001600160801b03861681526001600160a01b03858116602080840191909152908516604083015260a06060830181905284519083018190526000918581019160c0850190845b81811015611c0457845162ffffff1683529383019391830191600101611be3565b505080935050505063ffffffff831660808301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761127657611276611c22565b600082611c6c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561127657611276611c22565b602081526000825160806020840152611ca060a08401826117f0565b905060018060a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b601f821115611d6a57600081815260208120601f850160051c81016020861015611d475750805b601f850160051c820191505b81811015611d6657828155600101611d53565b5050505b505050565b81516001600160401b03811115611d8857611d886118c4565b611d9c81611d968454611a57565b84611d20565b602080601f831160018114611dd15760008415611db95750858301515b600019600386901b1c1916600185901b178555611d66565b600085815260208120601f198616915b82811015611e0057888601518255948401946001909101908401611de1565b5085821015611e1e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354611e3c81611a57565b60018281168015611e545760018114611e6957611e98565b60ff1984168752821515830287019450611e98565b8760005260208060002060005b85811015611e8f5781548a820152908401908201611e76565b50505082870194505b5092969550505050505056fe000000000000000000000000471ece3750da237f93b8e339c536989b8978a4387f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498a2646970667358221220854ec5e401fb5a768edd82fdfb820e0758e4b5c96f215446b2aa9387c611507564736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
