{
  "_format": "hh-sol-artifact-1",
  "contractName": "V_Ledger_Vault_v4",
  "sourceName": "src/contracts/V_Ledger_Vault_v4.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_platformAdmin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_platformWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_oracleSigner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_mintingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC721IncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721InsufficientApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC721InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonexistentToken",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_toTokenId",
          "type": "uint256"
        }
      ],
      "name": "BatchMetadataUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DepositReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "MetadataUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "chipUid",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "brand",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "deposit",
          "type": "uint256"
        }
      ],
      "name": "ProductMinted",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "seller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "SecondarySale",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "action",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "actor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "locationName",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int32",
          "name": "latitude",
          "type": "int32"
        },
        {
          "indexed": false,
          "internalType": "int32",
          "name": "longitude",
          "type": "int32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "metadata",
          "type": "string"
        }
      ],
      "name": "SupplyChainEvent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BRAND_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "BRAND_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOGISTICS_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RECYCLER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SERVICE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUPPLIER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "customerWallet",
          "type": "address"
        }
      ],
      "name": "authorizeClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "authorizedClaimer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "brandDelegations",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "chipToToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "chipUid",
          "type": "string"
        }
      ],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "delegateRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "executeSecondarySale",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "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": "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": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lockedDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "action",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "locationName",
          "type": "string"
        },
        {
          "internalType": "int32",
          "name": "latitude",
          "type": "int32"
        },
        {
          "internalType": "int32",
          "name": "longitude",
          "type": "int32"
        },
        {
          "internalType": "string",
          "name": "metadata",
          "type": "string"
        }
      ],
      "name": "logEvent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "rewardReceiver",
          "type": "address"
        },
        {
          "internalType": "int32",
          "name": "lat",
          "type": "int32"
        },
        {
          "internalType": "int32",
          "name": "lon",
          "type": "int32"
        }
      ],
      "name": "logRecycle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "chipUid",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "mintProduct",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracleSigner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformWallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "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": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "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": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenBrand",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenToChip",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608034620003e157601f90601f19906001600160401b0390620030f33881900385810185168301919084831184841017620003cb5780849260a094604052833981010312620003e157620000538162000406565b926020936200006485840162000406565b94620000736040850162000406565b946080620000846060870162000406565b9501519762000092620003e6565b928184527f562d4c65646765722050726f64756374696f6e2050617373706f72742056340081850152620000c5620003e6565b90600382526205650560ec1b81830152845196848811620003cb576000978854966001978881811c91168015620003c0575b85821014620003ac5790818784931162000359575b508490878311600114620002f8578b92620002ec575b5050600019600383901b1c191690871b1788555b8251948511620002d85785548681811c91168015620002cd575b83821014620002b95784811162000271575b508193851160011462000202575050908291620001a69692620001f6575b5050600019600383901b1c191690821b1790555b6200019f816200041b565b506200049c565b50620001b16200051d565b5060018060a01b0380928160018060a01b03199516856008541617600855168360095416176009551690600b541617600b55600a55604051612ad09081620005c38239f35b01519050388062000180565b8495969794169086855280852094905b82821062000259575050918594929183620001a698979593106200023f575b505050811b01905562000194565b015160001960f88460031b161c1916905538808062000231565b80888697829497870151815501960194019062000212565b8689528289208580880160051c820192858910620002af575b0160051c019087905b828110620002a357505062000162565b8a815501879062000293565b925081926200028a565b634e487b7160e01b89526022600452602489fd5b90607f169062000150565b634e487b7160e01b88526041600452602488fd5b01519050388062000122565b90848a9416918c8052868d20928d5b8882821062000342575050841162000328575b505050811b01885562000136565b015160001960f88460031b161c191690553880806200031a565b8385015186558d9790950194938401930162000307565b9091508a8052848b208780850160051c820192878610620003a2575b918b91869594930160051c01915b828110620003935750506200010c565b8d81558594508b910162000383565b9250819262000375565b634e487b7160e01b8b52602260045260248bfd5b90607f1690620000f7565b634e487b7160e01b600052604160045260246000fd5b600080fd5b60408051919082016001600160401b03811183821017620003cb57604052565b51906001600160a01b0382168203620003e157565b6001600160a01b031660008181527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df602052604081205490919060ff16620004985781805260076020526040822081835260205260408220600160ff198254161790553391600080516020620030938339815191528180a4600190565b5090565b6001600160a01b03166000818152600080516020620030b38339815191526020526040812054909190600080516020620030d38339815191529060ff16620005185780835260076020526040832082845260205260408320600160ff1982541617905560008051602062003093833981519152339380a4600190565b505090565b73ab0f91d9f52c461f8a3b6208969fd663cb61f4206000818152600080516020620030b38339815191526020527f5965fc34a3d90a2ce537f008a3c928bf0b85f8a56a5f973996e2ed1cb8c6f00954909190600080516020620030d38339815191529060ff16620005185780835260076020526040832082845260205260408320600160ff1982541617905560008051602062003093833981519152339380a460019056fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714611fd15750806306fdde0314611f2e578063081812fc14611ef0578063095ea7b314611e095780630f70a76a14611db35780631709a61b14611d8a57806323b872dd14611d73578063248a9ca314611d4457806325eec63214611d095780632f2ff15d14611cca5780633418c47b14611c9e57806336568abe14611c575780633711e8f614611c1c57806342842e0e14611bee578063441ae7a8146119555780634b756ad8146119215780635a64ad95146119035780636202b99d1461169d5780636352211e1461166d578063647846a51461164457806370a08231146115eb578063731014601461158d5780637823cdf314611559578063793e0cf01461134557806391d14854146112f857806395d89b4114611219578063a0e3123c146111ac578063a20e7d4714611171578063a217fddf14611155578063a22cb465146110b0578063a29508fc14611075578063a53455a214611049578063b59e0c06146108a4578063b88d4fde14610839578063bf313778146107fe578063c602d3fb146107c3578063c87b56dd14610766578063ce31e54114610693578063d547741f14610652578063d576a2cc14610271578063e985e9c51461021b5763fa2af9da146101ed57600080fd5b34610216576000366003190112610216576009546040516001600160a01b039091168152602090f35b600080fd5b34610216576040366003190112610216576102346120b8565b61023c6120ce565b9060018060a01b03809116600052600560205260406000209116600052602052602060ff604060002054166040519015158152f35b346102165760603660031901126102165760043561028d6120ce565b906044359161029b8261268c565b6001600160a01b0390339082160361061d5782600052602091601083528160406000205416600586029086159187810460051483171561060757606490049187800460011417156106075760648704916102fe836102f9838b6129f3565b6129f3565b6008546040516323b872dd60e01b8082526001600160a01b03881660048301523360248301526044820193909352919391908890829060649082906000908c165af1908115610546576000916105ea575b50156105ad576008546040518481526001600160a01b0387811660048301529290921660248301526044820192909252908690829060649082906000908a165af190811561054657600091610590575b5015610552576008546009546040519283526001600160a01b03858116600485015290861616602483015260448201929092529084908290606490829060009088165af190811561054657600091610519575b50156104de5791610160918361042a867fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d9633612a00565b168095604051908152857f42fe68f6010e29bbf30e11d87730d2bcf91205be8b237c67e4e5a25b756c65f8843393a460e06040519160a08352600e60a08401526d5345434f4e444152595f53414c4560901b60c0840152820152600b60e08201526a4d61726b6574706c61636560a81b61010082015260006040820152600060608201526015610120806080840152820152740e4d0bcd4bcc4814dc1b1a5d08115e1958dd5d1959605a1b610140820152a3005b60405162461bcd60e51b8152600481018490526013602482015272141b185d199bdc9b481999594819985a5b1959606a1b6044820152606490fd5b6105399150843d861161053f575b610531818361216e565b810190612815565b866103f2565b503d610527565b6040513d6000823e3d90fd5b60405162461bcd60e51b8152600481018690526016602482015275149bde585b1d1e481c185e5b595b9d0819985a5b195960521b6044820152606490fd5b6105a79150863d881161053f57610531818361216e565b8861039f565b60405162461bcd60e51b815260048101889052601560248201527414d95b1b195c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b6106019150883d8a1161053f57610531818361216e565b8a61034f565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b6044820152606490fd5b34610216576040366003190112610216576106916004356106716120ce565b9080600052600760205261068c600160406000200154612320565b6123c6565b005b34610216576040366003190112610216576004356106af6120ce565b906106b98161268c565b6001600160a01b03919082163314801561072e575b156106f857600052600f602052604060002091166001600160601b0360a01b825416179055600080f35b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b503360009081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df602052604090205460ff166106ce565b34610216576020366003190112610216576004356107838161268c565b5060005260066020526107bf61079c604060002061218f565b60006040516107aa81612153565b52604051918291602083526020830190612093565b0390f35b346102165760003660031901126102165760206040517fded9b5e0e0e3a2b3f09a0bc36ec64b9bf7a7c2319f3c4d9cff5ce48714257b218152f35b346102165760003660031901126102165760206040517f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd1548152f35b34610216576080366003190112610216576108526120b8565b61085a6120ce565b90604435606435926001600160401b03841161021657366023850112156102165761089261069194369060248160040135910161228d565b9261089e83838361243d565b336126c7565b346102165760a0366003190112610216576024356001600160401b038111610216576108d4903690600401612235565b6064356001600160401b038111610216576108f3903690600401612235565b906084356001600160401b038111610216576109b361093961091c6109bc933690600401612235565b91906109266122c4565b61093136898b61228d565b92369161228d565b9060405161097f60748260206109588183019687815193849201612070565b810160443560208201523360601b604082015246605482015203605481018452018261216e565b5190207f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c6000206128a2565b9092919261296e565b600b546001600160a01b039081169116036110045760405183858237602081858101600c81520301902054610fbf576004356000908152600260205260409020546001600160a01b0316610f8157600a546044358101809111610607576008546040516323b872dd60e01b81523360048201523060248201526044810192909252602090829060649082906000906001600160a01b03165af190811561054657600091610f62575b5015610f2c57600854600954600a5460405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af190811561054657600091610f0d575b5015610ed2576040518385823783810190600c8252602081600435930301902055600435600052600d60205260406000206001600160401b038411610d0057610b0b84610b058354612119565b8361282d565b836000601f8211600114610e6d57600091610e62575b508460011b906000198660031b1c19161790555b600435600052600e60205260443560406000205560106020526040600020336001600160601b0360a01b825416179055604051610b7181612153565b600081523315610e49576001600160a01b03610b8f600435336125d0565b16610e3057333b610d16575b50610ba791369161228d565b916004356000526006602052604060002083516001600160401b038111610d0057610bdc81610bd68454612119565b8461282d565b6020601f8211600114610c95578190610c4b9596600092610c8a575b50508160011b916000199060031b1c19161790555b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce760206040516004358152a160405192604084526040840191612881565b60443560208301527f61a1b2ebc43463091ea9bbea414b9925c7de0b6b526325821313baf55bcde9cd339280600435930390a360206040516004358152f35b015190508680610bf8565b601f198216958360005260206000209660005b818110610ce8575091610c4b969791846001959410610ccf575b505050811b019055610c0d565b015160001960f88460031b161c19169055868080610cc2565b83830151895560019098019760209384019301610ca8565b634e487b7160e01b600052604160045260246000fd5b60405160208180610d52630a85bd0160e11b95868352336004840152600060248401526004356044840152608060648401526084830190612093565b03816000335af160009181610deb575b50610dbc573d15610db5573d610d7781612272565b90610d85604051928361216e565b81523d6000602083013e5b80519081610db057604051633250574960e11b8152336004820152602490fd5b602001fd5b6060610d90565b6001600160e01b03191603610dd357610ba7610b9b565b604051633250574960e11b8152336004820152602490fd5b9091506020813d602011610e28575b81610e076020938361216e565b8101031261021657516001600160e01b031981168103610216579087610d62565b3d9150610dfa565b6040516339e3563760e11b815260006004820152602490fd5b604051633250574960e11b815260006004820152602490fd5b905085013586610b21565b60008381526020812092505b601f1987168110610eba575085601f19811610610ea0575b5050600184811b019055610b35565b860135600019600387901b60f8161c191690558580610e91565b9091602060018192858b013581550193019101610e79565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b610f26915060203d60201161053f57610531818361216e565b85610ab8565b60405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b6044820152606490fd5b610f7b915060203d60201161053f57610531818361216e565b85610a64565b60405162461bcd60e51b8152602060048201526016602482015275546f6b656e494420616c72656164792065786973747360501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f50726f6475637420616c726561647920726567697374657265640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964204f7261636c65205369676e617475726500000000000000006044820152606490fd5b3461021657602036600319011261021657600435600052600e6020526020604060002054604051908152f35b346102165760003660031901126102165760206040517fd1ae8bbdabd60d63e418b84f5ad6f9cba90092c9816d7724d85f0d4e4bea2c608152f35b34610216576040366003190112610216576110c96120b8565b60243590811515809203610216576001600160a01b031690811561113c57336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b604051630b61174360e31b815260048101839052602490fd5b3461021657600036600319011261021657602060405160008152f35b346102165760003660031901126102165760206040517fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b8152f35b34610216576020366003190112610216576004356001600160401b03811161021657366023820112156102165761120660206111f38193369060248160040135910161228d565b8160405193828580945193849201612070565b8101600c81520301902054604051908152f35b34610216576000366003190112610216576040516000600180549061123d82612119565b808552918181169081156112d15750600114611278575b6107bf846112648186038261216e565b604051918291602083526020830190612093565b600081815292507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8284106112b957505050810160200161126482611254565b805460208587018101919091529093019281016112a1565b60ff191660208087019190915292151560051b850190920192506112649150839050611254565b34610216576040366003190112610216576113116120ce565b600435600052600760205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610216576040366003190112610216576004356024356001600160401b03811161021657611378903690600401612235565b82600052602091600f835260018060a01b036040600020541633036115145783600052600d835260406000206040518481019181600082546113b981612119565b936001918a83821691826000146114f55750506001146114b5575b50506113e9925003601f19810183528261216e565b5190209161141084604051838194838301968737810160008382015203808452018261216e565b5190200361147157600f9061142e83336114298261268c565b612a00565b826000525260406000206001600160601b0360a01b815416905533907f8035a66b8cf5805c98f375244d871580e8912e70213ba52638448d5f59716e9d600080a3005b6064906040519062461bcd60e51b82526004820152601b60248201527f506879736963616c2063686970207363616e20726571756972656400000000006044820152fd5b89925060005281600020906000915b8583106114dc575050506113e99282010189806113d4565b81939294508054838689010152019201889185936114c4565b92509350506113e994915060ff191686528015150282010189806113d4565b60405162461bcd60e51b815260048101849052601760248201527f4e6f7420617574686f72697a656420746f20636c61696d0000000000000000006044820152606490fd5b3461021657602036600319011261021657600435600052600f602052602060018060a01b0360406000205416604051908152f35b34610216576040366003190112610216576115a66120ce565b6115ae6122c4565b6115ba81600435612346565b503360009081526011602090815260408083206001600160a01b03909416835292905220805460ff19166001179055005b34610216576020366003190112610216576001600160a01b0361160c6120b8565b16801561162b5760005260036020526020604060002054604051908152f35b6040516322718ad960e21b815260006004820152602490fd5b34610216576000366003190112610216576008546040516001600160a01b039091168152602090f35b3461021657602036600319011261021657602061168b60043561268c565b6040516001600160a01b039091168152f35b34610216576080366003190112610216576004356116b96120ce565b906044358060030b809103610216576116d0612262565b907f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd154938460005260209460078652604060002033600052865260ff60406000205416156118e5575083600052600e85526040600020549081156118ad576000858152600e87526040808220829055600854905163a9059cbb60e01b81526001600160a01b038481166004830152602482018690529392909189918391604491839188165af190811561054657600091611890575b501561185b578686927f27fd7b405d3b1cef830760908e4041d6c33a3e8fee51f248c99462d0d5550885926040519586521693a360e06040519460a08652600860a087015267149150d650d3115160c21b60c0870152850152600d60e08501526c2932b1bcb1b634b73390243ab160991b610100850152604084015260030b6060830152601261012080608085015283015271115b990b5bd98b531a59994814185e5bdd5d60721b6101408301527fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d6101603393a3005b60405162461bcd60e51b815260048101889052600d60248201526c14185e5bdd5d0819985a5b1959609a1b6044820152606490fd5b6118a79150883d8a1161053f57610531818361216e565b88611784565b60405162461bcd60e51b815260048101879052601060248201526f139bc819195c1bdcda5d08199bdd5b9960821b6044820152606490fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b34610216576000366003190112610216576020600a54604051908152f35b34610216576020366003190112610216576004356000526010602052602060018060a01b0360406000205416604051908152f35b346102165760c0366003190112610216576001600160401b0360243581811161021657611986903690600401612235565b9190604435828111610216576119a0903690600401612235565b9190936119ab612262565b608435948560030b8096036102165760a435908111610216576119d2903690600401612235565b9590947fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f5960005260209760078952604060002033600052895260ff604060002054168015611bac575b8015611b6a575b8015611b28575b8015611ae6575b15611aad577fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d969798611aa8949392611a8792611a7a604051998a9960a08b5260a08b0191612881565b9288840390890152612881565b9160030b604085015260608401528281036080840152339660043596612881565b0390a3005b60405162461bcd60e51b8152600481018a90526011602482015270556e617574686f72697a656420726f6c6560781b6044820152606490fd5b507f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd15460005260078952604060002033600052895260ff60406000205416611a30565b507fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b60005260078952604060002033600052895260ff60406000205416611a29565b507fded9b5e0e0e3a2b3f09a0bc36ec64b9bf7a7c2319f3c4d9cff5ce48714257b2160005260078952604060002033600052895260ff60406000205416611a22565b507fd1ae8bbdabd60d63e418b84f5ad6f9cba90092c9816d7724d85f0d4e4bea2c6060005260078952604060002033600052895260ff60406000205416611a1b565b3461021657610691611bff366120e4565b9060405192611c0d84612153565b6000845261089e83838361243d565b346102165760003660031901126102165760206040517fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f598152f35b3461021657604036600319011261021657611c706120ce565b336001600160a01b03821603611c8c57610691906004356123c6565b60405163334bd91960e11b8152600490fd5b3461021657602036600319011261021657600435600052600d6020526107bf611264604060002061218f565b3461021657604036600319011261021657610691600435611ce96120ce565b90806000526007602052611d04600160406000200154612320565b612346565b346102165760003660031901126102165760206040517ffa78b56bc38f897ec7ebbc674481f972d13b589fd545a572f936ef7177b3886b8152f35b346102165760203660031901126102165760043560005260076020526020600160406000200154604051908152f35b3461021657610691611d84366120e4565b9161243d565b3461021657600036600319011261021657600b546040516001600160a01b039091168152602090f35b3461021657604036600319011261021657611dcc6120b8565b611dd46120ce565b9060018060a01b03809116600052601160205260406000209116600052602052602060ff604060002054166040519015158152f35b3461021657604036600319011261021657611e226120b8565b602435611e2e8161268c565b33151580611edd575b80611eb0575b611e98576001600160a01b039283169282918491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260046020526040902080546001600160a01b0319169091179055005b60405163a9fbf51f60e01b8152336004820152602490fd5b5060018060a01b038116600052600560205260406000203360005260205260ff6040600020541615611e3d565b506001600160a01b038116331415611e37565b3461021657602036600319011261021657600435611f0d8161268c565b506000526004602052602060018060a01b0360406000205416604051908152f35b346102165760003660031901126102165760405160008054611f4f81612119565b808452906001908181169081156112d15750600114611f78576107bf846112648186038261216e565b600080805292507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410611fb957505050810160200161126482611254565b80546020858701810191909152909301928101611fa1565b34610216576020366003190112610216576004359063ffffffff60e01b821680920361021657602091637965db0b60e01b8114908115612013575b5015158152f35b632483248360e11b81149150811561202d575b508361200c565b6380ac58cd60e01b81149150811561205f575b811561204e575b5083612026565b6301ffc9a760e01b14905083612047565b635b5e139f60e01b81149150612040565b60005b8381106120835750506000910152565b8181015183820152602001612073565b906020916120ac81518092818552858086019101612070565b601f01601f1916010190565b600435906001600160a01b038216820361021657565b602435906001600160a01b038216820361021657565b6060906003190112610216576001600160a01b0390600435828116810361021657916024359081168103610216579060443590565b90600182811c92168015612149575b602083101461213357565b634e487b7160e01b600052602260045260246000fd5b91607f1691612128565b602081019081106001600160401b03821117610d0057604052565b90601f801991011681019081106001600160401b03821117610d0057604052565b90604051918260008254926121a384612119565b90818452600194858116908160001461221257506001146121cf575b50506121cd9250038361216e565b565b9093915060005260209081600020936000915b8183106121fa5750506121cd935082010138806121bf565b855488840185015294850194879450918301916121e2565b9150506121cd94506020925060ff191682840152151560051b82010138806121bf565b9181601f84011215610216578235916001600160401b038311610216576020838186019501011161021657565b606435908160030b820361021657565b6001600160401b038111610d0057601f01601f191660200190565b92919261229982612272565b916122a7604051938461216e565b829481845281830111610216578281602093846000960137010152565b3360009081527ff1928bfbc992865887624992d20ce8aff723cf0d7863af9659aca45ef54d988d60205260409020547fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f599060ff16156118e55750565b80600052600760205260406000203360005260205260ff60406000205416156118e55750565b906000918083526007602052604083209160018060a01b03169182845260205260ff604084205416156000146123c15780835260076020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b906000918083526007602052604083209160018060a01b03169182845260205260ff6040842054166000146123c1578083526007602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b906001600160a01b039081168015610e4957600091848352846020926002845260409383858720541695869133151580612537575b509060027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9284612504575b85835260038152888320805460010190558683525286812080546001600160a01b0319168517905580a4831682036124d65750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b600087815260046020526040902080546001600160a01b031916905584835260038152888320805460001901905561249e565b9193945091508061258f575b1561255357879291869138612472565b848887612570576024915190637e27328960e01b82526004820152fd5b905163177e802f60e01b81523360048201526024810191909152604490fd5b5033861480156125b4575b806125435750878252600481523384868420541614612543565b5085825260058152848220338352815260ff858320541661259a565b6000828152600260205260408120546001600160a01b03908116939284917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9183612657575b16928361263f575b84815260026020526040812080546001600160a01b0319168517905580a490565b8381526003602052604081206001815401905561261e565b600086815260046020526040902080546001600160a01b03191690558385526003602052604085208054600019019055612616565b6000818152600260205260409020546001600160a01b03169081156126af575090565b60249060405190637e27328960e01b82526004820152fd5b90939192833b6126d9575b5050505050565b604051630a85bd0160e11b8082526001600160a01b039384166004830152958316602482015260448101919091526080606482015294921692602092918590612726906084830190612093565b039483816000978189895af18691816127d1575b5061279b575050503d600014612792573d61275481612272565b90612762604051928361216e565b81528093823d92013e5b8251928361278d57604051633250574960e11b815260048101849052602490fd5b019050fd5b6060925061276c565b919450915063ffffffff60e01b16036127b9575038808080806126d2565b60249060405190633250574960e11b82526004820152fd5b9091508481813d831161280e575b6127e9818361216e565b8101031261280a57516001600160e01b03198116810361280a57903861273a565b8680fd5b503d6127df565b90816020910312610216575180151581036102165790565b90601f811161283b57505050565b600091825260208220906020601f850160051c83019410612877575b601f0160051c01915b82811061286c57505050565b818155600101612860565b9092508290612857565b908060209392818452848401376000828201840152601f01601f1916010190565b81519190604183036128d3576128cc92506020820151906060604084015193015160001a906128de565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161296257926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156129565780516001600160a01b0381161561294d57918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60048110156129dd5780612980575050565b6001810361299a5760405163f645eedf60e01b8152600490fd5b600281036129bb5760405163fce698f760e01b815260048101839052602490fd5b6003146129c55750565b602490604051906335e2f38360e21b82526004820152fd5b634e487b7160e01b600052602160045260246000fd5b9190820391821161060757565b929060405190612a0f82612153565b600082526001600160a01b039481861615610e4957612a2e85836125d0565b958087169081612a5157604051637e27328960e01b815260048101889052602490fd5b82969495961603612a68576121cd949550336126c7565b6040516364283d7b60e01b81526001600160a01b03918216600482015260248101939093528516604483015250606490fdfea264697066735822122093425d014f2c125a495a5105c189819ccfe333a040887aaf35c73d34655250fa64736f6c634300081400332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0df1928bfbc992865887624992d20ce8aff723cf0d7863af9659aca45ef54d988dd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f59",
  "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714611fd15750806306fdde0314611f2e578063081812fc14611ef0578063095ea7b314611e095780630f70a76a14611db35780631709a61b14611d8a57806323b872dd14611d73578063248a9ca314611d4457806325eec63214611d095780632f2ff15d14611cca5780633418c47b14611c9e57806336568abe14611c575780633711e8f614611c1c57806342842e0e14611bee578063441ae7a8146119555780634b756ad8146119215780635a64ad95146119035780636202b99d1461169d5780636352211e1461166d578063647846a51461164457806370a08231146115eb578063731014601461158d5780637823cdf314611559578063793e0cf01461134557806391d14854146112f857806395d89b4114611219578063a0e3123c146111ac578063a20e7d4714611171578063a217fddf14611155578063a22cb465146110b0578063a29508fc14611075578063a53455a214611049578063b59e0c06146108a4578063b88d4fde14610839578063bf313778146107fe578063c602d3fb146107c3578063c87b56dd14610766578063ce31e54114610693578063d547741f14610652578063d576a2cc14610271578063e985e9c51461021b5763fa2af9da146101ed57600080fd5b34610216576000366003190112610216576009546040516001600160a01b039091168152602090f35b600080fd5b34610216576040366003190112610216576102346120b8565b61023c6120ce565b9060018060a01b03809116600052600560205260406000209116600052602052602060ff604060002054166040519015158152f35b346102165760603660031901126102165760043561028d6120ce565b906044359161029b8261268c565b6001600160a01b0390339082160361061d5782600052602091601083528160406000205416600586029086159187810460051483171561060757606490049187800460011417156106075760648704916102fe836102f9838b6129f3565b6129f3565b6008546040516323b872dd60e01b8082526001600160a01b03881660048301523360248301526044820193909352919391908890829060649082906000908c165af1908115610546576000916105ea575b50156105ad576008546040518481526001600160a01b0387811660048301529290921660248301526044820192909252908690829060649082906000908a165af190811561054657600091610590575b5015610552576008546009546040519283526001600160a01b03858116600485015290861616602483015260448201929092529084908290606490829060009088165af190811561054657600091610519575b50156104de5791610160918361042a867fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d9633612a00565b168095604051908152857f42fe68f6010e29bbf30e11d87730d2bcf91205be8b237c67e4e5a25b756c65f8843393a460e06040519160a08352600e60a08401526d5345434f4e444152595f53414c4560901b60c0840152820152600b60e08201526a4d61726b6574706c61636560a81b61010082015260006040820152600060608201526015610120806080840152820152740e4d0bcd4bcc4814dc1b1a5d08115e1958dd5d1959605a1b610140820152a3005b60405162461bcd60e51b8152600481018490526013602482015272141b185d199bdc9b481999594819985a5b1959606a1b6044820152606490fd5b6105399150843d861161053f575b610531818361216e565b810190612815565b866103f2565b503d610527565b6040513d6000823e3d90fd5b60405162461bcd60e51b8152600481018690526016602482015275149bde585b1d1e481c185e5b595b9d0819985a5b195960521b6044820152606490fd5b6105a79150863d881161053f57610531818361216e565b8861039f565b60405162461bcd60e51b815260048101889052601560248201527414d95b1b195c881c185e5b595b9d0819985a5b1959605a1b6044820152606490fd5b6106019150883d8a1161053f57610531818361216e565b8a61034f565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b6044820152606490fd5b34610216576040366003190112610216576106916004356106716120ce565b9080600052600760205261068c600160406000200154612320565b6123c6565b005b34610216576040366003190112610216576004356106af6120ce565b906106b98161268c565b6001600160a01b03919082163314801561072e575b156106f857600052600f602052604060002091166001600160601b0360a01b825416179055600080f35b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b503360009081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df602052604090205460ff166106ce565b34610216576020366003190112610216576004356107838161268c565b5060005260066020526107bf61079c604060002061218f565b60006040516107aa81612153565b52604051918291602083526020830190612093565b0390f35b346102165760003660031901126102165760206040517fded9b5e0e0e3a2b3f09a0bc36ec64b9bf7a7c2319f3c4d9cff5ce48714257b218152f35b346102165760003660031901126102165760206040517f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd1548152f35b34610216576080366003190112610216576108526120b8565b61085a6120ce565b90604435606435926001600160401b03841161021657366023850112156102165761089261069194369060248160040135910161228d565b9261089e83838361243d565b336126c7565b346102165760a0366003190112610216576024356001600160401b038111610216576108d4903690600401612235565b6064356001600160401b038111610216576108f3903690600401612235565b906084356001600160401b038111610216576109b361093961091c6109bc933690600401612235565b91906109266122c4565b61093136898b61228d565b92369161228d565b9060405161097f60748260206109588183019687815193849201612070565b810160443560208201523360601b604082015246605482015203605481018452018261216e565b5190207f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c6000206128a2565b9092919261296e565b600b546001600160a01b039081169116036110045760405183858237602081858101600c81520301902054610fbf576004356000908152600260205260409020546001600160a01b0316610f8157600a546044358101809111610607576008546040516323b872dd60e01b81523360048201523060248201526044810192909252602090829060649082906000906001600160a01b03165af190811561054657600091610f62575b5015610f2c57600854600954600a5460405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af190811561054657600091610f0d575b5015610ed2576040518385823783810190600c8252602081600435930301902055600435600052600d60205260406000206001600160401b038411610d0057610b0b84610b058354612119565b8361282d565b836000601f8211600114610e6d57600091610e62575b508460011b906000198660031b1c19161790555b600435600052600e60205260443560406000205560106020526040600020336001600160601b0360a01b825416179055604051610b7181612153565b600081523315610e49576001600160a01b03610b8f600435336125d0565b16610e3057333b610d16575b50610ba791369161228d565b916004356000526006602052604060002083516001600160401b038111610d0057610bdc81610bd68454612119565b8461282d565b6020601f8211600114610c95578190610c4b9596600092610c8a575b50508160011b916000199060031b1c19161790555b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce760206040516004358152a160405192604084526040840191612881565b60443560208301527f61a1b2ebc43463091ea9bbea414b9925c7de0b6b526325821313baf55bcde9cd339280600435930390a360206040516004358152f35b015190508680610bf8565b601f198216958360005260206000209660005b818110610ce8575091610c4b969791846001959410610ccf575b505050811b019055610c0d565b015160001960f88460031b161c19169055868080610cc2565b83830151895560019098019760209384019301610ca8565b634e487b7160e01b600052604160045260246000fd5b60405160208180610d52630a85bd0160e11b95868352336004840152600060248401526004356044840152608060648401526084830190612093565b03816000335af160009181610deb575b50610dbc573d15610db5573d610d7781612272565b90610d85604051928361216e565b81523d6000602083013e5b80519081610db057604051633250574960e11b8152336004820152602490fd5b602001fd5b6060610d90565b6001600160e01b03191603610dd357610ba7610b9b565b604051633250574960e11b8152336004820152602490fd5b9091506020813d602011610e28575b81610e076020938361216e565b8101031261021657516001600160e01b031981168103610216579087610d62565b3d9150610dfa565b6040516339e3563760e11b815260006004820152602490fd5b604051633250574960e11b815260006004820152602490fd5b905085013586610b21565b60008381526020812092505b601f1987168110610eba575085601f19811610610ea0575b5050600184811b019055610b35565b860135600019600387901b60f8161c191690558580610e91565b9091602060018192858b013581550193019101610e79565b60405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b610f26915060203d60201161053f57610531818361216e565b85610ab8565b60405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b6044820152606490fd5b610f7b915060203d60201161053f57610531818361216e565b85610a64565b60405162461bcd60e51b8152602060048201526016602482015275546f6b656e494420616c72656164792065786973747360501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f50726f6475637420616c726561647920726567697374657265640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964204f7261636c65205369676e617475726500000000000000006044820152606490fd5b3461021657602036600319011261021657600435600052600e6020526020604060002054604051908152f35b346102165760003660031901126102165760206040517fd1ae8bbdabd60d63e418b84f5ad6f9cba90092c9816d7724d85f0d4e4bea2c608152f35b34610216576040366003190112610216576110c96120b8565b60243590811515809203610216576001600160a01b031690811561113c57336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b604051630b61174360e31b815260048101839052602490fd5b3461021657600036600319011261021657602060405160008152f35b346102165760003660031901126102165760206040517fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b8152f35b34610216576020366003190112610216576004356001600160401b03811161021657366023820112156102165761120660206111f38193369060248160040135910161228d565b8160405193828580945193849201612070565b8101600c81520301902054604051908152f35b34610216576000366003190112610216576040516000600180549061123d82612119565b808552918181169081156112d15750600114611278575b6107bf846112648186038261216e565b604051918291602083526020830190612093565b600081815292507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8284106112b957505050810160200161126482611254565b805460208587018101919091529093019281016112a1565b60ff191660208087019190915292151560051b850190920192506112649150839050611254565b34610216576040366003190112610216576113116120ce565b600435600052600760205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610216576040366003190112610216576004356024356001600160401b03811161021657611378903690600401612235565b82600052602091600f835260018060a01b036040600020541633036115145783600052600d835260406000206040518481019181600082546113b981612119565b936001918a83821691826000146114f55750506001146114b5575b50506113e9925003601f19810183528261216e565b5190209161141084604051838194838301968737810160008382015203808452018261216e565b5190200361147157600f9061142e83336114298261268c565b612a00565b826000525260406000206001600160601b0360a01b815416905533907f8035a66b8cf5805c98f375244d871580e8912e70213ba52638448d5f59716e9d600080a3005b6064906040519062461bcd60e51b82526004820152601b60248201527f506879736963616c2063686970207363616e20726571756972656400000000006044820152fd5b89925060005281600020906000915b8583106114dc575050506113e99282010189806113d4565b81939294508054838689010152019201889185936114c4565b92509350506113e994915060ff191686528015150282010189806113d4565b60405162461bcd60e51b815260048101849052601760248201527f4e6f7420617574686f72697a656420746f20636c61696d0000000000000000006044820152606490fd5b3461021657602036600319011261021657600435600052600f602052602060018060a01b0360406000205416604051908152f35b34610216576040366003190112610216576115a66120ce565b6115ae6122c4565b6115ba81600435612346565b503360009081526011602090815260408083206001600160a01b03909416835292905220805460ff19166001179055005b34610216576020366003190112610216576001600160a01b0361160c6120b8565b16801561162b5760005260036020526020604060002054604051908152f35b6040516322718ad960e21b815260006004820152602490fd5b34610216576000366003190112610216576008546040516001600160a01b039091168152602090f35b3461021657602036600319011261021657602061168b60043561268c565b6040516001600160a01b039091168152f35b34610216576080366003190112610216576004356116b96120ce565b906044358060030b809103610216576116d0612262565b907f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd154938460005260209460078652604060002033600052865260ff60406000205416156118e5575083600052600e85526040600020549081156118ad576000858152600e87526040808220829055600854905163a9059cbb60e01b81526001600160a01b038481166004830152602482018690529392909189918391604491839188165af190811561054657600091611890575b501561185b578686927f27fd7b405d3b1cef830760908e4041d6c33a3e8fee51f248c99462d0d5550885926040519586521693a360e06040519460a08652600860a087015267149150d650d3115160c21b60c0870152850152600d60e08501526c2932b1bcb1b634b73390243ab160991b610100850152604084015260030b6060830152601261012080608085015283015271115b990b5bd98b531a59994814185e5bdd5d60721b6101408301527fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d6101603393a3005b60405162461bcd60e51b815260048101889052600d60248201526c14185e5bdd5d0819985a5b1959609a1b6044820152606490fd5b6118a79150883d8a1161053f57610531818361216e565b88611784565b60405162461bcd60e51b815260048101879052601060248201526f139bc819195c1bdcda5d08199bdd5b9960821b6044820152606490fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b34610216576000366003190112610216576020600a54604051908152f35b34610216576020366003190112610216576004356000526010602052602060018060a01b0360406000205416604051908152f35b346102165760c0366003190112610216576001600160401b0360243581811161021657611986903690600401612235565b9190604435828111610216576119a0903690600401612235565b9190936119ab612262565b608435948560030b8096036102165760a435908111610216576119d2903690600401612235565b9590947fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f5960005260209760078952604060002033600052895260ff604060002054168015611bac575b8015611b6a575b8015611b28575b8015611ae6575b15611aad577fcac66b121c331765585e1fb5e46b697c8259bb88cd50ffa9c19707c7141f549d969798611aa8949392611a8792611a7a604051998a9960a08b5260a08b0191612881565b9288840390890152612881565b9160030b604085015260608401528281036080840152339660043596612881565b0390a3005b60405162461bcd60e51b8152600481018a90526011602482015270556e617574686f72697a656420726f6c6560781b6044820152606490fd5b507f11d2c681bc9c10ed61f9a422c0dbaaddc4054ce58ec726aca73e7e4d31bcd15460005260078952604060002033600052895260ff60406000205416611a30565b507fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b60005260078952604060002033600052895260ff60406000205416611a29565b507fded9b5e0e0e3a2b3f09a0bc36ec64b9bf7a7c2319f3c4d9cff5ce48714257b2160005260078952604060002033600052895260ff60406000205416611a22565b507fd1ae8bbdabd60d63e418b84f5ad6f9cba90092c9816d7724d85f0d4e4bea2c6060005260078952604060002033600052895260ff60406000205416611a1b565b3461021657610691611bff366120e4565b9060405192611c0d84612153565b6000845261089e83838361243d565b346102165760003660031901126102165760206040517fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f598152f35b3461021657604036600319011261021657611c706120ce565b336001600160a01b03821603611c8c57610691906004356123c6565b60405163334bd91960e11b8152600490fd5b3461021657602036600319011261021657600435600052600d6020526107bf611264604060002061218f565b3461021657604036600319011261021657610691600435611ce96120ce565b90806000526007602052611d04600160406000200154612320565b612346565b346102165760003660031901126102165760206040517ffa78b56bc38f897ec7ebbc674481f972d13b589fd545a572f936ef7177b3886b8152f35b346102165760203660031901126102165760043560005260076020526020600160406000200154604051908152f35b3461021657610691611d84366120e4565b9161243d565b3461021657600036600319011261021657600b546040516001600160a01b039091168152602090f35b3461021657604036600319011261021657611dcc6120b8565b611dd46120ce565b9060018060a01b03809116600052601160205260406000209116600052602052602060ff604060002054166040519015158152f35b3461021657604036600319011261021657611e226120b8565b602435611e2e8161268c565b33151580611edd575b80611eb0575b611e98576001600160a01b039283169282918491167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260046020526040902080546001600160a01b0319169091179055005b60405163a9fbf51f60e01b8152336004820152602490fd5b5060018060a01b038116600052600560205260406000203360005260205260ff6040600020541615611e3d565b506001600160a01b038116331415611e37565b3461021657602036600319011261021657600435611f0d8161268c565b506000526004602052602060018060a01b0360406000205416604051908152f35b346102165760003660031901126102165760405160008054611f4f81612119565b808452906001908181169081156112d15750600114611f78576107bf846112648186038261216e565b600080805292507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410611fb957505050810160200161126482611254565b80546020858701810191909152909301928101611fa1565b34610216576020366003190112610216576004359063ffffffff60e01b821680920361021657602091637965db0b60e01b8114908115612013575b5015158152f35b632483248360e11b81149150811561202d575b508361200c565b6380ac58cd60e01b81149150811561205f575b811561204e575b5083612026565b6301ffc9a760e01b14905083612047565b635b5e139f60e01b81149150612040565b60005b8381106120835750506000910152565b8181015183820152602001612073565b906020916120ac81518092818552858086019101612070565b601f01601f1916010190565b600435906001600160a01b038216820361021657565b602435906001600160a01b038216820361021657565b6060906003190112610216576001600160a01b0390600435828116810361021657916024359081168103610216579060443590565b90600182811c92168015612149575b602083101461213357565b634e487b7160e01b600052602260045260246000fd5b91607f1691612128565b602081019081106001600160401b03821117610d0057604052565b90601f801991011681019081106001600160401b03821117610d0057604052565b90604051918260008254926121a384612119565b90818452600194858116908160001461221257506001146121cf575b50506121cd9250038361216e565b565b9093915060005260209081600020936000915b8183106121fa5750506121cd935082010138806121bf565b855488840185015294850194879450918301916121e2565b9150506121cd94506020925060ff191682840152151560051b82010138806121bf565b9181601f84011215610216578235916001600160401b038311610216576020838186019501011161021657565b606435908160030b820361021657565b6001600160401b038111610d0057601f01601f191660200190565b92919261229982612272565b916122a7604051938461216e565b829481845281830111610216578281602093846000960137010152565b3360009081527ff1928bfbc992865887624992d20ce8aff723cf0d7863af9659aca45ef54d988d60205260409020547fd52b9622fe3ce468afb95246111fe2ff28de74ab22e427623dca2ad2172e5f599060ff16156118e55750565b80600052600760205260406000203360005260205260ff60406000205416156118e55750565b906000918083526007602052604083209160018060a01b03169182845260205260ff604084205416156000146123c15780835260076020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b906000918083526007602052604083209160018060a01b03169182845260205260ff6040842054166000146123c1578083526007602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b906001600160a01b039081168015610e4957600091848352846020926002845260409383858720541695869133151580612537575b509060027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9284612504575b85835260038152888320805460010190558683525286812080546001600160a01b0319168517905580a4831682036124d65750505050565b516364283d7b60e01b81526001600160a01b0392831660048201526024810193909352166044820152606490fd5b600087815260046020526040902080546001600160a01b031916905584835260038152888320805460001901905561249e565b9193945091508061258f575b1561255357879291869138612472565b848887612570576024915190637e27328960e01b82526004820152fd5b905163177e802f60e01b81523360048201526024810191909152604490fd5b5033861480156125b4575b806125435750878252600481523384868420541614612543565b5085825260058152848220338352815260ff858320541661259a565b6000828152600260205260408120546001600160a01b03908116939284917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9183612657575b16928361263f575b84815260026020526040812080546001600160a01b0319168517905580a490565b8381526003602052604081206001815401905561261e565b600086815260046020526040902080546001600160a01b03191690558385526003602052604085208054600019019055612616565b6000818152600260205260409020546001600160a01b03169081156126af575090565b60249060405190637e27328960e01b82526004820152fd5b90939192833b6126d9575b5050505050565b604051630a85bd0160e11b8082526001600160a01b039384166004830152958316602482015260448101919091526080606482015294921692602092918590612726906084830190612093565b039483816000978189895af18691816127d1575b5061279b575050503d600014612792573d61275481612272565b90612762604051928361216e565b81528093823d92013e5b8251928361278d57604051633250574960e11b815260048101849052602490fd5b019050fd5b6060925061276c565b919450915063ffffffff60e01b16036127b9575038808080806126d2565b60249060405190633250574960e11b82526004820152fd5b9091508481813d831161280e575b6127e9818361216e565b8101031261280a57516001600160e01b03198116810361280a57903861273a565b8680fd5b503d6127df565b90816020910312610216575180151581036102165790565b90601f811161283b57505050565b600091825260208220906020601f850160051c83019410612877575b601f0160051c01915b82811061286c57505050565b818155600101612860565b9092508290612857565b908060209392818452848401376000828201840152601f01601f1916010190565b81519190604183036128d3576128cc92506020820151906060604084015193015160001a906128de565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161296257926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156129565780516001600160a01b0381161561294d57918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60048110156129dd5780612980575050565b6001810361299a5760405163f645eedf60e01b8152600490fd5b600281036129bb5760405163fce698f760e01b815260048101839052602490fd5b6003146129c55750565b602490604051906335e2f38360e21b82526004820152fd5b634e487b7160e01b600052602160045260246000fd5b9190820391821161060757565b929060405190612a0f82612153565b600082526001600160a01b039481861615610e4957612a2e85836125d0565b958087169081612a5157604051637e27328960e01b815260048101889052602490fd5b82969495961603612a68576121cd949550336126c7565b6040516364283d7b60e01b81526001600160a01b03918216600482015260248101939093528516604483015250606490fdfea264697066735822122093425d014f2c125a495a5105c189819ccfe333a040887aaf35c73d34655250fa64736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
