{
  "_format": "hh-sol-artifact-1",
  "contractName": "SS",
  "sourceName": "contracts/SS.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_lzEndpoint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDelegate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidEndpointCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLocalDecimals",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }
      ],
      "name": "InvalidOptions",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LzTokenUnavailable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "NoPeer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "msgValue",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughNative",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "OnlyEndpoint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }
      ],
      "name": "OnlyPeer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlySelf",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "name": "SimulationResult",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }
      ],
      "name": "SlippageExceeded",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "eid",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "msgType",
              "type": "uint16"
            },
            {
              "internalType": "bytes",
              "name": "options",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct EnforcedOptionParam[]",
          "name": "_enforcedOptions",
          "type": "tuple[]"
        }
      ],
      "name": "EnforcedOptionSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inspector",
          "type": "address"
        }
      ],
      "name": "MsgInspectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }
      ],
      "name": "OFTReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }
      ],
      "name": "OFTSent",
      "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": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "name": "PeerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "preCrimeAddress",
          "type": "address"
        }
      ],
      "name": "PreCrimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "SEND",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SEND_AND_CALL",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "origin",
          "type": "tuple"
        }
      ],
      "name": "allowInitializePath",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approvalRequired",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "_msgType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_extraOptions",
          "type": "bytes"
        }
      ],
      "name": "combineOptions",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimalConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpointV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "msgType",
          "type": "uint16"
        }
      ],
      "name": "enforcedOptions",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "enforcedOption",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "isComposeMsgSender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "isPeer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "srcEid",
                  "type": "uint32"
                },
                {
                  "internalType": "bytes32",
                  "name": "sender",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "nonce",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Origin",
              "name": "origin",
              "type": "tuple"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "guid",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "executor",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct InboundPacket[]",
          "name": "_packets",
          "type": "tuple[]"
        }
      ],
      "name": "lzReceiveAndRevert",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceiveSimulate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "msgInspector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "nextNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oApp",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "senderVersion",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "receiverVersion",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oftVersion",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        },
        {
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "peers",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "preCrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        }
      ],
      "name": "quoteOFT",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxAmountLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTLimit",
          "name": "oftLimit",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "feeAmountLD",
              "type": "int256"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct OFTFeeDetail[]",
          "name": "oftFeeDetails",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountSentLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountReceivedLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTReceipt",
          "name": "oftReceipt",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "_payInLzToken",
          "type": "bool"
        }
      ],
      "name": "quoteSend",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nativeFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lzTokenFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct MessagingFee",
          "name": "msgFee",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nativeFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lzTokenFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct MessagingFee",
          "name": "_fee",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "_refundAddress",
          "type": "address"
        }
      ],
      "name": "send",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "guid",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "nativeFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "lzTokenFee",
                  "type": "uint256"
                }
              ],
              "internalType": "struct MessagingFee",
              "name": "fee",
              "type": "tuple"
            }
          ],
          "internalType": "struct MessagingReceipt",
          "name": "msgReceipt",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountSentLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountReceivedLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTReceipt",
          "name": "oftReceipt",
          "type": "tuple"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "eid",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "msgType",
              "type": "uint16"
            },
            {
              "internalType": "bytes",
              "name": "options",
              "type": "bytes"
            }
          ],
          "internalType": "struct EnforcedOptionParam[]",
          "name": "_enforcedOptions",
          "type": "tuple[]"
        }
      ],
      "name": "setEnforcedOptions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_msgInspector",
          "type": "address"
        }
      ],
      "name": "setMsgInspector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_preCrime",
          "type": "address"
        }
      ],
      "name": "setPreCrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sharedDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c060405234801561001057600080fd5b5060405161374438038061374483398101604081905261002f916102ab565b83838383838360128484818181818d6001600160a01b03811661006c57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61007581610181565b506001600160a01b0380831660805281166100a357604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156100ea57600080fd5b505af11580156100fe573d6000803e3d6000fd5b50505050505050506101146101d160201b60201c565b60ff168360ff16101561013a576040516301e9714b60e41b815260040160405180910390fd5b61014560068461034b565b61015090600a610451565b60a0525060089150610164905083826104f0565b50600961017182826104f0565b50505050505050505050506105ae565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101fd57600080fd5b81516001600160401b03811115610216576102166101d6565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610244576102446101d6565b60405281815283820160200185101561025c57600080fd5b60005b8281101561027b5760208186018101518383018201520161025f565b506000918101602001919091529392505050565b80516001600160a01b03811681146102a657600080fd5b919050565b600080600080608085870312156102c157600080fd5b84516001600160401b038111156102d757600080fd5b6102e3878288016101ec565b602087015190955090506001600160401b0381111561030157600080fd5b61030d878288016101ec565b93505061031c6040860161028f565b915061032a6060860161028f565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561036457610364610335565b92915050565b6001815b60018411156103a55780850481111561038957610389610335565b600184161561039757908102905b60019390931c92800261036e565b935093915050565b6000826103bc57506001610364565b816103c957506000610364565b81600181146103df57600281146103e957610405565b6001915050610364565b60ff8411156103fa576103fa610335565b50506001821b610364565b5060208310610133831016604e8410600b8410161715610428575081810a610364565b610435600019848461036a565b806000190482111561044957610449610335565b029392505050565b600061046060ff8416836103ad565b9392505050565b600181811c9082168061047b57607f821691505b60208210810361049b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104eb57806000526020600020601f840160051c810160208510156104c85750805b601f840160051c820191505b818110156104e857600081556001016104d4565b50505b505050565b81516001600160401b03811115610509576105096101d6565b61051d816105178454610467565b846104a1565b6020601f82116001811461055157600083156105395750848201515b600019600385901b1c1916600184901b1784556104e8565b600084815260208120601f198516915b828110156105815787850151825560209485019460019092019101610561565b508482101561059f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60805160a05161312b6106196000396000818161064901528181611b1401528181611b890152611d8d01526000818161050801528181610a78015281816110da01528181611351015281816116bc01528181611e8501528181611fbf0152612076015261312b6000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b60405161028391906121ee565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612216565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d736600461225a565b6108e5565b6040516102839392919061228e565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b610336610331366004612385565b610a76565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612426565b610b36565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a366004612480565b610b5c565b34801561044b57600080fd5b5061045f61045a3660046124aa565b610b72565b60405161028391906124fb565b34801561047857600080fd5b50610336610487366004612216565b610bd9565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612524565b610beb565b3480156104cb57600080fd5b506102ac6104da366004612480565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612557565b610c90565b34801561055657600080fd5b506103ba610565366004612557565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610ced565b3480156105a157600080fd5b506105b86105b0366004612480565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb366004612574565b610d01565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610d16565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a366004612216565b610d25565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461261e565b610d33565b3480156106eb57600080fd5b506103ba6106fa36600461265f565b60016020526000908152604090205481565b34801561071857600080fd5b5061027661072736600461267a565b610d4d565b61033661073a36600461261e565b610ef5565b61075261074d3660046126da565b61107f565b604051610283929190612747565b34801561076c57600080fd5b5061033661077b366004612557565b6110b3565b61033661078e366004612385565b611139565b34801561079f57600080fd5b506103366107ae366004612557565b611168565b3480156107bf57600080fd5b506103ba6107ce366004612799565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612557565b6111be565b34801561082557600080fd5b506102ac6108343660046127c7565b6111fc565b606060088054610848906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906127e3565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d9818585611232565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b600080306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d9190612817565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109de9190612834565b60408051808201825284815260208082018490528251600080825291810190935290975091925090610a33565b604080518082019091526000815260606020820152815260200190600190039081610a0b5790505b509350600080610a58604089013560608a0135610a5360208c018c61265f565b611244565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ac6576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610ae090610adb908a61265f565b611280565b14610b1e57610af2602088018861265f565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610abd565b610b2d878787878787876112bc565b50505050505050565b600033610b44858285611423565b610b4f8585856114a2565b60019150505b9392505050565b610b64611501565b610b6e828261152e565b5050565b60408051808201909152600080825260208201526000610ba260408501356060860135610a53602088018861265f565b915050600080610bb28684611583565b9092509050610bcf610bc7602088018861265f565b8383886116a6565b9695505050505050565b610be1611501565b610b6e8282611787565b600360209081526000928352604080842090915290825290208054610c0f906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3b906127e3565b8015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b505050505081565b610c98611501565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610cf5611501565b610cff60006117bd565b565b6001600160a01b03811630145b949350505050565b606060098054610848906127e3565b6000336108d98185856114a2565b610d3b611501565b610b6e610d488284612904565b61180d565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610d81906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610dad906127e3565b8015610dfa5780601f10610dcf57610100808354040283529160200191610dfa565b820191906000526020600020905b815481529060010190602001808311610ddd57829003601f168201915b505050505090508051600003610e4a5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610d0e9350505050565b6000839003610e5a579050610d0e565b60028310610ed857610ea184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191492505050565b80610eaf8460028188612a2d565b604051602001610ec193929190612a57565b604051602081830303815290604052915050610d0e565b8383604051639a6d49cd60e01b8152600401610abd929190612aa8565b60005b81811015610ffe5736838383818110610f1357610f13612abc565b9050602002810190610f259190612ad2565b9050610f58610f37602083018361265f565b602083013563ffffffff919091166000908152600160205260409020541490565b610f625750610ff6565b3063d045a0dc60c08301358360a0810135610f81610100830183612af3565b610f92610100890160e08a01612557565b610fa06101208a018a612af3565b6040518963ffffffff1660e01b8152600401610fc29796959493929190612b4e565b6000604051808303818588803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b5050505050505b600101610ef8565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110659190810190612bd4565b604051638351eea760e01b8152600401610abd91906121ee565b611087612157565b60408051808201909152600080825260208201526110a6858585611940565b915091505b935093915050565b6110bb611501565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b5050505050565b3330146111595760405163029a949d60e31b815260040160405180910390fd5b610b2d87878787878787610b1e565b611170611501565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610ce2565b6111c6611501565b6001600160a01b0381166111f057604051631e4fbdf760e01b815260006004820152602401610abd565b6111f9816117bd565b50565b6000602082018035906001908390611214908661265f565b63ffffffff1681526020810191909152604001600020541492915050565b61123f8383836001611a3b565b505050565b60008061125085611b10565b9150819050838110156110ab576040516371c4efed60e01b81526004810182905260248101859052604401610abd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610abd565b60006112ce6112cb8787611b47565b90565b905060006112fa826112e86112e38a8a611b5f565b611b82565b6112f560208d018d61265f565b611bb7565b905060288611156113c157600061133761131a60608c0160408d01612c41565b61132760208d018d61265f565b846113328c8c611bdf565b611c2a565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061138d9086908d906000908790600401612c5e565b600060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6113fa60208d018d61265f565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981101561149c578181101561148d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610abd565b61149c84848484036000611a3b565b50505050565b6001600160a01b0383166114cc57604051634b637e8f60e11b815260006004820152602401610abd565b6001600160a01b0382166114f65760405163ec442f0560e01b815260006004820152602401610abd565b61123f838383611c5c565b6000546001600160a01b03163314610cff5760405163118cdaa760e01b8152336004820152602401610abd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006115e0856020013561159986611d86565b6115a660a0890189612af3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db292505050565b90935090506000816115f35760016115f6565b60025b9050611616611608602088018861265f565b8261072760808a018a612af3565b6004549093506001600160a01b0316801561169c5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906116599088908890600401612c8f565b602060405180830381865afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a9190612cb4565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161170989611280565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161173e929190612cd1565b6040805180830381865afa15801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190612d7b565b95945050505050565b6001600160a01b0382166117b15760405163ec442f0560e01b815260006004820152602401610abd565b610b6e60008383611c5c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156118e45761183f82828151811061182e5761182e612abc565b602002602001015160400151611914565b81818151811061185157611851612abc565b6020026020010151604001516003600084848151811061187357611873612abc565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106118ad576118ad612abc565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118db9190612dde565b50600101611810565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610ce29190612e9c565b600281015161ffff8116600314610b6e5781604051639a6d49cd60e01b8152600401610abd91906121ee565b611948612157565b604080518082019091526000808252602082015260008061197f33604089013560608a013561197a60208c018c61265f565b611e2c565b915091506000806119908984611583565b90925090506119bc6119a560208b018b61265f565b83836119b6368d90038d018d612f2c565b8b611e52565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611a0a908d018d61265f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b038416611a655760405163e602df0560e01b815260006004820152602401610abd565b6001600160a01b038316611a8f57604051634a1406b160e11b815260006004820152602401610abd565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561149c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b0291815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611b3d8184612f75565b6108df9190612f97565b6000611b566020828486612a2d565b610b5591612fae565b6000611b6f602860208486612a2d565b611b7891612fcc565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f97565b60006001600160a01b038416611bcd5761dead93505b611bd78484611787565b509092915050565b6060611bee8260288186612a2d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611c439493929190613004565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611c87578060076000828254611c7c9190613053565b90915550611cf99050565b6001600160a01b03831660009081526005602052604090205481811015611cda5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610abd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611d1557600780548290039055611d34565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d7991815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612f75565b8051606090151580611dfb578484604051602001611de792919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611e22565b84843385604051602001611e129493929190613066565b6040516020818303038152906040525b9150935093915050565b600080611e3a858585611244565b9092509050611e498683611f5d565b94509492505050565b611e5a612157565b6000611e698460000151611f93565b602085015190915015611e8357611e838460200151611fbb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611ed38c611280565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611f0f929190612cd1565b60806040518083038185885af1158015611f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5291906130a9565b979650505050505050565b6001600160a01b038216611f8757604051634b637e8f60e11b815260006004820152602401610abd565b610b6e82600083611c5c565b6000813414611fb7576040516304fb820960e51b8152346004820152602401610abd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203f9190612817565b90506001600160a01b038116612068576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610b6e96881695899361149c93889360009283929091839182885af180612109576040513d6000823e3d81fd5b50506000513d9150811561212157806001141561212e565b6001600160a01b0384163b155b1561149c57604051635274afe760e01b81526001600160a01b0385166004820152602401610abd565b60405180606001604052806000801916815260200160006001600160401b03168152602001612199604051806040016040528060008152602001600081525090565b905290565b60005b838110156121b95781810151838201526020016121a1565b50506000910152565b600081518084526121da81602086016020860161219e565b601f01601f19169290920160200192915050565b602081526000610b5560208301846121c2565b6001600160a01b03811681146111f957600080fd5b6000806040838503121561222957600080fd5b823561223481612201565b946020939093013593505050565b600060e0828403121561225457600080fd5b50919050565b60006020828403121561226c57600080fd5b81356001600160401b0381111561228257600080fd5b610d0e84828501612242565b8351815260208085015190820152600060a0820160a0604084015280855180835260c08501915060c08160051b86010192506020870160005b8281101561230f5760bf1987860301845281518051865260208101519050604060208701526122f960408701826121c2565b95505060209384019391909101906001016122c7565b5050855160608601525050602084015160808401529050610d0e565b60006060828403121561225457600080fd5b60008083601f84011261234f57600080fd5b5081356001600160401b0381111561236657600080fd5b60208301915083602082850101111561237e57600080fd5b9250929050565b600080600080600080600060e0888a0312156123a057600080fd5b6123aa898961232b565b96506060880135955060808801356001600160401b038111156123cc57600080fd5b6123d88a828b0161233d565b90965094505060a08801356123ec81612201565b925060c08801356001600160401b0381111561240757600080fd5b6124138a828b0161233d565b989b979a50959850939692959293505050565b60008060006060848603121561243b57600080fd5b833561244681612201565b9250602084013561245681612201565b929592945050506040919091013590565b803563ffffffff8116811461247b57600080fd5b919050565b6000806040838503121561249357600080fd5b61223483612467565b80151581146111f957600080fd5b600080604083850312156124bd57600080fd5b82356001600160401b038111156124d357600080fd5b6124df85828601612242565b92505060208301356124f08161249c565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff8116811461247b57600080fd5b6000806040838503121561253757600080fd5b61254083612467565b915061254e60208401612512565b90509250929050565b60006020828403121561256957600080fd5b8135610b5581612201565b60008060008060a0858703121561258a57600080fd5b612594868661232b565b935060608501356001600160401b038111156125af57600080fd5b6125bb8782880161233d565b90945092505060808501356125cf81612201565b939692955090935050565b60008083601f8401126125ec57600080fd5b5081356001600160401b0381111561260357600080fd5b6020830191508360208260051b850101111561237e57600080fd5b6000806020838503121561263157600080fd5b82356001600160401b0381111561264757600080fd5b612653858286016125da565b90969095509350505050565b60006020828403121561267157600080fd5b610b5582612467565b6000806000806060858703121561269057600080fd5b61269985612467565b93506126a760208601612512565b925060408501356001600160401b038111156126c257600080fd5b6126ce8782880161233d565b95989497509550505050565b600080600083850360808112156126f057600080fd5b84356001600160401b0381111561270657600080fd5b61271287828801612242565b9450506040601f198201121561272757600080fd5b50602084019150606084013561273c81612201565b809150509250925092565b600060c082019050835182526001600160401b0360208501511660208301526040840151612782604084018280518252602090810151910152565b5082516080830152602083015160a0830152610b55565b600080604083850312156127ac57600080fd5b82356127b781612201565b915060208301356124f081612201565b6000606082840312156127d957600080fd5b610b55838361232b565b600181811c908216806127f757607f821691505b60208210810361225457634e487b7160e01b600052602260045260246000fd5b60006020828403121561282957600080fd5b8151610b5581612201565b60006020828403121561284657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156128855761288561284d565b60405290565b604080519081016001600160401b03811182821017156128855761288561284d565b604051601f8201601f191681016001600160401b03811182821017156128d5576128d561284d565b604052919050565b60006001600160401b038211156128f6576128f661284d565b50601f01601f191660200190565b60006001600160401b0383111561291d5761291d61284d565b8260051b61292d602082016128ad565b8481529083019060208101903683111561294657600080fd5b845b83811015612a235780356001600160401b0381111561296657600080fd5b8601606036829003121561297957600080fd5b612981612863565b61298a82612467565b815261299860208301612512565b602082015260408201356001600160401b038111156129b657600080fd5b919091019036601f8301126129ca57600080fd5b81356129dd6129d8826128dd565b6128ad565b8181523660208386010111156129f257600080fd5b8160208501602083013760006020838301015280604084015250508085525050602083019250602081019050612948565b5095945050505050565b60008085851115612a3d57600080fd5b83861115612a4a57600080fd5b5050820193919092039150565b60008451612a6981846020890161219e565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610d0e602083018486612a7f565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612ae957600080fd5b9190910192915050565b6000808335601e19843603018112612b0a57600080fd5b8301803591506001600160401b03821115612b2457600080fd5b60200191503681900382131561237e57600080fd5b6001600160401b03811681146111f957600080fd5b63ffffffff612b5c89612467565b1681526020888101359082015260006040890135612b7981612b39565b6001600160401b03811660408401525087606083015260e06080830152612ba460e083018789612a7f565b6001600160a01b03861660a084015282810360c0840152612bc6818587612a7f565b9a9950505050505050505050565b600060208284031215612be657600080fd5b81516001600160401b03811115612bfc57600080fd5b8201601f81018413612c0d57600080fd5b8051612c1b6129d8826128dd565b818152856020838501011115612c3057600080fd5b61177e82602083016020860161219e565b600060208284031215612c5357600080fd5b8135610b5581612b39565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610bcf60808301846121c2565b604081526000612ca260408301856121c2565b828103602084015261177e81856121c2565b600060208284031215612cc657600080fd5b8151610b558161249c565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612d0760e08401826121c2565b90506060850151603f198483030160a0850152612d2482826121c2565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612d5c57600080fd5b612d6461288b565b825181526020928301519281019290925250919050565b600060408284031215612d8d57600080fd5b610b558383612d4a565b601f82111561123f57806000526020600020601f840160051c81016020851015612dbe5750805b601f840160051c820191505b818110156111325760008155600101612dca565b81516001600160401b03811115612df757612df761284d565b612e0b81612e0584546127e3565b84612d97565b6020601f821160018114612e3f5760008315612e275750848201515b600019600385901b1c1916600184901b178455611132565b600084815260208120601f198516915b82811015612e6f5787850151825560209485019460019092019101612e4f565b5084821015612e8d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f2057603f19878603018452815163ffffffff815116865261ffff60208201511660208701526040810151905060606040870152612f0a60608701826121c2565b9550506020938401939190910190600101612ec4565b50929695505050505050565b60006040828403128015612f3f57600080fd5b50612f4861288b565b823581526020928301359281019290925250919050565b634e487b7160e01b600052601160045260246000fd5b600082612f9257634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612f5f565b803560208310156108df57600019602084900360031b1b1692915050565b80356001600160c01b03198116906008841015612ffd576001600160c01b0319600885900360031b81901b82161691505b5092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825161304381602c85016020870161219e565b91909101602c0195945050505050565b808201808211156108df576108df612f5f565b8481526001600160401b0360c01b8460c01b1660208201528260288201526000825161309981604885016020870161219e565b9190910160480195945050505050565b600060808284031280156130bc57600080fd5b506130c5612863565b8251815260208301516130d781612b39565b60208201526130e98460408501612d4a565b6040820152939250505056fea2646970667358221220249a01a82551afec10cfede2963b31e237841ec17fd08d2bce558d917ff0204964736f6c634300081c0033",
  "deployedBytecode": "0x60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b60405161028391906121ee565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612216565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d736600461225a565b6108e5565b6040516102839392919061228e565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b610336610331366004612385565b610a76565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612426565b610b36565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a366004612480565b610b5c565b34801561044b57600080fd5b5061045f61045a3660046124aa565b610b72565b60405161028391906124fb565b34801561047857600080fd5b50610336610487366004612216565b610bd9565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612524565b610beb565b3480156104cb57600080fd5b506102ac6104da366004612480565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612557565b610c90565b34801561055657600080fd5b506103ba610565366004612557565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610ced565b3480156105a157600080fd5b506105b86105b0366004612480565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb366004612574565b610d01565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610d16565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a366004612216565b610d25565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461261e565b610d33565b3480156106eb57600080fd5b506103ba6106fa36600461265f565b60016020526000908152604090205481565b34801561071857600080fd5b5061027661072736600461267a565b610d4d565b61033661073a36600461261e565b610ef5565b61075261074d3660046126da565b61107f565b604051610283929190612747565b34801561076c57600080fd5b5061033661077b366004612557565b6110b3565b61033661078e366004612385565b611139565b34801561079f57600080fd5b506103366107ae366004612557565b611168565b3480156107bf57600080fd5b506103ba6107ce366004612799565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612557565b6111be565b34801561082557600080fd5b506102ac6108343660046127c7565b6111fc565b606060088054610848906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906127e3565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d9818585611232565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b600080306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d9190612817565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109de9190612834565b60408051808201825284815260208082018490528251600080825291810190935290975091925090610a33565b604080518082019091526000815260606020820152815260200190600190039081610a0b5790505b509350600080610a58604089013560608a0135610a5360208c018c61265f565b611244565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ac6576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610ae090610adb908a61265f565b611280565b14610b1e57610af2602088018861265f565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610abd565b610b2d878787878787876112bc565b50505050505050565b600033610b44858285611423565b610b4f8585856114a2565b60019150505b9392505050565b610b64611501565b610b6e828261152e565b5050565b60408051808201909152600080825260208201526000610ba260408501356060860135610a53602088018861265f565b915050600080610bb28684611583565b9092509050610bcf610bc7602088018861265f565b8383886116a6565b9695505050505050565b610be1611501565b610b6e8282611787565b600360209081526000928352604080842090915290825290208054610c0f906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3b906127e3565b8015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b505050505081565b610c98611501565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610cf5611501565b610cff60006117bd565b565b6001600160a01b03811630145b949350505050565b606060098054610848906127e3565b6000336108d98185856114a2565b610d3b611501565b610b6e610d488284612904565b61180d565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610d81906127e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610dad906127e3565b8015610dfa5780601f10610dcf57610100808354040283529160200191610dfa565b820191906000526020600020905b815481529060010190602001808311610ddd57829003601f168201915b505050505090508051600003610e4a5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610d0e9350505050565b6000839003610e5a579050610d0e565b60028310610ed857610ea184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191492505050565b80610eaf8460028188612a2d565b604051602001610ec193929190612a57565b604051602081830303815290604052915050610d0e565b8383604051639a6d49cd60e01b8152600401610abd929190612aa8565b60005b81811015610ffe5736838383818110610f1357610f13612abc565b9050602002810190610f259190612ad2565b9050610f58610f37602083018361265f565b602083013563ffffffff919091166000908152600160205260409020541490565b610f625750610ff6565b3063d045a0dc60c08301358360a0810135610f81610100830183612af3565b610f92610100890160e08a01612557565b610fa06101208a018a612af3565b6040518963ffffffff1660e01b8152600401610fc29796959493929190612b4e565b6000604051808303818588803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b5050505050505b600101610ef8565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110659190810190612bd4565b604051638351eea760e01b8152600401610abd91906121ee565b611087612157565b60408051808201909152600080825260208201526110a6858585611940565b915091505b935093915050565b6110bb611501565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b5050505050565b3330146111595760405163029a949d60e31b815260040160405180910390fd5b610b2d87878787878787610b1e565b611170611501565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610ce2565b6111c6611501565b6001600160a01b0381166111f057604051631e4fbdf760e01b815260006004820152602401610abd565b6111f9816117bd565b50565b6000602082018035906001908390611214908661265f565b63ffffffff1681526020810191909152604001600020541492915050565b61123f8383836001611a3b565b505050565b60008061125085611b10565b9150819050838110156110ab576040516371c4efed60e01b81526004810182905260248101859052604401610abd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610abd565b60006112ce6112cb8787611b47565b90565b905060006112fa826112e86112e38a8a611b5f565b611b82565b6112f560208d018d61265f565b611bb7565b905060288611156113c157600061133761131a60608c0160408d01612c41565b61132760208d018d61265f565b846113328c8c611bdf565b611c2a565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061138d9086908d906000908790600401612c5e565b600060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6113fa60208d018d61265f565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981101561149c578181101561148d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610abd565b61149c84848484036000611a3b565b50505050565b6001600160a01b0383166114cc57604051634b637e8f60e11b815260006004820152602401610abd565b6001600160a01b0382166114f65760405163ec442f0560e01b815260006004820152602401610abd565b61123f838383611c5c565b6000546001600160a01b03163314610cff5760405163118cdaa760e01b8152336004820152602401610abd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006115e0856020013561159986611d86565b6115a660a0890189612af3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db292505050565b90935090506000816115f35760016115f6565b60025b9050611616611608602088018861265f565b8261072760808a018a612af3565b6004549093506001600160a01b0316801561169c5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906116599088908890600401612c8f565b602060405180830381865afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a9190612cb4565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161170989611280565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161173e929190612cd1565b6040805180830381865afa15801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e9190612d7b565b95945050505050565b6001600160a01b0382166117b15760405163ec442f0560e01b815260006004820152602401610abd565b610b6e60008383611c5c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156118e45761183f82828151811061182e5761182e612abc565b602002602001015160400151611914565b81818151811061185157611851612abc565b6020026020010151604001516003600084848151811061187357611873612abc565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106118ad576118ad612abc565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118db9190612dde565b50600101611810565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610ce29190612e9c565b600281015161ffff8116600314610b6e5781604051639a6d49cd60e01b8152600401610abd91906121ee565b611948612157565b604080518082019091526000808252602082015260008061197f33604089013560608a013561197a60208c018c61265f565b611e2c565b915091506000806119908984611583565b90925090506119bc6119a560208b018b61265f565b83836119b6368d90038d018d612f2c565b8b611e52565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611a0a908d018d61265f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b038416611a655760405163e602df0560e01b815260006004820152602401610abd565b6001600160a01b038316611a8f57604051634a1406b160e11b815260006004820152602401610abd565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561149c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b0291815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611b3d8184612f75565b6108df9190612f97565b6000611b566020828486612a2d565b610b5591612fae565b6000611b6f602860208486612a2d565b611b7891612fcc565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f97565b60006001600160a01b038416611bcd5761dead93505b611bd78484611787565b509092915050565b6060611bee8260288186612a2d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611c439493929190613004565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611c87578060076000828254611c7c9190613053565b90915550611cf99050565b6001600160a01b03831660009081526005602052604090205481811015611cda5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610abd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611d1557600780548290039055611d34565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d7991815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612f75565b8051606090151580611dfb578484604051602001611de792919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611e22565b84843385604051602001611e129493929190613066565b6040516020818303038152906040525b9150935093915050565b600080611e3a858585611244565b9092509050611e498683611f5d565b94509492505050565b611e5a612157565b6000611e698460000151611f93565b602085015190915015611e8357611e838460200151611fbb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611ed38c611280565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611f0f929190612cd1565b60806040518083038185885af1158015611f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5291906130a9565b979650505050505050565b6001600160a01b038216611f8757604051634b637e8f60e11b815260006004820152602401610abd565b610b6e82600083611c5c565b6000813414611fb7576040516304fb820960e51b8152346004820152602401610abd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203f9190612817565b90506001600160a01b038116612068576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610b6e96881695899361149c93889360009283929091839182885af180612109576040513d6000823e3d81fd5b50506000513d9150811561212157806001141561212e565b6001600160a01b0384163b155b1561149c57604051635274afe760e01b81526001600160a01b0385166004820152602401610abd565b60405180606001604052806000801916815260200160006001600160401b03168152602001612199604051806040016040528060008152602001600081525090565b905290565b60005b838110156121b95781810151838201526020016121a1565b50506000910152565b600081518084526121da81602086016020860161219e565b601f01601f19169290920160200192915050565b602081526000610b5560208301846121c2565b6001600160a01b03811681146111f957600080fd5b6000806040838503121561222957600080fd5b823561223481612201565b946020939093013593505050565b600060e0828403121561225457600080fd5b50919050565b60006020828403121561226c57600080fd5b81356001600160401b0381111561228257600080fd5b610d0e84828501612242565b8351815260208085015190820152600060a0820160a0604084015280855180835260c08501915060c08160051b86010192506020870160005b8281101561230f5760bf1987860301845281518051865260208101519050604060208701526122f960408701826121c2565b95505060209384019391909101906001016122c7565b5050855160608601525050602084015160808401529050610d0e565b60006060828403121561225457600080fd5b60008083601f84011261234f57600080fd5b5081356001600160401b0381111561236657600080fd5b60208301915083602082850101111561237e57600080fd5b9250929050565b600080600080600080600060e0888a0312156123a057600080fd5b6123aa898961232b565b96506060880135955060808801356001600160401b038111156123cc57600080fd5b6123d88a828b0161233d565b90965094505060a08801356123ec81612201565b925060c08801356001600160401b0381111561240757600080fd5b6124138a828b0161233d565b989b979a50959850939692959293505050565b60008060006060848603121561243b57600080fd5b833561244681612201565b9250602084013561245681612201565b929592945050506040919091013590565b803563ffffffff8116811461247b57600080fd5b919050565b6000806040838503121561249357600080fd5b61223483612467565b80151581146111f957600080fd5b600080604083850312156124bd57600080fd5b82356001600160401b038111156124d357600080fd5b6124df85828601612242565b92505060208301356124f08161249c565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff8116811461247b57600080fd5b6000806040838503121561253757600080fd5b61254083612467565b915061254e60208401612512565b90509250929050565b60006020828403121561256957600080fd5b8135610b5581612201565b60008060008060a0858703121561258a57600080fd5b612594868661232b565b935060608501356001600160401b038111156125af57600080fd5b6125bb8782880161233d565b90945092505060808501356125cf81612201565b939692955090935050565b60008083601f8401126125ec57600080fd5b5081356001600160401b0381111561260357600080fd5b6020830191508360208260051b850101111561237e57600080fd5b6000806020838503121561263157600080fd5b82356001600160401b0381111561264757600080fd5b612653858286016125da565b90969095509350505050565b60006020828403121561267157600080fd5b610b5582612467565b6000806000806060858703121561269057600080fd5b61269985612467565b93506126a760208601612512565b925060408501356001600160401b038111156126c257600080fd5b6126ce8782880161233d565b95989497509550505050565b600080600083850360808112156126f057600080fd5b84356001600160401b0381111561270657600080fd5b61271287828801612242565b9450506040601f198201121561272757600080fd5b50602084019150606084013561273c81612201565b809150509250925092565b600060c082019050835182526001600160401b0360208501511660208301526040840151612782604084018280518252602090810151910152565b5082516080830152602083015160a0830152610b55565b600080604083850312156127ac57600080fd5b82356127b781612201565b915060208301356124f081612201565b6000606082840312156127d957600080fd5b610b55838361232b565b600181811c908216806127f757607f821691505b60208210810361225457634e487b7160e01b600052602260045260246000fd5b60006020828403121561282957600080fd5b8151610b5581612201565b60006020828403121561284657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156128855761288561284d565b60405290565b604080519081016001600160401b03811182821017156128855761288561284d565b604051601f8201601f191681016001600160401b03811182821017156128d5576128d561284d565b604052919050565b60006001600160401b038211156128f6576128f661284d565b50601f01601f191660200190565b60006001600160401b0383111561291d5761291d61284d565b8260051b61292d602082016128ad565b8481529083019060208101903683111561294657600080fd5b845b83811015612a235780356001600160401b0381111561296657600080fd5b8601606036829003121561297957600080fd5b612981612863565b61298a82612467565b815261299860208301612512565b602082015260408201356001600160401b038111156129b657600080fd5b919091019036601f8301126129ca57600080fd5b81356129dd6129d8826128dd565b6128ad565b8181523660208386010111156129f257600080fd5b8160208501602083013760006020838301015280604084015250508085525050602083019250602081019050612948565b5095945050505050565b60008085851115612a3d57600080fd5b83861115612a4a57600080fd5b5050820193919092039150565b60008451612a6981846020890161219e565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610d0e602083018486612a7f565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612ae957600080fd5b9190910192915050565b6000808335601e19843603018112612b0a57600080fd5b8301803591506001600160401b03821115612b2457600080fd5b60200191503681900382131561237e57600080fd5b6001600160401b03811681146111f957600080fd5b63ffffffff612b5c89612467565b1681526020888101359082015260006040890135612b7981612b39565b6001600160401b03811660408401525087606083015260e06080830152612ba460e083018789612a7f565b6001600160a01b03861660a084015282810360c0840152612bc6818587612a7f565b9a9950505050505050505050565b600060208284031215612be657600080fd5b81516001600160401b03811115612bfc57600080fd5b8201601f81018413612c0d57600080fd5b8051612c1b6129d8826128dd565b818152856020838501011115612c3057600080fd5b61177e82602083016020860161219e565b600060208284031215612c5357600080fd5b8135610b5581612b39565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610bcf60808301846121c2565b604081526000612ca260408301856121c2565b828103602084015261177e81856121c2565b600060208284031215612cc657600080fd5b8151610b558161249c565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612d0760e08401826121c2565b90506060850151603f198483030160a0850152612d2482826121c2565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612d5c57600080fd5b612d6461288b565b825181526020928301519281019290925250919050565b600060408284031215612d8d57600080fd5b610b558383612d4a565b601f82111561123f57806000526020600020601f840160051c81016020851015612dbe5750805b601f840160051c820191505b818110156111325760008155600101612dca565b81516001600160401b03811115612df757612df761284d565b612e0b81612e0584546127e3565b84612d97565b6020601f821160018114612e3f5760008315612e275750848201515b600019600385901b1c1916600184901b178455611132565b600084815260208120601f198516915b82811015612e6f5787850151825560209485019460019092019101612e4f565b5084821015612e8d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f2057603f19878603018452815163ffffffff815116865261ffff60208201511660208701526040810151905060606040870152612f0a60608701826121c2565b9550506020938401939190910190600101612ec4565b50929695505050505050565b60006040828403128015612f3f57600080fd5b50612f4861288b565b823581526020928301359281019290925250919050565b634e487b7160e01b600052601160045260246000fd5b600082612f9257634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612f5f565b803560208310156108df57600019602084900360031b1b1692915050565b80356001600160c01b03198116906008841015612ffd576001600160c01b0319600885900360031b81901b82161691505b5092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825161304381602c85016020870161219e565b91909101602c0195945050505050565b808201808211156108df576108df612f5f565b8481526001600160401b0360c01b8460c01b1660208201528260288201526000825161309981604885016020870161219e565b9190910160480195945050505050565b600060808284031280156130bc57600080fd5b506130c5612863565b8251815260208301516130d781612b39565b60208201526130e98460408501612d4a565b6040820152939250505056fea2646970667358221220249a01a82551afec10cfede2963b31e237841ec17fd08d2bce558d917ff0204964736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
