{
  "_format": "hh-sol-artifact-1",
  "contractName": "ArbitrumSpokeConnector",
  "sourceName": "contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_mirrorDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_amb",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_processGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserveGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_merkle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Connector__processMessage_notUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotCrossChainCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RateLimited__rateLimited_messageSendRateExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__index_indexMoreThan32Bytes",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loc",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "len",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slice",
          "type": "uint256"
        }
      ],
      "name": "TypedMemView__index_overrun",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_identityOOG",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_invalidPointer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__unsafeCopyTo_nullPointer",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "AggregateRootVerified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "AliasedSenderUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "updated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "DelayBlocksUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageProcessed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "aggregateRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "MessageProven",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "MirrorConnectorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "mirrorDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "amb",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "rootManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "mirrorConnector",
          "type": "address"
        }
      ],
      "name": "NewConnector",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposedOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "leaf",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "Process",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRateLimit",
          "type": "uint256"
        }
      ],
      "name": "SendRateLimitUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "watcherManager",
          "type": "address"
        }
      ],
      "name": "WatcherManagerChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "AMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MERKLE",
      "outputs": [
        {
          "internalType": "contract MerkleTreeManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIRROR_DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROCESS_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVE_GAS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROOT_MANAGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "addSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "aliasedSender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowlistedSenders",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delayBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "home",
      "outputs": [
        {
          "internalType": "contract IOutbox",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_potentialReplica",
          "type": "address"
        }
      ],
      "name": "isReplica",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastSentBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messages",
      "outputs": [
        {
          "internalType": "enum SpokeConnector.MessageStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mirrorConnector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "outboundRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "pendingAggregateRoots",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "processMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newlyProposed",
          "type": "address"
        }
      ],
      "name": "proposeNewOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes32[32]",
              "name": "path",
              "type": "bytes32[32]"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "internalType": "struct SpokeConnector.Proof[]",
          "name": "_proofs",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes32",
          "name": "_aggregateRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_aggregatePath",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_aggregateIndex",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenAggregateRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "provenMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rateLimitBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_fraudulentRoot",
          "type": "bytes32"
        }
      ],
      "name": "removePendingAggregateRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "removeSender",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounced",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_encodedData",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "sentMessageRoots",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_delayBlocks",
          "type": "uint256"
        }
      ],
      "name": "setDelayBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        }
      ],
      "name": "setMirrorConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rateLimit",
          "type": "uint256"
        }
      ],
      "name": "setRateLimitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcherManager",
          "type": "address"
        }
      ],
      "name": "setWatcherManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_expected",
          "type": "address"
        }
      ],
      "name": "verifySender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "watcherManager",
      "outputs": [
        {
          "internalType": "contract WatcherManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b5060405162003cbc38038062003cbc8339810160408190526200003591620004ae565b89898989898989898989808a8a8a8a8a6200005033620002bd565b8463ffffffff166000036200009b5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e75760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000092565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011f576200011f8162000322565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f25760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000092565b613a978411620002345760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000092565b6101208590526101408490526001600160a01b038216620002875760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000092565b506001600160a01b03166101005260085550620002ad95508b9450506200039692505050565b5050505050505050505062000587565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6200032d8162000396565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60a0516040516326ddea8360e11b81526001600160a01b038381166004830152600060248301819052921690634dbbd50690604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f919062000562565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b805163ffffffff811681146200049157600080fd5b919050565b80516001600160a01b03811681146200049157600080fd5b6000806000806000806000806000806101408b8d031215620004cf57600080fd5b620004da8b6200047c565b9950620004ea60208c016200047c565b9850620004fa60408c0162000496565b97506200050a60608c0162000496565b96506200051a60808c0162000496565b955060a08b0151945060c08b0151935060e08b01519250620005406101008c0162000496565b9150620005516101208c0162000496565b90509295989b9194979a5092959850565b6000602082840312156200057557600080fd5b620005808262000496565b9392505050565b60805160a05160c05160e05161010051610120516101405161368662000636600039600081816103250152611d4c01526000818161090e01528181611d6d0152611dfa01526000818161073501528181610a8b01528181610fb50152611685015260006102b50152600061057b0152600081816108c401528181611884015281816121a00152612a680152600081816104c201528181610671015281816116270152611c4c01526136866000f3fe6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059d57806365eaf11b146105cd57806368742da6146105e25780636a42b8f8146106025780636b04a93314610618578063715018a61461063857600080fd5b806352a9674b146104b0578063572386ca146104e4578063579c1618146105145780635bd11efc1461052a5780635c975abb1461054a5780635f61e3ec1461056957600080fd5b8063361d88ac11610250578063361d88ac146103e55780633cf52ffb1461041d5780633f4ba83a146104325780634ff746f614610447578063508a109b146104675780635190bc531461048757600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004613014565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b6103116103633660046130d0565b610a48565b34801561037457600080fd5b50610398610383366004613014565b600f6020526000908152604090205460ff1681565b6040516102e8919061311b565b3480156103b157600080fd5b506103d56103c0366004613014565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50601054610405906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b34801561042957600080fd5b50600254610347565b34801561043e57600080fd5b50610311610beb565b34801561045357600080fd5b506103116104623660046130d0565b610c28565b34801561047357600080fd5b50610311610482366004613143565b610cb8565b34801561049357600080fd5b506103d56104a23660046131f4565b6001600160a01b0316301490565b3480156104bc57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f057600080fd5b506103d56104ff366004613014565b600c6020526000908152604090205460ff1681565b34801561052057600080fd5b5061034760055481565b34801561053657600080fd5b506103116105453660046131f4565b610f7a565b34801561055657600080fd5b50600354600160a01b900460ff166103d5565b34801561057557600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a957600080fd5b506103d56105b83660046131f4565b600d6020526000908152604090205460ff1681565b3480156105d957600080fd5b50610347610fb1565b3480156105ee57600080fd5b506103116105fd3660046131f4565b61103a565b34801561060e57600080fd5b5062093a80610347565b34801561062457600080fd5b50610311610633366004613014565b6110b7565b34801561064457600080fd5b50610311611182565b34801561065957600080fd5b506103116111ad565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610405565b3480156106bf57600080fd5b506103d56106ce366004613014565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004613014565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610405565b34801561072f57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610405906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a83660046131f4565b611261565b3480156107b957600080fd5b506103116107c83660046131f4565b6112ff565b3480156107d957600080fd5b506103116107e83660046131f4565b61137b565b3480156107f957600080fd5b506102d761080836600461322a565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b506103116113fa565b34801561084157600080fd5b50600354610405906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610405565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad3660046131f4565b61146a565b3480156108be57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b3660046131f4565b611541565b34801561095c57600080fd5b5061031161096b366004613014565b611552565b34801561097c57600080fd5b5061099061098b366004613245565b611586565b6040516102e89291906132ec565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a50611755565b43600554600654610a61919061331b565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b919061332e565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117a2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde90839086903390613347565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e6118f6565b610c26611946565b565b6010546001600160a01b03163314610c735760405162461bcd60e51b815260206004820152600e60248201526d10b0b634b0b9b2b229b2b73232b960911b6044820152606401610a05565b610c7c8161199b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cad929190613385565b60405180910390a150565b610cc0611755565b610cc8611a3b565b83610cff5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d1457610d146133af565b9050602002810190610d2691906133c5565b610d3090806133e6565b604051610d3e929190613434565b604051809103902090506000610da58288886000818110610d6157610d616133af565b9050602002810190610d7391906133c5565b60200189896000818110610d8957610d896133af565b9050602002810190610d9b91906133c5565b6104200135611a94565b9050610db381868686611b3b565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ed95788888263ffffffff16818110610df857610df86133af565b9050602002810190610e0a91906133c5565b610e1490806133e6565b604051610e22929190613434565b604051809103902093506000610e77858b8b8563ffffffff16818110610e4a57610e4a6133af565b9050602002810190610e5c91906133c5565b6020018c8c8663ffffffff16818110610d8957610d896133af565b9050838114610eb65760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610dd2565b5060005b818163ffffffff161015610f6557610f5c89898363ffffffff16818110610f0657610f066133af565b9050602002810190610f1891906133c5565b610f2290806133e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3692505050565b50600101610edd565b50505050610f736001600755565b5050505050565b6000546001600160a01b03163314610fa5576040516311a8a1bb60e31b815260040160405180910390fd5b610fae81611f13565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611035919061332e565b905090565b6000546001600160a01b03163314611065576040516311a8a1bb60e31b815260040160405180910390fd5b476110708282611f85565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110ab91815260200190565b60405180910390a25050565b6000546001600160a01b031633146110e2576040516311a8a1bb60e31b815260040160405180910390fd5b6110ea6118f6565b600081815260096020526040812054900361113f5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cad9083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613444565b6112515760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b611259611755565b610c266120a3565b6000546001600160a01b0316331461128c576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112aa575060025415155b156112c8576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112f657604051634a2fb73f60e11b815260040160405180910390fd5b610fae816120e6565b6000546001600160a01b0316331461132a576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cad565b6000546001600160a01b031633146113a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cad565b6001546001600160a01b03163314611425576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114379190613466565b11611455576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612134565b6000546001600160a01b03163314611495576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114f35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cad565b600061154c82612199565b92915050565b6000546001600160a01b0316331461157d576040516311a8a1bb60e31b815260040160405180910390fd5b610fae816121df565b336000908152600d602052604081205460609060ff166115d75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261160083613479565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061165f7f0000000000000000000000000000000000000000000000000000000000000000611656336001600160a01b031690565b848a8a8a61225d565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061349c565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361172b600184613466565b848760405161173d94939291906134c0565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b81516020146117dd5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b80511561181b5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b8360405160240161183691906134ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491516349460b4d60e11b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263928c169a926118bf9291909116908590600401613502565b600060405180830381600087803b1580156118d957600080fd5b505af11580156118ed573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b61194e6118f6565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119b0906001600160a01b0316612199565b6119ef5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a2a5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fae611a3682613526565b612295565b600260075403611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611aba57611aba613105565b14611afd5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b318484602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b90505b9392505050565b6000848152600b602052604090205460ff16611c3057611b5a8361270c565b6000611b908584602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b9050838114611bd75760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c269086815260200190565b60405180910390a3505b50505050565b600080611c43838261286c565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c7b62ffffff198316612890565b63ffffffff1614611cbd5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611cce62ffffff1983166128a5565b905060016000828152600f602052604090205460ff166002811115611cf557611cf5613105565b14611d2c5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611d917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061331b565b611d9b9190613466565b5a11611dd25760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611de362ffffff1984166128ee565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e3e62ffffff1988166128ff565b611e4d62ffffff198916612913565b611e5c62ffffff198a16612928565b611e79611e6e62ffffff198c1661293d565b62ffffff191661296b565b604051602401611e8c949392919061354d565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ec68585600086856129b4565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611eff9088908b90869061357c565b60405180910390a150505050505050919050565b611f1c81612a3f565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fd55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b505090508061209e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b6120ab611755565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861197e3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006121c47f0000000000000000000000000000000000000000000000000000000000000000612b42565b6001600160a01b0316826001600160a01b0316149050919050565b60055481036122225760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cad565b606086868686868660405160200161227a9695949392919061359d565b60405160208183030381529060405290509695505050505050565b806122d35760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123265760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff161561237b5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cad9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061274f5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156127695750565b600081815260096020526040812054908190036127bf5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b6008546127cc8243613466565b101561281a5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161288764ffffffffff85168284612bcc565b95945050505050565b600061154c62ffffff19831660286004612c09565b6000806128bb8360781c6001600160601b031690565b6001600160601b0316905060006128db8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061154c6128fc83612c39565b90565b600061154c62ffffff198316826004612c09565b600061154c62ffffff19831660246004612c09565b600061154c62ffffff19831660046020612c4a565b600061154c604c61295b81601886901c6001600160601b0316613466565b62ffffff19851691906000612d55565b60606000806129838460181c6001600160601b031690565b6001600160601b0316905060405191508192506129a38483602001612dd1565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156129da576129da61302d565b6040519080825280601f01601f191660200182016040528015612a04576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a25578692505b828152826000602083013e90999098509650505050505050565b6040516326ddea8360e11b81526001600160a01b038281166004830152600060248301819052917f000000000000000000000000000000000000000000000000000000000000000090911690634dbbd50690604401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906135f7565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000612b4d82612ec4565b612b6a5760405163253a6fc960e11b815260040160405180910390fd5b816001600160a01b031663d74523b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906135f7565b600080612bd9838561331b565b9050604051811115612be9575060005b80600003612bfe5762ffffff19915050611b34565b612887858585612f28565b6000612c16826020613614565b612c2190600861362d565b60ff16612c2f858585612c4a565b901c949350505050565b600061154c62ffffff198316602c60205b60008160ff16600003612c5f57506000611b34565b612c728460181c6001600160601b031690565b6001600160601b0316612c8860ff84168561331b565b1115612cf057612ca18460781c6001600160601b031690565b612cb48560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612d155760405163045df3f960e01b815260040160405180910390fd5b600882026000612d2e8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d6b8660781c6001600160601b031690565b6001600160601b03169050612d7f86612f9f565b84612d8a878461331b565b612d94919061331b565b1115612da75762ffffff19915050612dc9565b612db1858261331b565b9050612dc58364ffffffffff168286612bcc565b9150505b949350505050565b600062ffffff1980841603612df95760405163148d513360e21b815260040160405180910390fd5b612e0283612fd8565b15612e2057604051632ee0949160e11b815260040160405180910390fd5b6000612e358460181c6001600160601b031690565b6001600160601b031690506000612e558560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e765760206060fd5b8386858560045afa905080612e9e57604051632af1bd9b60e21b815260040160405180910390fd5b612eb9612eab8860d81c90565b64ffffffffff168786612f28565b979650505050505050565b6000816001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c9190613444565b60006060601883856001600160601b03821682148015612f50575086816001600160601b0316145b612f895760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612fb48260181c6001600160601b031690565b612fc78360781c6001600160601b031690565b016001600160601b03169050919050565b6000612fe48260d81c90565b64ffffffffff1664ffffffffff03612ffe57506001919050565b600061300983612f9f565b604051109392505050565b60006020828403121561302657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261305457600080fd5b813567ffffffffffffffff8082111561306f5761306f61302d565b604051601f8301601f19908116603f011681019082821181831017156130975761309761302d565b816040528381528660208588010111156130b057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156130e257600080fd5b813567ffffffffffffffff8111156130f957600080fd5b612dc984828501613043565b634e487b7160e01b600052602160045260246000fd5b602081016003831061313d57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561315c57600080fd5b853567ffffffffffffffff8082111561317457600080fd5b818801915088601f83011261318857600080fd5b81358181111561319757600080fd5b8960208260051b85010111156131ac57600080fd5b6020928301975095505086013592506104408601878111156131cd57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fae57600080fd5b60006020828403121561320657600080fd5b8135611b34816131df565b803563ffffffff8116811461322557600080fd5b919050565b60006020828403121561323c57600080fd5b611b3482613211565b60008060006060848603121561325a57600080fd5b61326384613211565b925060208401359150604084013567ffffffffffffffff81111561328657600080fd5b61329286828701613043565b9150509250925092565b60005b838110156132b757818101518382015260200161329f565b50506000910152565b600081518084526132d881602086016020860161329c565b601f01601f19169290920160200192915050565b828152604060208201526000611b3160408301846132c0565b634e487b7160e01b600052601160045260246000fd5b8082018082111561154c5761154c613305565b60006020828403121561334057600080fd5b5051919050565b60608152600061335a60608301866132c0565b828103602084015261336c81866132c0565b91505060018060a01b0383166040830152949350505050565b60408152600061339860408301856132c0565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126133dc57600080fd5b9190910192915050565b6000808335601e198436030181126133fd57600080fd5b83018035915067ffffffffffffffff82111561341857600080fd5b60200191503681900382131561342d57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345657600080fd5b81518015158114611b3457600080fd5b8181038181111561154c5761154c613305565b600063ffffffff80831681810361349257613492613305565b6001019392505050565b600080604083850312156134af57600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134e560808301846132c0565b9695505050505050565b602081526000611b3460208301846132c0565b6001600160a01b0383168152604060208201819052600090611b31908301846132c0565b80516020808301519190811015613547576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134e560808301846132c0565b838152821515602082015260606040820152600061288760608301846132c0565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516135e581604c85016020870161329c565b91909101604c01979650505050505050565b60006020828403121561360957600080fd5b8151611b34816131df565b60ff828116828216039081111561154c5761154c613305565b60ff818116838216029081169081811461364957613649613305565b509291505056fea2646970667358221220851eb81b3ec18eca175885bdd1aceac04ca0f0772614793366c7fa3057f1abd864736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059d57806365eaf11b146105cd57806368742da6146105e25780636a42b8f8146106025780636b04a93314610618578063715018a61461063857600080fd5b806352a9674b146104b0578063572386ca146104e4578063579c1618146105145780635bd11efc1461052a5780635c975abb1461054a5780635f61e3ec1461056957600080fd5b8063361d88ac11610250578063361d88ac146103e55780633cf52ffb1461041d5780633f4ba83a146104325780634ff746f614610447578063508a109b146104675780635190bc531461048757600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004613014565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b6103116103633660046130d0565b610a48565b34801561037457600080fd5b50610398610383366004613014565b600f6020526000908152604090205460ff1681565b6040516102e8919061311b565b3480156103b157600080fd5b506103d56103c0366004613014565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50601054610405906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b34801561042957600080fd5b50600254610347565b34801561043e57600080fd5b50610311610beb565b34801561045357600080fd5b506103116104623660046130d0565b610c28565b34801561047357600080fd5b50610311610482366004613143565b610cb8565b34801561049357600080fd5b506103d56104a23660046131f4565b6001600160a01b0316301490565b3480156104bc57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f057600080fd5b506103d56104ff366004613014565b600c6020526000908152604090205460ff1681565b34801561052057600080fd5b5061034760055481565b34801561053657600080fd5b506103116105453660046131f4565b610f7a565b34801561055657600080fd5b50600354600160a01b900460ff166103d5565b34801561057557600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a957600080fd5b506103d56105b83660046131f4565b600d6020526000908152604090205460ff1681565b3480156105d957600080fd5b50610347610fb1565b3480156105ee57600080fd5b506103116105fd3660046131f4565b61103a565b34801561060e57600080fd5b5062093a80610347565b34801561062457600080fd5b50610311610633366004613014565b6110b7565b34801561064457600080fd5b50610311611182565b34801561065957600080fd5b506103116111ad565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610405565b3480156106bf57600080fd5b506103d56106ce366004613014565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004613014565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610405565b34801561072f57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610405906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a83660046131f4565b611261565b3480156107b957600080fd5b506103116107c83660046131f4565b6112ff565b3480156107d957600080fd5b506103116107e83660046131f4565b61137b565b3480156107f957600080fd5b506102d761080836600461322a565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b506103116113fa565b34801561084157600080fd5b50600354610405906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610405565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad3660046131f4565b61146a565b3480156108be57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b3660046131f4565b611541565b34801561095c57600080fd5b5061031161096b366004613014565b611552565b34801561097c57600080fd5b5061099061098b366004613245565b611586565b6040516102e89291906132ec565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a50611755565b43600554600654610a61919061331b565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b919061332e565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117a2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde90839086903390613347565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e6118f6565b610c26611946565b565b6010546001600160a01b03163314610c735760405162461bcd60e51b815260206004820152600e60248201526d10b0b634b0b9b2b229b2b73232b960911b6044820152606401610a05565b610c7c8161199b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cad929190613385565b60405180910390a150565b610cc0611755565b610cc8611a3b565b83610cff5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d1457610d146133af565b9050602002810190610d2691906133c5565b610d3090806133e6565b604051610d3e929190613434565b604051809103902090506000610da58288886000818110610d6157610d616133af565b9050602002810190610d7391906133c5565b60200189896000818110610d8957610d896133af565b9050602002810190610d9b91906133c5565b6104200135611a94565b9050610db381868686611b3b565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ed95788888263ffffffff16818110610df857610df86133af565b9050602002810190610e0a91906133c5565b610e1490806133e6565b604051610e22929190613434565b604051809103902093506000610e77858b8b8563ffffffff16818110610e4a57610e4a6133af565b9050602002810190610e5c91906133c5565b6020018c8c8663ffffffff16818110610d8957610d896133af565b9050838114610eb65760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610dd2565b5060005b818163ffffffff161015610f6557610f5c89898363ffffffff16818110610f0657610f066133af565b9050602002810190610f1891906133c5565b610f2290806133e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3692505050565b50600101610edd565b50505050610f736001600755565b5050505050565b6000546001600160a01b03163314610fa5576040516311a8a1bb60e31b815260040160405180910390fd5b610fae81611f13565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611035919061332e565b905090565b6000546001600160a01b03163314611065576040516311a8a1bb60e31b815260040160405180910390fd5b476110708282611f85565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110ab91815260200190565b60405180910390a25050565b6000546001600160a01b031633146110e2576040516311a8a1bb60e31b815260040160405180910390fd5b6110ea6118f6565b600081815260096020526040812054900361113f5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cad9083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613444565b6112515760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b611259611755565b610c266120a3565b6000546001600160a01b0316331461128c576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112aa575060025415155b156112c8576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112f657604051634a2fb73f60e11b815260040160405180910390fd5b610fae816120e6565b6000546001600160a01b0316331461132a576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cad565b6000546001600160a01b031633146113a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cad565b6001546001600160a01b03163314611425576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114379190613466565b11611455576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612134565b6000546001600160a01b03163314611495576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114f35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cad565b600061154c82612199565b92915050565b6000546001600160a01b0316331461157d576040516311a8a1bb60e31b815260040160405180910390fd5b610fae816121df565b336000908152600d602052604081205460609060ff166115d75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261160083613479565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061165f7f0000000000000000000000000000000000000000000000000000000000000000611656336001600160a01b031690565b848a8a8a61225d565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061349c565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361172b600184613466565b848760405161173d94939291906134c0565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b81516020146117dd5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b80511561181b5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b8360405160240161183691906134ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491516349460b4d60e11b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263928c169a926118bf9291909116908590600401613502565b600060405180830381600087803b1580156118d957600080fd5b505af11580156118ed573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b61194e6118f6565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119b0906001600160a01b0316612199565b6119ef5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a2a5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fae611a3682613526565b612295565b600260075403611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611aba57611aba613105565b14611afd5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b318484602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b90505b9392505050565b6000848152600b602052604090205460ff16611c3057611b5a8361270c565b6000611b908584602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b9050838114611bd75760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c269086815260200190565b60405180910390a3505b50505050565b600080611c43838261286c565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c7b62ffffff198316612890565b63ffffffff1614611cbd5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611cce62ffffff1983166128a5565b905060016000828152600f602052604090205460ff166002811115611cf557611cf5613105565b14611d2c5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611d917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061331b565b611d9b9190613466565b5a11611dd25760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611de362ffffff1984166128ee565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e3e62ffffff1988166128ff565b611e4d62ffffff198916612913565b611e5c62ffffff198a16612928565b611e79611e6e62ffffff198c1661293d565b62ffffff191661296b565b604051602401611e8c949392919061354d565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ec68585600086856129b4565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611eff9088908b90869061357c565b60405180910390a150505050505050919050565b611f1c81612a3f565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fd55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b505090508061209e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b6120ab611755565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861197e3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006121c47f0000000000000000000000000000000000000000000000000000000000000000612b42565b6001600160a01b0316826001600160a01b0316149050919050565b60055481036122225760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cad565b606086868686868660405160200161227a9695949392919061359d565b60405160208183030381529060405290509695505050505050565b806122d35760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123265760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff161561237b5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cad9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061274f5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156127695750565b600081815260096020526040812054908190036127bf5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b6008546127cc8243613466565b101561281a5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161288764ffffffffff85168284612bcc565b95945050505050565b600061154c62ffffff19831660286004612c09565b6000806128bb8360781c6001600160601b031690565b6001600160601b0316905060006128db8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061154c6128fc83612c39565b90565b600061154c62ffffff198316826004612c09565b600061154c62ffffff19831660246004612c09565b600061154c62ffffff19831660046020612c4a565b600061154c604c61295b81601886901c6001600160601b0316613466565b62ffffff19851691906000612d55565b60606000806129838460181c6001600160601b031690565b6001600160601b0316905060405191508192506129a38483602001612dd1565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156129da576129da61302d565b6040519080825280601f01601f191660200182016040528015612a04576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a25578692505b828152826000602083013e90999098509650505050505050565b6040516326ddea8360e11b81526001600160a01b038281166004830152600060248301819052917f000000000000000000000000000000000000000000000000000000000000000090911690634dbbd50690604401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906135f7565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000612b4d82612ec4565b612b6a5760405163253a6fc960e11b815260040160405180910390fd5b816001600160a01b031663d74523b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906135f7565b600080612bd9838561331b565b9050604051811115612be9575060005b80600003612bfe5762ffffff19915050611b34565b612887858585612f28565b6000612c16826020613614565b612c2190600861362d565b60ff16612c2f858585612c4a565b901c949350505050565b600061154c62ffffff198316602c60205b60008160ff16600003612c5f57506000611b34565b612c728460181c6001600160601b031690565b6001600160601b0316612c8860ff84168561331b565b1115612cf057612ca18460781c6001600160601b031690565b612cb48560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612d155760405163045df3f960e01b815260040160405180910390fd5b600882026000612d2e8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d6b8660781c6001600160601b031690565b6001600160601b03169050612d7f86612f9f565b84612d8a878461331b565b612d94919061331b565b1115612da75762ffffff19915050612dc9565b612db1858261331b565b9050612dc58364ffffffffff168286612bcc565b9150505b949350505050565b600062ffffff1980841603612df95760405163148d513360e21b815260040160405180910390fd5b612e0283612fd8565b15612e2057604051632ee0949160e11b815260040160405180910390fd5b6000612e358460181c6001600160601b031690565b6001600160601b031690506000612e558560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e765760206060fd5b8386858560045afa905080612e9e57604051632af1bd9b60e21b815260040160405180910390fd5b612eb9612eab8860d81c90565b64ffffffffff168786612f28565b979650505050505050565b6000816001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c9190613444565b60006060601883856001600160601b03821682148015612f50575086816001600160601b0316145b612f895760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612fb48260181c6001600160601b031690565b612fc78360781c6001600160601b031690565b016001600160601b03169050919050565b6000612fe48260d81c90565b64ffffffffff1664ffffffffff03612ffe57506001919050565b600061300983612f9f565b604051109392505050565b60006020828403121561302657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261305457600080fd5b813567ffffffffffffffff8082111561306f5761306f61302d565b604051601f8301601f19908116603f011681019082821181831017156130975761309761302d565b816040528381528660208588010111156130b057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156130e257600080fd5b813567ffffffffffffffff8111156130f957600080fd5b612dc984828501613043565b634e487b7160e01b600052602160045260246000fd5b602081016003831061313d57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561315c57600080fd5b853567ffffffffffffffff8082111561317457600080fd5b818801915088601f83011261318857600080fd5b81358181111561319757600080fd5b8960208260051b85010111156131ac57600080fd5b6020928301975095505086013592506104408601878111156131cd57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fae57600080fd5b60006020828403121561320657600080fd5b8135611b34816131df565b803563ffffffff8116811461322557600080fd5b919050565b60006020828403121561323c57600080fd5b611b3482613211565b60008060006060848603121561325a57600080fd5b61326384613211565b925060208401359150604084013567ffffffffffffffff81111561328657600080fd5b61329286828701613043565b9150509250925092565b60005b838110156132b757818101518382015260200161329f565b50506000910152565b600081518084526132d881602086016020860161329c565b601f01601f19169290920160200192915050565b828152604060208201526000611b3160408301846132c0565b634e487b7160e01b600052601160045260246000fd5b8082018082111561154c5761154c613305565b60006020828403121561334057600080fd5b5051919050565b60608152600061335a60608301866132c0565b828103602084015261336c81866132c0565b91505060018060a01b0383166040830152949350505050565b60408152600061339860408301856132c0565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126133dc57600080fd5b9190910192915050565b6000808335601e198436030181126133fd57600080fd5b83018035915067ffffffffffffffff82111561341857600080fd5b60200191503681900382131561342d57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345657600080fd5b81518015158114611b3457600080fd5b8181038181111561154c5761154c613305565b600063ffffffff80831681810361349257613492613305565b6001019392505050565b600080604083850312156134af57600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134e560808301846132c0565b9695505050505050565b602081526000611b3460208301846132c0565b6001600160a01b0383168152604060208201819052600090611b31908301846132c0565b80516020808301519190811015613547576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134e560808301846132c0565b838152821515602082015260606040820152600061288760608301846132c0565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516135e581604c85016020870161329c565b91909101604c01979650505050505050565b60006020828403121561360957600080fd5b8151611b34816131df565b60ff828116828216039081111561154c5761154c613305565b60ff818116838216029081169081811461364957613649613305565b509291505056fea2646970667358221220851eb81b3ec18eca175885bdd1aceac04ca0f0772614793366c7fa3057f1abd864736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
