{
  "_format": "hh-sol-artifact-1",
  "contractName": "DVDTransferManager",
  "sourceName": "contracts/DVD/DVDTransferManager.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        }
      ],
      "name": "DVDTransferCancelled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        }
      ],
      "name": "DVDTransferExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferID",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "maker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "token1Amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "taker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "token2Amount",
          "type": "uint256"
        }
      ],
      "name": "DVDTransferInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "parity",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeBase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fee1Wallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fee2Wallet",
          "type": "address"
        }
      ],
      "name": "FeeModified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "calculateFee",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "txFee1",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txFee2",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "fee1Wallet",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "fee2Wallet",
              "type": "address"
            }
          ],
          "internalType": "struct DVDTransferManager.TxFees",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        }
      ],
      "name": "calculateParity",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_maker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token1Amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_taker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token2Amount",
          "type": "uint256"
        }
      ],
      "name": "calculateTransferID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "cancelDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "token1Fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "token2Fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "fee1Wallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fee2Wallet",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token1Amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_token2Amount",
          "type": "uint256"
        }
      ],
      "name": "initiateDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTREX",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isTREXAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isTREXOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token2",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_fee1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fee2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_feeBase",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_fee1Wallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fee2Wallet",
          "type": "address"
        }
      ],
      "name": "modifyFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferID",
          "type": "bytes32"
        }
      ],
      "name": "takeDVDTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "token1ToDeliver",
      "outputs": [
        {
          "internalType": "address",
          "name": "counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "token2ToDeliver",
      "outputs": [
        {
          "internalType": "address",
          "name": "counterpart",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "txNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001a33610024565b6000600455610074565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f35806100836000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063c66323e511610071578063c66323e514610327578063e722e60314610330578063eb08e26114610343578063f2fde38b14610356578063ff4ca3751461036957600080fd5b8063715018a6146102b357806377722075146102bb5780638da5cb5b146102f9578063afc991411461031457600080fd5b8063344ae659116100de578063344ae659146102195780634dc55ea31461023a5780634f8468641461024d5780636e4d26e4146102a057600080fd5b80630f7f681114610110578063158db45014610164578063233792511461017957806327cdab061461019c575b600080fd5b61014c61011e366004611a7d565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161015b93929190611a96565b60405180910390f35b610177610172366004611a7d565b61037c565b005b61018c610187366004611acf565b610a1e565b604051901515815260200161015b565b6101e56101aa366004611a7d565b600160208190526000918252604090912080549181015460028201546003830154600490930154919290916001600160a01b03918216911685565b604080519586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a00161015b565b61022c610227366004611acf565b610aa9565b60405190815260200161015b565b61022c610248366004611b08565b610af4565b61026061025b366004611a7d565b610b53565b604080518251815260208084015190820152828201516001600160a01b03908116928201929092526060928301519091169181019190915260800161015b565b6101776102ae366004611b83565b610d92565b610177611150565b61014c6102c9366004611a7d565b60026020819052600091825260409091208054600182015491909201546001600160a01b03928316929091169083565b6000546040516001600160a01b03909116815260200161015b565b61018c610322366004611acf565b611164565b61022c60045481565b61017761033e366004611bde565b6111f1565b61018c610351366004611c59565b611683565b610177610364366004611c59565b611703565b610177610377366004611a7d565b61177c565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610403575080516001600160a01b031615155b6104285760405162461bcd60e51b815260040161041f90611c7d565b60405180910390fd5b6020828101519082015182516001600160a01b03163314806104535750610453846020015133610a1e565b806104675750610467836020015133610a1e565b6104d25760405162461bcd60e51b815260206004820152603660248201527f7472616e736665722068617320746f20626520646f6e6520627920746865206360448201527537bab73a32b93830b93a1037b910313c9037bbb732b960511b606482015260840161041f565b604083810151845191516370a0823160e01b81526001600160a01b03928316600482015290918316906370a0823190602401602060405180830381865afa158015610521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105459190611cb4565b10156105935760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636500000000604482015260640161041f565b60408381015184519151636eb1769f60e11b81526001600160a01b039283166004820152306024820152909183169063dd62ed3e90604401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c9190611cb4565b101561065a5760405162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e73666572604482015260640161041f565b600061066586610b53565b80519091501561077857826001600160a01b03166323b872dd866000015186600001518460000151896040015161069c9190611ce3565b6040518463ffffffff1660e01b81526004016106ba93929190611a96565b6020604051808303816000875af11580156106d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fd9190611cf6565b508451604080830151835191516323b872dd60e01b81526001600160a01b038716936323b872dd93610733939192600401611a96565b6020604051808303816000875af1158015610752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107769190611cf6565b505b80516000036107fe578451845160408088015190516323b872dd60e01b81526001600160a01b038716936323b872dd936107b9939192909190600401611a96565b6020604051808303816000875af11580156107d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc9190611cf6565b505b60208101511561091757816001600160a01b03166323b872dd85600001518760000151846020015188604001516108359190611ce3565b6040518463ffffffff1660e01b815260040161085393929190611a96565b6020604051808303816000875af1158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190611cf6565b508351606082015160208301516040516323b872dd60e01b81526001600160a01b038616936323b872dd936108d2939192909190600401611a96565b6020604051808303816000875af11580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109159190611cf6565b505b80602001516000036109a0578351855160408087015190516323b872dd60e01b81526001600160a01b038616936323b872dd9361095b939192909190600401611a96565b6020604051808303816000875af115801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e9190611cf6565b505b600086815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555187917f094682e7da443a5bb6ea2c900d20d36aaff04228fe22fc6dd65a58a37695be8b91a2505050505050565b6000610a2983611683565b15610a9f576040516307feec1960e21b81526001600160a01b038381166004830152841690631ffbb06490602401602060405180830381865afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190611cf6565b9050610aa3565b5060005b92915050565b6000808383604051602001610ad49291906001600160a01b0392831681529116602082015260400190565b60408051808303601f190181529190528051602090910120949350505050565b604080516020808201999099526001600160a01b03978816818301529587166060870152608086019490945291851660a085015290931660c083015260e080830193909352805180830390930183526101009091019052805191012090565b610b5b611a02565b610b63611a02565b600083815260026020818152604080842081516060808201845282546001600160a01b03908116835260018085015482168488015293870154838601528a885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610bea575080516001600160a01b031615155b610c065760405162461bcd60e51b815260040161041f90611c7d565b6000610c1a83602001518360200151610aa9565b600081815260016020818152604092839020835160a0810185528154808252938201549281019290925260028101549382019390935260038301546001600160a01b039081166060830152600490930154909216608083015291925090151580610c875750602081015115155b15610d6f5760008160400151600a610c9f9190611dfc565b60028360400151610cb09190611ce3565b610cbb90600a611dfc565b83516040880151610ccc9190611e08565b610cd69190611e08565b610ce09190611e1f565b905060008260400151600a610cf59190611dfc565b60028460400151610d069190611ce3565b610d1190600a611dfc565b84602001518760400151610d259190611e08565b610d2f9190611e08565b610d399190611e1f565b9187525060208601526060808201516001600160a01b039081166040880152608090920151909116908501525091949350505050565b505060008084526020840181905260408401819052606084015250909392505050565b6040516370a0823160e01b815233600482015284906001600160a01b038716906370a0823190602401602060405180830381865afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc9190611cb4565b1015610e4a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636500000000604482015260640161041f565b604051636eb1769f60e11b815233600482015230602482015284906001600160a01b0387169063dd62ed3e90604401602060405180830381865afa158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190611cb4565b1015610f1a5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465604482015268103a3930b739b332b960b91b606482015260840161041f565b6001600160a01b038316610f705760405162461bcd60e51b815260206004820152601a60248201527f636f756e746572706172742063616e6e6f74206265206e756c6c000000000000604482015260640161041f565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190611cb4565b600003610ff15760405162461bcd60e51b815260040161041f90611e41565b60408051606080820183523382526001600160a01b0388811660208085019182528486018a81528651948501875289841680865293891691850182905295840187905260045485519251965195969495600095611054959294939092908a610af4565b6000818152600260208181526040808420885181546001600160a01b039182166001600160a01b03199182161783558a8501805160018086018054928616928516929092179091558c860180519589019590955560038752978590208b518154908516908416811782558c88015199820180549a86169a9094168a179093558b8601519701879055518b51935185519484168552958401959095528284015260608201949094529051949550929391169184917f1eff5dd2c180a5889d45725b98546e9d8c28331caac1c279a0fdc3fe18eb29e59181900360800190a46004805490600061114183611e8a565b91905055505050505050505050565b611158611958565b61116260006119b2565b565b600061116f83611683565b15610a9f57816001600160a01b0316836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190611ea3565b6001600160a01b0316149050610aa3565b6000546001600160a01b031633148061120f575061120f8733611164565b8061121f575061121f8633611164565b61126b5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a206f6e6c79206f776e65722063616e2063616c6c00000000604482015260640161041f565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611cb4565b1580159061133b5750856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113389190611cb4565b15155b6113575760405162461bcd60e51b815260040161041f90611e41565b61136283600a611dfc565b851115801561136f575060015b8015611385575061138183600a611dfc565b8411155b801561138f575060015b801561139c575060058311155b80156113a9575060028310155b6113ec5760405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206665652073657474696e677360601b604482015260640161041f565b8415611454576001600160a01b0382166114545760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420312063616e6e6f74206265207a65726f206164647260448201526265737360e81b606482015260840161041f565b83156114bc576001600160a01b0381166114bc5760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420322063616e6e6f74206265207a65726f206164647260448201526265737360e81b606482015260840161041f565b60006114c88888610aa9565b90506114d2611a3c565b868152602080820187815260408084018881526001600160a01b0380891660608701908152888216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b03199283161790559351600490930180549390911692909316919091179091555182907f2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535f90611591908c908c908c908c908c908c908c90611ec0565b60405180910390a260006115a5898b610aa9565b90506115af611a3c565b87815260208082018a815260408084018a81526001600160a01b03808a16606087019081528b8216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b03199283161790559351600490930180549390911692909316919091179091555182907f2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535f9061166e908d908f908d908f908e908d908f90611ec0565b60405180910390a25050505050505050505050565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116df575060408051601f3d908101601f191682019092526116dc91810190611ea3565b60015b6116eb57506000919050565b6001600160a01b03811615610a9f5750600192915050565b61170b611958565b6001600160a01b0381166117705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161041f565b611779816119b2565b50565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590611803575080516001600160a01b031615155b61181f5760405162461bcd60e51b815260040161041f90611c7d565b80516001600160a01b0316331480611840575081516001600160a01b031633145b8061185557506000546001600160a01b031633145b806118695750611869826020015133610a1e565b8061187d575061187d816020015133610a1e565b6118dd5760405162461bcd60e51b815260206004820152602b60248201527f796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c20746860448201526a34b9903a3930b739b332b960a91b606482015260840161041f565b600083815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555184917fb34dd23f375e48f42dfe5fbb1f8945e706c80dbfaec32c6e978fcf70091306c991a2505050565b6000546001600160a01b031633146111625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060800160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b600060208284031215611a8f57600080fd5b5035919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038116811461177957600080fd5b60008060408385031215611ae257600080fd5b8235611aed81611aba565b91506020830135611afd81611aba565b809150509250929050565b600080600080600080600060e0888a031215611b2357600080fd5b873596506020880135611b3581611aba565b95506040880135611b4581611aba565b9450606088013593506080880135611b5c81611aba565b925060a0880135611b6c81611aba565b8092505060c0880135905092959891949750929550565b600080600080600060a08688031215611b9b57600080fd5b8535611ba681611aba565b9450602086013593506040860135611bbd81611aba565b92506060860135611bcd81611aba565b949793965091946080013592915050565b600080600080600080600060e0888a031215611bf957600080fd5b8735611c0481611aba565b96506020880135611c1481611aba565b955060408801359450606088013593506080880135925060a0880135611c3981611aba565b915060c0880135611c4981611aba565b8091505092959891949750929550565b600060208284031215611c6b57600080fd5b8135611c7681611aba565b9392505050565b6020808252601a908201527f7472616e7366657220494420646f6573206e6f74206578697374000000000000604082015260600190565b600060208284031215611cc657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610aa357610aa3611ccd565b600060208284031215611d0857600080fd5b81518015158114611c7657600080fd5b600181815b80851115611d53578160001904821115611d3957611d39611ccd565b80851615611d4657918102915b93841c9390800290611d1d565b509250929050565b600082611d6a57506001610aa3565b81611d7757506000610aa3565b8160018114611d8d5760028114611d9757611db3565b6001915050610aa3565b60ff841115611da857611da8611ccd565b50506001821b610aa3565b5060208310610133831016604e8410600b8410161715611dd6575081810a610aa3565b611de08383611d18565b8060001904821115611df457611df4611ccd565b029392505050565b6000611c768383611d5b565b8082028115828204841417610aa357610aa3611ccd565b600082611e3c57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f696e76616c69642061646472657373203a2061646472657373206973206e6f74604082015268020616e2045524332360bc1b606082015260800190565b600060018201611e9c57611e9c611ccd565b5060010190565b600060208284031215611eb557600080fd5b8151611c7681611aba565b6001600160a01b0397881681529587166020870152604086019490945260608501929092526080840152831660a083015290911660c082015260e0019056fea264697066735822122042f070dbe62bb75753cd56f25a9c51844313deb2f60536fa693b9319436a655064736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063c66323e511610071578063c66323e514610327578063e722e60314610330578063eb08e26114610343578063f2fde38b14610356578063ff4ca3751461036957600080fd5b8063715018a6146102b357806377722075146102bb5780638da5cb5b146102f9578063afc991411461031457600080fd5b8063344ae659116100de578063344ae659146102195780634dc55ea31461023a5780634f8468641461024d5780636e4d26e4146102a057600080fd5b80630f7f681114610110578063158db45014610164578063233792511461017957806327cdab061461019c575b600080fd5b61014c61011e366004611a7d565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161015b93929190611a96565b60405180910390f35b610177610172366004611a7d565b61037c565b005b61018c610187366004611acf565b610a1e565b604051901515815260200161015b565b6101e56101aa366004611a7d565b600160208190526000918252604090912080549181015460028201546003830154600490930154919290916001600160a01b03918216911685565b604080519586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a00161015b565b61022c610227366004611acf565b610aa9565b60405190815260200161015b565b61022c610248366004611b08565b610af4565b61026061025b366004611a7d565b610b53565b604080518251815260208084015190820152828201516001600160a01b03908116928201929092526060928301519091169181019190915260800161015b565b6101776102ae366004611b83565b610d92565b610177611150565b61014c6102c9366004611a7d565b60026020819052600091825260409091208054600182015491909201546001600160a01b03928316929091169083565b6000546040516001600160a01b03909116815260200161015b565b61018c610322366004611acf565b611164565b61022c60045481565b61017761033e366004611bde565b6111f1565b61018c610351366004611c59565b611683565b610177610364366004611c59565b611703565b610177610377366004611a7d565b61177c565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610403575080516001600160a01b031615155b6104285760405162461bcd60e51b815260040161041f90611c7d565b60405180910390fd5b6020828101519082015182516001600160a01b03163314806104535750610453846020015133610a1e565b806104675750610467836020015133610a1e565b6104d25760405162461bcd60e51b815260206004820152603660248201527f7472616e736665722068617320746f20626520646f6e6520627920746865206360448201527537bab73a32b93830b93a1037b910313c9037bbb732b960511b606482015260840161041f565b604083810151845191516370a0823160e01b81526001600160a01b03928316600482015290918316906370a0823190602401602060405180830381865afa158015610521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105459190611cb4565b10156105935760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636500000000604482015260640161041f565b60408381015184519151636eb1769f60e11b81526001600160a01b039283166004820152306024820152909183169063dd62ed3e90604401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c9190611cb4565b101561065a5760405162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f207472616e73666572604482015260640161041f565b600061066586610b53565b80519091501561077857826001600160a01b03166323b872dd866000015186600001518460000151896040015161069c9190611ce3565b6040518463ffffffff1660e01b81526004016106ba93929190611a96565b6020604051808303816000875af11580156106d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fd9190611cf6565b508451604080830151835191516323b872dd60e01b81526001600160a01b038716936323b872dd93610733939192600401611a96565b6020604051808303816000875af1158015610752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107769190611cf6565b505b80516000036107fe578451845160408088015190516323b872dd60e01b81526001600160a01b038716936323b872dd936107b9939192909190600401611a96565b6020604051808303816000875af11580156107d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc9190611cf6565b505b60208101511561091757816001600160a01b03166323b872dd85600001518760000151846020015188604001516108359190611ce3565b6040518463ffffffff1660e01b815260040161085393929190611a96565b6020604051808303816000875af1158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190611cf6565b508351606082015160208301516040516323b872dd60e01b81526001600160a01b038616936323b872dd936108d2939192909190600401611a96565b6020604051808303816000875af11580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109159190611cf6565b505b80602001516000036109a0578351855160408087015190516323b872dd60e01b81526001600160a01b038616936323b872dd9361095b939192909190600401611a96565b6020604051808303816000875af115801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e9190611cf6565b505b600086815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555187917f094682e7da443a5bb6ea2c900d20d36aaff04228fe22fc6dd65a58a37695be8b91a2505050505050565b6000610a2983611683565b15610a9f576040516307feec1960e21b81526001600160a01b038381166004830152841690631ffbb06490602401602060405180830381865afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190611cf6565b9050610aa3565b5060005b92915050565b6000808383604051602001610ad49291906001600160a01b0392831681529116602082015260400190565b60408051808303601f190181529190528051602090910120949350505050565b604080516020808201999099526001600160a01b03978816818301529587166060870152608086019490945291851660a085015290931660c083015260e080830193909352805180830390930183526101009091019052805191012090565b610b5b611a02565b610b63611a02565b600083815260026020818152604080842081516060808201845282546001600160a01b03908116835260018085015482168488015293870154838601528a885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590610bea575080516001600160a01b031615155b610c065760405162461bcd60e51b815260040161041f90611c7d565b6000610c1a83602001518360200151610aa9565b600081815260016020818152604092839020835160a0810185528154808252938201549281019290925260028101549382019390935260038301546001600160a01b039081166060830152600490930154909216608083015291925090151580610c875750602081015115155b15610d6f5760008160400151600a610c9f9190611dfc565b60028360400151610cb09190611ce3565b610cbb90600a611dfc565b83516040880151610ccc9190611e08565b610cd69190611e08565b610ce09190611e1f565b905060008260400151600a610cf59190611dfc565b60028460400151610d069190611ce3565b610d1190600a611dfc565b84602001518760400151610d259190611e08565b610d2f9190611e08565b610d399190611e1f565b9187525060208601526060808201516001600160a01b039081166040880152608090920151909116908501525091949350505050565b505060008084526020840181905260408401819052606084015250909392505050565b6040516370a0823160e01b815233600482015284906001600160a01b038716906370a0823190602401602060405180830381865afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc9190611cb4565b1015610e4a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e2062616c616e636500000000604482015260640161041f565b604051636eb1769f60e11b815233600482015230602482015284906001600160a01b0387169063dd62ed3e90604401602060405180830381865afa158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190611cb4565b1015610f1a5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f75676820616c6c6f77616e636520746f20696e697469617465604482015268103a3930b739b332b960b91b606482015260840161041f565b6001600160a01b038316610f705760405162461bcd60e51b815260206004820152601a60248201527f636f756e746572706172742063616e6e6f74206265206e756c6c000000000000604482015260640161041f565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190611cb4565b600003610ff15760405162461bcd60e51b815260040161041f90611e41565b60408051606080820183523382526001600160a01b0388811660208085019182528486018a81528651948501875289841680865293891691850182905295840187905260045485519251965195969495600095611054959294939092908a610af4565b6000818152600260208181526040808420885181546001600160a01b039182166001600160a01b03199182161783558a8501805160018086018054928616928516929092179091558c860180519589019590955560038752978590208b518154908516908416811782558c88015199820180549a86169a9094168a179093558b8601519701879055518b51935185519484168552958401959095528284015260608201949094529051949550929391169184917f1eff5dd2c180a5889d45725b98546e9d8c28331caac1c279a0fdc3fe18eb29e59181900360800190a46004805490600061114183611e8a565b91905055505050505050505050565b611158611958565b61116260006119b2565b565b600061116f83611683565b15610a9f57816001600160a01b0316836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190611ea3565b6001600160a01b0316149050610aa3565b6000546001600160a01b031633148061120f575061120f8733611164565b8061121f575061121f8633611164565b61126b5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a206f6e6c79206f776e65722063616e2063616c6c00000000604482015260640161041f565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611cb4565b1580159061133b5750856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113389190611cb4565b15155b6113575760405162461bcd60e51b815260040161041f90611e41565b61136283600a611dfc565b851115801561136f575060015b8015611385575061138183600a611dfc565b8411155b801561138f575060015b801561139c575060058311155b80156113a9575060028310155b6113ec5760405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206665652073657474696e677360601b604482015260640161041f565b8415611454576001600160a01b0382166114545760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420312063616e6e6f74206265207a65726f206164647260448201526265737360e81b606482015260840161041f565b83156114bc576001600160a01b0381166114bc5760405162461bcd60e51b815260206004820152602360248201527f6665652077616c6c657420322063616e6e6f74206265207a65726f206164647260448201526265737360e81b606482015260840161041f565b60006114c88888610aa9565b90506114d2611a3c565b868152602080820187815260408084018881526001600160a01b0380891660608701908152888216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b03199283161790559351600490930180549390911692909316919091179091555182907f2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535f90611591908c908c908c908c908c908c908c90611ec0565b60405180910390a260006115a5898b610aa9565b90506115af611a3c565b87815260208082018a815260408084018a81526001600160a01b03808a16606087019081528b8216608088019081526000898152600197889052859020885181559551968601969096559151600285015590516003840180549183166001600160a01b03199283161790559351600490930180549390911692909316919091179091555182907f2a53ccababe5ceadaebcbb25eb002de52dd1042821dee5cd6dd890c0651c535f9061166e908d908f908d908f908e908d908f90611ec0565b60405180910390a25050505050505050505050565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116df575060408051601f3d908101601f191682019092526116dc91810190611ea3565b60015b6116eb57506000919050565b6001600160a01b03811615610a9f5750600192915050565b61170b611958565b6001600160a01b0381166117705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161041f565b611779816119b2565b50565b600081815260026020818152604080842081516060808201845282546001600160a01b039081168352600180850154821684880152938701548386015288885260038652968490208451918201855280548816825292830154871694810194909452930154908201528151919290911615801590611803575080516001600160a01b031615155b61181f5760405162461bcd60e51b815260040161041f90611c7d565b80516001600160a01b0316331480611840575081516001600160a01b031633145b8061185557506000546001600160a01b031633145b806118695750611869826020015133610a1e565b8061187d575061187d816020015133610a1e565b6118dd5760405162461bcd60e51b815260206004820152602b60248201527f796f7520617265206e6f7420616c6c6f77656420746f2063616e63656c20746860448201526a34b9903a3930b739b332b960a91b606482015260840161041f565b600083815260026020818152604080842080546001600160a01b0319908116825560018083018054831690559185018690556003909352818520805484168155908101805490931690925591018290555184917fb34dd23f375e48f42dfe5fbb1f8945e706c80dbfaec32c6e978fcf70091306c991a2505050565b6000546001600160a01b031633146111625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060800160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b600060208284031215611a8f57600080fd5b5035919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038116811461177957600080fd5b60008060408385031215611ae257600080fd5b8235611aed81611aba565b91506020830135611afd81611aba565b809150509250929050565b600080600080600080600060e0888a031215611b2357600080fd5b873596506020880135611b3581611aba565b95506040880135611b4581611aba565b9450606088013593506080880135611b5c81611aba565b925060a0880135611b6c81611aba565b8092505060c0880135905092959891949750929550565b600080600080600060a08688031215611b9b57600080fd5b8535611ba681611aba565b9450602086013593506040860135611bbd81611aba565b92506060860135611bcd81611aba565b949793965091946080013592915050565b600080600080600080600060e0888a031215611bf957600080fd5b8735611c0481611aba565b96506020880135611c1481611aba565b955060408801359450606088013593506080880135925060a0880135611c3981611aba565b915060c0880135611c4981611aba565b8091505092959891949750929550565b600060208284031215611c6b57600080fd5b8135611c7681611aba565b9392505050565b6020808252601a908201527f7472616e7366657220494420646f6573206e6f74206578697374000000000000604082015260600190565b600060208284031215611cc657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610aa357610aa3611ccd565b600060208284031215611d0857600080fd5b81518015158114611c7657600080fd5b600181815b80851115611d53578160001904821115611d3957611d39611ccd565b80851615611d4657918102915b93841c9390800290611d1d565b509250929050565b600082611d6a57506001610aa3565b81611d7757506000610aa3565b8160018114611d8d5760028114611d9757611db3565b6001915050610aa3565b60ff841115611da857611da8611ccd565b50506001821b610aa3565b5060208310610133831016604e8410600b8410161715611dd6575081810a610aa3565b611de08383611d18565b8060001904821115611df457611df4611ccd565b029392505050565b6000611c768383611d5b565b8082028115828204841417610aa357610aa3611ccd565b600082611e3c57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f696e76616c69642061646472657373203a2061646472657373206973206e6f74604082015268020616e2045524332360bc1b606082015260800190565b600060018201611e9c57611e9c611ccd565b5060010190565b600060208284031215611eb557600080fd5b8151611c7681611aba565b6001600160a01b0397881681529587166020870152604086019490945260608501929092526080840152831660a083015290911660c082015260e0019056fea264697066735822122042f070dbe62bb75753cd56f25a9c51844313deb2f60536fa693b9319436a655064736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
