{
  "_format": "hh3-artifact-1",
  "contractName": "LSP7CustomizableToken",
  "sourceName": "contracts/presets/LSP7CustomizableToken.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"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isMintable",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "initialMintAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct LSP7MintableParams",
          "name": "mintableParams",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenBalanceCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenSupplyCap",
              "type": "uint256"
            }
          ],
          "internalType": "struct LSP7CappedParams",
          "name": "cappedParams",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "transferLockStart",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "transferLockEnd",
              "type": "uint256"
            }
          ],
          "internalType": "struct LSP7NonTransferableParams",
          "name": "nonTransferableParams",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isRevokable",
              "type": "bool"
            }
          ],
          "internalType": "struct LSP7RevokableParams",
          "name": "revokableParams",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccessControlCannotSetAdminForDefaultAdminRole",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "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": "LSP7CannotUpdateTransferLockPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CannotUseAddressZeroAsOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tranferAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceOf",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenBalanceCap",
          "type": "uint256"
        }
      ],
      "name": "LSP7CappedBalanceExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CappedSupplyCannotMintOverCap",
      "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": [],
      "name": "LSP7InvalidTransferLockPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7MintDisabled",
      "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": [],
      "name": "LSP7RevokableFeatureDisabled",
      "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": "LSP7TokenAlreadyTransferable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenContractCannotHoldValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenOwnerCannotBeOperator",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TransferDisabled",
      "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": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "MintingStatusChanged",
      "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": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "RevokableStatusChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        }
      ],
      "name": "TransferLockPeriodChanged",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NON_TRANSFERABLE_BYPASS_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REVOKER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNCAPPED_BALANCE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "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": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [],
      "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": [],
      "name": "disableMinting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableRevokable",
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMembers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": [],
      "name": "isMintable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRevokable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isTransferable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "makeTransferable",
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "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": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "revoke",
      "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": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "rolesOf",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "adminRole",
          "type": "bytes32"
        }
      ],
      "name": "setRoleAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenBalanceCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenSupplyCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [],
      "name": "transferLockEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "transferLockEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "transferLockStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newTransferLockStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTransferLockEnd",
          "type": "uint256"
        }
      ],
      "name": "updateTransferLockPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60e060405234801561000f575f5ffd5b50604051615ddc380380615ddc83398101604081905261002e91611123565b8051825160208085015186519187015188519192918e8e8e8e8e848484848161005633610322565b6001600160a01b03811661007d576040516306b620db60e21b815260040160405180910390fd5b6100868161032e565b506040805180820190915260048152632936598960e21b60208201526100cd907feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c9061037d565b6100f77fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af18561037d565b6101217f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db9327568461037d565b6040805160208101839052610168917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3910160408051601f1981840301815291905261037d565b50505050151560805250505f805461019193509091506001600160a01b03166103d1565b6103d1565b6009805460ff19168215159081179091556040517f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4905f90a280156101f2576101f25f516020615dbc5f395f51905f5261018c5f546001600160a01b031690565b5060a05260c08190528015610223576102235f516020615d9c5f395f51905f5261018c5f546001600160a01b031690565b508015806102315750818110155b61024e57604051631a83985560e31b815260040160405180910390fd5b600a829055600b819055600c805460ff19166001179055604051819083907f938e6c55d25d181f86d200da26970f962ec97adb02dfa0452811fb9073573ebe905f90a36102b35f516020615d7c5f395f51905f5261018c5f546001600160a01b031690565b5050600c8054821580156101000261ff0019909216919091179091556102f5576102f55f516020615d5c5f395f51905f5261018c5f546001600160a01b031690565b506020840151156103145761031487856020015161044f60201b60201c565b5050505050505050506114a6565b61032b816104ad565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8281526001602052604090206103948282611283565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516103c5919061136b565b60405180910390a25050565b5f8281526007602052604081206103e8908361054e565b9050801561044a576001600160a01b0382165f908152600860205260409020610411908461056b565b5060405133906001600160a01b0384169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a45b505050565b5f61045960a05190565b9050808211811580610469575080155b6104865760405163eacbf0d160e01b815260040160405180910390fd5b6104a78484600160405180602001604052805f81525061057660201b60201c565b50505050565b6104c45f516020615d5c5f395f51905f525f6105f5565b6104cd8161065a565b5f6104e45f516020615d5c5f395f51905f5261067a565b90505f5b815181101561044a575f8282815181106105045761050461137d565b60200260200101519050836001600160a01b0316816001600160a01b03160361052d5750610546565b6105445f516020615d5c5f395f51905f5282610693565b505b6001016104e8565b5f610562836001600160a01b038416610710565b90505b92915050565b5f6105628383610710565b6001600160a01b03841661059d57604051630d2d5ec360e41b815260040160405180910390fd5b6105aa5f8585858561075c565b6105b75f85858585610769565b5f335f8686856040516020016105d1959493929190611391565b60408051601f1981840301815291905290506105ee8584836108a8565b5050505050565b816106135760405163d0dc904b60e01b815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6106715f516020615d7c5f395f51905f525f6105f5565b61032b816109ab565b5f818152600760205260409020606090610565906109cb565b5f8281526007602052604081206106aa90836109de565b9050801561044a576001600160a01b0382165f9081526008602052604090206106d390846109f2565b5060405133906001600160a01b0384169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f81815260018301602052604081205461075557508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610565565b505f610565565b6105ee85858585856109fd565b6001600160a01b038516610793578260025f82825461078891906113df565b9091555061080e9050565b6001600160a01b0385165f90815260036020526040902054808685808310156107ed576040516308d4794960e01b815260048101939093526001600160a01b03909116602483015260448201526064015b60405180910390fd5b5050506001600160a01b0386165f9081526003602052604090209084900390555b6001600160a01b03841661082a57600280548490039055610848565b6001600160a01b0384165f9081526003602052604090208054840190555b836001600160a01b0316856001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6868686604051610899939291906113f2565b60405180910390a45050505050565b6108b983631aed5a8560e21b610a17565b1561094e57604051631aed5a8560e21b81526001600160a01b03841690636bb56a149061090c907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c90859060040161141b565b5f604051808303815f875af1158015610927573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526104a7919081019061143b565b8161044a576001600160a01b0383163b15610987576040516353047ddb60e11b81526001600160a01b03841660048201526024016107e4565b6040516309b091fd60e21b81526001600160a01b03841660048201526024016107e4565b6109c25f516020615d9c5f395f51905f525f6105f5565b61032b81610a9d565b60605f6109d783610abd565b9392505050565b5f610562836001600160a01b038416610b16565b5f6105628383610b16565b610a0a8585858585610bf9565b6105ee8585858585610c13565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b17815282515f9392849283928392918391908a617530fa92503d91505f519050828015610a87575060208210155b8015610a9257505f81115b979650505050505050565b610ab45f516020615dbc5f395f51905f525f6105f5565b61032b81610c34565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610b0a57602002820191905f5260205f20905b815481526020019060010190808311610af6575b50505050509050919050565b5f8181526001830160205260408120548015610bf0575f610b3860018361147f565b85549091505f90610b4b9060019061147f565b9050818114610baa575f865f018281548110610b6957610b6961137d565b905f5260205f200154905080875f018481548110610b8957610b8961137d565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610bbb57610bbb611492565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610565565b5f915050610565565b610c0284610cc4565b6105ee576105ee8585858585610d44565b610c208585858585610da5565b6105ee85858585856001600160e01b038616565b5f546001600160a01b0316610c488261032e565b6001600160a01b0381165f908152600860205260408120610c68906109cb565b90505f5b81518110156104a7575f828281518110610c8857610c8861137d565b60200260200101519050610ca2818561069360201b60201c565b6001600160a01b03851615610cbb57610cbb81866103d1565b50600101610c6c565b5f80356001600160e01b031916633d7ec2c360e21b148015610cf25750610cf2600c54610100900460ff1690565b8015610d105750610d105f516020615d5c5f395f51905f5233610dbf565b801561056557505f546001600160a01b038381169116148061056557506105655f516020615d5c5f395f51905f5283610dbf565b6001600160a01b0385161580610d6157506001600160a01b038416155b6105ee57610d7c5f516020615d7c5f395f51905f5286610dbf565b6105ee57610d88610dca565b6105ee5760405163103bf34360e11b815260040160405180910390fd5b610dae84610cc4565b6105ee576105ee8585858585610e51565b5f6105628383610f5e565b600c545f9060ff16610ddc5750600190565b600a54600b54901580159115159082610df3575080155b15610e015760019250505090565b81158015610e0c5750805b15610e1d5742600b54109250505090565b818015610e28575080155b15610e395742600a54119250505090565b42600a541180610e4a575042600b54105b9250505090565b836001600160a01b0316856001600160a01b031603156105ee576001600160a01b0384161580610e8b57506001600160a01b03841661dead145b6105ee57610ea65f516020615d9c5f395f51905f5285610dbf565b6105ee575f610eb460c05190565b905080151580610ec55750506105ee565b8185610ee5886001600160a01b03165f9081526003602052604090205490565b610eef91906113df565b11158686610f11826001600160a01b03165f9081526003602052604090205490565b8590919293610f515760405163475ceea960e11b81526001600160a01b0390941660048501526024840192909252604483015260648201526084016107e4565b5050505050505050505050565b5f82815260076020526040812061056290836001600160a01b0381165f9081526001830160205260408120541515610562565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715610fc757610fc7610f91565b60405290565b5f806001600160401b03841115610fe657610fe6610f91565b50604051601f19601f85018116603f011681018181106001600160401b038211171561101457611014610f91565b60405283815290508082840185101561102b575f5ffd5b8383602083015e5f60208583010152509392505050565b5f82601f830112611051575f5ffd5b61056283835160208501610fcd565b8051801515811461106f575f5ffd5b919050565b5f60408284031215611084575f5ffd5b61108c610fa5565b905061109782611060565b815260209182015191810191909152919050565b5f604082840312156110bb575f5ffd5b6110c3610fa5565b825181526020928301519281019290925250919050565b5f602082840312156110ea575f5ffd5b604051602081016001600160401b038111828210171561110c5761110c610f91565b60405290508061111b83611060565b905292915050565b5f5f5f5f5f5f5f5f5f6101808a8c03121561113c575f5ffd5b89516001600160401b03811115611151575f5ffd5b61115d8c828d01611042565b60208c0151909a5090506001600160401b0381111561117a575f5ffd5b6111868c828d01611042565b60408c015190995090506001600160a01b03811681146111a4575f5ffd5b60608b015190975095506111ba60808b01611060565b94506111c98b60a08c01611074565b93506111d88b60e08c016110ab565b92506111e88b6101208c016110ab565b91506111f88b6101608c016110da565b90509295985092959850929598565b600181811c9082168061121b57607f821691505b60208210810361123957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561044a57805f5260205f20601f840160051c810160208510156112645750805b601f840160051c820191505b818110156105ee575f8155600101611270565b81516001600160401b0381111561129c5761129c610f91565b6112b0816112aa8454611207565b8461123f565b6020601f8211600181146112e2575f83156112cb5750848201515b5f19600385901b1c1916600184901b1784556105ee565b5f84815260208120601f198516915b8281101561131157878501518255602094850194600190920191016112f1565b508482101561132e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610562602083018461133d565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0386811682528581166020830152841660408201526060810183905260a0608082018190525f90610a929083018461133d565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610565576105656113cb565b8381528215156020820152606060408201525f611412606083018461133d565b95945050505050565b828152604060208201525f611433604083018461133d565b949350505050565b5f6020828403121561144b575f5ffd5b81516001600160401b03811115611460575f5ffd5b8201601f81018413611470575f5ffd5b61143384825160208401610fcd565b81810381811115610565576105656113cb565b634e487b7160e01b5f52603160045260245ffd5b60805160a05160c0516148856114d75f395f8181610988015261374e01525f6111f401525f610fe001526148855ff3fe60806040526004361061032c575f3560e01c806378381670116101a4578063a3246ad3116100eb578063d547741f11610094578063e6fc60981161006e578063e6fc609814610a3c578063ecff3a0c14610a51578063f2fde38b14610a6a578063f5fb0b0c14610a89576103b7565b8063d547741f146109df578063d72fc29a146109fe578063dedff9c614610a1d576103b7565b8063ca15c873116100c5578063ca15c8731461095b578063d1ca01881461097a578063d5391393146109ac576103b7565b8063a3246ad3146108fc578063b49506fd14610928578063c282ca7814610947576103b7565b80639010d07c1161014d578063979024211161012757806397902421146108ba5780639e045773146108cd578063a217fddf146108e9576103b7565b80639010d07c1461084957806391d14854146108685780639418775314610887576103b7565b80637f23690c1161017e5780637f23690c146107d75780638da5cb5b146107ea5780638fb0573014610834576103b7565b806378381670146107715780637c4acabf146107905780637e5cd5c1146107c3576103b7565b806336568abe1161027357806365aeaa951161021c57806370a08231116101f657806370a08231146106de578063715018a61461071f5780637580d92014610733578063760d9bba14610752576103b7565b806365aeaa951461067f5780636963d4381461069e578063696fd68c146106ca576103b7565b806346b45af71161024d57806346b45af71461062657806352058d8a1461063f57806354f6127f14610653576103b7565b806336568abe146105c957806344d17187146105e857806345e14c4614610607576103b7565b80632bc1da82116102d55780632f2ff15d116102af5780632f2ff15d1461056557806330d0dc3714610584578063313ce567146105a3576103b7565b80632bc1da82146104fb5780632d7667c91461051a5780632de9480714610539576103b7565b80631e4e0091116103065780631e4e00911461049b5780632121dc75146104bc578063248a9ca3146104d0576103b7565b806301ffc9a71461041257806312318ac41461044657806318160ddd14610487576103b7565b366103b757345f03610385576040517fe5099ee300000000000000000000000000000000000000000000000000000000815260040161037c9060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f366060828260048110156103fa576040517fe5099ee300000000000000000000000000000000000000000000000000000000815260040161037c92919061397a565b50506104068383610aa8565b80519350602001915050f35b34801561041d575f5ffd5b5061043161042c3660046139c6565b610c3d565b60405190151581526020015b60405180910390f35b348015610451575f5ffd5b506104797fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b065981565b60405190815260200161043d565b348015610492575f5ffd5b50600254610479565b3480156104a6575f5ffd5b506104ba6104b5366004613a05565b610c47565b005b3480156104c7575f5ffd5b50610431610c60565b3480156104db575f5ffd5b506104796104ea366004613a25565b5f9081526006602052604090205490565b348015610506575f5ffd5b506104ba610515366004613b77565b610ce7565b348015610525575f5ffd5b506104ba610534366004613da4565b610d9a565b348015610544575f5ffd5b50610558610553366004613e87565b610e9f565b60405161043d9190613ea0565b348015610570575f5ffd5b506104ba61057f366004613ee2565b610ecf565b34801561058f575f5ffd5b506104ba61059e366004613f0c565b610ef0565b3480156105ae575f5ffd5b506105b7610fdd565b60405160ff909116815260200161043d565b3480156105d4575f5ffd5b506104ba6105e3366004613ee2565b61100e565b3480156105f3575f5ffd5b506104ba610602366004613b77565b6110ea565b348015610612575f5ffd5b506104ba610621366004613a05565b61111d565b348015610631575f5ffd5b506009546104319060ff1681565b34801561064a575f5ffd5b506104796111de565b34801561065e575f5ffd5b5061067261066d366004613a25565b611216565b60405161043d9190613fc3565b34801561068a575f5ffd5b50610479610699366004613fd5565b611221565b3480156106a9575f5ffd5b506106bd6106b8366004613ffd565b6112b8565b60405161043d919061406e565b3480156106d5575f5ffd5b506104ba611403565b3480156106e9575f5ffd5b506104796106f8366004613e87565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b34801561072a575f5ffd5b506104ba6114a6565b34801561073e575f5ffd5b506104ba61074d3660046140ef565b6114b9565b34801561075d575f5ffd5b506104ba61076c366004614120565b6114ef565b34801561077c575f5ffd5b506104ba61078b366004614187565b611524565b34801561079b575f5ffd5b506104797fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3081565b3480156107ce575f5ffd5b506104ba61164e565b6104ba6107e53660046141d3565b6116e6565b3480156107f5575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161043d565b34801561083f575f5ffd5b50610479600b5481565b348015610854575f5ffd5b5061080f610863366004613a05565b611730565b348015610873575f5ffd5b50610431610882366004613ee2565b61174e565b348015610892575f5ffd5b506104797f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad81565b6104ba6108c8366004614217565b611759565b3480156108d8575f5ffd5b50600c54610100900460ff16610431565b3480156108f4575f5ffd5b506104795f81565b348015610907575f5ffd5b5061091b610916366004613a25565b6117a3565b60405161043d9190614272565b348015610933575f5ffd5b506104ba610942366004613b77565b6117bc565b348015610952575f5ffd5b506104ba6117fb565b348015610966575f5ffd5b50610479610975366004613a25565b611898565b348015610985575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610479565b3480156109b7575f5ffd5b506104797f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156109ea575f5ffd5b506104ba6109f9366004613ee2565b6118ae565b348015610a09575f5ffd5b5061091b610a18366004613e87565b611951565b348015610a28575f5ffd5b506106bd610a373660046142bf565b611981565b348015610a47575f5ffd5b50610479600a5481565b348015610a5c575f5ffd5b50600c546104319060ff1681565b348015610a75575f5ffd5b506104ba610a84366004613e87565b611a2b565b348015610a94575f5ffd5b506104ba610aa3366004614187565b611ae2565b60605f610ad75f357fffffffff0000000000000000000000000000000000000000000000000000000016611c22565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff8216610b70576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161037c565b505f5f8273ffffffffffffffffffffffffffffffffffffffff163487873334604051602001610ba294939291906142f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bda91614334565b5f6040518083038185875af1925050503d805f8114610c14576040519150601f19603f3d011682016040523d82523d5f602084013e610c19565b606091505b50915091508115610c2e579250610c37915050565b80518060208301fd5b92915050565b5f610c3782611ce0565b5f610c5181611cf9565b610c5b8383611d03565b505050565b600c545f9060ff16610c725750600190565b600a54600b54901580159115159082610c89575080155b15610c975760019250505090565b81158015610ca25750805b15610cb35742600b54109250505090565b818015610cbe575080155b15610ccf5742600a54119250505090565b42600a541180610ce0575042600b54105b9250505090565b5f610cf28433611221565b90508381610d45576040517fcba6e97700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161037c565b505f610d518483614377565b9050610d61338683600187611d81565b5f338285604051602001610d779392919061438a565b6040516020818303038152906040529050610d928682611fa5565b505050505050565b8451845181148015610dac5750835181145b8015610db85750825181145b8015610dc45750815181145b610dfa576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610e9657610e8e878281518110610e1957610e196143c7565b6020026020010151878381518110610e3357610e336143c7565b6020026020010151878481518110610e4d57610e4d6143c7565b6020026020010151878581518110610e6757610e676143c7565b6020026020010151878681518110610e8157610e816143c7565b60200260200101516114ef565b600101610dfc565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600860205260409020606090610c3790611fd0565b5f82815260066020526040902054610ee681611cf9565b610c5b8383611fdc565b3373ffffffffffffffffffffffffffffffffffffffff84161480610f2957503373ffffffffffffffffffffffffffffffffffffffff8516145b338486909192610f8e576040517f1a525b3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529183166024830152909116604482015260640161037c565b505050610f9e83855f8585611d81565b8115610fd7575f835f83604051602001610fba939291906143f4565b6040516020818303038152906040529050610fd58582611fa5565b505b50505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006110095750601290565b505f90565b73ffffffffffffffffffffffffffffffffffffffff8116331461105d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115801561108157505f5473ffffffffffffffffffffffffffffffffffffffff1633145b15338390916110da576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b50506110e68233612073565b5050565b3373ffffffffffffffffffffffffffffffffffffffff8416146111125761111233848461210a565b610c5b8383836121d1565b61112561227a565b600c5460ff16611161576040517f2561c3fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158061116e5750818110155b6111a4576040517fd41cc2a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a829055600b819055604051819083907f938e6c55d25d181f86d200da26970f962ec97adb02dfa0452811fb9073573ebe905f90a35050565b6009545f9060ff166111f1575060025490565b507f000000000000000000000000000000000000000000000000000000000000000090565b6060610c37826122fa565b5f8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611280575073ffffffffffffffffffffffffffffffffffffffff81165f90815260036020526040902054610c37565b5073ffffffffffffffffffffffffffffffffffffffff8082165f90815260056020908152604080832093861683529290522054610c37565b60608167ffffffffffffffff8111156112d3576112d3613a64565b60405190808252806020026020018201604052801561130657816020015b60608152602001906001900390816112f15790505b5090505f5b828110156113fc575f8030868685818110611328576113286143c7565b905060200281019061133a919061442b565b604051611348929190614493565b5f60405180830381855af49150503d805f8114611380576040519150601f19603f3d011682016040523d82523d5f602084013e611385565b606091505b5091509150816113d45780511561139f5780518082602001fd5b6040517fb774c2840000000000000000000000000000000000000000000000000000000081526004810184905260240161037c565b808484815181106113e7576113e76143c7565b6020908102919091010152505060010161130b565b5092915050565b61140b61227a565b600c5460ff16611447576040517fc99ae81400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555f600a819055600b81905560405181907f938e6c55d25d181f86d200da26970f962ec97adb02dfa0452811fb9073573ebe908290a3565b6114ae61227a565b6114b75f612399565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66114e381611cf9565b610fd5858585856123a2565b3373ffffffffffffffffffffffffffffffffffffffff8616146115175761151733868561210a565b610fd585858585856123ea565b3373ffffffffffffffffffffffffffffffffffffffff8416148061155d57503373ffffffffffffffffffffffffffffffffffffffff8516145b3384869091926115c2576040517f98ce294500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529183166024830152909116604482015260640161037c565b5050505f6115d08585611221565b90508281101561160c576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810361161d858783600187611d81565b5f8582856040516020016116339392919061438a565b6040516020818303038152906040529050610e968782611fa5565b61165661227a565b60095460ff16611692576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b6116ee61227a565b3415611726576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e682826124c1565b5f8281526007602052604081206117479083612620565b9392505050565b5f611747838361262b565b61176161227a565b3415611799576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e68282612642565b5f818152600760205260409020606090610c3790611fd0565b6117ca338484600185611d81565b5f3383836040516020016117e09392919061438a565b6040516020818303038152906040529050610fd78482611fa5565b61180361227a565b600c54610100900460ff16611844576040517f3aeb5e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690556040515f907f67e25b3c9018f015458c04997debf5769d7c1727a0918c43acfe4daf80ac7017908290a2565b5f818152600760205260408120610c3790612706565b5f828152600660205260409020546118c581611cf9565b821580156118ec57505f5473ffffffffffffffffffffffffffffffffffffffff8381169116145b1582849091611945576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5050610c5b8383612073565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600460205260409020606090610c3790611fd0565b6060815167ffffffffffffffff81111561199d5761199d613a64565b6040519080825280602002602001820160405280156119d057816020015b60608152602001906001900390816119bb5790505b5090505f5b8251811015611a2557611a008382815181106119f3576119f36143c7565b60200260200101516122fa565b828281518110611a1257611a126143c7565b60209081029190910101526001016119d5565b50919050565b611a3361227a565b73ffffffffffffffffffffffffffffffffffffffff8116611ad6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161037c565b611adf81612399565b50565b7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee30611b0c81611cf9565b600c54610100900460ff16611b4d576040517f3aeb5e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff85811691161480611b9a5750611b9a7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee308561174e565b84907fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3090611c12576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5050610fd58585856001866123ea565b5f8080611c717fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000861661270f565b90505f611c7d826122fa565b9050805160141480611c8e57508051155b8190611cc7576040517f42bfe79f00000000000000000000000000000000000000000000000000000000815260040161037c9190613fc3565b50611cd1816144a2565b60601c95600195509350505050565b5f611cea82612792565b80610c375750610c3782612875565b611adf81336128d9565b81611d3a576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b73ffffffffffffffffffffffffffffffffffffffff8416611dce576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e33576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f9081526005602090815260408083209388168352929052208390558215611f075773ffffffffffffffffffffffffffffffffffffffff85165f908152600460205260409020611e9b908561293b565b50828573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d84604051611efa9190613fc3565b60405180910390a4610fd5565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600460205260409020611f35908561295c565b508115158573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd416784604051611f969190613fc3565b60405180910390a45050505050565b6110e6827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361297d565b60605f61174783612a76565b5f828152600760205260408120611ff3908361293b565b90508015610c5b5773ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090206120299084612ace565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f82815260076020526040812061208a908361295c565b90508015610c5b5773ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090206120c09084612ad9565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b73ffffffffffffffffffffffffffffffffffffffff8083165f9081526005602090815260408083209387168352929052205480158061214857508082115b156121ad576040517ff3a6b69100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015260248201839052851660448201526064810183905260840161037c565b610fd783856121bc858561450e565b5f60405180602001604052805f815250611d81565b73ffffffffffffffffffffffffffffffffffffffff831661221e576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222b835f845f85612ae4565b612238835f845f85612af1565b612245835f845f85610fd5565b5f33845f858560405160200161225f959493929190614521565b6040516020818303038152906040529050610fd78482612caa565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037c565b5f8181526001602052604090208054606091906123169061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546123429061458d565b801561238d5780601f106123645761010080835404028352916020019161238d565b820191905f5260205f20905b81548152906001019060200180831161237057829003601f168201915b50505050509050919050565b611adf81612cd5565b60095460ff166123de576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd784848484612dc9565b73ffffffffffffffffffffffffffffffffffffffff851615801590612424575073ffffffffffffffffffffffffffffffffffffffff841615155b61245a576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124678585858585612ae4565b6124748585858585612af1565b6124818585858585610fd5565b5f338686868560405160200161249b959493929190614521565b60405160208183030381529060405290506124b68682612caa565b610d92858483612de1565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f820161251a576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201612573576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d82016125cc576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526001602052604090206125e3828261461c565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516126149190613fc3565b60405180910390a25050565b5f6117478383612f3a565b5f8281526007602052604081206117479083612f60565b805182511461267d576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f036126b7576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8251811015610c5b576126fe8382815181106126d7576126d76143c7565b60200260200101518383815181106126f1576126f16143c7565b60200260200101516124c1565b6001016126b9565b5f610c37825490565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201525f602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c8301529182910160405160208183030381529060405290508061278a90614733565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061282457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b80610c3757507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fc52d60080000000000000000000000000000000000000000000000000000000014806128ca57506128ca82612f8e565b80610c375750610c3782612fe3565b6128e3828261262b565b81839091610fd7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5f6117478373ffffffffffffffffffffffffffffffffffffffff841661303e565b5f6117478373ffffffffffffffffffffffffffffffffffffffff841661308a565b6129bd73ffffffffffffffffffffffffffffffffffffffff84167f6bb56a140000000000000000000000000000000000000000000000000000000061316d565b15610c5b576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a169085908590600401614775565b5f604051808303815f875af1158015612a31573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fd7919081019061478d565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561238d57602002820191905f5260205f20905b815481526020019060010190808311612aaf5750505050509050919050565b5f611747838361303e565b5f611747838361308a565b610fd58585858585613239565b73ffffffffffffffffffffffffffffffffffffffff8516612b28578260025f828254612b1d9190614377565b90915550612bde9050565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526003602052604090205480868580831015612bb0576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff9091166024830152604482015260640161037c565b50505073ffffffffffffffffffffffffffffffffffffffff86165f9081526003602052604090209084900390555b73ffffffffffffffffffffffffffffffffffffffff8416612c0757600280548490039055612c32565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604090208054840190555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6868686604051611f9693929190614802565b6110e6827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea8361297d565b612cff7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee305f611d03565b612d0881613253565b5f612d327fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee306117a3565b90505f5b8151811015610c5b575f828281518110612d5257612d526143c7565b602002602001015190508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d955750612dc1565b612dbf7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3082612073565b505b600101612d36565b612dd584848484613286565b610fd7848484846132ea565b612e0b837f6bb56a140000000000000000000000000000000000000000000000000000000061316d565b15612e84576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a16907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c908590600401614775565b81610c5b5773ffffffffffffffffffffffffffffffffffffffff83163b15612ef0576040517fa608fbb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161037c565b6040517f26c247f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161037c565b5f825f018281548110612f4f57612f4f6143c7565b905f5260205f200154905092915050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001830160205260408120541515611747565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b000000000000000000000000000000000000000000000000000000001480610c375750610c3782613332565b5f8061300e7f01ffc9a700000000000000000000000000000000000000000000000000000000611c22565b50905073ffffffffffffffffffffffffffffffffffffffff811661303457505f92915050565b611747818461316d565b5f81815260018301602052604081205461308357508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610c37565b505f610c37565b5f8181526001830160205260408120548015613164575f6130ac60018361450e565b85549091505f906130bf9060019061450e565b905081811461311e575f865f0182815481106130dd576130dd6143c7565b905f5260205f200154905080875f0184815481106130fd576130fd6143c7565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061312f5761312f614822565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610c37565b5f915050610c37565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a70000000000000000000000000000000000000000000000000000000017815282515f9392849283928392918391908a617530fa92503d91505f519050828015613223575060208210155b801561322e57505f81115b979650505050505050565b61324685858585856133c8565b610fd585858585856133e2565b61327d7fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b06595f611d03565b611adf816133fc565b61328e6111de565b15806132b4575061329d6111de565b836132a760025490565b6132b19190614377565b11155b610fd7576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff16613326576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd78484848461342f565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f629aa694000000000000000000000000000000000000000000000000000000001480610c3757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610c37565b6133d1846134d9565b610fd557610fd585858585856135b8565b6133ef858585858561365f565b610fd58585858585610fd5565b6134267f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad5f611d03565b611adf81613679565b73ffffffffffffffffffffffffffffffffffffffff841661347c576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134895f85858585612ae4565b6134965f85858585612af1565b6134a35f85858585610fd5565b5f335f8686856040516020016134bd959493929190614521565b6040516020818303038152906040529050610fd5858483612de1565b5f80357fffffffff00000000000000000000000000000000000000000000000000000000167ff5fb0b0c000000000000000000000000000000000000000000000000000000001480156135335750600c54610100900460ff165b801561356457506135647fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee303361174e565b8015610c3757505f5473ffffffffffffffffffffffffffffffffffffffff83811691161480610c375750610c377fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee308361174e565b73ffffffffffffffffffffffffffffffffffffffff851615806135ef575073ffffffffffffffffffffffffffffffffffffffff8416155b610fd55761361d7fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b06598661174e565b610fd557613629610c60565b610fd5576040517f2077e68600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613668846134d9565b610fd557610fd585858585856136ac565b6136a37f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f611d03565b611adf81613855565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160315610fd55773ffffffffffffffffffffffffffffffffffffffff8416158061371a575073ffffffffffffffffffffffffffffffffffffffff841661dead145b610fd5576137487f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad8561174e565b610fd5577f00000000000000000000000000000000000000000000000000000000000000008015158061377c575050610fd5565b81856137a98873ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b6137b39190614377565b111586866137e28973ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b8590919293613848576040517f8eb9dd5200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909416600485015260248401929092526044830152606482015260840161037c565b5050505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1661387682613906565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526008602052604081206138a390611fd0565b90505f5b8151811015610fd7575f8282815181106138c3576138c36143c7565b602002602001015190506138d78185612073565b73ffffffffffffffffffffffffffffffffffffffff8516156138fd576138fd8186611fdc565b506001016138a7565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f602082840312156139d6575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611747575f5ffd5b5f5f60408385031215613a16575f5ffd5b50508035926020909101359150565b5f60208284031215613a35575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613a5f575f5ffd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ad857613ad8613a64565b604052919050565b5f67ffffffffffffffff821115613af957613af9613a64565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b34575f5ffd5b8135613b47613b4282613ae0565b613a91565b818152846020838601011115613b5b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215613b89575f5ffd5b613b9284613a3c565b925060208401359150604084013567ffffffffffffffff811115613bb4575f5ffd5b613bc086828701613b25565b9150509250925092565b5f67ffffffffffffffff821115613be357613be3613a64565b5060051b60200190565b5f82601f830112613bfc575f5ffd5b8135613c0a613b4282613bca565b8082825260208201915060208360051b860101925085831115613c2b575f5ffd5b602085015b83811015613c4f57613c4181613a3c565b835260209283019201613c30565b5095945050505050565b5f82601f830112613c68575f5ffd5b8135613c76613b4282613bca565b8082825260208201915060208360051b860101925085831115613c97575f5ffd5b602085015b83811015613c4f578035835260209283019201613c9c565b80358015158114613a5f575f5ffd5b5f82601f830112613cd2575f5ffd5b8135613ce0613b4282613bca565b8082825260208201915060208360051b860101925085831115613d01575f5ffd5b602085015b83811015613c4f57613d1781613cb4565b835260209283019201613d06565b5f82601f830112613d34575f5ffd5b8135613d42613b4282613bca565b8082825260208201915060208360051b860101925085831115613d63575f5ffd5b602085015b83811015613c4f57803567ffffffffffffffff811115613d86575f5ffd5b613d95886020838a0101613b25565b84525060209283019201613d68565b5f5f5f5f5f60a08688031215613db8575f5ffd5b853567ffffffffffffffff811115613dce575f5ffd5b613dda88828901613bed565b955050602086013567ffffffffffffffff811115613df6575f5ffd5b613e0288828901613bed565b945050604086013567ffffffffffffffff811115613e1e575f5ffd5b613e2a88828901613c59565b935050606086013567ffffffffffffffff811115613e46575f5ffd5b613e5288828901613cc3565b925050608086013567ffffffffffffffff811115613e6e575f5ffd5b613e7a88828901613d25565b9150509295509295909350565b5f60208284031215613e97575f5ffd5b61174782613a3c565b602080825282518282018190525f918401906040840190835b81811015613ed7578351835260209384019390920191600101613eb9565b509095945050505050565b5f5f60408385031215613ef3575f5ffd5b82359150613f0360208401613a3c565b90509250929050565b5f5f5f5f60808587031215613f1f575f5ffd5b613f2885613a3c565b9350613f3660208601613a3c565b9250613f4460408601613cb4565b9150606085013567ffffffffffffffff811115613f5f575f5ffd5b613f6b87828801613b25565b91505092959194509250565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6117476020830184613f77565b5f5f60408385031215613fe6575f5ffd5b613fef83613a3c565b9150613f0360208401613a3c565b5f5f6020838503121561400e575f5ffd5b823567ffffffffffffffff811115614024575f5ffd5b8301601f81018513614034575f5ffd5b803567ffffffffffffffff81111561404a575f5ffd5b8560208260051b840101111561405e575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156140e3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526140ce858351613f77565b94506020938401939190910190600101614094565b50929695505050505050565b5f5f5f5f60808587031215614102575f5ffd5b61410b85613a3c565b935060208501359250613f4460408601613cb4565b5f5f5f5f5f60a08688031215614134575f5ffd5b61413d86613a3c565b945061414b60208701613a3c565b93506040860135925061416060608701613cb4565b9150608086013567ffffffffffffffff81111561417b575f5ffd5b613e7a88828901613b25565b5f5f5f5f6080858703121561419a575f5ffd5b6141a385613a3c565b93506141b160208601613a3c565b925060408501359150606085013567ffffffffffffffff811115613f5f575f5ffd5b5f5f604083850312156141e4575f5ffd5b82359150602083013567ffffffffffffffff811115614201575f5ffd5b61420d85828601613b25565b9150509250929050565b5f5f60408385031215614228575f5ffd5b823567ffffffffffffffff81111561423e575f5ffd5b61424a85828601613c59565b925050602083013567ffffffffffffffff811115614266575f5ffd5b61420d85828601613d25565b602080825282518282018190525f918401906040840190835b81811015613ed757835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161428b565b5f602082840312156142cf575f5ffd5b813567ffffffffffffffff8111156142e5575f5ffd5b61278a84828501613c59565b8385823760609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014810191909152603401919050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c3757610c3761434a565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f6143be6060830184613f77565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8416815260ff83166020820152606060408201525f6143be6060830184613f77565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445e575f5ffd5b83018035915067ffffffffffffffff821115614478575f5ffd5b60200191503681900382131561448c575f5ffd5b9250929050565b818382375f9101908152919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015614507577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b81810381811115610c3757610c3761434a565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61322e60a0830184613f77565b600181811c908216806145a157607f821691505b602082108103611a25577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b601f821115610c5b57805f5260205f20601f840160051c810160208510156145fd5750805b601f840160051c820191505b81811015610fd5575f8155600101614609565b815167ffffffffffffffff81111561463657614636613a64565b61464a81614644845461458d565b846145d8565b6020601f82116001811461469b575f83156146655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610fd5565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156146e857878501518255602094850194600190920191016146c8565b508482101561472457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80516020808301519190811015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b828152604060208201525f61278a6040830184613f77565b5f6020828403121561479d575f5ffd5b815167ffffffffffffffff8111156147b3575f5ffd5b8201601f810184136147c3575f5ffd5b80516147d1613b4282613ae0565b8181528560208385010111156147e5575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8381528215156020820152606060408201525f6143be6060830184613f77565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212205fcc5570e047dcaadee5d6b940ff69ae25be9692ed59de3ac45ab493e2b57ebc64736f6c634300081c0033ce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee30b4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b0659975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
  "deployedBytecode": "0x60806040526004361061032c575f3560e01c806378381670116101a4578063a3246ad3116100eb578063d547741f11610094578063e6fc60981161006e578063e6fc609814610a3c578063ecff3a0c14610a51578063f2fde38b14610a6a578063f5fb0b0c14610a89576103b7565b8063d547741f146109df578063d72fc29a146109fe578063dedff9c614610a1d576103b7565b8063ca15c873116100c5578063ca15c8731461095b578063d1ca01881461097a578063d5391393146109ac576103b7565b8063a3246ad3146108fc578063b49506fd14610928578063c282ca7814610947576103b7565b80639010d07c1161014d578063979024211161012757806397902421146108ba5780639e045773146108cd578063a217fddf146108e9576103b7565b80639010d07c1461084957806391d14854146108685780639418775314610887576103b7565b80637f23690c1161017e5780637f23690c146107d75780638da5cb5b146107ea5780638fb0573014610834576103b7565b806378381670146107715780637c4acabf146107905780637e5cd5c1146107c3576103b7565b806336568abe1161027357806365aeaa951161021c57806370a08231116101f657806370a08231146106de578063715018a61461071f5780637580d92014610733578063760d9bba14610752576103b7565b806365aeaa951461067f5780636963d4381461069e578063696fd68c146106ca576103b7565b806346b45af71161024d57806346b45af71461062657806352058d8a1461063f57806354f6127f14610653576103b7565b806336568abe146105c957806344d17187146105e857806345e14c4614610607576103b7565b80632bc1da82116102d55780632f2ff15d116102af5780632f2ff15d1461056557806330d0dc3714610584578063313ce567146105a3576103b7565b80632bc1da82146104fb5780632d7667c91461051a5780632de9480714610539576103b7565b80631e4e0091116103065780631e4e00911461049b5780632121dc75146104bc578063248a9ca3146104d0576103b7565b806301ffc9a71461041257806312318ac41461044657806318160ddd14610487576103b7565b366103b757345f03610385576040517fe5099ee300000000000000000000000000000000000000000000000000000000815260040161037c9060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f366060828260048110156103fa576040517fe5099ee300000000000000000000000000000000000000000000000000000000815260040161037c92919061397a565b50506104068383610aa8565b80519350602001915050f35b34801561041d575f5ffd5b5061043161042c3660046139c6565b610c3d565b60405190151581526020015b60405180910390f35b348015610451575f5ffd5b506104797fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b065981565b60405190815260200161043d565b348015610492575f5ffd5b50600254610479565b3480156104a6575f5ffd5b506104ba6104b5366004613a05565b610c47565b005b3480156104c7575f5ffd5b50610431610c60565b3480156104db575f5ffd5b506104796104ea366004613a25565b5f9081526006602052604090205490565b348015610506575f5ffd5b506104ba610515366004613b77565b610ce7565b348015610525575f5ffd5b506104ba610534366004613da4565b610d9a565b348015610544575f5ffd5b50610558610553366004613e87565b610e9f565b60405161043d9190613ea0565b348015610570575f5ffd5b506104ba61057f366004613ee2565b610ecf565b34801561058f575f5ffd5b506104ba61059e366004613f0c565b610ef0565b3480156105ae575f5ffd5b506105b7610fdd565b60405160ff909116815260200161043d565b3480156105d4575f5ffd5b506104ba6105e3366004613ee2565b61100e565b3480156105f3575f5ffd5b506104ba610602366004613b77565b6110ea565b348015610612575f5ffd5b506104ba610621366004613a05565b61111d565b348015610631575f5ffd5b506009546104319060ff1681565b34801561064a575f5ffd5b506104796111de565b34801561065e575f5ffd5b5061067261066d366004613a25565b611216565b60405161043d9190613fc3565b34801561068a575f5ffd5b50610479610699366004613fd5565b611221565b3480156106a9575f5ffd5b506106bd6106b8366004613ffd565b6112b8565b60405161043d919061406e565b3480156106d5575f5ffd5b506104ba611403565b3480156106e9575f5ffd5b506104796106f8366004613e87565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b34801561072a575f5ffd5b506104ba6114a6565b34801561073e575f5ffd5b506104ba61074d3660046140ef565b6114b9565b34801561075d575f5ffd5b506104ba61076c366004614120565b6114ef565b34801561077c575f5ffd5b506104ba61078b366004614187565b611524565b34801561079b575f5ffd5b506104797fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3081565b3480156107ce575f5ffd5b506104ba61164e565b6104ba6107e53660046141d3565b6116e6565b3480156107f5575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161043d565b34801561083f575f5ffd5b50610479600b5481565b348015610854575f5ffd5b5061080f610863366004613a05565b611730565b348015610873575f5ffd5b50610431610882366004613ee2565b61174e565b348015610892575f5ffd5b506104797f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad81565b6104ba6108c8366004614217565b611759565b3480156108d8575f5ffd5b50600c54610100900460ff16610431565b3480156108f4575f5ffd5b506104795f81565b348015610907575f5ffd5b5061091b610916366004613a25565b6117a3565b60405161043d9190614272565b348015610933575f5ffd5b506104ba610942366004613b77565b6117bc565b348015610952575f5ffd5b506104ba6117fb565b348015610966575f5ffd5b50610479610975366004613a25565b611898565b348015610985575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610479565b3480156109b7575f5ffd5b506104797f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156109ea575f5ffd5b506104ba6109f9366004613ee2565b6118ae565b348015610a09575f5ffd5b5061091b610a18366004613e87565b611951565b348015610a28575f5ffd5b506106bd610a373660046142bf565b611981565b348015610a47575f5ffd5b50610479600a5481565b348015610a5c575f5ffd5b50600c546104319060ff1681565b348015610a75575f5ffd5b506104ba610a84366004613e87565b611a2b565b348015610a94575f5ffd5b506104ba610aa3366004614187565b611ae2565b60605f610ad75f357fffffffff0000000000000000000000000000000000000000000000000000000016611c22565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff8216610b70576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015260240161037c565b505f5f8273ffffffffffffffffffffffffffffffffffffffff163487873334604051602001610ba294939291906142f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bda91614334565b5f6040518083038185875af1925050503d805f8114610c14576040519150601f19603f3d011682016040523d82523d5f602084013e610c19565b606091505b50915091508115610c2e579250610c37915050565b80518060208301fd5b92915050565b5f610c3782611ce0565b5f610c5181611cf9565b610c5b8383611d03565b505050565b600c545f9060ff16610c725750600190565b600a54600b54901580159115159082610c89575080155b15610c975760019250505090565b81158015610ca25750805b15610cb35742600b54109250505090565b818015610cbe575080155b15610ccf5742600a54119250505090565b42600a541180610ce0575042600b54105b9250505090565b5f610cf28433611221565b90508381610d45576040517fcba6e97700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161037c565b505f610d518483614377565b9050610d61338683600187611d81565b5f338285604051602001610d779392919061438a565b6040516020818303038152906040529050610d928682611fa5565b505050505050565b8451845181148015610dac5750835181145b8015610db85750825181145b8015610dc45750815181145b610dfa576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610e9657610e8e878281518110610e1957610e196143c7565b6020026020010151878381518110610e3357610e336143c7565b6020026020010151878481518110610e4d57610e4d6143c7565b6020026020010151878581518110610e6757610e676143c7565b6020026020010151878681518110610e8157610e816143c7565b60200260200101516114ef565b600101610dfc565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600860205260409020606090610c3790611fd0565b5f82815260066020526040902054610ee681611cf9565b610c5b8383611fdc565b3373ffffffffffffffffffffffffffffffffffffffff84161480610f2957503373ffffffffffffffffffffffffffffffffffffffff8516145b338486909192610f8e576040517f1a525b3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529183166024830152909116604482015260640161037c565b505050610f9e83855f8585611d81565b8115610fd7575f835f83604051602001610fba939291906143f4565b6040516020818303038152906040529050610fd58582611fa5565b505b50505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006110095750601290565b505f90565b73ffffffffffffffffffffffffffffffffffffffff8116331461105d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115801561108157505f5473ffffffffffffffffffffffffffffffffffffffff1633145b15338390916110da576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b50506110e68233612073565b5050565b3373ffffffffffffffffffffffffffffffffffffffff8416146111125761111233848461210a565b610c5b8383836121d1565b61112561227a565b600c5460ff16611161576040517f2561c3fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158061116e5750818110155b6111a4576040517fd41cc2a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a829055600b819055604051819083907f938e6c55d25d181f86d200da26970f962ec97adb02dfa0452811fb9073573ebe905f90a35050565b6009545f9060ff166111f1575060025490565b507f000000000000000000000000000000000000000000000000000000000000000090565b6060610c37826122fa565b5f8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611280575073ffffffffffffffffffffffffffffffffffffffff81165f90815260036020526040902054610c37565b5073ffffffffffffffffffffffffffffffffffffffff8082165f90815260056020908152604080832093861683529290522054610c37565b60608167ffffffffffffffff8111156112d3576112d3613a64565b60405190808252806020026020018201604052801561130657816020015b60608152602001906001900390816112f15790505b5090505f5b828110156113fc575f8030868685818110611328576113286143c7565b905060200281019061133a919061442b565b604051611348929190614493565b5f60405180830381855af49150503d805f8114611380576040519150601f19603f3d011682016040523d82523d5f602084013e611385565b606091505b5091509150816113d45780511561139f5780518082602001fd5b6040517fb774c2840000000000000000000000000000000000000000000000000000000081526004810184905260240161037c565b808484815181106113e7576113e76143c7565b6020908102919091010152505060010161130b565b5092915050565b61140b61227a565b600c5460ff16611447576040517fc99ae81400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555f600a819055600b81905560405181907f938e6c55d25d181f86d200da26970f962ec97adb02dfa0452811fb9073573ebe908290a3565b6114ae61227a565b6114b75f612399565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66114e381611cf9565b610fd5858585856123a2565b3373ffffffffffffffffffffffffffffffffffffffff8616146115175761151733868561210a565b610fd585858585856123ea565b3373ffffffffffffffffffffffffffffffffffffffff8416148061155d57503373ffffffffffffffffffffffffffffffffffffffff8516145b3384869091926115c2576040517f98ce294500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529183166024830152909116604482015260640161037c565b5050505f6115d08585611221565b90508281101561160c576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810361161d858783600187611d81565b5f8582856040516020016116339392919061438a565b6040516020818303038152906040529050610e968782611fa5565b61165661227a565b60095460ff16611692576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b6116ee61227a565b3415611726576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e682826124c1565b5f8281526007602052604081206117479083612620565b9392505050565b5f611747838361262b565b61176161227a565b3415611799576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e68282612642565b5f818152600760205260409020606090610c3790611fd0565b6117ca338484600185611d81565b5f3383836040516020016117e09392919061438a565b6040516020818303038152906040529050610fd78482611fa5565b61180361227a565b600c54610100900460ff16611844576040517f3aeb5e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690556040515f907f67e25b3c9018f015458c04997debf5769d7c1727a0918c43acfe4daf80ac7017908290a2565b5f818152600760205260408120610c3790612706565b5f828152600660205260409020546118c581611cf9565b821580156118ec57505f5473ffffffffffffffffffffffffffffffffffffffff8381169116145b1582849091611945576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5050610c5b8383612073565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600460205260409020606090610c3790611fd0565b6060815167ffffffffffffffff81111561199d5761199d613a64565b6040519080825280602002602001820160405280156119d057816020015b60608152602001906001900390816119bb5790505b5090505f5b8251811015611a2557611a008382815181106119f3576119f36143c7565b60200260200101516122fa565b828281518110611a1257611a126143c7565b60209081029190910101526001016119d5565b50919050565b611a3361227a565b73ffffffffffffffffffffffffffffffffffffffff8116611ad6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161037c565b611adf81612399565b50565b7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee30611b0c81611cf9565b600c54610100900460ff16611b4d576040517f3aeb5e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff85811691161480611b9a5750611b9a7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee308561174e565b84907fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3090611c12576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5050610fd58585856001866123ea565b5f8080611c717fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000861661270f565b90505f611c7d826122fa565b9050805160141480611c8e57508051155b8190611cc7576040517f42bfe79f00000000000000000000000000000000000000000000000000000000815260040161037c9190613fc3565b50611cd1816144a2565b60601c95600195509350505050565b5f611cea82612792565b80610c375750610c3782612875565b611adf81336128d9565b81611d3a576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b73ffffffffffffffffffffffffffffffffffffffff8416611dce576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e33576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f9081526005602090815260408083209388168352929052208390558215611f075773ffffffffffffffffffffffffffffffffffffffff85165f908152600460205260409020611e9b908561293b565b50828573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d84604051611efa9190613fc3565b60405180910390a4610fd5565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600460205260409020611f35908561295c565b508115158573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd416784604051611f969190613fc3565b60405180910390a45050505050565b6110e6827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361297d565b60605f61174783612a76565b5f828152600760205260408120611ff3908361293b565b90508015610c5b5773ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090206120299084612ace565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f82815260076020526040812061208a908361295c565b90508015610c5b5773ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090206120c09084612ad9565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b73ffffffffffffffffffffffffffffffffffffffff8083165f9081526005602090815260408083209387168352929052205480158061214857508082115b156121ad576040517ff3a6b69100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015260248201839052851660448201526064810183905260840161037c565b610fd783856121bc858561450e565b5f60405180602001604052805f815250611d81565b73ffffffffffffffffffffffffffffffffffffffff831661221e576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222b835f845f85612ae4565b612238835f845f85612af1565b612245835f845f85610fd5565b5f33845f858560405160200161225f959493929190614521565b6040516020818303038152906040529050610fd78482612caa565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146114b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037c565b5f8181526001602052604090208054606091906123169061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546123429061458d565b801561238d5780601f106123645761010080835404028352916020019161238d565b820191905f5260205f20905b81548152906001019060200180831161237057829003601f168201915b50505050509050919050565b611adf81612cd5565b60095460ff166123de576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd784848484612dc9565b73ffffffffffffffffffffffffffffffffffffffff851615801590612424575073ffffffffffffffffffffffffffffffffffffffff841615155b61245a576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124678585858585612ae4565b6124748585858585612af1565b6124818585858585610fd5565b5f338686868560405160200161249b959493929190614521565b60405160208183030381529060405290506124b68682612caa565b610d92858483612de1565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f820161251a576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201612573576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d82016125cc576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526001602052604090206125e3828261461c565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516126149190613fc3565b60405180910390a25050565b5f6117478383612f3a565b5f8281526007602052604081206117479083612f60565b805182511461267d576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f036126b7576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8251811015610c5b576126fe8382815181106126d7576126d76143c7565b60200260200101518383815181106126f1576126f16143c7565b60200260200101516124c1565b6001016126b9565b5f610c37825490565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201525f602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c8301529182910160405160208183030381529060405290508061278a90614733565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061282457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b80610c3757507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fc52d60080000000000000000000000000000000000000000000000000000000014806128ca57506128ca82612f8e565b80610c375750610c3782612fe3565b6128e3828261262b565b81839091610fd7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440161037c565b5f6117478373ffffffffffffffffffffffffffffffffffffffff841661303e565b5f6117478373ffffffffffffffffffffffffffffffffffffffff841661308a565b6129bd73ffffffffffffffffffffffffffffffffffffffff84167f6bb56a140000000000000000000000000000000000000000000000000000000061316d565b15610c5b576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a169085908590600401614775565b5f604051808303815f875af1158015612a31573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fd7919081019061478d565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561238d57602002820191905f5260205f20905b815481526020019060010190808311612aaf5750505050509050919050565b5f611747838361303e565b5f611747838361308a565b610fd58585858585613239565b73ffffffffffffffffffffffffffffffffffffffff8516612b28578260025f828254612b1d9190614377565b90915550612bde9050565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526003602052604090205480868580831015612bb0576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff9091166024830152604482015260640161037c565b50505073ffffffffffffffffffffffffffffffffffffffff86165f9081526003602052604090209084900390555b73ffffffffffffffffffffffffffffffffffffffff8416612c0757600280548490039055612c32565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604090208054840190555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6868686604051611f9693929190614802565b6110e6827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea8361297d565b612cff7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee305f611d03565b612d0881613253565b5f612d327fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee306117a3565b90505f5b8151811015610c5b575f828281518110612d5257612d526143c7565b602002602001015190508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d955750612dc1565b612dbf7fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee3082612073565b505b600101612d36565b612dd584848484613286565b610fd7848484846132ea565b612e0b837f6bb56a140000000000000000000000000000000000000000000000000000000061316d565b15612e84576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a16907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c908590600401614775565b81610c5b5773ffffffffffffffffffffffffffffffffffffffff83163b15612ef0576040517fa608fbb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161037c565b6040517f26c247f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161037c565b5f825f018281548110612f4f57612f4f6143c7565b905f5260205f200154905092915050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001830160205260408120541515611747565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b000000000000000000000000000000000000000000000000000000001480610c375750610c3782613332565b5f8061300e7f01ffc9a700000000000000000000000000000000000000000000000000000000611c22565b50905073ffffffffffffffffffffffffffffffffffffffff811661303457505f92915050565b611747818461316d565b5f81815260018301602052604081205461308357508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610c37565b505f610c37565b5f8181526001830160205260408120548015613164575f6130ac60018361450e565b85549091505f906130bf9060019061450e565b905081811461311e575f865f0182815481106130dd576130dd6143c7565b905f5260205f200154905080875f0184815481106130fd576130fd6143c7565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061312f5761312f614822565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610c37565b5f915050610c37565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a70000000000000000000000000000000000000000000000000000000017815282515f9392849283928392918391908a617530fa92503d91505f519050828015613223575060208210155b801561322e57505f81115b979650505050505050565b61324685858585856133c8565b610fd585858585856133e2565b61327d7fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b06595f611d03565b611adf816133fc565b61328e6111de565b15806132b4575061329d6111de565b836132a760025490565b6132b19190614377565b11155b610fd7576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff16613326576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd78484848461342f565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f629aa694000000000000000000000000000000000000000000000000000000001480610c3757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610c37565b6133d1846134d9565b610fd557610fd585858585856135b8565b6133ef858585858561365f565b610fd58585858585610fd5565b6134267f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad5f611d03565b611adf81613679565b73ffffffffffffffffffffffffffffffffffffffff841661347c576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134895f85858585612ae4565b6134965f85858585612af1565b6134a35f85858585610fd5565b5f335f8686856040516020016134bd959493929190614521565b6040516020818303038152906040529050610fd5858483612de1565b5f80357fffffffff00000000000000000000000000000000000000000000000000000000167ff5fb0b0c000000000000000000000000000000000000000000000000000000001480156135335750600c54610100900460ff165b801561356457506135647fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee303361174e565b8015610c3757505f5473ffffffffffffffffffffffffffffffffffffffff83811691161480610c375750610c377fce3f34913921da558f105cefb578d87278debbbd073a8d552b5de0d168deee308361174e565b73ffffffffffffffffffffffffffffffffffffffff851615806135ef575073ffffffffffffffffffffffffffffffffffffffff8416155b610fd55761361d7fb4b3a36d7c2b72add3151898671aaed843238e580f7d6d4bc5077ce2023b06598661174e565b610fd557613629610c60565b610fd5576040517f2077e68600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613668846134d9565b610fd557610fd585858585856136ac565b6136a37f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f611d03565b611adf81613855565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160315610fd55773ffffffffffffffffffffffffffffffffffffffff8416158061371a575073ffffffffffffffffffffffffffffffffffffffff841661dead145b610fd5576137487f975773d1e0a917a74b57f36a377f439ffff6271648aebdbff75a52ab58eb7bad8561174e565b610fd5577f00000000000000000000000000000000000000000000000000000000000000008015158061377c575050610fd5565b81856137a98873ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b6137b39190614377565b111586866137e28973ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b8590919293613848576040517f8eb9dd5200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909416600485015260248401929092526044830152606482015260840161037c565b5050505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1661387682613906565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526008602052604081206138a390611fd0565b90505f5b8151811015610fd7575f8282815181106138c3576138c36143c7565b602002602001015190506138d78185612073565b73ffffffffffffffffffffffffffffffffffffffff8516156138fd576138fd8186611fdc565b506001016138a7565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f602082840312156139d6575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611747575f5ffd5b5f5f60408385031215613a16575f5ffd5b50508035926020909101359150565b5f60208284031215613a35575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613a5f575f5ffd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ad857613ad8613a64565b604052919050565b5f67ffffffffffffffff821115613af957613af9613a64565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613b34575f5ffd5b8135613b47613b4282613ae0565b613a91565b818152846020838601011115613b5b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215613b89575f5ffd5b613b9284613a3c565b925060208401359150604084013567ffffffffffffffff811115613bb4575f5ffd5b613bc086828701613b25565b9150509250925092565b5f67ffffffffffffffff821115613be357613be3613a64565b5060051b60200190565b5f82601f830112613bfc575f5ffd5b8135613c0a613b4282613bca565b8082825260208201915060208360051b860101925085831115613c2b575f5ffd5b602085015b83811015613c4f57613c4181613a3c565b835260209283019201613c30565b5095945050505050565b5f82601f830112613c68575f5ffd5b8135613c76613b4282613bca565b8082825260208201915060208360051b860101925085831115613c97575f5ffd5b602085015b83811015613c4f578035835260209283019201613c9c565b80358015158114613a5f575f5ffd5b5f82601f830112613cd2575f5ffd5b8135613ce0613b4282613bca565b8082825260208201915060208360051b860101925085831115613d01575f5ffd5b602085015b83811015613c4f57613d1781613cb4565b835260209283019201613d06565b5f82601f830112613d34575f5ffd5b8135613d42613b4282613bca565b8082825260208201915060208360051b860101925085831115613d63575f5ffd5b602085015b83811015613c4f57803567ffffffffffffffff811115613d86575f5ffd5b613d95886020838a0101613b25565b84525060209283019201613d68565b5f5f5f5f5f60a08688031215613db8575f5ffd5b853567ffffffffffffffff811115613dce575f5ffd5b613dda88828901613bed565b955050602086013567ffffffffffffffff811115613df6575f5ffd5b613e0288828901613bed565b945050604086013567ffffffffffffffff811115613e1e575f5ffd5b613e2a88828901613c59565b935050606086013567ffffffffffffffff811115613e46575f5ffd5b613e5288828901613cc3565b925050608086013567ffffffffffffffff811115613e6e575f5ffd5b613e7a88828901613d25565b9150509295509295909350565b5f60208284031215613e97575f5ffd5b61174782613a3c565b602080825282518282018190525f918401906040840190835b81811015613ed7578351835260209384019390920191600101613eb9565b509095945050505050565b5f5f60408385031215613ef3575f5ffd5b82359150613f0360208401613a3c565b90509250929050565b5f5f5f5f60808587031215613f1f575f5ffd5b613f2885613a3c565b9350613f3660208601613a3c565b9250613f4460408601613cb4565b9150606085013567ffffffffffffffff811115613f5f575f5ffd5b613f6b87828801613b25565b91505092959194509250565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6117476020830184613f77565b5f5f60408385031215613fe6575f5ffd5b613fef83613a3c565b9150613f0360208401613a3c565b5f5f6020838503121561400e575f5ffd5b823567ffffffffffffffff811115614024575f5ffd5b8301601f81018513614034575f5ffd5b803567ffffffffffffffff81111561404a575f5ffd5b8560208260051b840101111561405e575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156140e3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526140ce858351613f77565b94506020938401939190910190600101614094565b50929695505050505050565b5f5f5f5f60808587031215614102575f5ffd5b61410b85613a3c565b935060208501359250613f4460408601613cb4565b5f5f5f5f5f60a08688031215614134575f5ffd5b61413d86613a3c565b945061414b60208701613a3c565b93506040860135925061416060608701613cb4565b9150608086013567ffffffffffffffff81111561417b575f5ffd5b613e7a88828901613b25565b5f5f5f5f6080858703121561419a575f5ffd5b6141a385613a3c565b93506141b160208601613a3c565b925060408501359150606085013567ffffffffffffffff811115613f5f575f5ffd5b5f5f604083850312156141e4575f5ffd5b82359150602083013567ffffffffffffffff811115614201575f5ffd5b61420d85828601613b25565b9150509250929050565b5f5f60408385031215614228575f5ffd5b823567ffffffffffffffff81111561423e575f5ffd5b61424a85828601613c59565b925050602083013567ffffffffffffffff811115614266575f5ffd5b61420d85828601613d25565b602080825282518282018190525f918401906040840190835b81811015613ed757835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161428b565b5f602082840312156142cf575f5ffd5b813567ffffffffffffffff8111156142e5575f5ffd5b61278a84828501613c59565b8385823760609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014810191909152603401919050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c3757610c3761434a565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f6143be6060830184613f77565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8416815260ff83166020820152606060408201525f6143be6060830184613f77565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445e575f5ffd5b83018035915067ffffffffffffffff821115614478575f5ffd5b60200191503681900382131561448c575f5ffd5b9250929050565b818382375f9101908152919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015614507577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b81810381811115610c3757610c3761434a565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f61322e60a0830184613f77565b600181811c908216806145a157607f821691505b602082108103611a25577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b601f821115610c5b57805f5260205f20601f840160051c810160208510156145fd5750805b601f840160051c820191505b81811015610fd5575f8155600101614609565b815167ffffffffffffffff81111561463657614636613a64565b61464a81614644845461458d565b846145d8565b6020601f82116001811461469b575f83156146655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610fd5565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156146e857878501518255602094850194600190920191016146c8565b508482101561472457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80516020808301519190811015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b828152604060208201525f61278a6040830184613f77565b5f6020828403121561479d575f5ffd5b815167ffffffffffffffff8111156147b3575f5ffd5b8201601f810184136147c3575f5ffd5b80516147d1613b4282613ae0565b8181528560208385010111156147e5575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8381528215156020820152606060408201525f6143be6060830184613f77565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212205fcc5570e047dcaadee5d6b940ff69ae25be9692ed59de3ac45ab493e2b57ebc64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "immutableReferences": {
    "14853": [
      {
        "length": 32,
        "start": 4064
      }
    ],
    "18970": [
      {
        "length": 32,
        "start": 2440
      },
      {
        "length": 32,
        "start": 14158
      }
    ],
    "19441": [
      {
        "length": 32,
        "start": 4596
      }
    ]
  },
  "inputSourceName": "project/contracts/presets/LSP7CustomizableToken.sol",
  "buildInfoId": "solc-0_8_28-02f211569dac97f8d48f774b05c17d2fd78020fb"
}