{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenManager",
  "sourceName": "contracts/access/TokenManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAuthorizations",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "ClearAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignalApprove",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignalApproveNFT",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignalApproveNFTs",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignalPendingAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "action",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "SignalSetAdmin",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "actionsNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "approveNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "approveNFTs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_signers",
          "type": "address[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isInitialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isSigner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minAuthorizations",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "pendingActions",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "signApprove",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "signApproveNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "signApproveNFTs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "signSetAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "signalApprove",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "signalApproveNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "signalApproveNFTs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "signalSetAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "signedActions",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "signers",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signersLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051611f7b380380611f7b8339818101604052602081101561003357600080fd5b50516001600055600480546001600160a01b03191633179055600355611f1d8061005e6000396000f3fe608060405234801561001057600080fd5b50600436106101125760003560e01c80630b13beca14610117578063181fcd331461014f5780632079fb9a14610209578063287800c914610242578063392e53cd1461025c57806341f684f31461027857806342a1fcee146102805780634dc5ecb31461033c57806375fd490c146103785780637df73e27146103a657806387c6d4f9146103cc5780639fddaac1146103f8578063a224cee71461042e578063a4c04bb7146104cf578063dce6e18d146104d7578063ddf67a9f1461050d578063e30569e514610549578063f00cb94214610566578063f23f977514610622578063f466634b1461065e578063f52dc4f714610694578063f851a440146106d0575b600080fd5b61014d6004803603606081101561012d57600080fd5b506001600160a01b038135811691602081013590911690604001356106d8565b005b61014d6004803603606081101561016557600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561019857600080fd5b8201836020820111156101aa57600080fd5b803590602001918460208302840111600160201b831117156101cb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610848945050505050565b6102266004803603602081101561021f57600080fd5b5035610a3e565b604080516001600160a01b039092168252519081900360200190f35b61024a610a65565b60408051918252519081900360200190f35b610264610a6b565b604080519115158252519081900360200190f35b61024a610a74565b61014d6004803603608081101561029657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102c957600080fd5b8201836020820111156102db57600080fd5b803590602001918460208302840111600160201b831117156102fc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a7a915050565b61014d6004803603608081101561035257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610c70565b61014d6004803603604081101561038e57600080fd5b506001600160a01b0381358116916020013516610e04565b610264600480360360208110156103bc57600080fd5b50356001600160a01b0316610f8d565b610264600480360360408110156103e257600080fd5b506001600160a01b038135169060200135610fa2565b61014d6004803603606081101561040e57600080fd5b506001600160a01b03813581169160208101359091169060400135610fc2565b61014d6004803603602081101561044457600080fd5b810190602081018135600160201b81111561045e57600080fd5b82018360208201111561047057600080fd5b803590602001918460208302840111600160201b8311171561049157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611142945050505050565b61024a61124b565b61014d600480360360608110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060400135611251565b61014d6004803603608081101561052357600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356113be565b6102646004803603602081101561055f57600080fd5b5035611589565b61014d6004803603608081101561057c57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111600160201b831117156105e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061159e915050565b61014d6004803603608081101561063857600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356116de565b61014d6004803603606081101561067457600080fd5b506001600160a01b03813581169160208101359091169060400135611860565b61014d600480360360808110156106aa57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611a21565b610226611b22565b6002600054141561071e576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610770576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206107e48183611b31565b604080516001600160a01b03808816825286166020820152808201859052606081018390526080810184905290517fcd9ba83b63715dc15ac193645d6e925bf4b487c94b73d709b8b6dea608efd4cc9181900360a00190a150506001600055505050565b6002600054141561088e576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b031633146108e0576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040516a617070726f76654e46547360a81b60208083019182526001600160601b0319606088811b8216602b86015287901b16603f840152845160009388938893889388936053019180860191028083838b5b8381101561095657818101518382015260200161093e565b5050505090500182815260200194505050505060405160208183030381529060405280519060200120905061098b8183611b31565b7ff9d0354d71c261982d98abd09b735f3663b2d7275e2569ad5fd907a4092765f9858585848660405180866001600160a01b03168152602001856001600160a01b0316815260200180602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610a1b578181015183820152602001610a03565b50505050905001965050505050505060405180910390a150506001600055505050565b60058181548110610a4b57fe5b6000918252602090912001546001600160a01b0316905081565b60035481565b60015460ff1681565b60055490565b60026000541415610ac0576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610b12576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60008484848460405160200180806a617070726f76654e46547360a81b815250600b01856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838051906020019060200280838360005b83811015610b82578181015183820152602001610b6a565b50505050905001828152602001945050505050604051602081830303815290604052805190602001209050610bb681611b8a565b610bbf81611bda565b60005b8351811015610c5957856001600160a01b031663095ea7b386868481518110610be757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505060019092019150610bc29050565b50610c648183611cbc565b50506001600055505050565b60026000541415610cb6576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610d08576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f9092019092528051910120610d6d81611b8a565b610d7681611bda565b846001600160a01b031663095ea7b385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610dcd57600080fd5b505af1158015610de1573d6000803e3d6000fd5b505050506040513d6020811015610df757600080fd5b50610c6490508183611cbc565b60026000541415610e4a576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff16610ea0576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6002805460010190819055604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c83015260508083018590528351808403909101815260709092019092528051910120610f0b8183611b31565b336000908152600860209081526040808320848452825291829020805460ff1916600117905581516001600160a01b0387811682528616918101919091528082018390526060810184905290517f4fc9433645aa0a3670e9185496bbd752209fed7a9696fb8a954a0db30ef927b09181900360800190a1505060016000555050565b60066020526000908152604090205460ff1681565b600860209081526000928352604080842090915290825290205460ff1681565b60026000541415611008576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661105e576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c830152605080830185905283518084039091018152607090920190925280519101206110bd81611b8a565b6110c681611bda565b836001600160a01b031663704b6c02846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506111378183611cbc565b505060016000555050565b6004546001600160a01b0316331461118f576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60015460ff16156111d15760405162461bcd60e51b8152600401808060200182810382526021815260200180611e1a6021913960400191505060405180910390fd5b6001805460ff19168117905580516111f0906005906020840190611d75565b5060005b815181101561124757600082828151811061120b57fe5b6020908102919091018101516001600160a01b03166000908152600690915260409020805460ff191660019081179091559190910190506111f4565b5050565b60025481565b60026000541415611297576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b031633146112e9576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f909201909252805191012061135a8183611b31565b604080516001600160a01b03808816825286166020820152808201859052606081018390526080810184905290517fc19251bf5f704ddc3d5babe6f4e5bde0dded20b19f7844716861821ab3163cd79181900360a00190a150506001600055505050565b60026000541415611404576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661145a576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206114c281611b8a565b33600090815260086020908152604080832084845290915290205460ff1615611531576040805162461bcd60e51b815260206004820152601c60248201527b151bdad95b93585b9859d95c8e88185b1c9958591e481cda59db995960221b604482015290519081900360640190fd5b336000908152600860209081526040808320848452825291829020805460ff1916600117905581518381529081018490528151600080516020611ec8833981519152929181900390910190a150506001600055505050565b60076020526000908152604090205460ff1681565b600260005414156115e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661163a576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60008484848460405160200180806a617070726f76654e46547360a81b815250600b01856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838051906020019060200280838360005b838110156116aa578181015183820152602001611692565b505050509050018281526020019450505050506040516020818303038152906040528051906020012090506114c281611b8a565b60026000541415611724576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314611776576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206117de81611b8a565b6117e781611bda565b846001600160a01b031663095ea7b385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b50505050610c648183611cbc565b600260005414156118a6576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff166118fc576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c8301526050808301859052835180840390910181526070909201909252805191012061195b81611b8a565b33600090815260086020908152604080832084845290915290205460ff16156119ca576040805162461bcd60e51b815260206004820152601c60248201527b151bdad95b93585b9859d95c8e88185b1c9958591e481cda59db995960221b604482015290519081900360640190fd5b336000908152600860209081526040808320848452825291829020805460ff1916600117905581518381529081018490528151600080516020611ec8833981519152929181900390910190a1505060016000555050565b60026000541415611a67576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff16611abd576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f90920190925280519101206114c281611b8a565b6004546001600160a01b031681565b600082815260076020908152604091829020805460ff19166001179055815184815290810183905281517f64df01c46eb530dc540770a0b88cc32f0b8c2b371a546ae0b13cc8ca6671fff9929181900390910190a15050565b60008181526007602052604090205460ff16611bd75760405162461bcd60e51b8152600401808060200182810382526022815260200180611ea66022913960400191505060405180910390fd5b50565b6000805b600554811015611c3e57600060058281548110611bf757fe5b60009182526020808320909101546001600160a01b031680835260088252604080842088855290925291205490915060ff1615611c35576001909201915b50600101611bde565b5080611c7b5760405162461bcd60e51b8152600401808060200182810382526023815260200180611e636023913960400191505060405180910390fd5b6003548110156112475760405162461bcd60e51b8152600401808060200182810382526028815260200180611e3b6028913960400191505060405180910390fd5b60008281526007602052604090205460ff16611d1f576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e4d616e616765723a20696e76616c6964205f616374696f6e000000604482015290519081900360640190fd5b600082815260076020908152604091829020805460ff19169055815184815290810183905281517ff4640d39061e643d9b802cb3725953405344555ad6dbb1cbdb0495f3eccb8e68929181900390910190a15050565b828054828255906000526020600020908101928215611dca579160200282015b82811115611dca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d95565b50611dd6929150611dda565b5090565b5b80821115611dd65780546001600160a01b0319168155600101611ddb56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00546f6b656e4d616e616765723a20616c726561647920696e697469616c697a6564546f6b656e4d616e616765723a20696e73756666696369656e7420617574686f72697a6174696f6e546f6b656e4d616e616765723a20616374696f6e206e6f7420617574686f72697a6564546f6b656e4d616e616765723a20666f7262696464656e000000000000000000546f6b656e4d616e616765723a20616374696f6e206e6f74207369676e616c6c6564aae28fe5531fe5dfb8d12409392ec67b50c825dd06233312cb6aeaddd16cbd22a2646970667358221220157ac47ccc4d221065147a83911068085c6130d267a8295a4acf792b487de37964736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101125760003560e01c80630b13beca14610117578063181fcd331461014f5780632079fb9a14610209578063287800c914610242578063392e53cd1461025c57806341f684f31461027857806342a1fcee146102805780634dc5ecb31461033c57806375fd490c146103785780637df73e27146103a657806387c6d4f9146103cc5780639fddaac1146103f8578063a224cee71461042e578063a4c04bb7146104cf578063dce6e18d146104d7578063ddf67a9f1461050d578063e30569e514610549578063f00cb94214610566578063f23f977514610622578063f466634b1461065e578063f52dc4f714610694578063f851a440146106d0575b600080fd5b61014d6004803603606081101561012d57600080fd5b506001600160a01b038135811691602081013590911690604001356106d8565b005b61014d6004803603606081101561016557600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561019857600080fd5b8201836020820111156101aa57600080fd5b803590602001918460208302840111600160201b831117156101cb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610848945050505050565b6102266004803603602081101561021f57600080fd5b5035610a3e565b604080516001600160a01b039092168252519081900360200190f35b61024a610a65565b60408051918252519081900360200190f35b610264610a6b565b604080519115158252519081900360200190f35b61024a610a74565b61014d6004803603608081101561029657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102c957600080fd5b8201836020820111156102db57600080fd5b803590602001918460208302840111600160201b831117156102fc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a7a915050565b61014d6004803603608081101561035257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610c70565b61014d6004803603604081101561038e57600080fd5b506001600160a01b0381358116916020013516610e04565b610264600480360360208110156103bc57600080fd5b50356001600160a01b0316610f8d565b610264600480360360408110156103e257600080fd5b506001600160a01b038135169060200135610fa2565b61014d6004803603606081101561040e57600080fd5b506001600160a01b03813581169160208101359091169060400135610fc2565b61014d6004803603602081101561044457600080fd5b810190602081018135600160201b81111561045e57600080fd5b82018360208201111561047057600080fd5b803590602001918460208302840111600160201b8311171561049157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611142945050505050565b61024a61124b565b61014d600480360360608110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060400135611251565b61014d6004803603608081101561052357600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356113be565b6102646004803603602081101561055f57600080fd5b5035611589565b61014d6004803603608081101561057c57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111600160201b831117156105e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061159e915050565b61014d6004803603608081101561063857600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356116de565b61014d6004803603606081101561067457600080fd5b506001600160a01b03813581169160208101359091169060400135611860565b61014d600480360360808110156106aa57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611a21565b610226611b22565b6002600054141561071e576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610770576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206107e48183611b31565b604080516001600160a01b03808816825286166020820152808201859052606081018390526080810184905290517fcd9ba83b63715dc15ac193645d6e925bf4b487c94b73d709b8b6dea608efd4cc9181900360a00190a150506001600055505050565b6002600054141561088e576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b031633146108e0576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040516a617070726f76654e46547360a81b60208083019182526001600160601b0319606088811b8216602b86015287901b16603f840152845160009388938893889388936053019180860191028083838b5b8381101561095657818101518382015260200161093e565b5050505090500182815260200194505050505060405160208183030381529060405280519060200120905061098b8183611b31565b7ff9d0354d71c261982d98abd09b735f3663b2d7275e2569ad5fd907a4092765f9858585848660405180866001600160a01b03168152602001856001600160a01b0316815260200180602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610a1b578181015183820152602001610a03565b50505050905001965050505050505060405180910390a150506001600055505050565b60058181548110610a4b57fe5b6000918252602090912001546001600160a01b0316905081565b60035481565b60015460ff1681565b60055490565b60026000541415610ac0576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610b12576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60008484848460405160200180806a617070726f76654e46547360a81b815250600b01856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838051906020019060200280838360005b83811015610b82578181015183820152602001610b6a565b50505050905001828152602001945050505050604051602081830303815290604052805190602001209050610bb681611b8a565b610bbf81611bda565b60005b8351811015610c5957856001600160a01b031663095ea7b386868481518110610be757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505060019092019150610bc29050565b50610c648183611cbc565b50506001600055505050565b60026000541415610cb6576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314610d08576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f9092019092528051910120610d6d81611b8a565b610d7681611bda565b846001600160a01b031663095ea7b385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610dcd57600080fd5b505af1158015610de1573d6000803e3d6000fd5b505050506040513d6020811015610df757600080fd5b50610c6490508183611cbc565b60026000541415610e4a576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff16610ea0576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6002805460010190819055604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c83015260508083018590528351808403909101815260709092019092528051910120610f0b8183611b31565b336000908152600860209081526040808320848452825291829020805460ff1916600117905581516001600160a01b0387811682528616918101919091528082018390526060810184905290517f4fc9433645aa0a3670e9185496bbd752209fed7a9696fb8a954a0db30ef927b09181900360800190a1505060016000555050565b60066020526000908152604090205460ff1681565b600860209081526000928352604080842090915290825290205460ff1681565b60026000541415611008576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661105e576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c830152605080830185905283518084039091018152607090920190925280519101206110bd81611b8a565b6110c681611bda565b836001600160a01b031663704b6c02846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506111378183611cbc565b505060016000555050565b6004546001600160a01b0316331461118f576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60015460ff16156111d15760405162461bcd60e51b8152600401808060200182810382526021815260200180611e1a6021913960400191505060405180910390fd5b6001805460ff19168117905580516111f0906005906020840190611d75565b5060005b815181101561124757600082828151811061120b57fe5b6020908102919091018101516001600160a01b03166000908152600690915260409020805460ff191660019081179091559190910190506111f4565b5050565b60025481565b60026000541415611297576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b031633146112e9576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60028054600101908190556040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f909201909252805191012061135a8183611b31565b604080516001600160a01b03808816825286166020820152808201859052606081018390526080810184905290517fc19251bf5f704ddc3d5babe6f4e5bde0dded20b19f7844716861821ab3163cd79181900360a00190a150506001600055505050565b60026000541415611404576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661145a576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206114c281611b8a565b33600090815260086020908152604080832084845290915290205460ff1615611531576040805162461bcd60e51b815260206004820152601c60248201527b151bdad95b93585b9859d95c8e88185b1c9958591e481cda59db995960221b604482015290519081900360640190fd5b336000908152600860209081526040808320848452825291829020805460ff1916600117905581518381529081018490528151600080516020611ec8833981519152929181900390910190a150506001600055505050565b60076020526000908152604090205460ff1681565b600260005414156115e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1661163a576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b60008484848460405160200180806a617070726f76654e46547360a81b815250600b01856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838051906020019060200280838360005b838110156116aa578181015183820152602001611692565b505050509050018281526020019450505050506040516020818303038152906040528051906020012090506114c281611b8a565b60026000541415611724576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b60026000556004546001600160a01b03163314611776576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805169185c1c1c9bdd9953919560b21b6020808301919091526001600160601b0319606088811b8216602a85015287901b16603e83015260528201859052607280830185905283518084039091018152609290920190925280519101206117de81611b8a565b6117e781611bda565b846001600160a01b031663095ea7b385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b50505050610c648183611cbc565b600260005414156118a6576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff166118fc576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606087811b8216602885015286901b16603c8301526050808301859052835180840390910181526070909201909252805191012061195b81611b8a565b33600090815260086020908152604080832084845290915290205460ff16156119ca576040805162461bcd60e51b815260206004820152601c60248201527b151bdad95b93585b9859d95c8e88185b1c9958591e481cda59db995960221b604482015290519081900360640190fd5b336000908152600860209081526040808320848452825291829020805460ff1916600117905581518381529081018490528151600080516020611ec8833981519152929181900390910190a1505060016000555050565b60026000541415611a67576040805162461bcd60e51b815260206004820152601f6024820152600080516020611dfa833981519152604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff16611abd576040805162461bcd60e51b81526020600482015260176024820152600080516020611e86833981519152604482015290519081900360640190fd5b6040805166617070726f766560c81b6020808301919091526001600160601b0319606088811b8216602785015287901b16603b830152604f8201859052606f80830185905283518084039091018152608f90920190925280519101206114c281611b8a565b6004546001600160a01b031681565b600082815260076020908152604091829020805460ff19166001179055815184815290810183905281517f64df01c46eb530dc540770a0b88cc32f0b8c2b371a546ae0b13cc8ca6671fff9929181900390910190a15050565b60008181526007602052604090205460ff16611bd75760405162461bcd60e51b8152600401808060200182810382526022815260200180611ea66022913960400191505060405180910390fd5b50565b6000805b600554811015611c3e57600060058281548110611bf757fe5b60009182526020808320909101546001600160a01b031680835260088252604080842088855290925291205490915060ff1615611c35576001909201915b50600101611bde565b5080611c7b5760405162461bcd60e51b8152600401808060200182810382526023815260200180611e636023913960400191505060405180910390fd5b6003548110156112475760405162461bcd60e51b8152600401808060200182810382526028815260200180611e3b6028913960400191505060405180910390fd5b60008281526007602052604090205460ff16611d1f576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e4d616e616765723a20696e76616c6964205f616374696f6e000000604482015290519081900360640190fd5b600082815260076020908152604091829020805460ff19169055815184815290810183905281517ff4640d39061e643d9b802cb3725953405344555ad6dbb1cbdb0495f3eccb8e68929181900390910190a15050565b828054828255906000526020600020908101928215611dca579160200282015b82811115611dca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d95565b50611dd6929150611dda565b5090565b5b80821115611dd65780546001600160a01b0319168155600101611ddb56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00546f6b656e4d616e616765723a20616c726561647920696e697469616c697a6564546f6b656e4d616e616765723a20696e73756666696369656e7420617574686f72697a6174696f6e546f6b656e4d616e616765723a20616374696f6e206e6f7420617574686f72697a6564546f6b656e4d616e616765723a20666f7262696464656e000000000000000000546f6b656e4d616e616765723a20616374696f6e206e6f74207369676e616c6c6564aae28fe5531fe5dfb8d12409392ec67b50c825dd06233312cb6aeaddd16cbd22a2646970667358221220157ac47ccc4d221065147a83911068085c6130d267a8295a4acf792b487de37964736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
