{
  "_format": "hh-sol-artifact-1",
  "contractName": "LSP7Mintable",
  "sourceName": "@lukso/lsp7-contracts/contracts/presets/LSP7Mintable.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "newOwner_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "lsp4TokenType_",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isNonDivisible_",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ERC725Y_DataKeysValuesEmptyArray",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC725Y_DataKeysValuesLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC725Y_MsgValueDisallowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "storedData",
          "type": "bytes"
        }
      ],
      "name": "InvalidExtensionAddress",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "InvalidFunctionSelector",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenNameNotEditable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenSymbolNotEditable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenTypeNotEditable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "authorizedAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LSP7AmountExceedsAuthorizedAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LSP7AmountExceedsBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "callIndex",
          "type": "uint256"
        }
      ],
      "name": "LSP7BatchCallFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CannotSendWithAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CannotUseAddressZeroAsOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "LSP7DecreaseAllowanceNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7DecreasedAllowanceBelowZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7InvalidTransferBatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenReceiver",
          "type": "address"
        }
      ],
      "name": "LSP7NotifyTokenReceiverContractMissingLSP1Interface",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenReceiver",
          "type": "address"
        }
      ],
      "name": "LSP7NotifyTokenReceiverIsEOA",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "LSP7RevokeOperatorNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenContractCannotHoldValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenOwnerCannotBeOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "functionSelector",
          "type": "bytes4"
        }
      ],
      "name": "NoExtensionFoundForFunctionSelector",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "OperatorAllowanceCannotBeIncreasedFromZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnableCannotSetZeroAddressAsOwner",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "name": "DataChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "OperatorAuthorizationChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "notified",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "OperatorRevoked",
      "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": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "authorizedAmountFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "batchCalls",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        }
      ],
      "name": "getData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataKeys",
          "type": "bytes32[]"
        }
      ],
      "name": "getDataBatch",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "dataValues",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "getOperatorsOf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "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": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "notify",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "revokeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "name": "setData",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataKeys",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes[]",
          "name": "dataValues",
          "type": "bytes[]"
        }
      ],
      "name": "setDataBatch",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "from",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "to",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amount",
          "type": "uint256[]"
        },
        {
          "internalType": "bool[]",
          "name": "force",
          "type": "bool[]"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "transferBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002f2d38038062002f2d833981016040819052620000349162000341565b848484848484848484816200004933620001cb565b6001600160a01b03811662000071576040516306b620db60e21b815260040160405180910390fd5b6200008781620001cb60201b62000dfa1760201c565b50620000de7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200021b60201b62000e621760201c565b620001187fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b856200021b60201b62000e621760201c565b620001527f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b846200021b60201b62000e621760201c565b6040805160208101839052620001a5917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb391016040516020818303038152906040526200021b60201b62000e621760201c565b50506002805460ff19169315159390931790925550620005829950505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082815260016020526040902062000235828262000481565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516200026891906200054d565b60405180910390a25050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002a75781810151838201526020016200028d565b50506000910152565b600082601f830112620002c257600080fd5b81516001600160401b0380821115620002df57620002df62000274565b604051601f8301601f19908116603f011681019082821181831017156200030a576200030a62000274565b816040528381528660208588010111156200032457600080fd5b620003378460208301602089016200028a565b9695505050505050565b600080600080600060a086880312156200035a57600080fd5b85516001600160401b03808211156200037257600080fd5b6200038089838a01620002b0565b965060208801519150808211156200039757600080fd5b50620003a688828901620002b0565b604088015190955090506001600160a01b0381168114620003c657600080fd5b6060870151608088015191945092508015158114620003e457600080fd5b809150509295509295909350565b600181811c908216806200040757607f821691505b6020821081036200042857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200047c57600081815260208120601f850160051c81016020861015620004575750805b601f850160051c820191505b81811015620004785782815560010162000463565b5050505b505050565b81516001600160401b038111156200049d576200049d62000274565b620004b581620004ae8454620003f2565b846200042e565b602080601f831160018114620004ed5760008415620004d45750858301515b600019600386901b1c1916600185901b17855562000478565b600085815260208120601f198616915b828110156200051e57888601518255948401946001909101908401620004fd565b50858210156200053d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200056e8160408501602087016200028a565b601f01601f19169190910160400192915050565b61299b80620005926000396000f3fe60806040526004361061016e5760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a14610493578063dedff9c6146104c0578063f2fde38b146104e0576101e2565b80638da5cb5b146104385780639790242114610460578063b49506fd14610473576101e2565b8063760d9bba116100b0578063760d9bba146103e557806378381670146104055780637f23690c14610425576101e2565b8063715018a6146103b05780637580d920146103c5576101e2565b8063313ce5671161012257806365aeaa951161010757806365aeaa951461032d5780636963d4381461034d57806370a082311461037a576101e2565b8063313ce567146102d957806354f6127f14610300576101e2565b80632bc1da82116101535780632bc1da82146102775780632d7667c91461029957806330d0dc37146102b9576101e2565b806301ffc9a71461022357806318160ddd14610258576101e2565b366101e257346000036101b05760405163e5099ee360e01b81526004016101a79060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561020d57828260405163e5099ee360e01b81526004016101a7929190611d17565b6102178383610500565b80519350602001915050f35b34801561022f57600080fd5b5061024361023e366004611d46565b61060f565b60405190151581526020015b60405180910390f35b34801561026457600080fd5b506003545b60405190815260200161024f565b34801561028357600080fd5b50610297610292366004611e51565b61065c565b005b3480156102a557600080fd5b506102976102b4366004612086565b610705565b3480156102c557600080fd5b506102976102d4366004612158565b61080d565b3480156102e557600080fd5b506102ee6108ce565b60405160ff909116815260200161024f565b34801561030c57600080fd5b5061032061031b3660046121c7565b6108e7565b60405161024f9190612230565b34801561033957600080fd5b50610269610348366004612243565b6108f2565b34801561035957600080fd5b5061036d610368366004612276565b610958565b60405161024f91906122eb565b34801561038657600080fd5b5061026961039536600461234d565b6001600160a01b031660009081526004602052604090205490565b3480156103bc57600080fd5b50610297610aa8565b3480156103d157600080fd5b506102976103e0366004612368565b610abc565b3480156103f157600080fd5b5061029761040036600461239c565b610ad0565b34801561041157600080fd5b50610297610420366004612408565b610af8565b610297610433366004612458565b610bf5565b34801561044457600080fd5b506000546040516001600160a01b03909116815260200161024f565b61029761046e36600461249f565b610c2a565b34801561047f57600080fd5b5061029761048e366004611e51565b610c5b565b34801561049f57600080fd5b506104b36104ae36600461234d565b610c9b565b60405161024f91906124f9565b3480156104cc57600080fd5b5061036d6104db366004612546565b610cbf565b3480156104ec57600080fd5b506102976104fb36600461234d565b610d6a565b606060006105196000356001600160e01b031916610eb7565b5090506001600160a01b03811661056a576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101a7565b600080826001600160a01b0316348787333460405160200161058f949392919061257b565b60408051601f19818403018152908290526105a9916125ab565b60006040518083038185875af1925050503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b50915091508115610600579250610609915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fc52d600800000000000000000000000000000000000000000000000000000000148061064d575061064d82610f61565b80610609575061060982610f9f565b600061066884336108f2565b9050806000036106af576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101a7565b60006106bb84836125dd565b90506106cb338683600187610fdd565b60003382856040516020016106e2939291906125f0565b60405160208183030381529060405290506106fd8682611182565b505050505050565b8451845181141580610718575083518114155b80610724575082518114155b80610730575081518114155b15610767576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610804576107fc87828151811061078757610787612621565b60200260200101518783815181106107a1576107a1612621565b60200260200101518784815181106107bb576107bb612621565b60200260200101518785815181106107d5576107d5612621565b60200260200101518786815181106107ef576107ef612621565b6020026020010151610ad0565b60010161076a565b50505050505050565b336001600160a01b0384161480159061082f5750336001600160a01b03851614155b1561087f576040517f1a525b320000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101a7565b61088d838560008585610fdd565b81156108c8576000836000836040516020016108ab93929190612637565b60405160208183030381529060405290506108c68582611182565b505b50505050565b60025460009060ff166108e15750601290565b50600090565b6060610609826111ad565b6000826001600160a01b0316826001600160a01b03160361092c57506001600160a01b038116600090815260046020526040902054610609565b506001600160a01b03808216600090815260066020908152604080832093861683529290522054610609565b60608167ffffffffffffffff81111561097357610973611d8c565b6040519080825280602002602001820160405280156109a657816020015b60608152602001906001900390816109915790505b50905060005b82811015610aa157600080308686858181106109ca576109ca612621565b90506020028101906109dc9190612662565b6040516109ea9291906126b0565b600060405180830381855af49150503d8060008114610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b509150915081610a7957805115610a445780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016101a7565b80848481518110610a8c57610a8c612621565b602090810291909101015250506001016109ac565b5092915050565b610ab061124f565b610aba6000610dfa565b565b610ac461124f565b6108c8848484846112a9565b336001600160a01b03861614610aeb57610aeb3386856113b4565b6108c68585858585611464565b336001600160a01b03841614801590610b1a5750336001600160a01b03851614155b15610b6a576040517f98ce29450000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101a7565b6000610b7685856108f2565b905082811015610bb2576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828103610bc3858783600187610fdd565b6000858285604051602001610bda939291906125f0565b60405160208183030381529060405290506108048782611182565b610bfd61124f565b3415610c1c5760405163f36ba73760e01b815260040160405180910390fd5b610c268282611507565b5050565b610c3261124f565b3415610c515760405163f36ba73760e01b815260040160405180910390fd5b610c268282611612565b610c69338484600185610fdd565b6000338383604051602001610c80939291906125f0565b60405160208183030381529060405290506108c88482611182565b6001600160a01b0381166000908152600560205260409020606090610609906116dd565b6060815167ffffffffffffffff811115610cdb57610cdb611d8c565b604051908082528060200260200182016040528015610d0e57816020015b6060815260200190600190039081610cf95790505b50905060005b8251811015610d6457610d3f838281518110610d3257610d32612621565b60200260200101516111ad565b828281518110610d5157610d51612621565b6020908102919091010152600101610d14565b50919050565b610d7261124f565b6001600160a01b038116610dee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101a7565b610df781610dfa565b50565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020610e7a828261273a565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051610eab9190612230565b60405180910390a25050565b60008080610eef7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166116ea565b90506000610efc826111ad565b90508051601414158015610f105750805115155b15610f4957806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101a79190612230565b610f52816127fa565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b00000000000000000000000000000000000000000000000000000000148061060957506106098261175b565b600080610fb26301ffc9a760e01b610eb7565b5090506001600160a01b038116610fcc5750600092915050565b610fd681846117a9565b9392505050565b6001600160a01b03841661101d576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603611068576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038086166000908152600660209081526040808320938816835292905220839055821561110a576001600160a01b03851660009081526005602052604090206110b89085611847565b5082856001600160a01b0316856001600160a01b03167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516110fd9190612230565b60405180910390a46108c6565b6001600160a01b038516600090815260056020526040902061112c908561185c565b50811515856001600160a01b0316856001600160a01b03167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516111739190612230565b60405180910390a45050505050565b610c26827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc83611871565b60008181526001602052604090208054606091906111ca906126c0565b80601f01602080910402602001604051908101604052809291908181526020018280546111f6906126c0565b80156112435780601f1061121857610100808354040283529160200191611243565b820191906000526020600020905b81548152906001019060200180831161122657829003601f168201915b50505050509050919050565b6000546001600160a01b03163314610aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a7565b6001600160a01b0384166112d057604051630d2d5ec360e41b815260040160405180910390fd5b6112de6000858585856108c6565b82600360008282546112f091906125dd565b90915550506001600160a01b0384166000908152600460205260408120805485929061131d9084906125dd565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a69061136690889088908890612836565b60405180910390a461137c6000858585856108c6565b6000336000868685604051602001611398959493929190612857565b60405160208183030381529060405290506108c6858483611905565b6001600160a01b038083166000908152600660209081526040808320938716835292905220548015806113e657508082115b1561143e576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301526024820183905285166044820152606481018390526084016101a7565b6108c8838561144d8585612891565b600060405180602001604052806000815250610fdd565b6001600160a01b038516158061148157506001600160a01b038416155b1561149f57604051630d2d5ec360e41b815260040160405180910390fd5b6114ac85858585856108c6565b6114b985858585856119f8565b6114c685858585856108c6565b600033868686856040516020016114e1959493929190612857565b60405160208183030381529060405290506114fc8682611b4f565b6106fd858483611905565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611560576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016115b9576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201610e62576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182511461164d576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003611688576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156116d8576116d08382815181106116a9576116a9612621565b60200260200101518383815181106116c3576116c3612621565b6020026020010151611507565b60010161168b565b505050565b60606000610fd683611b7a565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080611753906128a4565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061060957506301ffc9a760e01b6001600160e01b0319831614610609565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611830575060208210155b801561183c5750600081115b979650505050505050565b6000610fd6836001600160a01b038416611bd5565b6000610fd6836001600160a01b038416611c24565b61188b6001600160a01b038416631aed5a8560e21b6117a9565b156116d857604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906118be90859085906004016128c8565b6000604051808303816000875af11580156118dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c891908101906128e1565b61191683631aed5a8560e21b6117a9565b1561196957604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906118be907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c9085906004016128c8565b816116d8576001600160a01b0383163b156119bb576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6001600160a01b038516611a23578260036000828254611a1891906125dd565b90915550611aae9050565b6001600160a01b03851660009081526004602052604090205483811015611a8f576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0387166024820152604481018590526064016101a7565b6001600160a01b03861660009081526004602052604090209084900390555b6001600160a01b038416611aca57600380548490039055611ae9565b6001600160a01b03841660009081526004602052604090208054840190555b836001600160a01b0316856001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6868686604051611b3a93929190612836565b60405180910390a46114c685858585856108c6565b610c26827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea83611871565b60608160000180548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b815481526020019060010190808311611bb65750505050509050919050565b6000818152600183016020526040812054611c1c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610609565b506000610609565b60008181526001830160205260408120548015611d0d576000611c48600183612891565b8554909150600090611c5c90600190612891565b9050818114611cc1576000866000018281548110611c7c57611c7c612621565b9060005260206000200154905080876000018481548110611c9f57611c9f612621565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cd257611cd261294f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610609565b6000915050610609565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215611d5857600080fd5b81356001600160e01b031981168114610fd657600080fd5b80356001600160a01b0381168114611d8757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611dcb57611dcb611d8c565b604052919050565b600067ffffffffffffffff821115611ded57611ded611d8c565b50601f01601f191660200190565b600082601f830112611e0c57600080fd5b8135611e1f611e1a82611dd3565b611da2565b818152846020838601011115611e3457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611e6657600080fd5b611e6f84611d70565b925060208401359150604084013567ffffffffffffffff811115611e9257600080fd5b611e9e86828701611dfb565b9150509250925092565b600067ffffffffffffffff821115611ec257611ec2611d8c565b5060051b60200190565b600082601f830112611edd57600080fd5b81356020611eed611e1a83611ea8565b82815260059290921b84018101918181019086841115611f0c57600080fd5b8286015b84811015611f2e57611f2181611d70565b8352918301918301611f10565b509695505050505050565b600082601f830112611f4a57600080fd5b81356020611f5a611e1a83611ea8565b82815260059290921b84018101918181019086841115611f7957600080fd5b8286015b84811015611f2e5780358352918301918301611f7d565b80358015158114611d8757600080fd5b600082601f830112611fb557600080fd5b81356020611fc5611e1a83611ea8565b82815260059290921b84018101918181019086841115611fe457600080fd5b8286015b84811015611f2e57611ff981611f94565b8352918301918301611fe8565b600082601f83011261201757600080fd5b81356020612027611e1a83611ea8565b82815260059290921b8401810191818101908684111561204657600080fd5b8286015b84811015611f2e57803567ffffffffffffffff81111561206a5760008081fd5b6120788986838b0101611dfb565b84525091830191830161204a565b600080600080600060a0868803121561209e57600080fd5b853567ffffffffffffffff808211156120b657600080fd5b6120c289838a01611ecc565b965060208801359150808211156120d857600080fd5b6120e489838a01611ecc565b955060408801359150808211156120fa57600080fd5b61210689838a01611f39565b9450606088013591508082111561211c57600080fd5b61212889838a01611fa4565b9350608088013591508082111561213e57600080fd5b5061214b88828901612006565b9150509295509295909350565b6000806000806080858703121561216e57600080fd5b61217785611d70565b935061218560208601611d70565b925061219360408601611f94565b9150606085013567ffffffffffffffff8111156121af57600080fd5b6121bb87828801611dfb565b91505092959194509250565b6000602082840312156121d957600080fd5b5035919050565b60005b838110156121fb5781810151838201526020016121e3565b50506000910152565b6000815180845261221c8160208601602086016121e0565b601f01601f19169290920160200192915050565b602081526000610fd66020830184612204565b6000806040838503121561225657600080fd5b61225f83611d70565b915061226d60208401611d70565b90509250929050565b6000806020838503121561228957600080fd5b823567ffffffffffffffff808211156122a157600080fd5b818501915085601f8301126122b557600080fd5b8135818111156122c457600080fd5b8660208260051b85010111156122d957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561234057603f1988860301845261232e858351612204565b94509285019290850190600101612312565b5092979650505050505050565b60006020828403121561235f57600080fd5b610fd682611d70565b6000806000806080858703121561237e57600080fd5b61238785611d70565b93506020850135925061219360408601611f94565b600080600080600060a086880312156123b457600080fd5b6123bd86611d70565b94506123cb60208701611d70565b9350604086013592506123e060608701611f94565b9150608086013567ffffffffffffffff8111156123fc57600080fd5b61214b88828901611dfb565b6000806000806080858703121561241e57600080fd5b61242785611d70565b935061243560208601611d70565b925060408501359150606085013567ffffffffffffffff8111156121af57600080fd5b6000806040838503121561246b57600080fd5b82359150602083013567ffffffffffffffff81111561248957600080fd5b61249585828601611dfb565b9150509250929050565b600080604083850312156124b257600080fd5b823567ffffffffffffffff808211156124ca57600080fd5b6124d686838701611f39565b935060208501359150808211156124ec57600080fd5b5061249585828601612006565b6020808252825182820181905260009190848201906040850190845b8181101561253a5783516001600160a01b031683529284019291840191600101612515565b50909695505050505050565b60006020828403121561255857600080fd5b813567ffffffffffffffff81111561256f57600080fd5b61175384828501611f39565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516125bd8184602087016121e0565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610609576106096125c7565b6001600160a01b03841681528260208201526060604082015260006126186060830184612204565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff831660208201526060604082015260006126186060830184612204565b6000808335601e1984360301811261267957600080fd5b83018035915067ffffffffffffffff82111561269457600080fd5b6020019150368190038213156126a957600080fd5b9250929050565b8183823760009101908152919050565b600181811c908216806126d457607f821691505b602082108103610d6457634e487b7160e01b600052602260045260246000fd5b601f8211156116d857600081815260208120601f850160051c8101602086101561271b5750805b601f850160051c820191505b818110156106fd57828155600101612727565b815167ffffffffffffffff81111561275457612754611d8c565b6127688161276284546126c0565b846126f4565b602080601f83116001811461279d57600084156127855750858301515b600019600386901b1c1916600185901b1785556106fd565b600085815260208120601f198616915b828110156127cc578886015182559484019460019091019084016127ad565b50858210156127ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff19808216929190601483101561282e5780818460140360031b1b83161693505b505050919050565b83815282151560208201526060604082015260006126186060830184612204565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a0608083015261183c60a0830184612204565b81810381811115610609576106096125c7565b80516020808301519190811015610d645760001960209190910360031b1b16919050565b8281526040602082015260006117536040830184612204565b6000602082840312156128f357600080fd5b815167ffffffffffffffff81111561290a57600080fd5b8201601f8101841361291b57600080fd5b8051612929611e1a82611dd3565b81815285602083850101111561293e57600080fd5b6126188260208301602086016121e0565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f566a066bff8338fbcac813499d43e14c7b081a7096e7ee8a43d02d80a353b4e64736f6c63430008110033",
  "deployedBytecode": "0x60806040526004361061016e5760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a14610493578063dedff9c6146104c0578063f2fde38b146104e0576101e2565b80638da5cb5b146104385780639790242114610460578063b49506fd14610473576101e2565b8063760d9bba116100b0578063760d9bba146103e557806378381670146104055780637f23690c14610425576101e2565b8063715018a6146103b05780637580d920146103c5576101e2565b8063313ce5671161012257806365aeaa951161010757806365aeaa951461032d5780636963d4381461034d57806370a082311461037a576101e2565b8063313ce567146102d957806354f6127f14610300576101e2565b80632bc1da82116101535780632bc1da82146102775780632d7667c91461029957806330d0dc37146102b9576101e2565b806301ffc9a71461022357806318160ddd14610258576101e2565b366101e257346000036101b05760405163e5099ee360e01b81526004016101a79060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561020d57828260405163e5099ee360e01b81526004016101a7929190611d17565b6102178383610500565b80519350602001915050f35b34801561022f57600080fd5b5061024361023e366004611d46565b61060f565b60405190151581526020015b60405180910390f35b34801561026457600080fd5b506003545b60405190815260200161024f565b34801561028357600080fd5b50610297610292366004611e51565b61065c565b005b3480156102a557600080fd5b506102976102b4366004612086565b610705565b3480156102c557600080fd5b506102976102d4366004612158565b61080d565b3480156102e557600080fd5b506102ee6108ce565b60405160ff909116815260200161024f565b34801561030c57600080fd5b5061032061031b3660046121c7565b6108e7565b60405161024f9190612230565b34801561033957600080fd5b50610269610348366004612243565b6108f2565b34801561035957600080fd5b5061036d610368366004612276565b610958565b60405161024f91906122eb565b34801561038657600080fd5b5061026961039536600461234d565b6001600160a01b031660009081526004602052604090205490565b3480156103bc57600080fd5b50610297610aa8565b3480156103d157600080fd5b506102976103e0366004612368565b610abc565b3480156103f157600080fd5b5061029761040036600461239c565b610ad0565b34801561041157600080fd5b50610297610420366004612408565b610af8565b610297610433366004612458565b610bf5565b34801561044457600080fd5b506000546040516001600160a01b03909116815260200161024f565b61029761046e36600461249f565b610c2a565b34801561047f57600080fd5b5061029761048e366004611e51565b610c5b565b34801561049f57600080fd5b506104b36104ae36600461234d565b610c9b565b60405161024f91906124f9565b3480156104cc57600080fd5b5061036d6104db366004612546565b610cbf565b3480156104ec57600080fd5b506102976104fb36600461234d565b610d6a565b606060006105196000356001600160e01b031916610eb7565b5090506001600160a01b03811661056a576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101a7565b600080826001600160a01b0316348787333460405160200161058f949392919061257b565b60408051601f19818403018152908290526105a9916125ab565b60006040518083038185875af1925050503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b50915091508115610600579250610609915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fc52d600800000000000000000000000000000000000000000000000000000000148061064d575061064d82610f61565b80610609575061060982610f9f565b600061066884336108f2565b9050806000036106af576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101a7565b60006106bb84836125dd565b90506106cb338683600187610fdd565b60003382856040516020016106e2939291906125f0565b60405160208183030381529060405290506106fd8682611182565b505050505050565b8451845181141580610718575083518114155b80610724575082518114155b80610730575081518114155b15610767576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610804576107fc87828151811061078757610787612621565b60200260200101518783815181106107a1576107a1612621565b60200260200101518784815181106107bb576107bb612621565b60200260200101518785815181106107d5576107d5612621565b60200260200101518786815181106107ef576107ef612621565b6020026020010151610ad0565b60010161076a565b50505050505050565b336001600160a01b0384161480159061082f5750336001600160a01b03851614155b1561087f576040517f1a525b320000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101a7565b61088d838560008585610fdd565b81156108c8576000836000836040516020016108ab93929190612637565b60405160208183030381529060405290506108c68582611182565b505b50505050565b60025460009060ff166108e15750601290565b50600090565b6060610609826111ad565b6000826001600160a01b0316826001600160a01b03160361092c57506001600160a01b038116600090815260046020526040902054610609565b506001600160a01b03808216600090815260066020908152604080832093861683529290522054610609565b60608167ffffffffffffffff81111561097357610973611d8c565b6040519080825280602002602001820160405280156109a657816020015b60608152602001906001900390816109915790505b50905060005b82811015610aa157600080308686858181106109ca576109ca612621565b90506020028101906109dc9190612662565b6040516109ea9291906126b0565b600060405180830381855af49150503d8060008114610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b509150915081610a7957805115610a445780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016101a7565b80848481518110610a8c57610a8c612621565b602090810291909101015250506001016109ac565b5092915050565b610ab061124f565b610aba6000610dfa565b565b610ac461124f565b6108c8848484846112a9565b336001600160a01b03861614610aeb57610aeb3386856113b4565b6108c68585858585611464565b336001600160a01b03841614801590610b1a5750336001600160a01b03851614155b15610b6a576040517f98ce29450000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101a7565b6000610b7685856108f2565b905082811015610bb2576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828103610bc3858783600187610fdd565b6000858285604051602001610bda939291906125f0565b60405160208183030381529060405290506108048782611182565b610bfd61124f565b3415610c1c5760405163f36ba73760e01b815260040160405180910390fd5b610c268282611507565b5050565b610c3261124f565b3415610c515760405163f36ba73760e01b815260040160405180910390fd5b610c268282611612565b610c69338484600185610fdd565b6000338383604051602001610c80939291906125f0565b60405160208183030381529060405290506108c88482611182565b6001600160a01b0381166000908152600560205260409020606090610609906116dd565b6060815167ffffffffffffffff811115610cdb57610cdb611d8c565b604051908082528060200260200182016040528015610d0e57816020015b6060815260200190600190039081610cf95790505b50905060005b8251811015610d6457610d3f838281518110610d3257610d32612621565b60200260200101516111ad565b828281518110610d5157610d51612621565b6020908102919091010152600101610d14565b50919050565b610d7261124f565b6001600160a01b038116610dee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101a7565b610df781610dfa565b50565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020610e7a828261273a565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051610eab9190612230565b60405180910390a25050565b60008080610eef7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166116ea565b90506000610efc826111ad565b90508051601414158015610f105750805115155b15610f4957806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101a79190612230565b610f52816127fa565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b00000000000000000000000000000000000000000000000000000000148061060957506106098261175b565b600080610fb26301ffc9a760e01b610eb7565b5090506001600160a01b038116610fcc5750600092915050565b610fd681846117a9565b9392505050565b6001600160a01b03841661101d576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603611068576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038086166000908152600660209081526040808320938816835292905220839055821561110a576001600160a01b03851660009081526005602052604090206110b89085611847565b5082856001600160a01b0316856001600160a01b03167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516110fd9190612230565b60405180910390a46108c6565b6001600160a01b038516600090815260056020526040902061112c908561185c565b50811515856001600160a01b0316856001600160a01b03167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516111739190612230565b60405180910390a45050505050565b610c26827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc83611871565b60008181526001602052604090208054606091906111ca906126c0565b80601f01602080910402602001604051908101604052809291908181526020018280546111f6906126c0565b80156112435780601f1061121857610100808354040283529160200191611243565b820191906000526020600020905b81548152906001019060200180831161122657829003601f168201915b50505050509050919050565b6000546001600160a01b03163314610aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a7565b6001600160a01b0384166112d057604051630d2d5ec360e41b815260040160405180910390fd5b6112de6000858585856108c6565b82600360008282546112f091906125dd565b90915550506001600160a01b0384166000908152600460205260408120805485929061131d9084906125dd565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a69061136690889088908890612836565b60405180910390a461137c6000858585856108c6565b6000336000868685604051602001611398959493929190612857565b60405160208183030381529060405290506108c6858483611905565b6001600160a01b038083166000908152600660209081526040808320938716835292905220548015806113e657508082115b1561143e576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301526024820183905285166044820152606481018390526084016101a7565b6108c8838561144d8585612891565b600060405180602001604052806000815250610fdd565b6001600160a01b038516158061148157506001600160a01b038416155b1561149f57604051630d2d5ec360e41b815260040160405180910390fd5b6114ac85858585856108c6565b6114b985858585856119f8565b6114c685858585856108c6565b600033868686856040516020016114e1959493929190612857565b60405160208183030381529060405290506114fc8682611b4f565b6106fd858483611905565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611560576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016115b9576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201610e62576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182511461164d576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003611688576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156116d8576116d08382815181106116a9576116a9612621565b60200260200101518383815181106116c3576116c3612621565b6020026020010151611507565b60010161168b565b505050565b60606000610fd683611b7a565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080611753906128a4565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061060957506301ffc9a760e01b6001600160e01b0319831614610609565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611830575060208210155b801561183c5750600081115b979650505050505050565b6000610fd6836001600160a01b038416611bd5565b6000610fd6836001600160a01b038416611c24565b61188b6001600160a01b038416631aed5a8560e21b6117a9565b156116d857604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906118be90859085906004016128c8565b6000604051808303816000875af11580156118dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c891908101906128e1565b61191683631aed5a8560e21b6117a9565b1561196957604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906118be907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c9085906004016128c8565b816116d8576001600160a01b0383163b156119bb576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6001600160a01b038516611a23578260036000828254611a1891906125dd565b90915550611aae9050565b6001600160a01b03851660009081526004602052604090205483811015611a8f576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0387166024820152604481018590526064016101a7565b6001600160a01b03861660009081526004602052604090209084900390555b6001600160a01b038416611aca57600380548490039055611ae9565b6001600160a01b03841660009081526004602052604090208054840190555b836001600160a01b0316856001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6868686604051611b3a93929190612836565b60405180910390a46114c685858585856108c6565b610c26827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea83611871565b60608160000180548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b815481526020019060010190808311611bb65750505050509050919050565b6000818152600183016020526040812054611c1c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610609565b506000610609565b60008181526001830160205260408120548015611d0d576000611c48600183612891565b8554909150600090611c5c90600190612891565b9050818114611cc1576000866000018281548110611c7c57611c7c612621565b9060005260206000200154905080876000018481548110611c9f57611c9f612621565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cd257611cd261294f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610609565b6000915050610609565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215611d5857600080fd5b81356001600160e01b031981168114610fd657600080fd5b80356001600160a01b0381168114611d8757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611dcb57611dcb611d8c565b604052919050565b600067ffffffffffffffff821115611ded57611ded611d8c565b50601f01601f191660200190565b600082601f830112611e0c57600080fd5b8135611e1f611e1a82611dd3565b611da2565b818152846020838601011115611e3457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611e6657600080fd5b611e6f84611d70565b925060208401359150604084013567ffffffffffffffff811115611e9257600080fd5b611e9e86828701611dfb565b9150509250925092565b600067ffffffffffffffff821115611ec257611ec2611d8c565b5060051b60200190565b600082601f830112611edd57600080fd5b81356020611eed611e1a83611ea8565b82815260059290921b84018101918181019086841115611f0c57600080fd5b8286015b84811015611f2e57611f2181611d70565b8352918301918301611f10565b509695505050505050565b600082601f830112611f4a57600080fd5b81356020611f5a611e1a83611ea8565b82815260059290921b84018101918181019086841115611f7957600080fd5b8286015b84811015611f2e5780358352918301918301611f7d565b80358015158114611d8757600080fd5b600082601f830112611fb557600080fd5b81356020611fc5611e1a83611ea8565b82815260059290921b84018101918181019086841115611fe457600080fd5b8286015b84811015611f2e57611ff981611f94565b8352918301918301611fe8565b600082601f83011261201757600080fd5b81356020612027611e1a83611ea8565b82815260059290921b8401810191818101908684111561204657600080fd5b8286015b84811015611f2e57803567ffffffffffffffff81111561206a5760008081fd5b6120788986838b0101611dfb565b84525091830191830161204a565b600080600080600060a0868803121561209e57600080fd5b853567ffffffffffffffff808211156120b657600080fd5b6120c289838a01611ecc565b965060208801359150808211156120d857600080fd5b6120e489838a01611ecc565b955060408801359150808211156120fa57600080fd5b61210689838a01611f39565b9450606088013591508082111561211c57600080fd5b61212889838a01611fa4565b9350608088013591508082111561213e57600080fd5b5061214b88828901612006565b9150509295509295909350565b6000806000806080858703121561216e57600080fd5b61217785611d70565b935061218560208601611d70565b925061219360408601611f94565b9150606085013567ffffffffffffffff8111156121af57600080fd5b6121bb87828801611dfb565b91505092959194509250565b6000602082840312156121d957600080fd5b5035919050565b60005b838110156121fb5781810151838201526020016121e3565b50506000910152565b6000815180845261221c8160208601602086016121e0565b601f01601f19169290920160200192915050565b602081526000610fd66020830184612204565b6000806040838503121561225657600080fd5b61225f83611d70565b915061226d60208401611d70565b90509250929050565b6000806020838503121561228957600080fd5b823567ffffffffffffffff808211156122a157600080fd5b818501915085601f8301126122b557600080fd5b8135818111156122c457600080fd5b8660208260051b85010111156122d957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561234057603f1988860301845261232e858351612204565b94509285019290850190600101612312565b5092979650505050505050565b60006020828403121561235f57600080fd5b610fd682611d70565b6000806000806080858703121561237e57600080fd5b61238785611d70565b93506020850135925061219360408601611f94565b600080600080600060a086880312156123b457600080fd5b6123bd86611d70565b94506123cb60208701611d70565b9350604086013592506123e060608701611f94565b9150608086013567ffffffffffffffff8111156123fc57600080fd5b61214b88828901611dfb565b6000806000806080858703121561241e57600080fd5b61242785611d70565b935061243560208601611d70565b925060408501359150606085013567ffffffffffffffff8111156121af57600080fd5b6000806040838503121561246b57600080fd5b82359150602083013567ffffffffffffffff81111561248957600080fd5b61249585828601611dfb565b9150509250929050565b600080604083850312156124b257600080fd5b823567ffffffffffffffff808211156124ca57600080fd5b6124d686838701611f39565b935060208501359150808211156124ec57600080fd5b5061249585828601612006565b6020808252825182820181905260009190848201906040850190845b8181101561253a5783516001600160a01b031683529284019291840191600101612515565b50909695505050505050565b60006020828403121561255857600080fd5b813567ffffffffffffffff81111561256f57600080fd5b61175384828501611f39565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516125bd8184602087016121e0565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610609576106096125c7565b6001600160a01b03841681528260208201526060604082015260006126186060830184612204565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff831660208201526060604082015260006126186060830184612204565b6000808335601e1984360301811261267957600080fd5b83018035915067ffffffffffffffff82111561269457600080fd5b6020019150368190038213156126a957600080fd5b9250929050565b8183823760009101908152919050565b600181811c908216806126d457607f821691505b602082108103610d6457634e487b7160e01b600052602260045260246000fd5b601f8211156116d857600081815260208120601f850160051c8101602086101561271b5750805b601f850160051c820191505b818110156106fd57828155600101612727565b815167ffffffffffffffff81111561275457612754611d8c565b6127688161276284546126c0565b846126f4565b602080601f83116001811461279d57600084156127855750858301515b600019600386901b1c1916600185901b1785556106fd565b600085815260208120601f198616915b828110156127cc578886015182559484019460019091019084016127ad565b50858210156127ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff19808216929190601483101561282e5780818460140360031b1b83161693505b505050919050565b83815282151560208201526060604082015260006126186060830184612204565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a0608083015261183c60a0830184612204565b81810381811115610609576106096125c7565b80516020808301519190811015610d645760001960209190910360031b1b16919050565b8281526040602082015260006117536040830184612204565b6000602082840312156128f357600080fd5b815167ffffffffffffffff81111561290a57600080fd5b8201601f8101841361291b57600080fd5b8051612929611e1a82611dd3565b81815285602083850101111561293e57600080fd5b6126188260208301602086016121e0565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f566a066bff8338fbcac813499d43e14c7b081a7096e7ee8a43d02d80a353b4e64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
