{
  "_format": "hh-sol-artifact-1",
  "contractName": "MAHAXGovernor",
  "sourceName": "contracts/MAHAXGovernor.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IRegistry",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "contract TimelockController",
          "name": "_timelock",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "initialVoteExtension",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "initialVotingDelay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialVotingPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialProposalThreshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialQuorum",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Empty",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "oldVoteExtension",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "newVoteExtension",
          "type": "uint64"
        }
      ],
      "name": "LateQuorumVoteExtensionSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "ProposalCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "proposer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "signatures",
          "type": "string[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startBlock",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endBlock",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "description",
          "type": "string"
        }
      ],
      "name": "ProposalCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "ProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "extendedDeadline",
          "type": "uint64"
        }
      ],
      "name": "ProposalExtended",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "ProposalQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldProposalThreshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newProposalThreshold",
          "type": "uint256"
        }
      ],
      "name": "ProposalThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldQuorum",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newQuorum",
          "type": "uint256"
        }
      ],
      "name": "QuorumUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldTimelock",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newTimelock",
          "type": "address"
        }
      ],
      "name": "TimelockChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "VoteCast",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "VoteCastWithParams",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldVotingDelay",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotingDelay",
          "type": "uint256"
        }
      ],
      "name": "VotingDelaySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldVotingPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotingPeriod",
          "type": "uint256"
        }
      ],
      "name": "VotingPeriodSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BALLOT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "COUNTING_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EXTENDED_BALLOT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        }
      ],
      "name": "castVote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "castVoteBySig",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "castVoteWithReason",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "castVoteWithReasonAndParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "support",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "castVoteWithReasonAndParamsBySig",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "descriptionHash",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "getVotesWithParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasVoted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "descriptionHash",
          "type": "bytes32"
        }
      ],
      "name": "hashProposal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lateQuorumVoteExtension",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalDeadline",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalEta",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposalThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "proposalVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "againstVotes",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "forVotes",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "abstainVotes",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        }
      ],
      "name": "propose",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "descriptionHash",
          "type": "bytes32"
        }
      ],
      "name": "queue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "quorum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "relay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "newVoteExtension",
          "type": "uint64"
        }
      ],
      "name": "setLateQuorumVoteExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newProposalThreshold",
          "type": "uint256"
        }
      ],
      "name": "setProposalThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newVotingDelay",
          "type": "uint256"
        }
      ],
      "name": "setVotingDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newVotingPeriod",
          "type": "uint256"
        }
      ],
      "name": "setVotingPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum IGovernor.ProposalState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "timelock",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newQuorum",
          "type": "uint256"
        }
      ],
      "name": "updateQuorum",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract TimelockController",
          "name": "newTimelock",
          "type": "address"
        }
      ],
      "name": "updateTimelock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b5060405162003f7e38038062003f7e83398101604081905262000035916200048a565b85858585856040518060400160405280600d81526020016c26a0a420ac23b7bb32b93737b960991b81525080620000716200018a60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060601b60c05261012052505082516200011a9250600091506020840190620003e4565b5062000128905083620001a5565b6200013382620001e6565b6200013e816200028c565b5050506200015281620002cd60201b60201c565b506200015e8162000336565b506001600160601b0319606088901b16610140526200017d816200039f565b5050505050505062000564565b6040805180820190915260018152603160f81b602082015290565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b600081116200024b5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b606482015260840160405180910390fd5b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b600754604080516001600160401b03928316815291831660208301527f7ca4ac117ed3cdce75c1161d8207c440389b1a15d69d096831664657c07dafc2910160405180910390a1600780546001600160401b0319166001600160401b0392909216919091179055565b600a54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600c80549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b828054620003f2906200050e565b90600052602060002090601f01602090048101928262000416576000855562000461565b82601f106200043157805160ff191683800117855562000461565b8280016001018555821562000461579182015b828111156200046157825182559160200191906001019062000444565b506200046f92915062000473565b5090565b5b808211156200046f576000815560010162000474565b600080600080600080600060e0888a031215620004a5578283fd5b8751620004b2816200054b565b6020890151909750620004c5816200054b565b60408901519096506001600160401b0381168114620004e2578384fd5b80955050606088015193506080880151925060a0880151915060c0880151905092959891949750929550565b600181811c908216806200052357607f821691505b602082108114156200054557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03811681146200056157600080fd5b50565b60805160a05160c05160601c60e05161010051610120516101405160601c6139b2620005cc600039600081816105b10152611b6f01526000611f8c01526000611fdb01526000611fb601526000611f0f01526000611f3901526000611f6301526139b26000f3fe60806040526004361061023f5760003560e01c80637b1039991161012e578063c59057e4116100ab578063ea0217cf1161006f578063ea0217cf146107e4578063eb9019d414610804578063ece40cc114610824578063f23a6e6114610844578063f8ce560a1461087057600080fd5b8063c59057e41461070c578063d07f91e91461072c578063d33219b41461074c578063dd4e2ba51461076a578063deaaa7cc146107b057600080fd5b8063ab58fb8e116100f2578063ab58fb8e1461066b578063b58131b01461068b578063bc197c81146106a0578063c01f9e37146106cc578063c28bc2fa146106ec57600080fd5b80637b1039991461059f5780637b3c71d3146105eb5780637d5e81e21461060b5780639a802a6d1461062b578063a890c9101461064b57600080fd5b806335680dc2116101bc578063544ffc9c11610180578063544ffc9c146104c057806354fd4d5014610515578063567813881461053f5780635f398a141461055f57806370b0f6601461057f57600080fd5b806335680dc2146103f45780633932abb1146104145780633bccf4fd146104295780633e4f49e614610449578063438596321461047657600080fd5b8063160cbed711610203578063160cbed7146103455780632656227d146103655780632d63f693146103785780632fe3e2611461039857806332b8113e146103cc57600080fd5b806301ffc9a71461026757806302a251a31461029c57806303420181146102bf57806306fdde03146102df578063150b7a021461030157600080fd5b36610262573061024d610892565b6001600160a01b03161461026057600080fd5b005b600080fd5b34801561027357600080fd5b50610287610282366004613113565b6108ab565b60405190151581526020015b60405180910390f35b3480156102a857600080fd5b506102b16108bc565b604051908152602001610293565b3480156102cb57600080fd5b506102b16102da36600461326e565b6108c7565b3480156102eb57600080fd5b506102f46109bf565b60405161029391906135bc565b34801561030d57600080fd5b5061032c61031c366004612df9565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610293565b34801561035157600080fd5b506102b1610360366004612fa2565b610a51565b6102b1610373366004612fa2565b610c86565b34801561038457600080fd5b506102b1610393366004613157565b610d8f565b3480156103a457600080fd5b506102b17fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156103d857600080fd5b506007546040516001600160401b039091168152602001610293565b34801561040057600080fd5b5061026061040f366004613157565b610dc6565b34801561042057600080fd5b506102b1610e55565b34801561043557600080fd5b506102b1610444366004613311565b610e60565b34801561045557600080fd5b50610469610464366004613157565b610ed6565b6040516102939190613594565b34801561048257600080fd5b5061028761049136600461316f565b60008281526009602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156104cc57600080fd5b506104fa6104db366004613157565b6000908152600960205260409020805460018201546002909201549092565b60408051938452602084019290925290820152606001610293565b34801561052157600080fd5b506040805180820190915260018152603160f81b60208201526102f4565b34801561054b57600080fd5b506102b161055a36600461319e565b610ee1565b34801561056b57600080fd5b506102b161057a366004613208565b610f0a565b34801561058b57600080fd5b5061026061059a366004613157565b610f54565b3480156105ab57600080fd5b506105d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b3480156105f757600080fd5b506102b16106063660046131c9565b610fe0565b34801561061757600080fd5b506102b161062636600461302d565b611032565b34801561063757600080fd5b506102b1610646366004612f4c565b611049565b34801561065757600080fd5b5061026061066636600461313b565b611060565b34801561067757600080fd5b506102b1610686366004613157565b6110ec565b34801561069757600080fd5b506102b1611195565b3480156106ac57600080fd5b5061032c6106bb366004612d50565b63bc197c8160e01b95945050505050565b3480156106d857600080fd5b506102b16106e7366004613157565b6111a0565b3480156106f857600080fd5b50610260610707366004612ef3565b6111ab565b34801561071857600080fd5b506102b1610727366004612fa2565b611277565b34801561073857600080fd5b5061026061074736600461335e565b6112b1565b34801561075857600080fd5b50600a546001600160a01b03166105d3565b34801561077657600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e908201526102f4565b3480156107bc57600080fd5b506102b17f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107f057600080fd5b506102606107ff366004613157565b61133d565b34801561081057600080fd5b506102b161081f366004612ec8565b6113c9565b34801561083057600080fd5b5061026061083f366004613157565b6113ea565b34801561085057600080fd5b5061032c61085f366004612e62565b63f23a6e6160e01b95945050505050565b34801561087c57600080fd5b506102b161088b366004613157565b50600c5490565b60006108a6600a546001600160a01b031690565b905090565b60006108b682611476565b92915050565b60006108a660055490565b60008061096b6109637fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610903929190613477565b60405180910390208b80519060200120604051602001610948959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b6040516020818303038152906040528051906020012061149b565b8686866114e9565b90506109b18a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611507915050565b9a9950505050505050505050565b6060600080546109ce906138bc565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa906138bc565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b600080610a6086868686611277565b90506004610a6d82610ed6565b6007811115610a8c57634e487b7160e01b600052602160045260246000fd5b14610ab25760405162461bcd60e51b8152600401610aa990613642565b60405180910390fd5b600a546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c92916004808301926020929190829003018186803b158015610af757600080fd5b505afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f91906130fb565b600a5460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790610b69908a908a908a906000908b906004016134ee565b60206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb991906130fb565b6000838152600b602052604080822092909255600a5491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091610c04918b918b918b91908b90899060040161353c565b600060405180830381600087803b158015610c1e57600080fd5b505af1158015610c32573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892828242610c649190613832565b6040805192835260208301919091520160405180910390a15095945050505050565b600080610c9586868686611277565b90506000610ca282610ed6565b90506004816007811115610cc657634e487b7160e01b600052602160045260246000fd5b1480610cf157506005816007811115610cef57634e487b7160e01b600052602160045260246000fd5b145b610d0d5760405162461bcd60e51b8152600401610aa990613642565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1610d6b8288888888611516565b610d7882888888886115d4565b610d8582888888886115e1565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b610dce610892565b6001600160a01b0316336001600160a01b031614610dfe5760405162461bcd60e51b8152600401610aa9906135cf565b30610e07610892565b6001600160a01b031614610e495760008036604051610e27929190613477565b604051809103902090505b80610e3d600261161e565b14610e4757610e32565b505b610e52816116a1565b50565b60006108a660045490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610eae9061096390608001610948565b9050610ecb878288604051806020016040528060008152506116e6565b979650505050505050565b60006108b682611709565b600080339050610f02848285604051806020016040528060008152506116e6565b949350505050565b600080339050610ecb87828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611507915050565b610f5c610892565b6001600160a01b0316336001600160a01b031614610f8c5760405162461bcd60e51b8152600401610aa9906135cf565b30610f95610892565b6001600160a01b031614610fd75760008036604051610fb5929190613477565b604051809103902090505b80610fcb600261161e565b14610fd557610fc0565b505b610e528161187f565b60008033905061102886828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9695505050505050565b6000611040858585856118c0565b95945050505050565b6000611056848484611b6b565b90505b9392505050565b611068610892565b6001600160a01b0316336001600160a01b0316146110985760405162461bcd60e51b8152600401610aa9906135cf565b306110a1610892565b6001600160a01b0316146110e357600080366040516110c1929190613477565b604051809103902090505b806110d7600261161e565b146110e1576110cc565b505b610e5281611c80565b600a546000828152600b602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c44359060240160206040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117c91906130fb565b90508060011461118c5780611059565b60009392505050565b60006108a660065490565b60006108b682611ce9565b6111b3610892565b6001600160a01b0316336001600160a01b0316146111e35760405162461bcd60e51b8152600401610aa9906135cf565b306111ec610892565b6001600160a01b03161461122e576000803660405161120c929190613477565b604051809103902090505b80611222600261161e565b1461122c57611217565b505b6112708483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250611d25915050565b5050505050565b60008484848460405160200161129094939291906134a3565b60408051601f19818403018152919052805160209091012095945050505050565b6112b9610892565b6001600160a01b0316336001600160a01b0316146112e95760405162461bcd60e51b8152600401610aa9906135cf565b306112f2610892565b6001600160a01b0316146113345760008036604051611312929190613477565b604051809103902090505b80611328600261161e565b146113325761131d565b505b610e5281611d4b565b611345610892565b6001600160a01b0316336001600160a01b0316146113755760405162461bcd60e51b8152600401610aa9906135cf565b3061137e610892565b6001600160a01b0316146113c0576000803660405161139e929190613477565b604051809103902090505b806113b4600261161e565b146113be576113a9565b505b610e5281611db5565b600061105983836113e560408051602081019091526000815290565b611b6b565b6113f2610892565b6001600160a01b0316336001600160a01b0316146114225760405162461bcd60e51b8152600401610aa9906135cf565b3061142b610892565b6001600160a01b03161461146d576000803660405161144b929190613477565b604051809103902090505b80611461600261161e565b1461146b57611456565b505b610e5281611e56565b60006001600160e01b03198216636e665ced60e01b14806108b657506108b682611e97565b60006108b66114a8611f02565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006114fa87878787612029565b91509150610d858161210c565b60006110288686868686612308565b3061151f610892565b6001600160a01b0316146112705760005b84518110156115cc57306001600160a01b031685828151811061156357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156115bc576115bc83828151811061159d57634e487b7160e01b600052603260045260246000fd5b60200260200101518051906020012060026123f390919063ffffffff16565b6115c5816138f7565b9050611530565b505050505050565b6112708585858585612439565b306115ea610892565b6001600160a01b03161461127057600254600f81810b810b600160801b909204810b900b1315611270576000600255611270565b600061163d8254600f81810b810b600160801b909204810b900b131590565b1561165b57604051631ed9509560e11b815260040160405180910390fd5b508054600f90810b80820b820b600090815260018085016020526040822080549290558454920190920b6001600160801b03166001600160801b03199091161790915590565b600c80549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b60006110408585858561170460408051602081019091526000815290565b611507565b600080611715836124ad565b9050600481600781111561173957634e487b7160e01b600052602160045260246000fd5b146117445792915050565b6000838152600b60205260409020548061175f575092915050565b600a54604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f5299060240160206040518083038186803b1580156117a357600080fd5b505afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db91906130db565b156117ea575060079392505050565b600a54604051632c258a9f60e11b8152600481018390526001600160a01b039091169063584b153e9060240160206040518083038186803b15801561182e57600080fd5b505afa158015611842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186691906130db565b15611875575060059392505050565b5060029392505050565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b60006118ca611195565b6118d93361081f600143613875565b10156119415760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b6064820152608401610aa9565b60006119568686868680519060200120611277565b905084518651146119795760405162461bcd60e51b8152600401610aa990613601565b835186511461199a5760405162461bcd60e51b8152600401610aa990613601565b60008651116119e65760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b6044820152606401610aa9565b600081815260016020908152604091829020825191820190925281546001600160401b03169081905215611a665760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610aa9565b6000611a78611a73610e55565b6125b9565b611a81436125b9565b611a8b919061384a565b90506000611a9a611a736108bc565b611aa4908361384a565b9050611ab08383612625565b611abd6001840182612625565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115611b0957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b3c57816020015b6060815260200190600190039081611b275790505b508c88888e604051611b5699989796959493929190613683565b60405180910390a15091979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfe9190612d34565b604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a89060440160206040518083038186803b158015611c4857600080fd5b505afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906130fb565b600a54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108b6611cf783612643565b600084815260086020908152604091829020825191820190925290546001600160401b031690819052612672565b606061105684848460405180606001604052806029815260200161395460299139612689565b600754604080516001600160401b03928316815291831660208301527f7ca4ac117ed3cdce75c1161d8207c440389b1a15d69d096831664657c07dafc2910160405180910390a16007805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008111611e155760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b6064820152608401610aa9565b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b60006001600160e01b0319821663bf26d89760e01b1480611ec857506001600160e01b031982166379dd796f60e01b145b80611ee357506001600160e01b03198216630271189760e51b145b806108b657506301ffc9a760e01b6001600160e01b03198316146108b6565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611f5b57507f000000000000000000000000000000000000000000000000000000000000000046145b15611f8557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156120565750600090506003612103565b8460ff16601b1415801561206e57508460ff16601c14155b1561207f5750600090506004612103565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156120d3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120fc57600060019250925050612103565b9150600090505b94509492505050565b600081600481111561212e57634e487b7160e01b600052602160045260246000fd5b14156121375750565b600181600481111561215957634e487b7160e01b600052602160045260246000fd5b14156121a25760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610aa9565b60028160048111156121c457634e487b7160e01b600052602160045260246000fd5b14156122125760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610aa9565b600381600481111561223457634e487b7160e01b600052602160045260246000fd5b141561228d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610aa9565b60048160048111156122af57634e487b7160e01b600052602160045260246000fd5b1415610e525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610aa9565b60008061231887878787876127af565b600088815260086020908152604091829020825191820190925281546001600160401b0316908190529192509015801561235657506123568861291f565b156123e857600061236f6007546001600160401b031690565b612378436125b9565b612382919061384a565b905061238d896111a0565b816001600160401b031611156123dc576040516001600160401b038216815289907f541f725fb9f7c98a30cc9c0ff32fbb14358cd7159c847a3aa20a2bdc442ba5119060200160405180910390a25b6123e68282612625565b505b509695505050505050565b8154600160801b90819004600f90810b80820b820b6000908152600180870160205260409091209490945584549301900b6001600160801b039081169091029116179055565b600a5460405163e38335e560e01b81526001600160a01b039091169063e38335e59034906124749088908890889060009089906004016134ee565b6000604051808303818588803b15801561248d57600080fd5b505af11580156124a1573d6000803e3d6000fd5b50505050505050505050565b6000818152600160205260408120600281015460ff16156124d15750600792915050565b6002810154610100900460ff16156124ec5750600292915050565b60006124f784610d8f565b9050806125465760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610aa9565b438110612557575060009392505050565b6000612562856111a0565b905043811061257657506001949350505050565b61257f8561291f565b801561259e575060008581526009602052604090208054600190910154115b156125ae57506004949350505050565b506003949350505050565b60006001600160401b038211156126215760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610aa9565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b60008181526001602081815260408084208151928301909152909101546001600160401b031690819052610db7565b6000818310156126825781611059565b5090919050565b6060824710156126ea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aa9565b6001600160a01b0385163b6127415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa9565b600080866001600160a01b0316858760405161275d9190613487565b60006040518083038185875af1925050503d806000811461279a576040519150601f19603f3d011682016040523d82523d6000602084013e61279f565b606091505b5091509150610ecb828286612956565b60008581526001602081905260408220906127c988610ed6565b60078111156127e857634e487b7160e01b600052602160045260246000fd5b146128415760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610aa9565b604080516020810190915281546001600160401b03169081905260009061286a90889086611b6b565b9050612879888888848861298f565b83516128cb57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4898884896040516128be9493929190613771565b60405180910390a2610ecb565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb8712898884898960405161290c959493929190613799565b60405180910390a2979650505050505050565b6000818152600960205260408120600281015460018201546129419190613832565b61294d61088b85610d8f565b11159392505050565b60608315612965575081611059565b8251156129755782518084602001fd5b8160405162461bcd60e51b8152600401610aa991906135bc565b60008581526009602090815260408083206001600160a01b0388168452600381019092529091205460ff1615612a175760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b6064820152608401610aa9565b6001600160a01b03851660009081526003820160205260408120805460ff1916600117905560ff168460ff161415612a685782816000016000828254612a5d9190613832565b909155506115cc9050565b60ff841660011415612a885782816001016000828254612a5d9190613832565b60ff841660021415612aa85782816002016000828254612a5d9190613832565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b6064820152608401610aa9565b60006001600160401b03831115612b2757612b27613928565b612b3a601f8401601f19166020016137df565b9050828152838383011115612b4e57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612b75578081fd5b81356020612b8a612b858361380f565b6137df565b80838252828201915082860187848660051b8901011115612ba9578586fd5b855b85811015612bd0578135612bbe8161393e565b84529284019290840190600101612bab565b5090979650505050505050565b600082601f830112612bed578081fd5b81356020612bfd612b858361380f565b80838252828201915082860187848660051b8901011115612c1c578586fd5b855b85811015612bd05781356001600160401b03811115612c3b578788fd5b612c498a87838c0101612cff565b8552509284019290840190600101612c1e565b600082601f830112612c6c578081fd5b81356020612c7c612b858361380f565b80838252828201915082860187848660051b8901011115612c9b578586fd5b855b85811015612bd057813584529284019290840190600101612c9d565b60008083601f840112612cca578182fd5b5081356001600160401b03811115612ce0578182fd5b602083019150836020828501011115612cf857600080fd5b9250929050565b600082601f830112612d0f578081fd5b61105983833560208501612b0e565b803560ff81168114612d2f57600080fd5b919050565b600060208284031215612d45578081fd5b81516110598161393e565b600080600080600060a08688031215612d67578081fd5b8535612d728161393e565b94506020860135612d828161393e565b935060408601356001600160401b0380821115612d9d578283fd5b612da989838a01612c5c565b94506060880135915080821115612dbe578283fd5b612dca89838a01612c5c565b93506080880135915080821115612ddf578283fd5b50612dec88828901612cff565b9150509295509295909350565b60008060008060808587031215612e0e578081fd5b8435612e198161393e565b93506020850135612e298161393e565b92506040850135915060608501356001600160401b03811115612e4a578182fd5b612e5687828801612cff565b91505092959194509250565b600080600080600060a08688031215612e79578283fd5b8535612e848161393e565b94506020860135612e948161393e565b9350604086013592506060860135915060808601356001600160401b03811115612ebc578182fd5b612dec88828901612cff565b60008060408385031215612eda578182fd5b8235612ee58161393e565b946020939093013593505050565b60008060008060608587031215612f08578182fd5b8435612f138161393e565b93506020850135925060408501356001600160401b03811115612f34578283fd5b612f4087828801612cb9565b95989497509550505050565b600080600060608486031215612f60578081fd5b8335612f6b8161393e565b92506020840135915060408401356001600160401b03811115612f8c578182fd5b612f9886828701612cff565b9150509250925092565b60008060008060808587031215612fb7578182fd5b84356001600160401b0380821115612fcd578384fd5b612fd988838901612b65565b95506020870135915080821115612fee578384fd5b612ffa88838901612c5c565b9450604087013591508082111561300f578384fd5b5061301c87828801612bdd565b949793965093946060013593505050565b60008060008060808587031215613042578182fd5b84356001600160401b0380821115613058578384fd5b61306488838901612b65565b95506020870135915080821115613079578384fd5b61308588838901612c5c565b9450604087013591508082111561309a578384fd5b6130a688838901612bdd565b935060608701359150808211156130bb578283fd5b508501601f810187136130cc578182fd5b612e5687823560208401612b0e565b6000602082840312156130ec578081fd5b81518015158114611059578182fd5b60006020828403121561310c578081fd5b5051919050565b600060208284031215613124578081fd5b81356001600160e01b031981168114611059578182fd5b60006020828403121561314c578081fd5b81356110598161393e565b600060208284031215613168578081fd5b5035919050565b60008060408385031215613181578182fd5b8235915060208301356131938161393e565b809150509250929050565b600080604083850312156131b0578182fd5b823591506131c060208401612d1e565b90509250929050565b600080600080606085870312156131de578182fd5b843593506131ee60208601612d1e565b925060408501356001600160401b03811115612f34578283fd5b60008060008060006080868803121561321f578283fd5b8535945061322f60208701612d1e565b935060408601356001600160401b038082111561324a578485fd5b61325689838a01612cb9565b90955093506060880135915080821115612ddf578283fd5b60008060008060008060008060e0898b031215613289578586fd5b8835975061329960208a01612d1e565b965060408901356001600160401b03808211156132b4578788fd5b6132c08c838d01612cb9565b909850965060608b01359150808211156132d8578485fd5b506132e58b828c01612cff565b9450506132f460808a01612d1e565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a08688031215613328578283fd5b8535945061333860208701612d1e565b935061334660408701612d1e565b94979396509394606081013594506080013592915050565b60006020828403121561336f578081fd5b81356001600160401b0381168114611059578182fd5b6000815180845260208085019450808401835b838110156133bd5781516001600160a01b031687529582019590820190600101613398565b509495945050505050565b600081518084526020808501808196508360051b81019150828601855b8581101561340f5782840389526133fd84835161344b565b988501989350908401906001016133e5565b5091979650505050505050565b6000815180845260208085019450808401835b838110156133bd5781518752958201959082019060010161342f565b6000815180845261346381602086016020860161388c565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000825161349981846020870161388c565b9190910192915050565b6080815260006134b66080830187613385565b82810360208401526134c8818761341c565b905082810360408401526134dc81866133c8565b91505082606083015295945050505050565b60a08152600061350160a0830188613385565b8281036020840152613513818861341c565b9050828103604084015261352781876133c8565b60608401959095525050608001529392505050565b60c08152600061354f60c0830189613385565b8281036020840152613561818961341c565b9050828103604084015261357581886133c8565b60608401969096525050608081019290925260a0909101529392505050565b60208101600883106135b657634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611059602083018461344b565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60006101208b8352602060018060a01b038c16818501528160408501526136ac8285018c613385565b915083820360608501526136c0828b61341c565b915083820360808501528189518084528284019150828160051b850101838c01865b8381101561371057601f198784030185526136fe83835161344b565b948601949250908501906001016136e2565b505086810360a0880152613724818c6133c8565b94505050505061373f60c08401876001600160401b03169052565b6001600160401b03851660e0840152828103610100840152613761818561344b565b9c9b505050505050505050505050565b84815260ff84166020820152826040820152608060608201526000611028608083018461344b565b85815260ff8516602082015283604082015260a0606082015260006137c160a083018561344b565b82810360808401526137d3818561344b565b98975050505050505050565b604051601f8201601f191681016001600160401b038111828210171561380757613807613928565b604052919050565b60006001600160401b0382111561382857613828613928565b5060051b60200190565b6000821982111561384557613845613912565b500190565b60006001600160401b0380831681851680830382111561386c5761386c613912565b01949350505050565b60008282101561388757613887613912565b500390565b60005b838110156138a757818101518382015260200161388f565b838111156138b6576000848401525b50505050565b600181811c908216806138d057607f821691505b602082108114156138f157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561390b5761390b613912565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5257600080fdfe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220afbe54a25605b3b24baa7e442de657a4dd823e8db1463329faa215a9010c6a2c64736f6c63430008040033",
  "deployedBytecode": "0x60806040526004361061023f5760003560e01c80637b1039991161012e578063c59057e4116100ab578063ea0217cf1161006f578063ea0217cf146107e4578063eb9019d414610804578063ece40cc114610824578063f23a6e6114610844578063f8ce560a1461087057600080fd5b8063c59057e41461070c578063d07f91e91461072c578063d33219b41461074c578063dd4e2ba51461076a578063deaaa7cc146107b057600080fd5b8063ab58fb8e116100f2578063ab58fb8e1461066b578063b58131b01461068b578063bc197c81146106a0578063c01f9e37146106cc578063c28bc2fa146106ec57600080fd5b80637b1039991461059f5780637b3c71d3146105eb5780637d5e81e21461060b5780639a802a6d1461062b578063a890c9101461064b57600080fd5b806335680dc2116101bc578063544ffc9c11610180578063544ffc9c146104c057806354fd4d5014610515578063567813881461053f5780635f398a141461055f57806370b0f6601461057f57600080fd5b806335680dc2146103f45780633932abb1146104145780633bccf4fd146104295780633e4f49e614610449578063438596321461047657600080fd5b8063160cbed711610203578063160cbed7146103455780632656227d146103655780632d63f693146103785780632fe3e2611461039857806332b8113e146103cc57600080fd5b806301ffc9a71461026757806302a251a31461029c57806303420181146102bf57806306fdde03146102df578063150b7a021461030157600080fd5b36610262573061024d610892565b6001600160a01b03161461026057600080fd5b005b600080fd5b34801561027357600080fd5b50610287610282366004613113565b6108ab565b60405190151581526020015b60405180910390f35b3480156102a857600080fd5b506102b16108bc565b604051908152602001610293565b3480156102cb57600080fd5b506102b16102da36600461326e565b6108c7565b3480156102eb57600080fd5b506102f46109bf565b60405161029391906135bc565b34801561030d57600080fd5b5061032c61031c366004612df9565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610293565b34801561035157600080fd5b506102b1610360366004612fa2565b610a51565b6102b1610373366004612fa2565b610c86565b34801561038457600080fd5b506102b1610393366004613157565b610d8f565b3480156103a457600080fd5b506102b17fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156103d857600080fd5b506007546040516001600160401b039091168152602001610293565b34801561040057600080fd5b5061026061040f366004613157565b610dc6565b34801561042057600080fd5b506102b1610e55565b34801561043557600080fd5b506102b1610444366004613311565b610e60565b34801561045557600080fd5b50610469610464366004613157565b610ed6565b6040516102939190613594565b34801561048257600080fd5b5061028761049136600461316f565b60008281526009602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156104cc57600080fd5b506104fa6104db366004613157565b6000908152600960205260409020805460018201546002909201549092565b60408051938452602084019290925290820152606001610293565b34801561052157600080fd5b506040805180820190915260018152603160f81b60208201526102f4565b34801561054b57600080fd5b506102b161055a36600461319e565b610ee1565b34801561056b57600080fd5b506102b161057a366004613208565b610f0a565b34801561058b57600080fd5b5061026061059a366004613157565b610f54565b3480156105ab57600080fd5b506105d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b3480156105f757600080fd5b506102b16106063660046131c9565b610fe0565b34801561061757600080fd5b506102b161062636600461302d565b611032565b34801561063757600080fd5b506102b1610646366004612f4c565b611049565b34801561065757600080fd5b5061026061066636600461313b565b611060565b34801561067757600080fd5b506102b1610686366004613157565b6110ec565b34801561069757600080fd5b506102b1611195565b3480156106ac57600080fd5b5061032c6106bb366004612d50565b63bc197c8160e01b95945050505050565b3480156106d857600080fd5b506102b16106e7366004613157565b6111a0565b3480156106f857600080fd5b50610260610707366004612ef3565b6111ab565b34801561071857600080fd5b506102b1610727366004612fa2565b611277565b34801561073857600080fd5b5061026061074736600461335e565b6112b1565b34801561075857600080fd5b50600a546001600160a01b03166105d3565b34801561077657600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e908201526102f4565b3480156107bc57600080fd5b506102b17f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107f057600080fd5b506102606107ff366004613157565b61133d565b34801561081057600080fd5b506102b161081f366004612ec8565b6113c9565b34801561083057600080fd5b5061026061083f366004613157565b6113ea565b34801561085057600080fd5b5061032c61085f366004612e62565b63f23a6e6160e01b95945050505050565b34801561087c57600080fd5b506102b161088b366004613157565b50600c5490565b60006108a6600a546001600160a01b031690565b905090565b60006108b682611476565b92915050565b60006108a660055490565b60008061096b6109637fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610903929190613477565b60405180910390208b80519060200120604051602001610948959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b6040516020818303038152906040528051906020012061149b565b8686866114e9565b90506109b18a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611507915050565b9a9950505050505050505050565b6060600080546109ce906138bc565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa906138bc565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b600080610a6086868686611277565b90506004610a6d82610ed6565b6007811115610a8c57634e487b7160e01b600052602160045260246000fd5b14610ab25760405162461bcd60e51b8152600401610aa990613642565b60405180910390fd5b600a546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c92916004808301926020929190829003018186803b158015610af757600080fd5b505afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f91906130fb565b600a5460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790610b69908a908a908a906000908b906004016134ee565b60206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb991906130fb565b6000838152600b602052604080822092909255600a5491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091610c04918b918b918b91908b90899060040161353c565b600060405180830381600087803b158015610c1e57600080fd5b505af1158015610c32573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892828242610c649190613832565b6040805192835260208301919091520160405180910390a15095945050505050565b600080610c9586868686611277565b90506000610ca282610ed6565b90506004816007811115610cc657634e487b7160e01b600052602160045260246000fd5b1480610cf157506005816007811115610cef57634e487b7160e01b600052602160045260246000fd5b145b610d0d5760405162461bcd60e51b8152600401610aa990613642565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1610d6b8288888888611516565b610d7882888888886115d4565b610d8582888888886115e1565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b610dce610892565b6001600160a01b0316336001600160a01b031614610dfe5760405162461bcd60e51b8152600401610aa9906135cf565b30610e07610892565b6001600160a01b031614610e495760008036604051610e27929190613477565b604051809103902090505b80610e3d600261161e565b14610e4757610e32565b505b610e52816116a1565b50565b60006108a660045490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610eae9061096390608001610948565b9050610ecb878288604051806020016040528060008152506116e6565b979650505050505050565b60006108b682611709565b600080339050610f02848285604051806020016040528060008152506116e6565b949350505050565b600080339050610ecb87828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611507915050565b610f5c610892565b6001600160a01b0316336001600160a01b031614610f8c5760405162461bcd60e51b8152600401610aa9906135cf565b30610f95610892565b6001600160a01b031614610fd75760008036604051610fb5929190613477565b604051809103902090505b80610fcb600261161e565b14610fd557610fc0565b505b610e528161187f565b60008033905061102886828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9695505050505050565b6000611040858585856118c0565b95945050505050565b6000611056848484611b6b565b90505b9392505050565b611068610892565b6001600160a01b0316336001600160a01b0316146110985760405162461bcd60e51b8152600401610aa9906135cf565b306110a1610892565b6001600160a01b0316146110e357600080366040516110c1929190613477565b604051809103902090505b806110d7600261161e565b146110e1576110cc565b505b610e5281611c80565b600a546000828152600b602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c44359060240160206040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117c91906130fb565b90508060011461118c5780611059565b60009392505050565b60006108a660065490565b60006108b682611ce9565b6111b3610892565b6001600160a01b0316336001600160a01b0316146111e35760405162461bcd60e51b8152600401610aa9906135cf565b306111ec610892565b6001600160a01b03161461122e576000803660405161120c929190613477565b604051809103902090505b80611222600261161e565b1461122c57611217565b505b6112708483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250611d25915050565b5050505050565b60008484848460405160200161129094939291906134a3565b60408051601f19818403018152919052805160209091012095945050505050565b6112b9610892565b6001600160a01b0316336001600160a01b0316146112e95760405162461bcd60e51b8152600401610aa9906135cf565b306112f2610892565b6001600160a01b0316146113345760008036604051611312929190613477565b604051809103902090505b80611328600261161e565b146113325761131d565b505b610e5281611d4b565b611345610892565b6001600160a01b0316336001600160a01b0316146113755760405162461bcd60e51b8152600401610aa9906135cf565b3061137e610892565b6001600160a01b0316146113c0576000803660405161139e929190613477565b604051809103902090505b806113b4600261161e565b146113be576113a9565b505b610e5281611db5565b600061105983836113e560408051602081019091526000815290565b611b6b565b6113f2610892565b6001600160a01b0316336001600160a01b0316146114225760405162461bcd60e51b8152600401610aa9906135cf565b3061142b610892565b6001600160a01b03161461146d576000803660405161144b929190613477565b604051809103902090505b80611461600261161e565b1461146b57611456565b505b610e5281611e56565b60006001600160e01b03198216636e665ced60e01b14806108b657506108b682611e97565b60006108b66114a8611f02565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006114fa87878787612029565b91509150610d858161210c565b60006110288686868686612308565b3061151f610892565b6001600160a01b0316146112705760005b84518110156115cc57306001600160a01b031685828151811061156357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156115bc576115bc83828151811061159d57634e487b7160e01b600052603260045260246000fd5b60200260200101518051906020012060026123f390919063ffffffff16565b6115c5816138f7565b9050611530565b505050505050565b6112708585858585612439565b306115ea610892565b6001600160a01b03161461127057600254600f81810b810b600160801b909204810b900b1315611270576000600255611270565b600061163d8254600f81810b810b600160801b909204810b900b131590565b1561165b57604051631ed9509560e11b815260040160405180910390fd5b508054600f90810b80820b820b600090815260018085016020526040822080549290558454920190920b6001600160801b03166001600160801b03199091161790915590565b600c80549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb0910160405180910390a15050565b60006110408585858561170460408051602081019091526000815290565b611507565b600080611715836124ad565b9050600481600781111561173957634e487b7160e01b600052602160045260246000fd5b146117445792915050565b6000838152600b60205260409020548061175f575092915050565b600a54604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f5299060240160206040518083038186803b1580156117a357600080fd5b505afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db91906130db565b156117ea575060079392505050565b600a54604051632c258a9f60e11b8152600481018390526001600160a01b039091169063584b153e9060240160206040518083038186803b15801561182e57600080fd5b505afa158015611842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186691906130db565b15611875575060059392505050565b5060029392505050565b60045460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1600455565b60006118ca611195565b6118d93361081f600143613875565b10156119415760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b6064820152608401610aa9565b60006119568686868680519060200120611277565b905084518651146119795760405162461bcd60e51b8152600401610aa990613601565b835186511461199a5760405162461bcd60e51b8152600401610aa990613601565b60008651116119e65760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b6044820152606401610aa9565b600081815260016020908152604091829020825191820190925281546001600160401b03169081905215611a665760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610aa9565b6000611a78611a73610e55565b6125b9565b611a81436125b9565b611a8b919061384a565b90506000611a9a611a736108bc565b611aa4908361384a565b9050611ab08383612625565b611abd6001840182612625565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115611b0957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b3c57816020015b6060815260200190600190039081611b275790505b508c88888e604051611b5699989796959493929190613683565b60405180910390a15091979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfe9190612d34565b604051630748d63560e31b81526001600160a01b038681166004830152602482018690529190911690633a46b1a89060440160206040518083038186803b158015611c4857600080fd5b505afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906130fb565b600a54604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108b6611cf783612643565b600084815260086020908152604091829020825191820190925290546001600160401b031690819052612672565b606061105684848460405180606001604052806029815260200161395460299139612689565b600754604080516001600160401b03928316815291831660208301527f7ca4ac117ed3cdce75c1161d8207c440389b1a15d69d096831664657c07dafc2910160405180910390a16007805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008111611e155760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b6064820152608401610aa9565b60055460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1600555565b60065460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1600655565b60006001600160e01b0319821663bf26d89760e01b1480611ec857506001600160e01b031982166379dd796f60e01b145b80611ee357506001600160e01b03198216630271189760e51b145b806108b657506301ffc9a760e01b6001600160e01b03198316146108b6565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611f5b57507f000000000000000000000000000000000000000000000000000000000000000046145b15611f8557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156120565750600090506003612103565b8460ff16601b1415801561206e57508460ff16601c14155b1561207f5750600090506004612103565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156120d3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120fc57600060019250925050612103565b9150600090505b94509492505050565b600081600481111561212e57634e487b7160e01b600052602160045260246000fd5b14156121375750565b600181600481111561215957634e487b7160e01b600052602160045260246000fd5b14156121a25760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610aa9565b60028160048111156121c457634e487b7160e01b600052602160045260246000fd5b14156122125760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610aa9565b600381600481111561223457634e487b7160e01b600052602160045260246000fd5b141561228d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610aa9565b60048160048111156122af57634e487b7160e01b600052602160045260246000fd5b1415610e525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610aa9565b60008061231887878787876127af565b600088815260086020908152604091829020825191820190925281546001600160401b0316908190529192509015801561235657506123568861291f565b156123e857600061236f6007546001600160401b031690565b612378436125b9565b612382919061384a565b905061238d896111a0565b816001600160401b031611156123dc576040516001600160401b038216815289907f541f725fb9f7c98a30cc9c0ff32fbb14358cd7159c847a3aa20a2bdc442ba5119060200160405180910390a25b6123e68282612625565b505b509695505050505050565b8154600160801b90819004600f90810b80820b820b6000908152600180870160205260409091209490945584549301900b6001600160801b039081169091029116179055565b600a5460405163e38335e560e01b81526001600160a01b039091169063e38335e59034906124749088908890889060009089906004016134ee565b6000604051808303818588803b15801561248d57600080fd5b505af11580156124a1573d6000803e3d6000fd5b50505050505050505050565b6000818152600160205260408120600281015460ff16156124d15750600792915050565b6002810154610100900460ff16156124ec5750600292915050565b60006124f784610d8f565b9050806125465760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610aa9565b438110612557575060009392505050565b6000612562856111a0565b905043811061257657506001949350505050565b61257f8561291f565b801561259e575060008581526009602052604090208054600190910154115b156125ae57506004949350505050565b506003949350505050565b60006001600160401b038211156126215760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610aa9565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b60008181526001602081815260408084208151928301909152909101546001600160401b031690819052610db7565b6000818310156126825781611059565b5090919050565b6060824710156126ea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aa9565b6001600160a01b0385163b6127415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa9565b600080866001600160a01b0316858760405161275d9190613487565b60006040518083038185875af1925050503d806000811461279a576040519150601f19603f3d011682016040523d82523d6000602084013e61279f565b606091505b5091509150610ecb828286612956565b60008581526001602081905260408220906127c988610ed6565b60078111156127e857634e487b7160e01b600052602160045260246000fd5b146128415760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610aa9565b604080516020810190915281546001600160401b03169081905260009061286a90889086611b6b565b9050612879888888848861298f565b83516128cb57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4898884896040516128be9493929190613771565b60405180910390a2610ecb565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb8712898884898960405161290c959493929190613799565b60405180910390a2979650505050505050565b6000818152600960205260408120600281015460018201546129419190613832565b61294d61088b85610d8f565b11159392505050565b60608315612965575081611059565b8251156129755782518084602001fd5b8160405162461bcd60e51b8152600401610aa991906135bc565b60008581526009602090815260408083206001600160a01b0388168452600381019092529091205460ff1615612a175760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b6064820152608401610aa9565b6001600160a01b03851660009081526003820160205260408120805460ff1916600117905560ff168460ff161415612a685782816000016000828254612a5d9190613832565b909155506115cc9050565b60ff841660011415612a885782816001016000828254612a5d9190613832565b60ff841660021415612aa85782816002016000828254612a5d9190613832565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b6064820152608401610aa9565b60006001600160401b03831115612b2757612b27613928565b612b3a601f8401601f19166020016137df565b9050828152838383011115612b4e57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612b75578081fd5b81356020612b8a612b858361380f565b6137df565b80838252828201915082860187848660051b8901011115612ba9578586fd5b855b85811015612bd0578135612bbe8161393e565b84529284019290840190600101612bab565b5090979650505050505050565b600082601f830112612bed578081fd5b81356020612bfd612b858361380f565b80838252828201915082860187848660051b8901011115612c1c578586fd5b855b85811015612bd05781356001600160401b03811115612c3b578788fd5b612c498a87838c0101612cff565b8552509284019290840190600101612c1e565b600082601f830112612c6c578081fd5b81356020612c7c612b858361380f565b80838252828201915082860187848660051b8901011115612c9b578586fd5b855b85811015612bd057813584529284019290840190600101612c9d565b60008083601f840112612cca578182fd5b5081356001600160401b03811115612ce0578182fd5b602083019150836020828501011115612cf857600080fd5b9250929050565b600082601f830112612d0f578081fd5b61105983833560208501612b0e565b803560ff81168114612d2f57600080fd5b919050565b600060208284031215612d45578081fd5b81516110598161393e565b600080600080600060a08688031215612d67578081fd5b8535612d728161393e565b94506020860135612d828161393e565b935060408601356001600160401b0380821115612d9d578283fd5b612da989838a01612c5c565b94506060880135915080821115612dbe578283fd5b612dca89838a01612c5c565b93506080880135915080821115612ddf578283fd5b50612dec88828901612cff565b9150509295509295909350565b60008060008060808587031215612e0e578081fd5b8435612e198161393e565b93506020850135612e298161393e565b92506040850135915060608501356001600160401b03811115612e4a578182fd5b612e5687828801612cff565b91505092959194509250565b600080600080600060a08688031215612e79578283fd5b8535612e848161393e565b94506020860135612e948161393e565b9350604086013592506060860135915060808601356001600160401b03811115612ebc578182fd5b612dec88828901612cff565b60008060408385031215612eda578182fd5b8235612ee58161393e565b946020939093013593505050565b60008060008060608587031215612f08578182fd5b8435612f138161393e565b93506020850135925060408501356001600160401b03811115612f34578283fd5b612f4087828801612cb9565b95989497509550505050565b600080600060608486031215612f60578081fd5b8335612f6b8161393e565b92506020840135915060408401356001600160401b03811115612f8c578182fd5b612f9886828701612cff565b9150509250925092565b60008060008060808587031215612fb7578182fd5b84356001600160401b0380821115612fcd578384fd5b612fd988838901612b65565b95506020870135915080821115612fee578384fd5b612ffa88838901612c5c565b9450604087013591508082111561300f578384fd5b5061301c87828801612bdd565b949793965093946060013593505050565b60008060008060808587031215613042578182fd5b84356001600160401b0380821115613058578384fd5b61306488838901612b65565b95506020870135915080821115613079578384fd5b61308588838901612c5c565b9450604087013591508082111561309a578384fd5b6130a688838901612bdd565b935060608701359150808211156130bb578283fd5b508501601f810187136130cc578182fd5b612e5687823560208401612b0e565b6000602082840312156130ec578081fd5b81518015158114611059578182fd5b60006020828403121561310c578081fd5b5051919050565b600060208284031215613124578081fd5b81356001600160e01b031981168114611059578182fd5b60006020828403121561314c578081fd5b81356110598161393e565b600060208284031215613168578081fd5b5035919050565b60008060408385031215613181578182fd5b8235915060208301356131938161393e565b809150509250929050565b600080604083850312156131b0578182fd5b823591506131c060208401612d1e565b90509250929050565b600080600080606085870312156131de578182fd5b843593506131ee60208601612d1e565b925060408501356001600160401b03811115612f34578283fd5b60008060008060006080868803121561321f578283fd5b8535945061322f60208701612d1e565b935060408601356001600160401b038082111561324a578485fd5b61325689838a01612cb9565b90955093506060880135915080821115612ddf578283fd5b60008060008060008060008060e0898b031215613289578586fd5b8835975061329960208a01612d1e565b965060408901356001600160401b03808211156132b4578788fd5b6132c08c838d01612cb9565b909850965060608b01359150808211156132d8578485fd5b506132e58b828c01612cff565b9450506132f460808a01612d1e565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a08688031215613328578283fd5b8535945061333860208701612d1e565b935061334660408701612d1e565b94979396509394606081013594506080013592915050565b60006020828403121561336f578081fd5b81356001600160401b0381168114611059578182fd5b6000815180845260208085019450808401835b838110156133bd5781516001600160a01b031687529582019590820190600101613398565b509495945050505050565b600081518084526020808501808196508360051b81019150828601855b8581101561340f5782840389526133fd84835161344b565b988501989350908401906001016133e5565b5091979650505050505050565b6000815180845260208085019450808401835b838110156133bd5781518752958201959082019060010161342f565b6000815180845261346381602086016020860161388c565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000825161349981846020870161388c565b9190910192915050565b6080815260006134b66080830187613385565b82810360208401526134c8818761341c565b905082810360408401526134dc81866133c8565b91505082606083015295945050505050565b60a08152600061350160a0830188613385565b8281036020840152613513818861341c565b9050828103604084015261352781876133c8565b60608401959095525050608001529392505050565b60c08152600061354f60c0830189613385565b8281036020840152613561818961341c565b9050828103604084015261357581886133c8565b60608401969096525050608081019290925260a0909101529392505050565b60208101600883106135b657634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000611059602083018461344b565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60006101208b8352602060018060a01b038c16818501528160408501526136ac8285018c613385565b915083820360608501526136c0828b61341c565b915083820360808501528189518084528284019150828160051b850101838c01865b8381101561371057601f198784030185526136fe83835161344b565b948601949250908501906001016136e2565b505086810360a0880152613724818c6133c8565b94505050505061373f60c08401876001600160401b03169052565b6001600160401b03851660e0840152828103610100840152613761818561344b565b9c9b505050505050505050505050565b84815260ff84166020820152826040820152608060608201526000611028608083018461344b565b85815260ff8516602082015283604082015260a0606082015260006137c160a083018561344b565b82810360808401526137d3818561344b565b98975050505050505050565b604051601f8201601f191681016001600160401b038111828210171561380757613807613928565b604052919050565b60006001600160401b0382111561382857613828613928565b5060051b60200190565b6000821982111561384557613845613912565b500190565b60006001600160401b0380831681851680830382111561386c5761386c613912565b01949350505050565b60008282101561388757613887613912565b500390565b60005b838110156138a757818101518382015260200161388f565b838111156138b6576000848401525b50505050565b600181811c908216806138d057607f821691505b602082108114156138f157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561390b5761390b613912565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5257600080fdfe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220afbe54a25605b3b24baa7e442de657a4dd823e8db1463329faa215a9010c6a2c64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
