{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleBridgedPrincipalToken",
  "sourceName": "contracts/cross-chain/oftImpl/spoke/PendleBridgedPrincipalToken.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"
        },
        {
          "internalType": "uint256",
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_localDecimals",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "_sharedDecimals",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "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": "amount",
          "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": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "expiry",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "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": [],
      "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": "amount",
          "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": "amount",
          "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": "0x610120604052348015610010575f5ffd5b50604051613a99380380613a9983398101604081905261002f916102c8565b87878787838361003e60e05190565b84848181818161004d33610195565b6001600160a01b03808316608052811661007a57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b1580156100be575f5ffd5b505af11580156100d0573d5f5f3e3d5ffd5b50505050505050506100e66101e460201b60201c565b60ff168360ff16101561010c576040516301e9714b60e41b815260040160405180910390fd5b6101005161011a908461039b565b61012590600a61049d565b60a052506008915061013990508382610536565b5060096101468282610536565b50505060c08890525061015d925083915050610195565b60ff80841660e08190529083166101008190526101799161039b565b61018490600a61049d565b60a052506105f09650505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6101005190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261020e575f5ffd5b81516001600160401b03811115610227576102276101eb565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610255576102556101eb565b60405281815283820160200185101561026c575f5ffd5b5f5b8281101561028a5760208186018101518383018201520161026e565b505f918101602001919091529392505050565b80516001600160a01b03811681146102b3575f5ffd5b919050565b805160ff811681146102b3575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156102e0575f5ffd5b88516001600160401b038111156102f5575f5ffd5b6103018b828c016101ff565b60208b015190995090506001600160401b0381111561031e575f5ffd5b61032a8b828c016101ff565b97505061033960408a0161029d565b955061034760608a0161029d565b94506080890151935061035c60a08a016102b8565b925061036a60c08a016102b8565b915061037860e08a0161029d565b90509295985092959890939650565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156103b4576103b4610387565b92915050565b6001815b60018411156103f5578085048111156103d9576103d9610387565b60018416156103e757908102905b60019390931c9280026103be565b935093915050565b5f8261040b575060016103b4565b8161041757505f6103b4565b816001811461042d576002811461043757610453565b60019150506103b4565b60ff84111561044857610448610387565b50506001821b6103b4565b5060208310610133831016604e8410600b8410161715610476575081810a6103b4565b6104825f1984846103ba565b805f190482111561049557610495610387565b029392505050565b5f6104ab60ff8416836103fd565b9392505050565b600181811c908216806104c657607f821691505b6020821081036104e457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561053157805f5260205f20601f840160051c8101602085101561050f5750805b601f840160051c820191505b8181101561052e575f815560010161051b565b50505b505050565b81516001600160401b0381111561054f5761054f6101eb565b6105638161055d84546104b2565b846104ea565b6020601f821160018114610595575f831561057e5750848201515b5f19600385901b1c1916600184901b17845561052e565b5f84815260208120601f198516915b828110156105c457878501518255602094850194600190920191016105a4565b50848210156105e157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a05160c05160e051610100516134266106735f395f61058601525f61039a01525f61079201525f81816105e301528181611ca901528181611d1b0152611df701525f818161049701528181610a13015281816110dc015281816114c50152818161197401528181611eec015281816121b6015261226b01526134265ff3fe608060405260043610610201575f3560e01c806306fdde0314610205578063095ea7b31461022f5780630d35b4151461025e578063111ecdad1461028c57806313137d65146102b8578063134d4f25146102cd578063156a0d0f146102f457806317442b701461031a57806318160ddd1461033b5780631f5e13341461035957806323b872dd1461036d578063313ce5671461038c5780633400288b146103cc57806339509351146103eb5780633b6f743b1461040a57806352ae2879146104365780635535d461146104485780635a0dfe4d146104675780635e280f11146104865780636fc1b31e146104b957806370a08231146104d8578063715018a61461050c5780637d25a05e1461052057806382413eac14610559578063857749b0146105785780638da5cb5b146105aa57806395d89b41146105be578063963efcaa146105d25780639f68b96414610605578063a457c2d714610617578063a9059cbb14610636578063b731ea0a14610655578063b98bd07014610674578063bb0b6a5314610693578063bc70b354146106be578063bd815db0146106dd578063c7c7f5b3146106f0578063ca5eb5e114610711578063d045a0dc14610730578063d424388514610743578063dd62ed3e14610762578063e184c9be14610781578063f2fde38b146107b4578063fc0c546a14610436578063ff7bd03d146107d3575b5f5ffd5b348015610210575f5ffd5b506102196107f2565b6040516102269190612531565b60405180910390f35b34801561023a575f5ffd5b5061024e610249366004612557565b610882565b6040519015158152602001610226565b348015610269575f5ffd5b5061027d610278366004612597565b61089b565b604051610226939291906125d7565b348015610297575f5ffd5b506004546102ab906001600160a01b031681565b6040516102269190612667565b6102cb6102c63660046126cf565b610a11565b005b3480156102d8575f5ffd5b506102e1600281565b60405161ffff9091168152602001610226565b3480156102ff575f5ffd5b506040805162b9270b60e21b81526001602082015201610226565b348015610325575f5ffd5b5060408051600181526002602082015201610226565b348015610346575f5ffd5b506007545b604051908152602001610226565b348015610364575f5ffd5b506102e1600181565b348015610378575f5ffd5b5061024e610387366004612769565b610ac9565b348015610397575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405160ff9091168152602001610226565b3480156103d7575f5ffd5b506102cb6103e63660046127bf565b610aee565b3480156103f6575f5ffd5b5061024e610405366004612557565b610b04565b348015610415575f5ffd5b506104296104243660046127e6565b610b25565b6040516102269190612834565b348015610441575f5ffd5b50306102ab565b348015610453575f5ffd5b50610219610462366004612853565b610b7e565b348015610472575f5ffd5b5061024e6104813660046127bf565b610c20565b348015610491575f5ffd5b506102ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c4575f5ffd5b506102cb6104d3366004612884565b610c3b565b3480156104e3575f5ffd5b5061034b6104f2366004612884565b6001600160a01b03165f9081526005602052604090205490565b348015610517575f5ffd5b506102cb610c99565b34801561052b575f5ffd5b5061054161053a3660046127bf565b5f92915050565b6040516001600160401b039091168152602001610226565b348015610564575f5ffd5b5061024e61057336600461289f565b610cac565b348015610583575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006103ba565b3480156105b5575f5ffd5b506102ab610cc1565b3480156105c9575f5ffd5b50610219610ccf565b3480156105dd575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610610575f5ffd5b505f61024e565b348015610622575f5ffd5b5061024e610631366004612557565b610cde565b348015610641575f5ffd5b5061024e610650366004612557565b610d63565b348015610660575f5ffd5b506002546102ab906001600160a01b031681565b34801561067f575f5ffd5b506102cb61068e366004612941565b610d70565b34801561069e575f5ffd5b5061034b6106ad36600461297f565b60016020525f908152604090205481565b3480156106c9575f5ffd5b506102196106d8366004612998565b610d8a565b6102cb6106eb366004612941565b610f2b565b6107036106fe3660046129f4565b611095565b604051610226929190612a5c565b34801561071c575f5ffd5b506102cb61072b366004612884565b6110bd565b6102cb61073e3660046126cf565b611141565b34801561074e575f5ffd5b506102cb61075d366004612884565b611170565b34801561076d575f5ffd5b5061034b61077c366004612a98565b6111c3565b34801561078c575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bf575f5ffd5b506102cb6107ce366004612884565b6111ed565b3480156107de575f5ffd5b5061024e6107ed366004612ac4565b611266565b60606008805461080190612ade565b80601f016020809104026020016040519081016040528092919081815260200182805461082d90612ade565b80156108785780601f1061084f57610100808354040283529160200191610878565b820191905f5260205f20905b81548152906001019060200180831161085b57829003601f168201915b5050505050905090565b5f3361088f81858561129a565b60019150505b92915050565b604080518082019091525f808252602082015260606108b86124a9565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091d9190612b10565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610958573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097c9190612b2b565b604080518082018252848152602080820184905282515f808252918101909352909750919250906109cf565b604080518082019091525f8152606060208201528152602001906001900390816109a85790505b5093505f806109f3604089013560608a01356109ee60208c018c61297f565b6113bd565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a6557336040516391ac5e4f60e01b8152600401610a5c9190612667565b60405180910390fd5b60208701803590610a7f90610a7a908a61297f565b6113f8565b14610ab157610a91602088018861297f565b876020013560405163309afaf360e21b8152600401610a5c929190612b56565b610ac087878787878787611433565b50505050505050565b5f33610ad685828561158a565b610ae1858585611602565b60019150505b9392505050565b610af6611798565b610b0082826117f7565b5050565b5f3361088f818585610b1683836111c3565b610b209190612b80565b61129a565b610b2d6124a9565b5f610b48604085013560608601356109ee602088018861297f565b9150505f5f610b57868461184c565b9092509050610b74610b6c602088018861297f565b83838861196a565b9695505050505050565b600360209081525f928352604080842090915290825290208054610ba190612ade565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcd90612ade565b8015610c185780601f10610bef57610100808354040283529160200191610c18565b820191905f5260205f20905b815481529060010190602001808311610bfb57829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610c43611798565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610c8e908390612667565b60405180910390a150565b610ca1611798565b610caa5f611a3d565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b60606009805461080190612ade565b5f3381610ceb82866111c3565b905083811015610d4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a5c565b610d58828686840361129a565b506001949350505050565b5f3361088f818585611602565b610d78611798565b610b00610d858284612c33565b611a8c565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610dbd90612ade565b80601f0160208091040260200160405190810160405280929190818152602001828054610de990612ade565b8015610e345780601f10610e0b57610100808354040283529160200191610e34565b820191905f5260205f20905b815481529060010190602001808311610e1757829003601f168201915b5050505050905080515f03610e825783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610cb99350505050565b5f839003610e91579050610cb9565b60028310610f0e57610ed784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611b8d92505050565b80610ee58460028188612d54565b604051602001610ef793929190612d7b565b604051602081830303815290604052915050610cb9565b8383604051639a6d49cd60e01b8152600401610a5c929190612dc9565b5f5b818110156110185736838383818110610f4857610f48612ddc565b9050602002810190610f5a9190612df0565b9050610f76610f6c602083018361297f565b6020830135610c20565b610f805750611010565b3063d045a0dc60c08301358360a0810135610f9f610100830183612e0f565b610fb0610100890160e08a01612884565b610fbe6101208a018a612e0f565b6040518963ffffffff1660e01b8152600401610fe09796959493929190612e65565b5f604051808303818588803b158015610ff7575f5ffd5b505af1158015611009573d5f5f3e3d5ffd5b5050505050505b600101610f2d565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611054573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261107b9190810190612eea565b604051638351eea760e01b8152600401610a5c9190612531565b61109d6124c1565b6110a56124a9565b6110b0858585611bb9565b915091505b935093915050565b6110c5611798565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190611111908490600401612667565b5f604051808303815f87803b158015611128575f5ffd5b505af115801561113a573d5f5f3e3d5ffd5b5050505050565b3330146111615760405163029a949d60e31b815260040160405180910390fd5b610ac087878787878787610ab1565b611178611798565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610c8e908390612667565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b6111f5611798565b6001600160a01b03811661125a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5c565b61126381611a3d565b50565b5f60208201803590600190839061127d908661297f565b63ffffffff16815260208101919091526040015f20541492915050565b6001600160a01b0383166112fc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5c565b6001600160a01b03821661135d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5c565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f5f6113c885611ca6565b9150819050838110156110b5576040516371c4efed60e01b81526004810182905260248101859052604401610a5c565b63ffffffff81165f90815260016020526040812054806108955760405163f6ff4fb760e01b815263ffffffff84166004820152602401610a5c565b5f6114446114418787611cdc565b90565b90505f61146f8261145d6114588a8a611cf3565b611d15565b61146a60208d018d61297f565b611d49565b9050602886111561152f575f6114ab61148e60608c0160408d01612f52565b61149b60208d018d61297f565b846114a68c8c611d70565b611dba565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115009086908d905f908790600401612f6d565b5f604051808303815f87803b158015611517575f5ffd5b505af1158015611529573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61156860208d018d61297f565b84604051611577929190612b56565b60405180910390a3505050505050505050565b5f61159584846111c3565b90505f1981146115fc57818110156115ef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a5c565b6115fc848484840361129a565b50505050565b6001600160a01b0383166116665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5c565b6001600160a01b0382166116c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a5c565b6001600160a01b0383165f908152600560205260409020548181101561173f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a5c565b6001600160a01b038085165f8181526005602052604080822086860390559286168082529083902080548601905591515f5160206133d15f395f51905f529061178b9086815260200190565b60405180910390a36115fc565b336117a1610cc1565b6001600160a01b031614610caa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5c565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b906118409084908490612b56565b60405180910390a15050565b6060805f6118a7856020013561186186611df1565b61186e60a0890189612e0f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e1c92505050565b90935090505f816118b95760016118bc565b60025b90506118dc6118ce602088018861297f565b826106d860808a018a612e0f565b6004549093506001600160a01b031680156119605760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061191f9088908890600401612f9d565b602060405180830381865afa15801561193a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195e9190612fc1565b505b5050509250929050565b6119726124a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016119c1896113f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016119f6929190612fdc565b6040805180830381865afa158015611a10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a349190613083565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611b5d57611abd828281518110611aac57611aac612ddc565b602002602001015160400151611b8d565b818181518110611acf57611acf612ddc565b60200260200101516040015160035f848481518110611af057611af0612ddc565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611b2757611b27612ddc565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611b5491906130e1565b50600101611a8e565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c8e919061319b565b600281015161ffff8116600314610b005781604051639a6d49cd60e01b8152600401610a5c9190612531565b611bc16124c1565b611bc96124a9565b5f80611beb33604089013560608a0135611be660208c018c61297f565b611e96565b915091505f5f611bfb898461184c565b9092509050611c27611c1060208b018b61297f565b8383611c21368d90038d018d613229565b8b611ebb565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611c75908d018d61297f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611cd2818461325a565b6108959190613279565b5f611cea6020828486612d54565b610ae791613290565b5f611d02602860208486612d54565b611d0b916132ad565b60c01c9392505050565b5f6108957f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416613279565b5f6001600160a01b038416611d5e5761dead93505b611d688484611fc1565b509092915050565b6060611d7f8260288186612d54565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611dd394939291906132e5565b6040516020818303038152906040529050949350505050565b505050565b5f6108957f00000000000000000000000000000000000000000000000000000000000000008361325a565b8051606090151580611e65578484604051602001611e5192919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611e8c565b84843385604051602001611e7c9493929190613336565b6040516020818303038152906040525b9150935093915050565b5f5f611ea38585856113bd565b9092509050611eb2868361206d565b94509492505050565b611ec36124c1565b5f611ed0845f015161218c565b602085015190915015611eea57611eea84602001516121b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611f3a8c6113f8565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611f75929190612fdc565b60806040518083038185885af1158015611f91573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fb69190613375565b979650505050505050565b6001600160a01b0382166120175760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a5c565b8060075f8282546120289190612b80565b90915550506001600160a01b0382165f818152600560209081526040808320805486019055518481525f5160206133d15f395f51905f52910160405180910390a35050565b6001600160a01b0382166120cd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a5c565b6001600160a01b0382165f90815260056020526040902054818110156121405760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a5c565b6001600160a01b0383165f8181526005602090815260408083208686039055600780548790039055518581529192915f5160206133d15f395f51905f52910160405180910390a3505050565b5f8134146121af576040516304fb820960e51b8152346004820152602401610a5c565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612210573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122349190612b10565b90506001600160a01b03811661225d576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094018552602080850180516001600160e01b03166323b872dd60e01b17905285518087019096528086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490860152610b00949086169387916115fc9186915f9061231d908490849061239c565b905080515f148061233d57508080602001905181019061233d9190612fc1565b611dec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a5c565b6060610cb984845f85855f5f866001600160a01b031685876040516123c191906133bf565b5f6040518083038185875af1925050503d805f81146123fb576040519150601f19603f3d011682016040523d82523d5f602084013e612400565b606091505b5091509150611fb6878383876060831561247a5782515f03612473576001600160a01b0385163b6124735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a5c565b5081610cb9565b610cb9838381511561248f5781518083602001fd5b8060405162461bcd60e51b8152600401610a5c9190612531565b60405180604001604052805f81526020015f81525090565b604080516060810182525f80825260208201529081016124df6124a9565b905290565b5f5b838110156124fe5781810151838201526020016124e6565b50505f910152565b5f815180845261251d8160208601602086016124e4565b601f01601f19169290920160200192915050565b602081525f610ae76020830184612506565b6001600160a01b0381168114611263575f5ffd5b5f5f60408385031215612568575f5ffd5b823561257381612543565b946020939093013593505050565b5f60e08284031215612591575f5ffd5b50919050565b5f602082840312156125a7575f5ffd5b81356001600160401b038111156125bc575f5ffd5b610cb984828501612581565b80518252602090810151910152565b5f60a082016125e683876125c8565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156126525760bf19878603018452815180518652602081015190506040602087015261263c6040870182612506565b955050602093840193919091019060010161260a565b5050505080915050610cb960608301846125c8565b6001600160a01b0391909116815260200190565b5f60608284031215612591575f5ffd5b5f5f83601f84011261269b575f5ffd5b5081356001600160401b038111156126b1575f5ffd5b6020830191508360208285010111156126c8575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156126e5575f5ffd5b6126ef898961267b565b96506060880135955060808801356001600160401b03811115612710575f5ffd5b61271c8a828b0161268b565b90965094505060a088013561273081612543565b925060c08801356001600160401b0381111561274a575f5ffd5b6127568a828b0161268b565b989b979a50959850939692959293505050565b5f5f5f6060848603121561277b575f5ffd5b833561278681612543565b9250602084013561279681612543565b929592945050506040919091013590565b803563ffffffff811681146127ba575f5ffd5b919050565b5f5f604083850312156127d0575f5ffd5b612573836127a7565b8015158114611263575f5ffd5b5f5f604083850312156127f7575f5ffd5b82356001600160401b0381111561280c575f5ffd5b61281885828601612581565b9250506020830135612829816127d9565b809150509250929050565b6040810161089582846125c8565b803561ffff811681146127ba575f5ffd5b5f5f60408385031215612864575f5ffd5b61286d836127a7565b915061287b60208401612842565b90509250929050565b5f60208284031215612894575f5ffd5b8135610ae781612543565b5f5f5f5f60a085870312156128b2575f5ffd5b6128bc868661267b565b935060608501356001600160401b038111156128d6575f5ffd5b6128e28782880161268b565b90945092505060808501356128f681612543565b939692955090935050565b5f5f83601f840112612911575f5ffd5b5081356001600160401b03811115612927575f5ffd5b6020830191508360208260051b85010111156126c8575f5ffd5b5f5f60208385031215612952575f5ffd5b82356001600160401b03811115612967575f5ffd5b61297385828601612901565b90969095509350505050565b5f6020828403121561298f575f5ffd5b610ae7826127a7565b5f5f5f5f606085870312156129ab575f5ffd5b6129b4856127a7565b93506129c260208601612842565b925060408501356001600160401b038111156129dc575f5ffd5b6129e88782880161268b565b95989497509550505050565b5f5f5f8385036080811215612a07575f5ffd5b84356001600160401b03811115612a1c575f5ffd5b612a2887828801612581565b9450506040601f1982011215612a3c575f5ffd5b506020840191506060840135612a5181612543565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c0830191612a8a908401826125c8565b50610ae760808301846125c8565b5f5f60408385031215612aa9575f5ffd5b8235612ab481612543565b9150602083013561282981612543565b5f60608284031215612ad4575f5ffd5b610ae7838361267b565b600181811c90821680612af257607f821691505b60208210810361259157634e487b7160e01b5f52602260045260245ffd5b5f60208284031215612b20575f5ffd5b8151610ae781612543565b5f60208284031215612b3b575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561089557610895612b6c565b604051606081016001600160401b0381118282101715612bb557612bb5612b42565b60405290565b604080519081016001600160401b0381118282101715612bb557612bb5612b42565b604051601f8201601f191681016001600160401b0381118282101715612c0557612c05612b42565b604052919050565b5f6001600160401b03821115612c2557612c25612b42565b50601f01601f191660200190565b5f6001600160401b03831115612c4b57612c4b612b42565b8260051b612c5b60208201612bdd565b84815290830190602081019036831115612c73575f5ffd5b845b83811015612d4a5780356001600160401b03811115612c92575f5ffd5b86016060368290031215612ca4575f5ffd5b612cac612b93565b612cb5826127a7565b8152612cc360208301612842565b602082015260408201356001600160401b03811115612ce0575f5ffd5b919091019036601f830112612cf3575f5ffd5b8135612d06612d0182612c0d565b612bdd565b818152366020838601011115612d1a575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612c75565b5095945050505050565b5f5f85851115612d62575f5ffd5b83861115612d6e575f5ffd5b5050820193919092039150565b5f8451612d8c8184602089016124e4565b8201838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610cb9602083018486612da1565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112612e05575f5ffd5b9190910192915050565b5f5f8335601e19843603018112612e24575f5ffd5b8301803591506001600160401b03821115612e3d575f5ffd5b6020019150368190038213156126c8575f5ffd5b6001600160401b0381168114611263575f5ffd5b63ffffffff612e73896127a7565b168152602088810135908201525f6040890135612e8f81612e51565b6001600160401b031660408301526060820188905260e060808301819052612eba9083018789612da1565b6001600160a01b03861660a084015282810360c0840152612edc818587612da1565b9a9950505050505050505050565b5f60208284031215612efa575f5ffd5b81516001600160401b03811115612f0f575f5ffd5b8201601f81018413612f1f575f5ffd5b8051612f2d612d0182612c0d565b818152856020838501011115612f41575f5ffd5b611a348260208301602086016124e4565b5f60208284031215612f62575f5ffd5b8135610ae781612e51565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610b746080830184612506565b604081525f612faf6040830185612506565b8281036020840152611a348185612506565b5f60208284031215612fd1575f5ffd5b8151610ae7816127d9565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a0608084015261301160e0840182612506565b90506060850151603f198483030160a085015261302e8282612506565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215613064575f5ffd5b61306c612bbb565b825181526020928301519281019290925250919050565b5f60408284031215613093575f5ffd5b610ae78383613054565b601f821115611dec57805f5260205f20601f840160051c810160208510156130c25750805b601f840160051c820191505b8181101561113a575f81556001016130ce565b81516001600160401b038111156130fa576130fa612b42565b61310e816131088454612ade565b8461309d565b6020601f821160018114613140575f83156131295750848201515b5f19600385901b1c1916600184901b17845561113a565b5f84815260208120601f198516915b8281101561316f578785015182556020948501946001909201910161314f565b508482101561318c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561321d57603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526132076060870182612506565b95505060209384019391909101906001016131c1565b50929695505050505050565b5f604082840312801561323a575f5ffd5b50613243612bbb565b823581526020928301359281019290925250919050565b5f8261327457634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761089557610895612b6c565b80356020831015610895575f19602084900360031b1b1692915050565b80356001600160c01b031981169060088410156132de576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c810183905281515f9061332681602c8501602087016124e4565b91909101602c0195945050505050565b84815260018060c01b03198460c01b1660208201528260288201525f82516133658160488501602087016124e4565b9190910160480195945050505050565b5f6080828403128015613386575f5ffd5b5061338f612b93565b8251815260208301516133a181612e51565b60208201526133b38460408501613054565b60408201529392505050565b5f8251612e058184602087016124e456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f7c9be70741ec2ce5a978a17bb22a34b8140c038b288241ede1a087af5b13d9764736f6c634300081e0033",
  "deployedBytecode": "0x608060405260043610610201575f3560e01c806306fdde0314610205578063095ea7b31461022f5780630d35b4151461025e578063111ecdad1461028c57806313137d65146102b8578063134d4f25146102cd578063156a0d0f146102f457806317442b701461031a57806318160ddd1461033b5780631f5e13341461035957806323b872dd1461036d578063313ce5671461038c5780633400288b146103cc57806339509351146103eb5780633b6f743b1461040a57806352ae2879146104365780635535d461146104485780635a0dfe4d146104675780635e280f11146104865780636fc1b31e146104b957806370a08231146104d8578063715018a61461050c5780637d25a05e1461052057806382413eac14610559578063857749b0146105785780638da5cb5b146105aa57806395d89b41146105be578063963efcaa146105d25780639f68b96414610605578063a457c2d714610617578063a9059cbb14610636578063b731ea0a14610655578063b98bd07014610674578063bb0b6a5314610693578063bc70b354146106be578063bd815db0146106dd578063c7c7f5b3146106f0578063ca5eb5e114610711578063d045a0dc14610730578063d424388514610743578063dd62ed3e14610762578063e184c9be14610781578063f2fde38b146107b4578063fc0c546a14610436578063ff7bd03d146107d3575b5f5ffd5b348015610210575f5ffd5b506102196107f2565b6040516102269190612531565b60405180910390f35b34801561023a575f5ffd5b5061024e610249366004612557565b610882565b6040519015158152602001610226565b348015610269575f5ffd5b5061027d610278366004612597565b61089b565b604051610226939291906125d7565b348015610297575f5ffd5b506004546102ab906001600160a01b031681565b6040516102269190612667565b6102cb6102c63660046126cf565b610a11565b005b3480156102d8575f5ffd5b506102e1600281565b60405161ffff9091168152602001610226565b3480156102ff575f5ffd5b506040805162b9270b60e21b81526001602082015201610226565b348015610325575f5ffd5b5060408051600181526002602082015201610226565b348015610346575f5ffd5b506007545b604051908152602001610226565b348015610364575f5ffd5b506102e1600181565b348015610378575f5ffd5b5061024e610387366004612769565b610ac9565b348015610397575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405160ff9091168152602001610226565b3480156103d7575f5ffd5b506102cb6103e63660046127bf565b610aee565b3480156103f6575f5ffd5b5061024e610405366004612557565b610b04565b348015610415575f5ffd5b506104296104243660046127e6565b610b25565b6040516102269190612834565b348015610441575f5ffd5b50306102ab565b348015610453575f5ffd5b50610219610462366004612853565b610b7e565b348015610472575f5ffd5b5061024e6104813660046127bf565b610c20565b348015610491575f5ffd5b506102ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c4575f5ffd5b506102cb6104d3366004612884565b610c3b565b3480156104e3575f5ffd5b5061034b6104f2366004612884565b6001600160a01b03165f9081526005602052604090205490565b348015610517575f5ffd5b506102cb610c99565b34801561052b575f5ffd5b5061054161053a3660046127bf565b5f92915050565b6040516001600160401b039091168152602001610226565b348015610564575f5ffd5b5061024e61057336600461289f565b610cac565b348015610583575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006103ba565b3480156105b5575f5ffd5b506102ab610cc1565b3480156105c9575f5ffd5b50610219610ccf565b3480156105dd575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610610575f5ffd5b505f61024e565b348015610622575f5ffd5b5061024e610631366004612557565b610cde565b348015610641575f5ffd5b5061024e610650366004612557565b610d63565b348015610660575f5ffd5b506002546102ab906001600160a01b031681565b34801561067f575f5ffd5b506102cb61068e366004612941565b610d70565b34801561069e575f5ffd5b5061034b6106ad36600461297f565b60016020525f908152604090205481565b3480156106c9575f5ffd5b506102196106d8366004612998565b610d8a565b6102cb6106eb366004612941565b610f2b565b6107036106fe3660046129f4565b611095565b604051610226929190612a5c565b34801561071c575f5ffd5b506102cb61072b366004612884565b6110bd565b6102cb61073e3660046126cf565b611141565b34801561074e575f5ffd5b506102cb61075d366004612884565b611170565b34801561076d575f5ffd5b5061034b61077c366004612a98565b6111c3565b34801561078c575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bf575f5ffd5b506102cb6107ce366004612884565b6111ed565b3480156107de575f5ffd5b5061024e6107ed366004612ac4565b611266565b60606008805461080190612ade565b80601f016020809104026020016040519081016040528092919081815260200182805461082d90612ade565b80156108785780601f1061084f57610100808354040283529160200191610878565b820191905f5260205f20905b81548152906001019060200180831161085b57829003601f168201915b5050505050905090565b5f3361088f81858561129a565b60019150505b92915050565b604080518082019091525f808252602082015260606108b86124a9565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091d9190612b10565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610958573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097c9190612b2b565b604080518082018252848152602080820184905282515f808252918101909352909750919250906109cf565b604080518082019091525f8152606060208201528152602001906001900390816109a85790505b5093505f806109f3604089013560608a01356109ee60208c018c61297f565b6113bd565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a6557336040516391ac5e4f60e01b8152600401610a5c9190612667565b60405180910390fd5b60208701803590610a7f90610a7a908a61297f565b6113f8565b14610ab157610a91602088018861297f565b876020013560405163309afaf360e21b8152600401610a5c929190612b56565b610ac087878787878787611433565b50505050505050565b5f33610ad685828561158a565b610ae1858585611602565b60019150505b9392505050565b610af6611798565b610b0082826117f7565b5050565b5f3361088f818585610b1683836111c3565b610b209190612b80565b61129a565b610b2d6124a9565b5f610b48604085013560608601356109ee602088018861297f565b9150505f5f610b57868461184c565b9092509050610b74610b6c602088018861297f565b83838861196a565b9695505050505050565b600360209081525f928352604080842090915290825290208054610ba190612ade565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcd90612ade565b8015610c185780601f10610bef57610100808354040283529160200191610c18565b820191905f5260205f20905b815481529060010190602001808311610bfb57829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610c43611798565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610c8e908390612667565b60405180910390a150565b610ca1611798565b610caa5f611a3d565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b60606009805461080190612ade565b5f3381610ceb82866111c3565b905083811015610d4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a5c565b610d58828686840361129a565b506001949350505050565b5f3361088f818585611602565b610d78611798565b610b00610d858284612c33565b611a8c565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610dbd90612ade565b80601f0160208091040260200160405190810160405280929190818152602001828054610de990612ade565b8015610e345780601f10610e0b57610100808354040283529160200191610e34565b820191905f5260205f20905b815481529060010190602001808311610e1757829003601f168201915b5050505050905080515f03610e825783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610cb99350505050565b5f839003610e91579050610cb9565b60028310610f0e57610ed784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611b8d92505050565b80610ee58460028188612d54565b604051602001610ef793929190612d7b565b604051602081830303815290604052915050610cb9565b8383604051639a6d49cd60e01b8152600401610a5c929190612dc9565b5f5b818110156110185736838383818110610f4857610f48612ddc565b9050602002810190610f5a9190612df0565b9050610f76610f6c602083018361297f565b6020830135610c20565b610f805750611010565b3063d045a0dc60c08301358360a0810135610f9f610100830183612e0f565b610fb0610100890160e08a01612884565b610fbe6101208a018a612e0f565b6040518963ffffffff1660e01b8152600401610fe09796959493929190612e65565b5f604051808303818588803b158015610ff7575f5ffd5b505af1158015611009573d5f5f3e3d5ffd5b5050505050505b600101610f2d565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611054573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261107b9190810190612eea565b604051638351eea760e01b8152600401610a5c9190612531565b61109d6124c1565b6110a56124a9565b6110b0858585611bb9565b915091505b935093915050565b6110c5611798565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190611111908490600401612667565b5f604051808303815f87803b158015611128575f5ffd5b505af115801561113a573d5f5f3e3d5ffd5b5050505050565b3330146111615760405163029a949d60e31b815260040160405180910390fd5b610ac087878787878787610ab1565b611178611798565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610c8e908390612667565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b6111f5611798565b6001600160a01b03811661125a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5c565b61126381611a3d565b50565b5f60208201803590600190839061127d908661297f565b63ffffffff16815260208101919091526040015f20541492915050565b6001600160a01b0383166112fc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5c565b6001600160a01b03821661135d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5c565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f5f6113c885611ca6565b9150819050838110156110b5576040516371c4efed60e01b81526004810182905260248101859052604401610a5c565b63ffffffff81165f90815260016020526040812054806108955760405163f6ff4fb760e01b815263ffffffff84166004820152602401610a5c565b5f6114446114418787611cdc565b90565b90505f61146f8261145d6114588a8a611cf3565b611d15565b61146a60208d018d61297f565b611d49565b9050602886111561152f575f6114ab61148e60608c0160408d01612f52565b61149b60208d018d61297f565b846114a68c8c611d70565b611dba565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115009086908d905f908790600401612f6d565b5f604051808303815f87803b158015611517575f5ffd5b505af1158015611529573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61156860208d018d61297f565b84604051611577929190612b56565b60405180910390a3505050505050505050565b5f61159584846111c3565b90505f1981146115fc57818110156115ef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a5c565b6115fc848484840361129a565b50505050565b6001600160a01b0383166116665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5c565b6001600160a01b0382166116c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a5c565b6001600160a01b0383165f908152600560205260409020548181101561173f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a5c565b6001600160a01b038085165f8181526005602052604080822086860390559286168082529083902080548601905591515f5160206133d15f395f51905f529061178b9086815260200190565b60405180910390a36115fc565b336117a1610cc1565b6001600160a01b031614610caa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5c565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b906118409084908490612b56565b60405180910390a15050565b6060805f6118a7856020013561186186611df1565b61186e60a0890189612e0f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e1c92505050565b90935090505f816118b95760016118bc565b60025b90506118dc6118ce602088018861297f565b826106d860808a018a612e0f565b6004549093506001600160a01b031680156119605760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061191f9088908890600401612f9d565b602060405180830381865afa15801561193a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195e9190612fc1565b505b5050509250929050565b6119726124a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016119c1896113f8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016119f6929190612fdc565b6040805180830381865afa158015611a10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a349190613083565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611b5d57611abd828281518110611aac57611aac612ddc565b602002602001015160400151611b8d565b818181518110611acf57611acf612ddc565b60200260200101516040015160035f848481518110611af057611af0612ddc565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611b2757611b27612ddc565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611b5491906130e1565b50600101611a8e565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c8e919061319b565b600281015161ffff8116600314610b005781604051639a6d49cd60e01b8152600401610a5c9190612531565b611bc16124c1565b611bc96124a9565b5f80611beb33604089013560608a0135611be660208c018c61297f565b611e96565b915091505f5f611bfb898461184c565b9092509050611c27611c1060208b018b61297f565b8383611c21368d90038d018d613229565b8b611ebb565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611c75908d018d61297f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611cd2818461325a565b6108959190613279565b5f611cea6020828486612d54565b610ae791613290565b5f611d02602860208486612d54565b611d0b916132ad565b60c01c9392505050565b5f6108957f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416613279565b5f6001600160a01b038416611d5e5761dead93505b611d688484611fc1565b509092915050565b6060611d7f8260288186612d54565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611dd394939291906132e5565b6040516020818303038152906040529050949350505050565b505050565b5f6108957f00000000000000000000000000000000000000000000000000000000000000008361325a565b8051606090151580611e65578484604051602001611e5192919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611e8c565b84843385604051602001611e7c9493929190613336565b6040516020818303038152906040525b9150935093915050565b5f5f611ea38585856113bd565b9092509050611eb2868361206d565b94509492505050565b611ec36124c1565b5f611ed0845f015161218c565b602085015190915015611eea57611eea84602001516121b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611f3a8c6113f8565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611f75929190612fdc565b60806040518083038185885af1158015611f91573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fb69190613375565b979650505050505050565b6001600160a01b0382166120175760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a5c565b8060075f8282546120289190612b80565b90915550506001600160a01b0382165f818152600560209081526040808320805486019055518481525f5160206133d15f395f51905f52910160405180910390a35050565b6001600160a01b0382166120cd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a5c565b6001600160a01b0382165f90815260056020526040902054818110156121405760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a5c565b6001600160a01b0383165f8181526005602090815260408083208686039055600780548790039055518581529192915f5160206133d15f395f51905f52910160405180910390a3505050565b5f8134146121af576040516304fb820960e51b8152346004820152602401610a5c565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612210573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122349190612b10565b90506001600160a01b03811661225d576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094018552602080850180516001600160e01b03166323b872dd60e01b17905285518087019096528086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490860152610b00949086169387916115fc9186915f9061231d908490849061239c565b905080515f148061233d57508080602001905181019061233d9190612fc1565b611dec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a5c565b6060610cb984845f85855f5f866001600160a01b031685876040516123c191906133bf565b5f6040518083038185875af1925050503d805f81146123fb576040519150601f19603f3d011682016040523d82523d5f602084013e612400565b606091505b5091509150611fb6878383876060831561247a5782515f03612473576001600160a01b0385163b6124735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a5c565b5081610cb9565b610cb9838381511561248f5781518083602001fd5b8060405162461bcd60e51b8152600401610a5c9190612531565b60405180604001604052805f81526020015f81525090565b604080516060810182525f80825260208201529081016124df6124a9565b905290565b5f5b838110156124fe5781810151838201526020016124e6565b50505f910152565b5f815180845261251d8160208601602086016124e4565b601f01601f19169290920160200192915050565b602081525f610ae76020830184612506565b6001600160a01b0381168114611263575f5ffd5b5f5f60408385031215612568575f5ffd5b823561257381612543565b946020939093013593505050565b5f60e08284031215612591575f5ffd5b50919050565b5f602082840312156125a7575f5ffd5b81356001600160401b038111156125bc575f5ffd5b610cb984828501612581565b80518252602090810151910152565b5f60a082016125e683876125c8565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156126525760bf19878603018452815180518652602081015190506040602087015261263c6040870182612506565b955050602093840193919091019060010161260a565b5050505080915050610cb960608301846125c8565b6001600160a01b0391909116815260200190565b5f60608284031215612591575f5ffd5b5f5f83601f84011261269b575f5ffd5b5081356001600160401b038111156126b1575f5ffd5b6020830191508360208285010111156126c8575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156126e5575f5ffd5b6126ef898961267b565b96506060880135955060808801356001600160401b03811115612710575f5ffd5b61271c8a828b0161268b565b90965094505060a088013561273081612543565b925060c08801356001600160401b0381111561274a575f5ffd5b6127568a828b0161268b565b989b979a50959850939692959293505050565b5f5f5f6060848603121561277b575f5ffd5b833561278681612543565b9250602084013561279681612543565b929592945050506040919091013590565b803563ffffffff811681146127ba575f5ffd5b919050565b5f5f604083850312156127d0575f5ffd5b612573836127a7565b8015158114611263575f5ffd5b5f5f604083850312156127f7575f5ffd5b82356001600160401b0381111561280c575f5ffd5b61281885828601612581565b9250506020830135612829816127d9565b809150509250929050565b6040810161089582846125c8565b803561ffff811681146127ba575f5ffd5b5f5f60408385031215612864575f5ffd5b61286d836127a7565b915061287b60208401612842565b90509250929050565b5f60208284031215612894575f5ffd5b8135610ae781612543565b5f5f5f5f60a085870312156128b2575f5ffd5b6128bc868661267b565b935060608501356001600160401b038111156128d6575f5ffd5b6128e28782880161268b565b90945092505060808501356128f681612543565b939692955090935050565b5f5f83601f840112612911575f5ffd5b5081356001600160401b03811115612927575f5ffd5b6020830191508360208260051b85010111156126c8575f5ffd5b5f5f60208385031215612952575f5ffd5b82356001600160401b03811115612967575f5ffd5b61297385828601612901565b90969095509350505050565b5f6020828403121561298f575f5ffd5b610ae7826127a7565b5f5f5f5f606085870312156129ab575f5ffd5b6129b4856127a7565b93506129c260208601612842565b925060408501356001600160401b038111156129dc575f5ffd5b6129e88782880161268b565b95989497509550505050565b5f5f5f8385036080811215612a07575f5ffd5b84356001600160401b03811115612a1c575f5ffd5b612a2887828801612581565b9450506040601f1982011215612a3c575f5ffd5b506020840191506060840135612a5181612543565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c0830191612a8a908401826125c8565b50610ae760808301846125c8565b5f5f60408385031215612aa9575f5ffd5b8235612ab481612543565b9150602083013561282981612543565b5f60608284031215612ad4575f5ffd5b610ae7838361267b565b600181811c90821680612af257607f821691505b60208210810361259157634e487b7160e01b5f52602260045260245ffd5b5f60208284031215612b20575f5ffd5b8151610ae781612543565b5f60208284031215612b3b575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561089557610895612b6c565b604051606081016001600160401b0381118282101715612bb557612bb5612b42565b60405290565b604080519081016001600160401b0381118282101715612bb557612bb5612b42565b604051601f8201601f191681016001600160401b0381118282101715612c0557612c05612b42565b604052919050565b5f6001600160401b03821115612c2557612c25612b42565b50601f01601f191660200190565b5f6001600160401b03831115612c4b57612c4b612b42565b8260051b612c5b60208201612bdd565b84815290830190602081019036831115612c73575f5ffd5b845b83811015612d4a5780356001600160401b03811115612c92575f5ffd5b86016060368290031215612ca4575f5ffd5b612cac612b93565b612cb5826127a7565b8152612cc360208301612842565b602082015260408201356001600160401b03811115612ce0575f5ffd5b919091019036601f830112612cf3575f5ffd5b8135612d06612d0182612c0d565b612bdd565b818152366020838601011115612d1a575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612c75565b5095945050505050565b5f5f85851115612d62575f5ffd5b83861115612d6e575f5ffd5b5050820193919092039150565b5f8451612d8c8184602089016124e4565b8201838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610cb9602083018486612da1565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112612e05575f5ffd5b9190910192915050565b5f5f8335601e19843603018112612e24575f5ffd5b8301803591506001600160401b03821115612e3d575f5ffd5b6020019150368190038213156126c8575f5ffd5b6001600160401b0381168114611263575f5ffd5b63ffffffff612e73896127a7565b168152602088810135908201525f6040890135612e8f81612e51565b6001600160401b031660408301526060820188905260e060808301819052612eba9083018789612da1565b6001600160a01b03861660a084015282810360c0840152612edc818587612da1565b9a9950505050505050505050565b5f60208284031215612efa575f5ffd5b81516001600160401b03811115612f0f575f5ffd5b8201601f81018413612f1f575f5ffd5b8051612f2d612d0182612c0d565b818152856020838501011115612f41575f5ffd5b611a348260208301602086016124e4565b5f60208284031215612f62575f5ffd5b8135610ae781612e51565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610b746080830184612506565b604081525f612faf6040830185612506565b8281036020840152611a348185612506565b5f60208284031215612fd1575f5ffd5b8151610ae7816127d9565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a0608084015261301160e0840182612506565b90506060850151603f198483030160a085015261302e8282612506565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215613064575f5ffd5b61306c612bbb565b825181526020928301519281019290925250919050565b5f60408284031215613093575f5ffd5b610ae78383613054565b601f821115611dec57805f5260205f20601f840160051c810160208510156130c25750805b601f840160051c820191505b8181101561113a575f81556001016130ce565b81516001600160401b038111156130fa576130fa612b42565b61310e816131088454612ade565b8461309d565b6020601f821160018114613140575f83156131295750848201515b5f19600385901b1c1916600184901b17845561113a565b5f84815260208120601f198516915b8281101561316f578785015182556020948501946001909201910161314f565b508482101561318c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561321d57603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526132076060870182612506565b95505060209384019391909101906001016131c1565b50929695505050505050565b5f604082840312801561323a575f5ffd5b50613243612bbb565b823581526020928301359281019290925250919050565b5f8261327457634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761089557610895612b6c565b80356020831015610895575f19602084900360031b1b1692915050565b80356001600160c01b031981169060088410156132de576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c810183905281515f9061332681602c8501602087016124e4565b91909101602c0195945050505050565b84815260018060c01b03198460c01b1660208201528260288201525f82516133658160488501602087016124e4565b9190910160480195945050505050565b5f6080828403128015613386575f5ffd5b5061338f612b93565b8251815260208301516133a181612e51565b60208201526133b38460408501613054565b60408201529392505050565b5f8251612e058184602087016124e456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f7c9be70741ec2ce5a978a17bb22a34b8140c038b288241ede1a087af5b13d9764736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
