{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenPolicy",
  "sourceName": "contracts/extensions/token/TokenPolicy.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "payable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyEnforced",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetAlreadySet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TargetOnly",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnsuccessfulCheck",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "subject",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "guarded",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "evidence",
          "type": "bytes"
        }
      ],
      "name": "Enforced",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "guarded",
          "type": "address"
        }
      ],
      "name": "TargetSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BASE_CHECKER",
      "outputs": [
        {
          "internalType": "contract BaseChecker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "subject",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "evidence",
          "type": "bytes"
        }
      ],
      "name": "enforce",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "enforcedTokenIds",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAppendedBytes",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "appendedBytes",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guarded",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "address",
          "name": "_guarded",
          "type": "address"
        }
      ],
      "name": "setTarget",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "trait",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523380602957604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6030816035565b50608e565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6108098061009d6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80637e164204116100715780637e164204146101595780638129fc1c1461016c5780638da5cb5b14610174578063b41a4b191461018a578063ce343deb1461019f578063f2fde38b146101c057600080fd5b8063158ef93e146100b95780631e898ef1146100db57806359e6c9b1146100f0578063715018a61461011357806372f7a0301461011b578063776d1a0114610146575b600080fd5b6000546100c69060ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e93660046105e7565b6101d3565b005b6100c66100fe36600461066e565b60036020526000908152604090205460ff1681565b6100ee61020e565b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020016100d2565b6100ee610154366004610687565b610222565b60025461012e906001600160a01b031681565b6100ee6102c5565b60005461010090046001600160a01b031661012e565b6101926102cd565b6040516100d291906106f1565b6040805180820190915260058152642a37b5b2b760d91b6020820152610192565b6100ee6101ce366004610687565b6102dc565b6001546001600160a01b031633146101fe57604051631f492dbf60e21b815260040160405180910390fd5b61020983838361031f565b505050565b61021661038a565b61022060006103bd565b565b61022a61038a565b6001600160a01b0381166102515760405163d92e233d60e01b815260040160405180910390fd5b6001546001600160a01b03161561027b5760405163e0f2d7b160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a19690600090a250565b610220610416565b60606102d7610472565b905090565b6102e461038a565b6001600160a01b03811661031357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61031c816103bd565b50565b600061032d8284018461066e565b60008181526003602052604090205490915060ff161561036057604051633440c93360e21b815260040160405180910390fd5b6000818152600360205260409020805460ff1916600117905561038484848461047d565b50505050565b6000546001600160a01b036101009091041633146102205760405163118cdaa760e01b815233600482015260240161030a565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b61041e610560565b6000610428610472565b9050600080828060200190518101906104419190610704565b9150915061044e826103bd565b600280546001600160a01b0319166001600160a01b03929092169190911790555050565b60606102d730610571565b60025460405163e2b2408560e01b81526001600160a01b039091169063e2b24085906104b190869086908690600401610767565b602060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f29190610795565b61050f57604051634715494560e01b815260040160405180910390fd5b6001546040516001600160a01b03918216918516907fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda09061055390869086906107b7565b60405180910390a3505050565b6105686105a0565b610220336103bd565b60405164ffffffffff602c19833b0116808252602090810190602d908301843c60408101815101604052919050565b60005460ff16156105c35760405162dc149f60e41b815260040160405180910390fd5b6000805460ff19166001179055565b6001600160a01b038116811461031c57600080fd5b6000806000604084860312156105fc57600080fd5b8335610607816105d2565b9250602084013567ffffffffffffffff81111561062357600080fd5b8401601f8101861361063457600080fd5b803567ffffffffffffffff81111561064b57600080fd5b86602082840101111561065d57600080fd5b939660209190910195509293505050565b60006020828403121561068057600080fd5b5035919050565b60006020828403121561069957600080fd5b81356106a4816105d2565b9392505050565b6000815180845260005b818110156106d1576020818501810151868301820152016106b5565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106a460208301846106ab565b6000806040838503121561071757600080fd5b8251610722816105d2565b6020840151909250610733816105d2565b809150509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061078c908301848661073e565b95945050505050565b6000602082840312156107a757600080fd5b815180151581146106a457600080fd5b6020815260006107cb60208301848661073e565b94935050505056fea26469706673582212201c6b44b530eb524539f8008f3fca1d03255b40d884f3e69003135b84e15a1d1164736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80637e164204116100715780637e164204146101595780638129fc1c1461016c5780638da5cb5b14610174578063b41a4b191461018a578063ce343deb1461019f578063f2fde38b146101c057600080fd5b8063158ef93e146100b95780631e898ef1146100db57806359e6c9b1146100f0578063715018a61461011357806372f7a0301461011b578063776d1a0114610146575b600080fd5b6000546100c69060ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e93660046105e7565b6101d3565b005b6100c66100fe36600461066e565b60036020526000908152604090205460ff1681565b6100ee61020e565b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020016100d2565b6100ee610154366004610687565b610222565b60025461012e906001600160a01b031681565b6100ee6102c5565b60005461010090046001600160a01b031661012e565b6101926102cd565b6040516100d291906106f1565b6040805180820190915260058152642a37b5b2b760d91b6020820152610192565b6100ee6101ce366004610687565b6102dc565b6001546001600160a01b031633146101fe57604051631f492dbf60e21b815260040160405180910390fd5b61020983838361031f565b505050565b61021661038a565b61022060006103bd565b565b61022a61038a565b6001600160a01b0381166102515760405163d92e233d60e01b815260040160405180910390fd5b6001546001600160a01b03161561027b5760405163e0f2d7b160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a19690600090a250565b610220610416565b60606102d7610472565b905090565b6102e461038a565b6001600160a01b03811661031357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61031c816103bd565b50565b600061032d8284018461066e565b60008181526003602052604090205490915060ff161561036057604051633440c93360e21b815260040160405180910390fd5b6000818152600360205260409020805460ff1916600117905561038484848461047d565b50505050565b6000546001600160a01b036101009091041633146102205760405163118cdaa760e01b815233600482015260240161030a565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b61041e610560565b6000610428610472565b9050600080828060200190518101906104419190610704565b9150915061044e826103bd565b600280546001600160a01b0319166001600160a01b03929092169190911790555050565b60606102d730610571565b60025460405163e2b2408560e01b81526001600160a01b039091169063e2b24085906104b190869086908690600401610767565b602060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f29190610795565b61050f57604051634715494560e01b815260040160405180910390fd5b6001546040516001600160a01b03918216918516907fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda09061055390869086906107b7565b60405180910390a3505050565b6105686105a0565b610220336103bd565b60405164ffffffffff602c19833b0116808252602090810190602d908301843c60408101815101604052919050565b60005460ff16156105c35760405162dc149f60e41b815260040160405180910390fd5b6000805460ff19166001179055565b6001600160a01b038116811461031c57600080fd5b6000806000604084860312156105fc57600080fd5b8335610607816105d2565b9250602084013567ffffffffffffffff81111561062357600080fd5b8401601f8101861361063457600080fd5b803567ffffffffffffffff81111561064b57600080fd5b86602082840101111561065d57600080fd5b939660209190910195509293505050565b60006020828403121561068057600080fd5b5035919050565b60006020828403121561069957600080fd5b81356106a4816105d2565b9392505050565b6000815180845260005b818110156106d1576020818501810151868301820152016106b5565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106a460208301846106ab565b6000806040838503121561071757600080fd5b8251610722816105d2565b6020840151909250610733816105d2565b809150509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061078c908301848661073e565b95945050505050565b6000602082840312156107a757600080fd5b815180151581146106a457600080fd5b6020815260006107cb60208301848661073e565b94935050505056fea26469706673582212201c6b44b530eb524539f8008f3fca1d03255b40d884f3e69003135b84e15a1d1164736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
