{
    "_format": "hh-sol-artifact-1",
    "contractName": "RWATokenOFT",
    "sourceName": "contracts/RWATokenOFT.sol",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_lzEndpoint",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "AccessControlBadConfirmation",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "neededRole",
                    "type": "bytes32"
                }
            ],
            "name": "AccessControlUnauthorizedAccount",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "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": "EnforcedPause",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ExpectedPause",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidDelegate",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidEndpointCall",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidInitialization",
            "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": [],
            "name": "NotInitializing",
            "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": "uint64",
                    "name": "version",
                    "type": "uint64"
                }
            ],
            "name": "Initialized",
            "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": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "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": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "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"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "BURNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "MINTER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "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": [],
            "name": "blocklist",
            "outputs": [
                {
                    "internalType": "contract IBlocklist",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "burn",
            "outputs": [],
            "stateMutability": "nonpayable",
            "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": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "forcedTransfer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "symbol",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "whitelistContract",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "blocklistContract",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "admin",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "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": [
                {
                    "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": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint32",
                    "name": "_eid",
                    "type": "uint32"
                }
            ],
            "name": "peers",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "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": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "callerConfirmation",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "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": "blocklistAddress",
                    "type": "address"
                }
            ],
            "name": "setBlocklist",
            "outputs": [],
            "stateMutability": "nonpayable",
            "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": [
                {
                    "internalType": "address",
                    "name": "whitelistAddress",
                    "type": "address"
                }
            ],
            "name": "setWhitelist",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "sharedDecimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "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"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "whitelist",
            "outputs": [
                {
                    "internalType": "contract IWhitelist",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x60c06040523480156200001157600080fd5b50604051620048bc380380620048bc83398101604081905262000034916200012b565b6001600160a01b038116608052806012816200005260068362000173565b6200005f90600a62000292565b60a052506200007091505062000077565b50620002a3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000c85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001285780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200013e57600080fd5b81516001600160a01b03811681146200015657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200018f576200018f6200015d565b92915050565b600181815b80851115620001d6578160001904821115620001ba57620001ba6200015d565b80851615620001c857918102915b93841c93908002906200019a565b509250929050565b600082620001ef575060016200018f565b81620001fe575060006200018f565b8160018114620002175760028114620002225762000242565b60019150506200018f565b60ff8411156200023657620002366200015d565b50506001821b6200018f565b5060208310610133831016604e8410600b841016171562000267575081810a6200018f565b62000273838362000195565b80600019048211156200028a576200028a6200015d565b029392505050565b60006200015660ff841683620001de565b60805160a0516145ad6200030f6000396000818161094b015281816127ea0152818161285f0152612e6601526000818161076f01528181610e40015281816119df01528181611ea9015281816122f3015281816125e301528181612f92015261304b01526145ad6000f3fe6080604052600436106103b85760003560e01c806382413eac116101f2578063b98bd0701161010d578063d5391393116100a0578063dd62ed3e1161006f578063dd62ed3e14610bc6578063f2fde38b14610be6578063fc0c546a146106c1578063ff7bd03d14610c0657600080fd5b8063d539139314610b32578063d547741f14610b66578063d64e539614610b86578063db0ed6a014610ba657600080fd5b8063c7c7f5b3116100dc578063c7c7f5b314610abe578063ca5eb5e114610adf578063d045a0dc14610aff578063d424388514610b1257600080fd5b8063b98bd07014610a2b578063bb0b6a5314610a4b578063bc70b35414610a8b578063bd815db014610aab57600080fd5b8063963efcaa11610185578063a217fddf11610154578063a217fddf146109c1578063a9059cbb146109d6578063aef18ae7146109f6578063b731ea0a14610a1657600080fd5b8063963efcaa146109395780639dc29fac1461096d5780639f68b9641461098d5780639fc1d0e7146109a157600080fd5b80638da5cb5b116101c15780638da5cb5b146108cf57806391d14854146108e457806393e59dc11461090457806395d89b411461092457600080fd5b806382413eac146108665780638456cb5914610886578063854cff2f1461089b578063857749b0146108bb57600080fd5b8063313ce567116102e25780635a0dfe4d1161027557806370a082311161024457806370a08231146107b1578063715018a6146107f457806375b238fc146108095780637d25a05e1461082b57600080fd5b80635a0dfe4d146106f45780635c975abb146107385780635e280f111461075d5780636fc1b31e1461079157600080fd5b80633f4ba83a116102b15780633f4ba83a1461068c57806340c10f19146106a157806352ae2879146106c15780635535d461146106d457600080fd5b8063313ce567146105fd5780633400288b1461061f57806336568abe1461063f5780633b6f743b1461065f57600080fd5b8063156a0d0f1161035a57806323b872dd1161032957806323b872dd14610569578063248a9ca314610589578063282c51f3146105a95780632f2ff15d146105dd57600080fd5b8063156a0d0f146104cd57806317442b70146104f457806318160ddd146105165780631f5e13341461055457600080fd5b80630d35b415116103965780630d35b41514610434578063111ecdad1461046357806313137d6514610490578063134d4f25146104a557600080fd5b806301ffc9a7146103bd57806306fdde03146103f2578063095ea7b314610414575b600080fd5b3480156103c957600080fd5b506103dd6103d8366004613402565b610c26565b60405190151581526020015b60405180910390f35b3480156103fe57600080fd5b50610407610c5d565b6040516103e9919061347c565b34801561042057600080fd5b506103dd61042f3660046134a4565b610d20565b34801561044057600080fd5b5061045461044f3660046134e8565b610d38565b6040516103e99392919061351c565b34801561046f57600080fd5b50610478610e09565b6040516001600160a01b0390911681526020016103e9565b6104a361049e36600461360f565b610e3e565b005b3480156104b157600080fd5b506104ba600281565b60405161ffff90911681526020016103e9565b3480156104d957600080fd5b506040805162b9270b60e21b815260016020820152016103e9565b34801561050057600080fd5b50604080516001815260026020820152016103e9565b34801561052257600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016103e9565b34801561056057600080fd5b506104ba600181565b34801561057557600080fd5b506103dd6105843660046136ae565b610efe565b34801561059557600080fd5b506105466105a43660046136ef565b610f24565b3480156105b557600080fd5b506105467f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b3480156105e957600080fd5b506104a36105f8366004613708565b610f46565b34801561060957600080fd5b5060125b60405160ff90911681526020016103e9565b34801561062b57600080fd5b506104a361063a366004613751565b610f68565b34801561064b57600080fd5b506104a361065a366004613708565b610fd5565b34801561066b57600080fd5b5061067f61067a36600461377b565b61100d565b6040516103e991906137c1565b34801561069857600080fd5b506104a3611074565b3480156106ad57600080fd5b506104a36106bc3660046134a4565b611097565b3480156106cd57600080fd5b5030610478565b3480156106e057600080fd5b506104076106ef3660046137ea565b6110cb565b34801561070057600080fd5b506103dd61070f366004613751565b63ffffffff9190911660009081526000805160206144f883398151915260205260409020541490565b34801561074457600080fd5b506000805160206145388339815191525460ff166103dd565b34801561076957600080fd5b506104787f000000000000000000000000000000000000000000000000000000000000000081565b34801561079d57600080fd5b506104a36107ac36600461381d565b6111a6565b3480156107bd57600080fd5b506105466107cc36600461381d565b6001600160a01b031660009081526000805160206144d8833981519152602052604090205490565b34801561080057600080fd5b506104a3611222565b34801561081557600080fd5b5061054660008051602061455883398151915281565b34801561083757600080fd5b5061084e610846366004613751565b600092915050565b6040516001600160401b0390911681526020016103e9565b34801561087257600080fd5b506103dd61088136600461383a565b611236565b34801561089257600080fd5b506104a361124b565b3480156108a757600080fd5b506104a36108b636600461381d565b61126b565b3480156108c757600080fd5b50600661060d565b3480156108db57600080fd5b506104786112a6565b3480156108f057600080fd5b506103dd6108ff366004613708565b6112cf565b34801561091057600080fd5b50600054610478906001600160a01b031681565b34801561093057600080fd5b50610407611307565b34801561094557600080fd5b506105467f000000000000000000000000000000000000000000000000000000000000000081565b34801561097957600080fd5b506104a36109883660046134a4565b611346565b34801561099957600080fd5b5060006103dd565b3480156109ad57600080fd5b506104a36109bc3660046136ae565b61137a565b3480156109cd57600080fd5b50610546600081565b3480156109e257600080fd5b506103dd6109f13660046134a4565b61139d565b348015610a0257600080fd5b506104a3610a1136600461381d565b6113ab565b348015610a2257600080fd5b506104786113e6565b348015610a3757600080fd5b506104a3610a463660046138e4565b61140f565b348015610a5757600080fd5b50610546610a66366004613925565b63ffffffff1660009081526000805160206144f8833981519152602052604090205490565b348015610a9757600080fd5b50610407610aa6366004613940565b611590565b6104a3610ab93660046138e4565b611726565b610ad1610acc3660046139a0565b6118bd565b6040516103e9929190613a0d565b348015610aeb57600080fd5b506104a3610afa36600461381d565b6119b8565b6104a3610b0d36600461360f565b611a3e565b348015610b1e57600080fd5b506104a3610b2d36600461381d565b611a6d565b348015610b3e57600080fd5b506105467f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b348015610b7257600080fd5b506104a3610b81366004613708565b611ae1565b348015610b9257600080fd5b50600154610478906001600160a01b031681565b348015610bb257600080fd5b506104a3610bc1366004613b4a565b611afd565b348015610bd257600080fd5b50610546610be1366004613be7565b611cd5565b348015610bf257600080fd5b506104a3610c0136600461381d565b611d1f565b348015610c1257600080fd5b506103dd610c21366004613c15565b611d5a565b60006001600160e01b03198216637965db0b60e01b1480610c5757506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060916000805160206144d883398151915291610c9c90613c31565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890613c31565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b505050505091505090565b600033610d2e818585611d78565b5060019392505050565b60408051808201909152600080825260208201526060610d6b604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610dc6565b604080518082019091526000815260606020820152815260200190600190039081610d9e5790505b509350600080610deb604089013560608a0135610de660208c018c613925565b611d85565b60408051808201909152918252602082015296989597505050505050565b6000807f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c005b546001600160a01b031692915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610e8e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610ea890610ea3908a613925565b611dc9565b14610ee657610eba6020880188613925565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610e85565b610ef587878787878787611e14565b50505050505050565b600033610f0c858285611f7b565b610f17858585611fdc565b60019150505b9392505050565b6000908152600080516020614518833981519152602052604090206001015490565b610f4f82610f24565b610f588161203b565b610f628383612045565b50505050565b610f706120ea565b63ffffffff821660008181526000805160206144f8833981519152602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b6001600160a01b0381163314610ffe5760405163334bd91960e11b815260040160405180910390fd5b611008828261211c565b505050565b6040805180820190915260008082526020820152600061103d60408501356060860135610de66020880188613925565b91505060008061104d8684612198565b909250905061106a6110626020880188613925565b8383886122dd565b9695505050505050565b60008051602061455883398151915261108c8161203b565b6110946123be565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110c18161203b565b611008838361241e565b63ffffffff821660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff861685529091529091208054606092919061111f90613c31565b80601f016020809104026020016040519081016040528092919081815260200182805461114b90613c31565b80156111985780601f1061116d57610100808354040283529160200191611198565b820191906000526020600020905b81548152906001019060200180831161117b57829003601f168201915b505050505091505092915050565b6111ae6120ea565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080546001600160a01b0319166001600160a01b03831690811782556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a15050565b61122a6120ea565b6112346000612458565b565b6001600160a01b03811630145b949350505050565b6000805160206145588339815191526112638161203b565b6110946124c9565b6000805160206145588339815191526112838161203b565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610e2e565b6000918252600080516020614518833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060916000805160206144d883398151915291610c9c90613c31565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486113708161203b565b6110088383612512565b6000805160206145588339815191526113928161203b565b610f62848484611fdc565b600033610d2e818585611fdc565b6000805160206145588339815191526113c38161203b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000807fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b600610e2e565b6114176120ea565b7f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea000060005b8281101561155e5761147d84848381811061145857611458613c65565b905060200281019061146a9190613c7b565b611478906040810190613c9b565b612548565b83838281811061148f5761148f613c65565b90506020028101906114a19190613c7b565b6114af906040810190613c9b565b8360008787868181106114c4576114c4613c65565b90506020028101906114d69190613c7b565b6114e4906020810190613925565b63ffffffff1663ffffffff168152602001908152602001600020600087878681811061151257611512613c65565b90506020028101906115249190613c7b565b611535906040810190602001613ce1565b61ffff168152602081019190915260400160002091611555919083613d4c565b5060010161143b565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6748383604051610fc8929190613e34565b63ffffffff841660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff881685529091528220805460609391906115e390613c31565b80601f016020809104026020016040519081016040528092919081815260200182805461160f90613c31565b801561165c5780601f106116315761010080835404028352916020019161165c565b820191906000526020600020905b81548152906001019060200180831161163f57829003601f168201915b5050505050905080516000036116ad5784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611243945050505050565b60008490036116bf5791506112439050565b60028410611709576116d18585612548565b806116df8560028189613f18565b6040516020016116f193929190613f42565b60405160208183030381529060405292505050611243565b8484604051639a6d49cd60e01b8152600401610e85929190613f6a565b60005b8181101561183c573683838381811061174457611744613c65565b90506020028101906117569190613f7e565b90506117966117686020830183613925565b602083013563ffffffff9190911660009081526000805160206144f883398151915260205260409020541490565b6117a05750611834565b3063d045a0dc60c08301358360a08101356117bf610100830183613c9b565b6117d0610100890160e08a0161381d565b6117de6101208a018a613c9b565b6040518963ffffffff1660e01b81526004016118009796959493929190613faa565b6000604051808303818588803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b5050505050505b600101611729565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a39190810190614030565b604051638351eea760e01b8152600401610e85919061347c565b6118c56133bb565b60408051808201909152600080825260208201526000806118fc33604089013560608a01356118f760208c018c613925565b61258a565b9150915060008061190d8984612198565b909250905061193961192260208b018b613925565b8383611933368d90038d018d61409d565b8b6125b0565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611987908d018d613925565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6119c06120ea565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b5050505050565b333014611a5e5760405163029a949d60e31b815260040160405180910390fd5b610ef587878787878787610ee6565b611a756120ea565b7fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b60080546001600160a01b0319166001600160a01b03831690811782556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001611216565b611aea82610f24565b611af38161203b565b610f62838361211c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611b425750825b90506000826001600160401b03166001148015611b5e5750303b155b905081158015611b6c575080155b15611b8a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611bb457845460ff60401b1916600160401b1785555b611bbd866126bb565b611bc56126cc565b611bcd6126dc565b611bd88a8a886126e4565b611be3600087612045565b50611bfc60008051602061455883398151915287612045565b50611c277f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a687612045565b50611c527f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84887612045565b50600080546001600160a01b03808b166001600160a01b03199283161790925560018054928a16929091169190911790558315611cc957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b611d276120ea565b6001600160a01b038116611d5157604051631e4fbdf760e01b815260006004820152602401610e85565b61109481612458565b600060208201803590611d7190610a669085613925565b1492915050565b61100883838360016126ff565b600080611d91856127e6565b915081905083811015611dc1576040516371c4efed60e01b81526004810182905260248101859052604401610e85565b935093915050565b63ffffffff811660009081526000805160206144f88339815191526020819052604082205480610f1d5760405163f6ff4fb760e01b815263ffffffff85166004820152602401610e85565b6000611e26611e23878761281d565b90565b90506000611e5282611e40611e3b8a8a612835565b612858565b611e4d60208d018d613925565b61288d565b90506028861115611f19576000611e8f611e7260608c0160408d016140cf565b611e7f60208d018d613925565b84611e8a8c8c6128b5565b612900565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb5901290611ee59086908d9060009087906004016140ec565b600060405180830381600087803b158015611eff57600080fd5b505af1158015611f13573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c611f5260208d018d613925565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6000611f878484611cd5565b9050600019811015610f625781811015611fcd57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610e85565b610f62848484840360006126ff565b6001600160a01b03831661200657604051634b637e8f60e11b815260006004820152602401610e85565b6001600160a01b0382166120305760405163ec442f0560e01b815260006004820152602401610e85565b611008838383612932565b6110948133612e26565b600060008051602061451883398151915261206084846112cf565b6120e0576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556120963390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610c57565b6000915050610c57565b336120f36112a6565b6001600160a01b0316146112345760405163118cdaa760e01b8152336004820152602401610e85565b600060008051602061451883398151915261213784846112cf565b156120e0576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610c57565b60608060006121f585602001356121ae86612e5f565b6121bb60a0890189613c9b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8b92505050565b909350905060008161220857600161220b565b60025b905061222b61221d6020880188613925565b82610aa660808a018a613c9b565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c008054919450906001600160a01b031680156122d25760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061228f908990899060040161411d565b602060405180830381865afa1580156122ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d09190614142565b505b505050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161234089611dc9565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161237592919061415f565b6040805180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190614208565b95945050505050565b6123c6612f05565b600080516020614538833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b0382166124485760405163ec442f0560e01b815260006004820152602401610e85565b61245460008383612932565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6124d1612f35565b600080516020614538833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612400565b6001600160a01b03821661253c57604051634b637e8f60e11b815260006004820152602401610e85565b61245482600083612932565b60006125576002828486613f18565b61256091614224565b60f01c905060038114611008578282604051639a6d49cd60e01b8152600401610e85929190613f6a565b600080612598858585611d85565b90925090506125a78683612512565b94509492505050565b6125b86133bb565b60006125c78460000151612f66565b6020850151909150156125e1576125e18460200151612f8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016126318c611dc9565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161266d92919061415f565b60806040518083038185885af115801561268b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126b09190614254565b979650505050505050565b6126c3613070565b611094816130b9565b6126d4613070565b6112346130c1565b611234613070565b6126ec613070565b6126f683836130e2565b611008816130f4565b6000805160206144d88339815191526001600160a01b0385166127385760405163e602df0560e01b815260006004820152602401610e85565b6001600160a01b03841661276257604051634a1406b160e11b815260006004820152602401610e85565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611a3757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516127d791815260200190565b60405180910390a35050505050565b60007f000000000000000000000000000000000000000000000000000000000000000061281381846142d1565b610c5791906142f3565b600061282c6020828486613f18565b610f1d9161430a565b6000612845602860208486613f18565b61284e91614328565b60c01c9392505050565b6000610c577f00000000000000000000000000000000000000000000000000000000000000006001600160401b0384166142f3565b60006001600160a01b0384166128a35761dead93505b6128ad848461241e565b509092915050565b60606128c48260288186613f18565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b6060848484846040516020016129199493929190614356565b6040516020818303038152906040529050949350505050565b6000805160206145388339815191525460ff16156129925760405162461bcd60e51b815260206004820152601860248201527f416c6c207472616e7366657273206172652070617573656400000000000000006044820152606401610e85565b6001600160a01b03831633148015906129b457506001600160a01b0382163314155b15612b2357600154604051638e204c4360e01b81523360048201526001600160a01b0390911690638e204c4390602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190614142565b15612a6b5760405162461bcd60e51b81526020600482015260166024820152751cd95b99195c881859191c995cdcc8189b1bd8dad95960521b6044820152606401610e85565b600054604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad79190614142565b612b235760405162461bcd60e51b815260206004820152601e60248201527f73656e6465722061646472657373206e6f742077686974656c697473656400006044820152606401610e85565b6001600160a01b03831615612ca057600154604051638e204c4360e01b81526001600160a01b03858116600483015290911690638e204c4390602401602060405180830381865afa158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba09190614142565b15612be65760405162461bcd60e51b815260206004820152601660248201527509d99c9bdb49c81859191c995cdcc8189b1bd8dad95960521b6044820152606401610e85565b600054604051633af32abf60e01b81526001600160a01b03858116600483015290911690633af32abf90602401602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190614142565b612ca05760405162461bcd60e51b815260206004820152601e60248201527f2766726f6d272061646472657373206e6f742077686974656c697473656400006044820152606401610e85565b6001600160a01b03821615612e1b57600154604051638e204c4360e01b81526001600160a01b03848116600483015290911690638e204c4390602401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190614142565b15612d615760405162461bcd60e51b815260206004820152601460248201527309dd1bc9c81859191c995cdcc8189b1bd8dad95960621b6044820152606401610e85565b600054604051633af32abf60e01b81526001600160a01b03848116600483015290911690633af32abf90602401602060405180830381865afa158015612dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcf9190614142565b612e1b5760405162461bcd60e51b815260206004820152601c60248201527f27746f272061646472657373206e6f742077686974656c6974736564000000006044820152606401610e85565b611008838383613115565b612e3082826112cf565b6124545760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610e85565b6000610c577f0000000000000000000000000000000000000000000000000000000000000000836142d1565b8051606090151580612ed4578484604051602001612ec092919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052612efb565b84843385604051602001612eeb94939291906143a5565b6040516020818303038152906040525b9150935093915050565b6000805160206145388339815191525460ff1661123457604051638dfc202b60e01b815260040160405180910390fd5b6000805160206145388339815191525460ff16156112345760405163d93c066560e01b815260040160405180910390fd5b6000813414612f8a576040516304fb820960e51b8152346004820152602401610e85565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301291906143e8565b90506001600160a01b03811661303b576040516329b99a9560e11b815260040160405180910390fd5b6124546001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085613253565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661123457604051631afcd79f60e31b815260040160405180910390fd5b611d27613070565b6130c9613070565b600080516020614538833981519152805460ff19169055565b6130ea613070565b61245482826132ad565b6130fc613070565b613105816132fe565b61310d6126dc565b6110946126dc565b6000805160206144d88339815191526001600160a01b03841661315157818160020160008282546131469190614405565b909155506131c39050565b6001600160a01b038416600090815260208290526040902054828110156131a45760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610e85565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166131e1576002810180548390039055613200565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161324591815260200190565b60405180910390a350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610f6290859061330f565b6132b5613070565b6000805160206144d88339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132ef8482614418565b5060048101610f628382614418565b613306613070565b61310581613380565b600080602060008451602086016000885af180613332576040513d6000823e3d81fd5b50506000513d9150811561334a578060011415613357565b6001600160a01b0384163b155b15610f6257604051635274afe760e01b81526001600160a01b0385166004820152602401610e85565b613388613070565b61109481613394613070565b6001600160a01b0381166119c057604051632d618d8160e21b815260040160405180910390fd5b60405180606001604052806000801916815260200160006001600160401b031681526020016133fd604051806040016040528060008152602001600081525090565b905290565b60006020828403121561341457600080fd5b81356001600160e01b031981168114610f1d57600080fd5b60005b8381101561344757818101518382015260200161342f565b50506000910152565b6000815180845261346881602086016020860161342c565b601f01601f19169290920160200192915050565b602081526000610f1d6020830184613450565b6001600160a01b038116811461109457600080fd5b600080604083850312156134b757600080fd5b82356134c28161348f565b946020939093013593505050565b600060e082840312156134e257600080fd5b50919050565b6000602082840312156134fa57600080fd5b81356001600160401b0381111561351057600080fd5b611243848285016134d0565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156135975788870360bf1901855281518051885283015183880187905261358487890182613450565b9750509382019390820190600101613558565b50508751606088015250505060208501516080850152509050611243565b6000606082840312156134e257600080fd5b60008083601f8401126135d957600080fd5b5081356001600160401b038111156135f057600080fd5b60208301915083602082850101111561360857600080fd5b9250929050565b600080600080600080600060e0888a03121561362a57600080fd5b61363489896135b5565b96506060880135955060808801356001600160401b038082111561365757600080fd5b6136638b838c016135c7565b909750955060a08a013591506136788261348f565b90935060c0890135908082111561368e57600080fd5b5061369b8a828b016135c7565b989b979a50959850939692959293505050565b6000806000606084860312156136c357600080fd5b83356136ce8161348f565b925060208401356136de8161348f565b929592945050506040919091013590565b60006020828403121561370157600080fd5b5035919050565b6000806040838503121561371b57600080fd5b82359150602083013561372d8161348f565b809150509250929050565b803563ffffffff8116811461374c57600080fd5b919050565b6000806040838503121561376457600080fd5b6134c283613738565b801515811461109457600080fd5b6000806040838503121561378e57600080fd5b82356001600160401b038111156137a457600080fd5b6137b0858286016134d0565b925050602083013561372d8161376d565b815181526020808301519082015260408101610c57565b803561ffff8116811461374c57600080fd5b600080604083850312156137fd57600080fd5b61380683613738565b9150613814602084016137d8565b90509250929050565b60006020828403121561382f57600080fd5b8135610f1d8161348f565b60008060008060a0858703121561385057600080fd5b61385a86866135b5565b935060608501356001600160401b0381111561387557600080fd5b613881878288016135c7565b90945092505060808501356138958161348f565b939692955090935050565b60008083601f8401126138b257600080fd5b5081356001600160401b038111156138c957600080fd5b6020830191508360208260051b850101111561360857600080fd5b600080602083850312156138f757600080fd5b82356001600160401b0381111561390d57600080fd5b613919858286016138a0565b90969095509350505050565b60006020828403121561393757600080fd5b610f1d82613738565b6000806000806060858703121561395657600080fd5b61395f85613738565b935061396d602086016137d8565b925060408501356001600160401b0381111561398857600080fd5b613994878288016135c7565b95989497509550505050565b600080600083850360808112156139b657600080fd5b84356001600160401b038111156139cc57600080fd5b6139d8878288016134d0565b9450506040601f19820112156139ed57600080fd5b506020840191506060840135613a028161348f565b809150509250925092565b600060c082019050835182526001600160401b0360208501511660208301526040840151613a48604084018280518252602090810151910152565b5082516080830152602083015160a0830152610f1d565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9757613a97613a5f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac557613ac5613a5f565b604052919050565b60006001600160401b03821115613ae657613ae6613a5f565b50601f01601f191660200190565b600082601f830112613b0557600080fd5b8135613b18613b1382613acd565b613a9d565b818152846020838601011115613b2d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613b6257600080fd5b85356001600160401b0380821115613b7957600080fd5b613b8589838a01613af4565b96506020880135915080821115613b9b57600080fd5b50613ba888828901613af4565b9450506040860135613bb98161348f565b92506060860135613bc98161348f565b91506080860135613bd98161348f565b809150509295509295909350565b60008060408385031215613bfa57600080fd5b8235613c058161348f565b9150602083013561372d8161348f565b600060608284031215613c2757600080fd5b610f1d83836135b5565b600181811c90821680613c4557607f821691505b6020821081036134e257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613c9157600080fd5b9190910192915050565b6000808335601e19843603018112613cb257600080fd5b8301803591506001600160401b03821115613ccc57600080fd5b60200191503681900382131561360857600080fd5b600060208284031215613cf357600080fd5b610f1d826137d8565b601f821115611008576000816000526020600020601f850160051c81016020861015613d255750805b601f850160051c820191505b81811015613d4457828155600101613d31565b505050505050565b6001600160401b03831115613d6357613d63613a5f565b613d7783613d718354613c31565b83613cfc565b6000601f841160018114613dab5760008515613d935750838201355b600019600387901b1c1916600186901b178355611a37565b600083815260209020601f19861690835b82811015613ddc5786850135825560209485019460019092019101613dbc565b5086821015613df95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040808401600586901b8501820187855b88811015613f0a57878303603f190184528135368b9003605e19018112613e7957600080fd5b8a01606063ffffffff613e8b83613738565b16855261ffff613e9c8984016137d8565b168886015286820135601e19833603018112613eb757600080fd5b9091018781019190356001600160401b03811115613ed457600080fd5b803603831315613ee357600080fd5b8188870152613ef58287018285613e0b565b96890196955050509186019150600101613e53565b509098975050505050505050565b60008085851115613f2857600080fd5b83861115613f3557600080fd5b5050820193919092039150565b60008451613f5481846020890161342c565b8201838582376000930192835250909392505050565b602081526000611243602083018486613e0b565b6000823561013e19833603018112613c9157600080fd5b6001600160401b038116811461109457600080fd5b63ffffffff613fb889613738565b1681526020880135602082015260006040890135613fd581613f95565b6001600160401b03811660408401525087606083015260e0608083015261400060e083018789613e0b565b6001600160a01b03861660a084015282810360c0840152614022818587613e0b565b9a9950505050505050505050565b60006020828403121561404257600080fd5b81516001600160401b0381111561405857600080fd5b8201601f8101841361406957600080fd5b8051614077613b1382613acd565b81815285602083850101111561408c57600080fd5b6123b582602083016020860161342c565b6000604082840312156140af57600080fd5b6140b7613a75565b82358152602083013560208201528091505092915050565b6000602082840312156140e157600080fd5b8135610f1d81613f95565b60018060a01b038516815283602082015261ffff8316604082015260806060820152600061106a6080830184613450565b6040815260006141306040830185613450565b82810360208401526123b58185613450565b60006020828403121561415457600080fd5b8151610f1d8161376d565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261419560e0840182613450565b90506060850151603f198483030160a08501526141b28282613450565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156141ea57600080fd5b6141f2613a75565b9050815181526020820151602082015292915050565b60006040828403121561421a57600080fd5b610f1d83836141d8565b6001600160f01b0319813581811691600285101561424c5780818660020360031b1b83161692505b505092915050565b60006080828403121561426657600080fd5b604051606081018181106001600160401b038211171561428857614288613a5f565b60405282518152602083015161429d81613f95565b60208201526142af84604085016141d8565b60408201529392505050565b634e487b7160e01b600052601160045260246000fd5b6000826142ee57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c5757610c576142bb565b80356020831015610c5757600019602084900360031b1b1692915050565b6001600160c01b0319813581811691600885101561424c5760089490940360031b84901b1690921692915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825161439581602c85016020870161342c565b91909101602c0195945050505050565b8481526001600160401b0360c01b8460c01b166020820152826028820152600082516143d881604885016020870161342c565b9190910160480195945050505050565b6000602082840312156143fa57600080fd5b8151610f1d8161348f565b80820180821115610c5757610c576142bb565b81516001600160401b0381111561443157614431613a5f565b6144458161443f8454613c31565b84613cfc565b602080601f83116001811461447a57600084156144625750858301515b600019600386901b1c1916600185901b178555613d44565b600085815260208120601f198616915b828110156144a95788860151825594840194600190910190840161448a565b50858210156144c75787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0072ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220a1c62b8eb9990772632aafcfe8489f7995a8db75124cc9a0498785c81ba0d1be64736f6c63430008160033",
    "deployedBytecode": "0x6080604052600436106103b85760003560e01c806382413eac116101f2578063b98bd0701161010d578063d5391393116100a0578063dd62ed3e1161006f578063dd62ed3e14610bc6578063f2fde38b14610be6578063fc0c546a146106c1578063ff7bd03d14610c0657600080fd5b8063d539139314610b32578063d547741f14610b66578063d64e539614610b86578063db0ed6a014610ba657600080fd5b8063c7c7f5b3116100dc578063c7c7f5b314610abe578063ca5eb5e114610adf578063d045a0dc14610aff578063d424388514610b1257600080fd5b8063b98bd07014610a2b578063bb0b6a5314610a4b578063bc70b35414610a8b578063bd815db014610aab57600080fd5b8063963efcaa11610185578063a217fddf11610154578063a217fddf146109c1578063a9059cbb146109d6578063aef18ae7146109f6578063b731ea0a14610a1657600080fd5b8063963efcaa146109395780639dc29fac1461096d5780639f68b9641461098d5780639fc1d0e7146109a157600080fd5b80638da5cb5b116101c15780638da5cb5b146108cf57806391d14854146108e457806393e59dc11461090457806395d89b411461092457600080fd5b806382413eac146108665780638456cb5914610886578063854cff2f1461089b578063857749b0146108bb57600080fd5b8063313ce567116102e25780635a0dfe4d1161027557806370a082311161024457806370a08231146107b1578063715018a6146107f457806375b238fc146108095780637d25a05e1461082b57600080fd5b80635a0dfe4d146106f45780635c975abb146107385780635e280f111461075d5780636fc1b31e1461079157600080fd5b80633f4ba83a116102b15780633f4ba83a1461068c57806340c10f19146106a157806352ae2879146106c15780635535d461146106d457600080fd5b8063313ce567146105fd5780633400288b1461061f57806336568abe1461063f5780633b6f743b1461065f57600080fd5b8063156a0d0f1161035a57806323b872dd1161032957806323b872dd14610569578063248a9ca314610589578063282c51f3146105a95780632f2ff15d146105dd57600080fd5b8063156a0d0f146104cd57806317442b70146104f457806318160ddd146105165780631f5e13341461055457600080fd5b80630d35b415116103965780630d35b41514610434578063111ecdad1461046357806313137d6514610490578063134d4f25146104a557600080fd5b806301ffc9a7146103bd57806306fdde03146103f2578063095ea7b314610414575b600080fd5b3480156103c957600080fd5b506103dd6103d8366004613402565b610c26565b60405190151581526020015b60405180910390f35b3480156103fe57600080fd5b50610407610c5d565b6040516103e9919061347c565b34801561042057600080fd5b506103dd61042f3660046134a4565b610d20565b34801561044057600080fd5b5061045461044f3660046134e8565b610d38565b6040516103e99392919061351c565b34801561046f57600080fd5b50610478610e09565b6040516001600160a01b0390911681526020016103e9565b6104a361049e36600461360f565b610e3e565b005b3480156104b157600080fd5b506104ba600281565b60405161ffff90911681526020016103e9565b3480156104d957600080fd5b506040805162b9270b60e21b815260016020820152016103e9565b34801561050057600080fd5b50604080516001815260026020820152016103e9565b34801561052257600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016103e9565b34801561056057600080fd5b506104ba600181565b34801561057557600080fd5b506103dd6105843660046136ae565b610efe565b34801561059557600080fd5b506105466105a43660046136ef565b610f24565b3480156105b557600080fd5b506105467f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b3480156105e957600080fd5b506104a36105f8366004613708565b610f46565b34801561060957600080fd5b5060125b60405160ff90911681526020016103e9565b34801561062b57600080fd5b506104a361063a366004613751565b610f68565b34801561064b57600080fd5b506104a361065a366004613708565b610fd5565b34801561066b57600080fd5b5061067f61067a36600461377b565b61100d565b6040516103e991906137c1565b34801561069857600080fd5b506104a3611074565b3480156106ad57600080fd5b506104a36106bc3660046134a4565b611097565b3480156106cd57600080fd5b5030610478565b3480156106e057600080fd5b506104076106ef3660046137ea565b6110cb565b34801561070057600080fd5b506103dd61070f366004613751565b63ffffffff9190911660009081526000805160206144f883398151915260205260409020541490565b34801561074457600080fd5b506000805160206145388339815191525460ff166103dd565b34801561076957600080fd5b506104787f000000000000000000000000000000000000000000000000000000000000000081565b34801561079d57600080fd5b506104a36107ac36600461381d565b6111a6565b3480156107bd57600080fd5b506105466107cc36600461381d565b6001600160a01b031660009081526000805160206144d8833981519152602052604090205490565b34801561080057600080fd5b506104a3611222565b34801561081557600080fd5b5061054660008051602061455883398151915281565b34801561083757600080fd5b5061084e610846366004613751565b600092915050565b6040516001600160401b0390911681526020016103e9565b34801561087257600080fd5b506103dd61088136600461383a565b611236565b34801561089257600080fd5b506104a361124b565b3480156108a757600080fd5b506104a36108b636600461381d565b61126b565b3480156108c757600080fd5b50600661060d565b3480156108db57600080fd5b506104786112a6565b3480156108f057600080fd5b506103dd6108ff366004613708565b6112cf565b34801561091057600080fd5b50600054610478906001600160a01b031681565b34801561093057600080fd5b50610407611307565b34801561094557600080fd5b506105467f000000000000000000000000000000000000000000000000000000000000000081565b34801561097957600080fd5b506104a36109883660046134a4565b611346565b34801561099957600080fd5b5060006103dd565b3480156109ad57600080fd5b506104a36109bc3660046136ae565b61137a565b3480156109cd57600080fd5b50610546600081565b3480156109e257600080fd5b506103dd6109f13660046134a4565b61139d565b348015610a0257600080fd5b506104a3610a1136600461381d565b6113ab565b348015610a2257600080fd5b506104786113e6565b348015610a3757600080fd5b506104a3610a463660046138e4565b61140f565b348015610a5757600080fd5b50610546610a66366004613925565b63ffffffff1660009081526000805160206144f8833981519152602052604090205490565b348015610a9757600080fd5b50610407610aa6366004613940565b611590565b6104a3610ab93660046138e4565b611726565b610ad1610acc3660046139a0565b6118bd565b6040516103e9929190613a0d565b348015610aeb57600080fd5b506104a3610afa36600461381d565b6119b8565b6104a3610b0d36600461360f565b611a3e565b348015610b1e57600080fd5b506104a3610b2d36600461381d565b611a6d565b348015610b3e57600080fd5b506105467f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b348015610b7257600080fd5b506104a3610b81366004613708565b611ae1565b348015610b9257600080fd5b50600154610478906001600160a01b031681565b348015610bb257600080fd5b506104a3610bc1366004613b4a565b611afd565b348015610bd257600080fd5b50610546610be1366004613be7565b611cd5565b348015610bf257600080fd5b506104a3610c0136600461381d565b611d1f565b348015610c1257600080fd5b506103dd610c21366004613c15565b611d5a565b60006001600160e01b03198216637965db0b60e01b1480610c5757506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060916000805160206144d883398151915291610c9c90613c31565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890613c31565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b505050505091505090565b600033610d2e818585611d78565b5060019392505050565b60408051808201909152600080825260208201526060610d6b604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610dc6565b604080518082019091526000815260606020820152815260200190600190039081610d9e5790505b509350600080610deb604089013560608a0135610de660208c018c613925565b611d85565b60408051808201909152918252602082015296989597505050505050565b6000807f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c005b546001600160a01b031692915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610e8e576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610ea890610ea3908a613925565b611dc9565b14610ee657610eba6020880188613925565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610e85565b610ef587878787878787611e14565b50505050505050565b600033610f0c858285611f7b565b610f17858585611fdc565b60019150505b9392505050565b6000908152600080516020614518833981519152602052604090206001015490565b610f4f82610f24565b610f588161203b565b610f628383612045565b50505050565b610f706120ea565b63ffffffff821660008181526000805160206144f8833981519152602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b6001600160a01b0381163314610ffe5760405163334bd91960e11b815260040160405180910390fd5b611008828261211c565b505050565b6040805180820190915260008082526020820152600061103d60408501356060860135610de66020880188613925565b91505060008061104d8684612198565b909250905061106a6110626020880188613925565b8383886122dd565b9695505050505050565b60008051602061455883398151915261108c8161203b565b6110946123be565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110c18161203b565b611008838361241e565b63ffffffff821660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff861685529091529091208054606092919061111f90613c31565b80601f016020809104026020016040519081016040528092919081815260200182805461114b90613c31565b80156111985780601f1061116d57610100808354040283529160200191611198565b820191906000526020600020905b81548152906001019060200180831161117b57829003601f168201915b505050505091505092915050565b6111ae6120ea565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080546001600160a01b0319166001600160a01b03831690811782556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a15050565b61122a6120ea565b6112346000612458565b565b6001600160a01b03811630145b949350505050565b6000805160206145588339815191526112638161203b565b6110946124c9565b6000805160206145588339815191526112838161203b565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610e2e565b6000918252600080516020614518833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060916000805160206144d883398151915291610c9c90613c31565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486113708161203b565b6110088383612512565b6000805160206145588339815191526113928161203b565b610f62848484611fdc565b600033610d2e818585611fdc565b6000805160206145588339815191526113c38161203b565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000807fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b600610e2e565b6114176120ea565b7f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea000060005b8281101561155e5761147d84848381811061145857611458613c65565b905060200281019061146a9190613c7b565b611478906040810190613c9b565b612548565b83838281811061148f5761148f613c65565b90506020028101906114a19190613c7b565b6114af906040810190613c9b565b8360008787868181106114c4576114c4613c65565b90506020028101906114d69190613c7b565b6114e4906020810190613925565b63ffffffff1663ffffffff168152602001908152602001600020600087878681811061151257611512613c65565b90506020028101906115249190613c7b565b611535906040810190602001613ce1565b61ffff168152602081019190915260400160002091611555919083613d4c565b5060010161143b565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6748383604051610fc8929190613e34565b63ffffffff841660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff881685529091528220805460609391906115e390613c31565b80601f016020809104026020016040519081016040528092919081815260200182805461160f90613c31565b801561165c5780601f106116315761010080835404028352916020019161165c565b820191906000526020600020905b81548152906001019060200180831161163f57829003601f168201915b5050505050905080516000036116ad5784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611243945050505050565b60008490036116bf5791506112439050565b60028410611709576116d18585612548565b806116df8560028189613f18565b6040516020016116f193929190613f42565b60405160208183030381529060405292505050611243565b8484604051639a6d49cd60e01b8152600401610e85929190613f6a565b60005b8181101561183c573683838381811061174457611744613c65565b90506020028101906117569190613f7e565b90506117966117686020830183613925565b602083013563ffffffff9190911660009081526000805160206144f883398151915260205260409020541490565b6117a05750611834565b3063d045a0dc60c08301358360a08101356117bf610100830183613c9b565b6117d0610100890160e08a0161381d565b6117de6101208a018a613c9b565b6040518963ffffffff1660e01b81526004016118009796959493929190613faa565b6000604051808303818588803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b5050505050505b600101611729565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a39190810190614030565b604051638351eea760e01b8152600401610e85919061347c565b6118c56133bb565b60408051808201909152600080825260208201526000806118fc33604089013560608a01356118f760208c018c613925565b61258a565b9150915060008061190d8984612198565b909250905061193961192260208b018b613925565b8383611933368d90038d018d61409d565b8b6125b0565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611987908d018d613925565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6119c06120ea565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b5050505050565b333014611a5e5760405163029a949d60e31b815260040160405180910390fd5b610ef587878787878787610ee6565b611a756120ea565b7fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b60080546001600160a01b0319166001600160a01b03831690811782556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001611216565b611aea82610f24565b611af38161203b565b610f62838361211c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611b425750825b90506000826001600160401b03166001148015611b5e5750303b155b905081158015611b6c575080155b15611b8a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611bb457845460ff60401b1916600160401b1785555b611bbd866126bb565b611bc56126cc565b611bcd6126dc565b611bd88a8a886126e4565b611be3600087612045565b50611bfc60008051602061455883398151915287612045565b50611c277f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a687612045565b50611c527f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84887612045565b50600080546001600160a01b03808b166001600160a01b03199283161790925560018054928a16929091169190911790558315611cc957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b611d276120ea565b6001600160a01b038116611d5157604051631e4fbdf760e01b815260006004820152602401610e85565b61109481612458565b600060208201803590611d7190610a669085613925565b1492915050565b61100883838360016126ff565b600080611d91856127e6565b915081905083811015611dc1576040516371c4efed60e01b81526004810182905260248101859052604401610e85565b935093915050565b63ffffffff811660009081526000805160206144f88339815191526020819052604082205480610f1d5760405163f6ff4fb760e01b815263ffffffff85166004820152602401610e85565b6000611e26611e23878761281d565b90565b90506000611e5282611e40611e3b8a8a612835565b612858565b611e4d60208d018d613925565b61288d565b90506028861115611f19576000611e8f611e7260608c0160408d016140cf565b611e7f60208d018d613925565b84611e8a8c8c6128b5565b612900565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb5901290611ee59086908d9060009087906004016140ec565b600060405180830381600087803b158015611eff57600080fd5b505af1158015611f13573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c611f5260208d018d613925565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6000611f878484611cd5565b9050600019811015610f625781811015611fcd57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610e85565b610f62848484840360006126ff565b6001600160a01b03831661200657604051634b637e8f60e11b815260006004820152602401610e85565b6001600160a01b0382166120305760405163ec442f0560e01b815260006004820152602401610e85565b611008838383612932565b6110948133612e26565b600060008051602061451883398151915261206084846112cf565b6120e0576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556120963390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610c57565b6000915050610c57565b336120f36112a6565b6001600160a01b0316146112345760405163118cdaa760e01b8152336004820152602401610e85565b600060008051602061451883398151915261213784846112cf565b156120e0576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610c57565b60608060006121f585602001356121ae86612e5f565b6121bb60a0890189613c9b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8b92505050565b909350905060008161220857600161220b565b60025b905061222b61221d6020880188613925565b82610aa660808a018a613c9b565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c008054919450906001600160a01b031680156122d25760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061228f908990899060040161411d565b602060405180830381865afa1580156122ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d09190614142565b505b505050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161234089611dc9565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161237592919061415f565b6040805180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190614208565b95945050505050565b6123c6612f05565b600080516020614538833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b0382166124485760405163ec442f0560e01b815260006004820152602401610e85565b61245460008383612932565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6124d1612f35565b600080516020614538833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612400565b6001600160a01b03821661253c57604051634b637e8f60e11b815260006004820152602401610e85565b61245482600083612932565b60006125576002828486613f18565b61256091614224565b60f01c905060038114611008578282604051639a6d49cd60e01b8152600401610e85929190613f6a565b600080612598858585611d85565b90925090506125a78683612512565b94509492505050565b6125b86133bb565b60006125c78460000151612f66565b6020850151909150156125e1576125e18460200151612f8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016126318c611dc9565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161266d92919061415f565b60806040518083038185885af115801561268b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126b09190614254565b979650505050505050565b6126c3613070565b611094816130b9565b6126d4613070565b6112346130c1565b611234613070565b6126ec613070565b6126f683836130e2565b611008816130f4565b6000805160206144d88339815191526001600160a01b0385166127385760405163e602df0560e01b815260006004820152602401610e85565b6001600160a01b03841661276257604051634a1406b160e11b815260006004820152602401610e85565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611a3757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516127d791815260200190565b60405180910390a35050505050565b60007f000000000000000000000000000000000000000000000000000000000000000061281381846142d1565b610c5791906142f3565b600061282c6020828486613f18565b610f1d9161430a565b6000612845602860208486613f18565b61284e91614328565b60c01c9392505050565b6000610c577f00000000000000000000000000000000000000000000000000000000000000006001600160401b0384166142f3565b60006001600160a01b0384166128a35761dead93505b6128ad848461241e565b509092915050565b60606128c48260288186613f18565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b6060848484846040516020016129199493929190614356565b6040516020818303038152906040529050949350505050565b6000805160206145388339815191525460ff16156129925760405162461bcd60e51b815260206004820152601860248201527f416c6c207472616e7366657273206172652070617573656400000000000000006044820152606401610e85565b6001600160a01b03831633148015906129b457506001600160a01b0382163314155b15612b2357600154604051638e204c4360e01b81523360048201526001600160a01b0390911690638e204c4390602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190614142565b15612a6b5760405162461bcd60e51b81526020600482015260166024820152751cd95b99195c881859191c995cdcc8189b1bd8dad95960521b6044820152606401610e85565b600054604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad79190614142565b612b235760405162461bcd60e51b815260206004820152601e60248201527f73656e6465722061646472657373206e6f742077686974656c697473656400006044820152606401610e85565b6001600160a01b03831615612ca057600154604051638e204c4360e01b81526001600160a01b03858116600483015290911690638e204c4390602401602060405180830381865afa158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba09190614142565b15612be65760405162461bcd60e51b815260206004820152601660248201527509d99c9bdb49c81859191c995cdcc8189b1bd8dad95960521b6044820152606401610e85565b600054604051633af32abf60e01b81526001600160a01b03858116600483015290911690633af32abf90602401602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190614142565b612ca05760405162461bcd60e51b815260206004820152601e60248201527f2766726f6d272061646472657373206e6f742077686974656c697473656400006044820152606401610e85565b6001600160a01b03821615612e1b57600154604051638e204c4360e01b81526001600160a01b03848116600483015290911690638e204c4390602401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190614142565b15612d615760405162461bcd60e51b815260206004820152601460248201527309dd1bc9c81859191c995cdcc8189b1bd8dad95960621b6044820152606401610e85565b600054604051633af32abf60e01b81526001600160a01b03848116600483015290911690633af32abf90602401602060405180830381865afa158015612dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcf9190614142565b612e1b5760405162461bcd60e51b815260206004820152601c60248201527f27746f272061646472657373206e6f742077686974656c6974736564000000006044820152606401610e85565b611008838383613115565b612e3082826112cf565b6124545760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610e85565b6000610c577f0000000000000000000000000000000000000000000000000000000000000000836142d1565b8051606090151580612ed4578484604051602001612ec092919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052612efb565b84843385604051602001612eeb94939291906143a5565b6040516020818303038152906040525b9150935093915050565b6000805160206145388339815191525460ff1661123457604051638dfc202b60e01b815260040160405180910390fd5b6000805160206145388339815191525460ff16156112345760405163d93c066560e01b815260040160405180910390fd5b6000813414612f8a576040516304fb820960e51b8152346004820152602401610e85565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301291906143e8565b90506001600160a01b03811661303b576040516329b99a9560e11b815260040160405180910390fd5b6124546001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085613253565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661123457604051631afcd79f60e31b815260040160405180910390fd5b611d27613070565b6130c9613070565b600080516020614538833981519152805460ff19169055565b6130ea613070565b61245482826132ad565b6130fc613070565b613105816132fe565b61310d6126dc565b6110946126dc565b6000805160206144d88339815191526001600160a01b03841661315157818160020160008282546131469190614405565b909155506131c39050565b6001600160a01b038416600090815260208290526040902054828110156131a45760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610e85565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166131e1576002810180548390039055613200565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161324591815260200190565b60405180910390a350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610f6290859061330f565b6132b5613070565b6000805160206144d88339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132ef8482614418565b5060048101610f628382614418565b613306613070565b61310581613380565b600080602060008451602086016000885af180613332576040513d6000823e3d81fd5b50506000513d9150811561334a578060011415613357565b6001600160a01b0384163b155b15610f6257604051635274afe760e01b81526001600160a01b0385166004820152602401610e85565b613388613070565b61109481613394613070565b6001600160a01b0381166119c057604051632d618d8160e21b815260040160405180910390fd5b60405180606001604052806000801916815260200160006001600160401b031681526020016133fd604051806040016040528060008152602001600081525090565b905290565b60006020828403121561341457600080fd5b81356001600160e01b031981168114610f1d57600080fd5b60005b8381101561344757818101518382015260200161342f565b50506000910152565b6000815180845261346881602086016020860161342c565b601f01601f19169290920160200192915050565b602081526000610f1d6020830184613450565b6001600160a01b038116811461109457600080fd5b600080604083850312156134b757600080fd5b82356134c28161348f565b946020939093013593505050565b600060e082840312156134e257600080fd5b50919050565b6000602082840312156134fa57600080fd5b81356001600160401b0381111561351057600080fd5b611243848285016134d0565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156135975788870360bf1901855281518051885283015183880187905261358487890182613450565b9750509382019390820190600101613558565b50508751606088015250505060208501516080850152509050611243565b6000606082840312156134e257600080fd5b60008083601f8401126135d957600080fd5b5081356001600160401b038111156135f057600080fd5b60208301915083602082850101111561360857600080fd5b9250929050565b600080600080600080600060e0888a03121561362a57600080fd5b61363489896135b5565b96506060880135955060808801356001600160401b038082111561365757600080fd5b6136638b838c016135c7565b909750955060a08a013591506136788261348f565b90935060c0890135908082111561368e57600080fd5b5061369b8a828b016135c7565b989b979a50959850939692959293505050565b6000806000606084860312156136c357600080fd5b83356136ce8161348f565b925060208401356136de8161348f565b929592945050506040919091013590565b60006020828403121561370157600080fd5b5035919050565b6000806040838503121561371b57600080fd5b82359150602083013561372d8161348f565b809150509250929050565b803563ffffffff8116811461374c57600080fd5b919050565b6000806040838503121561376457600080fd5b6134c283613738565b801515811461109457600080fd5b6000806040838503121561378e57600080fd5b82356001600160401b038111156137a457600080fd5b6137b0858286016134d0565b925050602083013561372d8161376d565b815181526020808301519082015260408101610c57565b803561ffff8116811461374c57600080fd5b600080604083850312156137fd57600080fd5b61380683613738565b9150613814602084016137d8565b90509250929050565b60006020828403121561382f57600080fd5b8135610f1d8161348f565b60008060008060a0858703121561385057600080fd5b61385a86866135b5565b935060608501356001600160401b0381111561387557600080fd5b613881878288016135c7565b90945092505060808501356138958161348f565b939692955090935050565b60008083601f8401126138b257600080fd5b5081356001600160401b038111156138c957600080fd5b6020830191508360208260051b850101111561360857600080fd5b600080602083850312156138f757600080fd5b82356001600160401b0381111561390d57600080fd5b613919858286016138a0565b90969095509350505050565b60006020828403121561393757600080fd5b610f1d82613738565b6000806000806060858703121561395657600080fd5b61395f85613738565b935061396d602086016137d8565b925060408501356001600160401b0381111561398857600080fd5b613994878288016135c7565b95989497509550505050565b600080600083850360808112156139b657600080fd5b84356001600160401b038111156139cc57600080fd5b6139d8878288016134d0565b9450506040601f19820112156139ed57600080fd5b506020840191506060840135613a028161348f565b809150509250925092565b600060c082019050835182526001600160401b0360208501511660208301526040840151613a48604084018280518252602090810151910152565b5082516080830152602083015160a0830152610f1d565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9757613a97613a5f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac557613ac5613a5f565b604052919050565b60006001600160401b03821115613ae657613ae6613a5f565b50601f01601f191660200190565b600082601f830112613b0557600080fd5b8135613b18613b1382613acd565b613a9d565b818152846020838601011115613b2d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613b6257600080fd5b85356001600160401b0380821115613b7957600080fd5b613b8589838a01613af4565b96506020880135915080821115613b9b57600080fd5b50613ba888828901613af4565b9450506040860135613bb98161348f565b92506060860135613bc98161348f565b91506080860135613bd98161348f565b809150509295509295909350565b60008060408385031215613bfa57600080fd5b8235613c058161348f565b9150602083013561372d8161348f565b600060608284031215613c2757600080fd5b610f1d83836135b5565b600181811c90821680613c4557607f821691505b6020821081036134e257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613c9157600080fd5b9190910192915050565b6000808335601e19843603018112613cb257600080fd5b8301803591506001600160401b03821115613ccc57600080fd5b60200191503681900382131561360857600080fd5b600060208284031215613cf357600080fd5b610f1d826137d8565b601f821115611008576000816000526020600020601f850160051c81016020861015613d255750805b601f850160051c820191505b81811015613d4457828155600101613d31565b505050505050565b6001600160401b03831115613d6357613d63613a5f565b613d7783613d718354613c31565b83613cfc565b6000601f841160018114613dab5760008515613d935750838201355b600019600387901b1c1916600186901b178355611a37565b600083815260209020601f19861690835b82811015613ddc5786850135825560209485019460019092019101613dbc565b5086821015613df95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040808401600586901b8501820187855b88811015613f0a57878303603f190184528135368b9003605e19018112613e7957600080fd5b8a01606063ffffffff613e8b83613738565b16855261ffff613e9c8984016137d8565b168886015286820135601e19833603018112613eb757600080fd5b9091018781019190356001600160401b03811115613ed457600080fd5b803603831315613ee357600080fd5b8188870152613ef58287018285613e0b565b96890196955050509186019150600101613e53565b509098975050505050505050565b60008085851115613f2857600080fd5b83861115613f3557600080fd5b5050820193919092039150565b60008451613f5481846020890161342c565b8201838582376000930192835250909392505050565b602081526000611243602083018486613e0b565b6000823561013e19833603018112613c9157600080fd5b6001600160401b038116811461109457600080fd5b63ffffffff613fb889613738565b1681526020880135602082015260006040890135613fd581613f95565b6001600160401b03811660408401525087606083015260e0608083015261400060e083018789613e0b565b6001600160a01b03861660a084015282810360c0840152614022818587613e0b565b9a9950505050505050505050565b60006020828403121561404257600080fd5b81516001600160401b0381111561405857600080fd5b8201601f8101841361406957600080fd5b8051614077613b1382613acd565b81815285602083850101111561408c57600080fd5b6123b582602083016020860161342c565b6000604082840312156140af57600080fd5b6140b7613a75565b82358152602083013560208201528091505092915050565b6000602082840312156140e157600080fd5b8135610f1d81613f95565b60018060a01b038516815283602082015261ffff8316604082015260806060820152600061106a6080830184613450565b6040815260006141306040830185613450565b82810360208401526123b58185613450565b60006020828403121561415457600080fd5b8151610f1d8161376d565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261419560e0840182613450565b90506060850151603f198483030160a08501526141b28282613450565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156141ea57600080fd5b6141f2613a75565b9050815181526020820151602082015292915050565b60006040828403121561421a57600080fd5b610f1d83836141d8565b6001600160f01b0319813581811691600285101561424c5780818660020360031b1b83161692505b505092915050565b60006080828403121561426657600080fd5b604051606081018181106001600160401b038211171561428857614288613a5f565b60405282518152602083015161429d81613f95565b60208201526142af84604085016141d8565b60408201529392505050565b634e487b7160e01b600052601160045260246000fd5b6000826142ee57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c5757610c576142bb565b80356020831015610c5757600019602084900360031b1b1692915050565b6001600160c01b0319813581811691600885101561424c5760089490940360031b84901b1690921692915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825161439581602c85016020870161342c565b91909101602c0195945050505050565b8481526001600160401b0360c01b8460c01b166020820152826028820152600082516143d881604885016020870161342c565b9190910160480195945050505050565b6000602082840312156143fa57600080fd5b8151610f1d8161348f565b80820180821115610c5757610c576142bb565b81516001600160401b0381111561443157614431613a5f565b6144458161443f8454613c31565b84613cfc565b602080601f83116001811461447a57600084156144625750858301515b600019600386901b1c1916600185901b178555613d44565b600085815260208120601f198616915b828110156144a95788860151825594840194600190910190840161448a565b50858210156144c75787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0072ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220a1c62b8eb9990772632aafcfe8489f7995a8db75124cc9a0498785c81ba0d1be64736f6c63430008160033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
