{
    "contractName": "TestRelayHub",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "_stakeManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_penalizer",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_batchGateway",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_relayRegistrar",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balance",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerBalanceEscheated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Deposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "HubDeprecated",
            "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": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "config",
                    "type": "tuple"
                }
            ],
            "name": "RelayHubConfigured",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "workersCount",
                    "type": "uint256"
                }
            ],
            "name": "RelayWorkersAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "minimumStake",
                    "type": "uint256"
                }
            ],
            "name": "StakingTokenDataChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "innerGasUsed",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "reason",
                    "type": "bytes"
                }
            ],
            "name": "TransactionRejectedByPaymaster",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "TransactionRelayed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "name": "TransactionResult",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Withdrawn",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                }
            ],
            "name": "addRelayWorkers",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "aggregateGasleft",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "gasUsed",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxPriorityFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "transactionCalldataGasUsed",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "calculateCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "calculateDevCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "deprecateHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayBalance",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBatchGateway",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getConfiguration",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getDeprecationTime",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "getMinimumStakePerToken",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizer",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayRegistrar",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStakeManager",
            "outputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "manager",
                    "type": "address"
                }
            ],
            "name": "getWorkerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "worker",
                    "type": "address"
                }
            ],
            "name": "getWorkerManager",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "calldataSizeLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasAndDataLimits",
                    "name": "gasAndDataLimits",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "totalInitialGas",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "innerRelayCall",
            "outputs": [
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isDeprecated",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "onRelayServerRegistered",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "beneficiary",
                    "type": "address"
                }
            ],
            "name": "penalize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAcceptanceBudget",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                }
            ],
            "name": "relayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "paymasterAccepted",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                },
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "name": "setConfiguration",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20[]",
                    "name": "token",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "minimumStake",
                    "type": "uint256[]"
                }
            ],
            "name": "setMinimumStakes",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "verifyRelayManagerStaked",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionHub",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable[]",
                    "name": "dest",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amount",
                    "type": "uint256[]"
                }
            ],
            "name": "withdrawMultiple",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "depositFor",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"_stakeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_penalizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batchGateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_relayRegistrar\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerBalanceEscheated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deprecationTime\",\"type\":\"uint256\"}],\"name\":\"HubDeprecated\",\"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\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RelayHubConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workersCount\",\"type\":\"uint256\"}],\"name\":\"RelayWorkersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"}],\"name\":\"StakingTokenDataChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"innerGasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TransactionRejectedByPaymaster\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"TransactionRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"name\":\"TransactionResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dest\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"}],\"name\":\"addRelayWorkers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregateGasleft\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"calculateCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"calculateDevCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deprecationTime\",\"type\":\"uint256\"}],\"name\":\"deprecateHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBatchGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeprecationTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMinimumStakePerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayRegistrar\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeManager\",\"outputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getWorkerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"calldataSizeLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasAndDataLimits\",\"name\":\"gasAndDataLimits\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalInitialGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"innerRelayCall\",\"outputs\":[{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayEscheatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"onRelayServerRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"penalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptanceBudget\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"}],\"name\":\"relayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paymasterAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"},{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"token\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minimumStake\",\"type\":\"uint256[]\"}],\"name\":\"setMinimumStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"verifyRelayManagerStaked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionHub\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"dest\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"withdrawMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"aggregateGasleft()\":{\"returns\":{\"_0\":\"A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs.\"}},\"balanceOf(address)\":{\"returns\":{\"_0\":\"An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager.\"}},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"gasUsed\":\"An amount of gas used by the transaction.\",\"relayData\":\"The details of a transaction signed by the sender.\"},\"returns\":{\"_0\":\"The calculated charge, in wei.\"}},\"calculateDevCharge(uint256)\":{\"params\":{\"charge\":\"The amount of Ether in wei the Paymaster will be charged for this transaction.\"},\"returns\":{\"_0\":\"The calculated devFee, in wei.\"}},\"deprecateHub(uint256)\":{\"params\":{\"_deprecationTime\":\"The timestamp in seconds after which the `RelayHub` stops serving transactions.\"}},\"getBatchGateway()\":{\"returns\":{\"_0\":\"The `BatchGateway` address for this `RelayHub`.\"}},\"getConfiguration()\":{\"returns\":{\"_0\":\"The configuration of the `RelayHub`.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"The block number in which the contract has been deployed.\"}},\"getDeprecationTime()\":{\"returns\":{\"_0\":\"The timestamp from which the hub no longer allows relaying calls.\"}},\"getMinimumStakePerToken(address)\":{\"params\":{\"token\":\"An address of an ERC-20 compatible tokens.\"},\"returns\":{\"_0\":\"The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"}},\"getPenalizer()\":{\"returns\":{\"_0\":\"The `Penalizer` address for this `RelayHub`.\"}},\"getRelayRegistrar()\":{\"returns\":{\"_0\":\"The `RelayRegistrar` address for this `RelayHub`.\"}},\"getStakeManager()\":{\"returns\":{\"_0\":\"The `StakeManager` address for this `RelayHub`.\"}},\"getWorkerCount(address)\":{\"params\":{\"manager\":\"An address of the Relay Manager.\"},\"returns\":{\"_0\":\"The count of Relay Workers associated with this Relay Manager.\"}},\"getWorkerManager(address)\":{\"params\":{\"worker\":\"An address of the Relay Worker.\"},\"returns\":{\"_0\":\"The address of its Relay Manager.\"}},\"isDeprecated()\":{\"returns\":{\"_0\":\"`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"penalize(address,address)\":{\"params\":{\"beneficiary\":\"The address that called the `Penalizer` and will receive a reward for it.\",\"relayWorker\":\"The address of the Relay Worker that committed a penalizable offense.\"}},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"params\":{\"approvalData\":\"The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.\",\"domainSeparatorName\":\"The name of the Domain Separator used to verify the EIP-712 signature\",\"maxAcceptanceBudget\":\"The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\",\"relayRequest\":\"All details of the requested relayed call.\",\"signature\":\"The client's EIP-712 signature over the `relayRequest` struct.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"params\":{\"_config\":\"The new configuration.\"}},\"setMinimumStakes(address[],uint256[])\":{\"params\":{\"minimumStake\":\"An array of minimal amounts necessary for a corresponding token, in wei.\",\"token\":\"An array of addresses of ERC-20 compatible tokens.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"versionHub()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `RelayHub` contract.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerBalanceEscheated(address,uint256)\":{\"notice\":\"This event is emitted in case a `relayManager` has been deemed \\\"abandoned\\\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`.\"},\"Deposited(address,address,uint256)\":{\"notice\":\"Emitted when `depositFor` is called, including the amount and account that was funded.\"},\"HubDeprecated(uint256)\":{\"notice\":\"This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon.\"},\"RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Emitted when a configuration of the `RelayHub` is changed\"},\"RelayWorkersAdded(address,address[],uint256)\":{\"notice\":\"Emitted when relays are added by a relayManager\"},\"StakingTokenDataChanged(address,uint256)\":{\"notice\":\"Emitted for each token configured for staking in setMinimumStakes\"},\"TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)\":{\"notice\":\"Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged.\"},\"TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)\":{\"notice\":\"Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`.\"},\"TransactionResult(uint8,bytes)\":{\"notice\":\"This event is emitted in case the internal function returns a value or reverts with a revert string.\"},\"Withdrawn(address,address,uint256)\":{\"notice\":\"Emitted when an account withdraws funds from the `RelayHub`.\"}},\"kind\":\"user\",\"methods\":{\"addRelayWorkers(address[])\":{\"notice\":\"Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events.\"},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\"},\"calculateDevCharge(uint256)\":{\"notice\":\"The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\"},\"depositFor(address)\":{\"notice\":\"Allow depositing for non-paymaster addresses for Gas Calculations tests\"},\"deprecateHub(uint256)\":{\"notice\":\"Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\"},\"escheatAbandonedRelayBalance(address)\":{\"notice\":\"@param relayManager\"},\"innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)\":{\"notice\":\"This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context.\"},\"isRelayEscheatable(address)\":{\"notice\":\"Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\"},\"onRelayServerRegistered(address)\":{\"notice\":\"The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration.\"},\"penalize(address,address)\":{\"notice\":\"In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\"},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"notice\":\"Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Sets or changes the configuration of this `RelayHub`.\"},\"setMinimumStakes(address[],uint256[])\":{\"notice\":\"Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"},\"verifyRelayManagerStaked(address)\":{\"notice\":\"Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise.\"},\"withdraw(address,uint256)\":{\"notice\":\"Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event.\"},\"withdrawMultiple(address[],uint256[])\":{\"notice\":\"Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestRelayHub.sol\":\"TestRelayHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol\":{\"keccak256\":\"0x648b59b36277a18170de742ab21f7f67d2beb817332b34fbd4b9eeccf820fcce\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://809ae9342d57c8d6ff6d6579f8c6c238f4df7eb9155b2b0ba3351630550a4d7b\",\"dweb:/ipfs/QmdH2AKJTEHE9WcZMt1rqGs5qCFF7d2HGoWRowYdSK9H4w\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC2771Recipient.sol\":{\"keccak256\":\"0x92a3665ec2fc3d2ab78cf8a08451b2ab6466dc7fae3c215150be2132500406fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364eee344363535733b4cc1a7748e1fc8b10786f6df6c0e2bc0082bcb2477e0e\",\"dweb:/ipfs/QmfCwWAxFqU4woSqu3g5BFPASEA7eCSwcwUSHM9EoYhYdu\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x205617108fad6f3543fc12773e9d25998e944852e8ed9d71f79cb799ae299246\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4903018f63b15211f2714edcf1c56f5c0bee6fea07efaaf908d3a78d07fb6d84\",\"dweb:/ipfs/Qmezexeh6GszFUHW2dgTGWTfb613Ni3tfjLqAtdAYAxCpQ\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayRegistrar.sol\":{\"keccak256\":\"0xece9624dac85ba58f820860722fcfe7ea331159c8b3f172dd6450350fc1d35f0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://3dae31c7fe1bbfbf7d7d73fddea3d2a5b27a15a2ec5f3bd9c17bd9e3f16caf74\",\"dweb:/ipfs/QmULwg82urTQx2fQDHYQoCve3QWJmGQXCPoMNB4Twafh1D\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestRelayHub.sol\":{\"keccak256\":\"0x354634cb45c6173ad93e3b401b616979e58339f35e0cf9ba49ea1099b605c3c1\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://0b900f077d89c212e7deee3d41700358eec3d164e48fe1eb8bac13d3174cb15e\",\"dweb:/ipfs/QmeoFxXCwRvkbnsqUvNv9gqMFWFYt9VxykcBG54CFmBnsU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol\":{\"keccak256\":\"0xc35980f371cab5d9af3e1ead06f82b2afb705a8dbb2a5f53793f0179c485c274\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://dd7732d690c7959df567ee3e4863b0045583506fbae3c87b684b6173fd126968\",\"dweb:/ipfs/QmUbcUAqxKZTQS5ZwwPVnfNAtCmas4pPWQhRWXXwWQEeef\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol\":{\"keccak256\":\"0x8616968305b6127f4cb43209502e074c3964230a66c703e6b8623b03e5ec6442\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2b1f1163fee75613024b38c25e17649933919f4a47a5ba5e8c3ea046023eb1ad\",\"dweb:/ipfs/QmNWReZE8BQ82eXahdKjnNjQWHuH9L9wcTcnKgyV5ypKCa\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/RelayHubValidator.sol\":{\"keccak256\":\"0xd510edd4bb9a11beae2e610f850ca7dcc5a8947c73080bf04c41e2c3c28c87af\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://548657a37cbcfacfc7a425ac61f126831cac3d4a8228e698ab57b38db2cbd29d\",\"dweb:/ipfs/QmbT6SADeNBsXiaV57rjL4cTH2DT6SMsSWyz6CwXs2KcZk\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"hardhat/console.sol\":{\"keccak256\":\"0x72b6a1d297cd3b033d7c2e4a7e7864934bb767db6453623f1c3082c6534547f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8cb8681076e765c214e0d51cac989325f6b98e315eaae06ee0cbd5a9f084763\",\"dweb:/ipfs/QmNWGHi4zmjxQTYN3NMGnJd49jBT5dE4bxTdWEaDuJrC6N\"]}},\"version\":1}",
    "bytecode": "0x610120604052600019600c553480156200001857600080fd5b5060405162005590380380620055908339810160408190526200003b916200033b565b84848484846200004b3362000095565b43610100526001600160601b0319606086811b821660805285811b821660a05284811b821660c05283901b1660e0526200008581620000e5565b505050505050505050506200049d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000ef6200028e565b60648160c0015160ff16106200013f5760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b60448201526064015b60405180910390fd5b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b02600160a81b600160f81b031960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e7247916200028391815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c083015260a81c6001600160501b031660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b6000546001600160a01b03163314620002ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000136565b565b8051620002f98162000484565b919050565b805161ffff81168114620002f957600080fd5b80516001600160501b0381168114620002f957600080fd5b805160ff81168114620002f957600080fd5b60008060008060008587036101a08112156200035657600080fd5b8651620003638162000484565b6020880151909650620003768162000484565b6040880151909550620003898162000484565b60608801519094506200039c8162000484565b9250610120607f198201811315620003b357600080fd5b620003bd6200044c565b91506080880151825260a0880151602083015260c0880151604083015260e08801516060830152610100808901516080840152620003fd828a01620002ec565b60a0840152620004116101408a0162000329565b60c0840152620004256101608a0162000311565b60e0840152620004396101808a01620002fe565b9083015250949793965091945092919050565b60405161012081016001600160401b03811182821017156200047e57634e487b7160e01b600052604160045260246000fd5b60405290565b6001600160a01b03811681146200049a57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c610100516150636200052d60003960006102420152600081816102eb015261081a0152600081816106f3015261108e0152600081816104250152612b250152600081816105c80152818161078b0152818161090c015281816127000152818161289b01528181612c030152612cfe01526150636000f3fe6080604052600436106101f95760003560e01c80638e53548b1161010d578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e1214610664578063ebcd31ac14610684578063f2fde38b146106a4578063f3fef3a3146106c4578063f7908a74146106e457600080fd5b8063ca64f9e7146105b9578063d26152f9146105ec578063d904c7321461060c578063ddf737891461062e57600080fd5b8063af595dfc116100dc578063af595dfc14610528578063be7c76ad14610548578063c2da078614610581578063c7178230146105a157600080fd5b80638e53548b146104a75780639bcde3f3146104c7578063a6e61b60146104e7578063aa67c9191461051557600080fd5b80636bd50cef1161019057806372c1ab0c1161015f57806372c1ab0c146103f657806375dc7b4e146104165780638a09fb56146104495780638ac3b845146104695780638da5cb5b1461048957600080fd5b80636bd50cef146103595780636ca862e21461037b57806370a08231146103ab578063715018a6146103e157600080fd5b806345bdade7116101cc57806345bdade7146102a55780634f7de031146102ba57806351d85156146102dc57806359c4afc01461032357600080fd5b806301ffc9a7146101fe57806320ffd56d1461023357806339622167146102705780633c16e59a14610290575b600080fd5b34801561020a57600080fd5b5061021e610219366004613ed5565b610717565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161022a565b34801561027c57600080fd5b5061021e61028b366004613c1f565b610769565b34801561029c57600080fd5b50600c54610262565b3480156102b157600080fd5b50610262610807565b3480156102c657600080fd5b506102da6102d5366004613c1f565b61080f565b005b3480156102e857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161022a565b34801561032f57600080fd5b5061026261033e366004613c1f565b6001600160a01b03166000908152600a602052604090205490565b34801561036557600080fd5b5061036e61096b565b60405161022a919061490c565b34801561038757600080fd5b5061039b61039636600461406f565b610a4c565b60405161022a9493929190614700565b3480156103b757600080fd5b506102626103c6366004613c1f565b6001600160a01b03166000908152600b602052604090205490565b3480156103ed57600080fd5b506102da6118cf565b34801561040257600080fd5b506102da610411366004613d15565b6118e3565b34801561042257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b34801561045557600080fd5b506102da610464366004613ddd565b611ba4565b34801561047557600080fd5b506102626104843660046142ba565b611cfb565b34801561049557600080fd5b506000546001600160a01b031661030b565b3480156104b357600080fd5b506102626104c23660046142d3565b611d30565b3480156104d357600080fd5b506102da6104e236600461419b565b611dc6565b3480156104f357600080fd5b50610507610502366004613f8a565b611f6c565b60405161022a92919061477f565b6102da610523366004613c1f565b6123f8565b34801561053457600080fd5b506102da6105433660046142ba565b612473565b34801561055457600080fd5b5061030b610563366004613c1f565b6001600160a01b039081166000908152600960205260409020541690565b34801561058d57600080fd5b506102da61059c366004613ca1565b6124f6565b3480156105ad57600080fd5b50600c5442101561021e565b3480156105c557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b3480156105f857600080fd5b506102da610607366004613c1f565b6126d9565b34801561061857600080fd5b50610621612857565b60405161022a919061472e565b34801561063a57600080fd5b50610262610649366004613c1f565b6001600160a01b031660009081526008602052604090205490565b34801561067057600080fd5b506102da61067f366004613c1f565b612877565b34801561069057600080fd5b506102da61069f366004613c68565b612b1a565b3480156106b057600080fd5b506102da6106bf366004613c1f565b612d62565b3480156106d057600080fd5b506102da6106df366004613c3c565b612ddb565b3480156106f057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b60006001600160e01b0319821663e9fb30f760e01b148061074857506001600160e01b03198216630704183b60e11b145b8061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b1580156107cf57600080fd5b505afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107639190613e77565b60005a905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088c5760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b61089581612877565b6001600160a01b0381166000908152600a60205260409020546108ed5760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b6044820152606401610883565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505050565b6109d3604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610a5b6139aa565b610a63610807565b6040820152610a738a8a8a612e7e565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610ab690612ee3565b610ac4816101e00151612f26565b610afd60405180606001604052806023815260200161500b60239139610aea8c80614a23565b610af8906020810190613c1f565b612f6b565b610b34604051806060016040528060218152602001614d7d60219139610b238c80614a23565b610af8906040810190602001613c1f565b610b63604051806060016040528060248152602001614e8660249139610b5a8c80614a23565b60400135612fb4565b610b92604051806060016040528060228152602001614d9e60229139610b898c80614a23565b60600135612fb4565b610bc1604051806060016040528060248152602001614d5960249139610bb88c80614a23565b60800135612fb4565b610bf06040518060600160405280602d8152602001614ca9602d9139610be78c80614a23565b60c00135612fb4565b610c1f6040518060600160405280602d8152602001614dfb602d9139610c1960208d018d614a39565b35612fb4565b610c51604051806060016040528060358152602001614e5160359139610c4860208d018d614a39565b60200135612fb4565b610c7a6040518060600160405280603b8152602001614dc0603b9139610b5a60208d018d614a39565b610cb46040518060600160405280602c8152602001614c7d602c9139610ca360208d018d614a39565b610af8906080810190606001613c1f565b610cee6040518060600160405280602a8152602001614fe1602a9139610cdd60208d018d614a39565b610af89060a0810190608001613c1f565b610d286040518060600160405280602a8152602001614fb7602a9139610d1760208d018d614a39565b610af89060c081019060a001613c1f565b610d5a604051806060016040528060298152602001614e2860299139610d5160208d018d614a39565b60e00135612fb4565b610d986040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250612ee3565b610dd78d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ee392505050565b610e0b6040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250612ee3565b610e4a89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610e816040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250612ee3565b610ec087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610ee1604051806060016040528060238152602001614f9460239139612ee3565b610f36610eee8b80614a23565b610efc9060a08101906149dd565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610f576040518060600160405280602e8152602001614eaa602e9139612ee3565b610f75610f6760208c018c614a39565b610efc9060c08101906149dd565b610fb46040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c612fb4565b600c544210610ff65760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b6044820152606401610883565b60046110028b80614a23565b6110109060a08101906149dd565b9050101561101f576000611074565b61107461102c8b80614a23565b61103a9060a08101906149dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061303c915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906110bb57503215155b156111cf578761110d5760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f722062616420676174657761796044820152606401610883565b33321461115c5760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f4100000000000000006044820152606401610883565b61116960208b018b614a39565b61117a906080810190606001613c1f565b6001600160a01b0316336001600160a01b0316146111cf5760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b6044820152606401610883565b321561126d57600960006111e660208d018d614a39565b6111f7906080810190606001613c1f565b6001600160a01b039081168252602082019290925260400160002054166101c0820181905261125f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b61126d816101c00151612877565b61127c8b8b83604001516130ac565b61010083015260a08201526112968d8d8c8c8c8c8c613336565b60025460405a6112a790603f614b92565b6112b19190614b70565b6112bb9190614bb1565b6101208201526112c9610807565b61014082015260035460045461012083015160408401516112ed60208f018f614a39565b604001356112fb9190614b58565b6113059190614b58565b61130f9190614b58565b6113199190614b58565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a0015161134f610807565b8c610200015161135f9190614bb1565b8c610100015160405160240161137e9a9998979695949392919061479f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113bc9190614526565b60006040518083038160008787f1925050503d80600081146113fa576040519150601f19603f3d011682016040523d82523d6000602084013e6113ff565b606091505b5061022083015215158152611412610807565b8161014001516114229190614bb1565b60e0820152610220810151805161144191602091810182019101613f4c565b8260c0018360800182905282600681111561145e5761145e614c25565b600681111561146f5761146f614c25565b90525050608081015151156114c0577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516114b792919061477f565b60405180910390a15b80516116225760028160c0015160068111156114de576114de614c25565b148061154d57506114f260208b018b614a39565b60a082015151611506916040013590614b58565b8160e001511115801561154d575060038160c00151600681111561152c5761152c614c25565b148061154d575060048160c00151600681111561154b5761154b614c25565b145b15611622576101e081015161156560208c018c614a39565b6115769060a0810190608001613c1f565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846115b48e80614a23565b6115c2906020810190613c1f565b6115cc8f80614a23565b6115dd906040810190602001613c1f565b3387602001518860e0015189608001516040516115ff9695949392919061462b565b60405180910390a46000808260c0015183608001519450945094509450506118c0565b60045461162d610807565b826040015161163c9190614bb1565b61164960208d018d614a39565b604001356116579190614b58565b6116619190614b58565b610160820181905261167a906104c260208d018d614a39565b935061168584611cfb565b61018082015283600b600061169d60208e018e614a39565b6116ae9060a0810190608001613c1f565b6001600160a01b03166001600160a01b03168152602001908152602001600020546116d99190614bb1565b600b60006116ea60208e018e614a39565b6116fb9060a0810190608001613c1f565b6001600160a01b031681526020810191909152604001600020556101808101516117259085614bb1565b6101c08201516001600160a01b03166000908152600b602052604090205461174d9190614b58565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156117bd576101808101516006546001600160a01b03166000908152600b60205260409020546117a19190614b58565b6006546001600160a01b03166000908152600b60205260409020555b60006117c98b80614a23565b6117d7906020810190613c1f565b905060006117e58c80614a23565b6117f6906040810190602001613c1f565b9050600061180760208e018e614a39565b6118189060a0810190608001613c1f565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f60405161187a969594939291906145dd565b60405180910390a4505050326118a35760c08101516080909101516001955090925090506118c0565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6118d7613410565b6118e1600061346a565b565b3360005b8251811015611b9e576119886040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205486848151811061196157611961614c3b565b602002602001015186858151811061197b5761197b614c3b565b60200260200101516134ba565b6001600160a01b0382166000908152600b602052604090205483518490839081106119b5576119b5614c3b565b6020026020010151811015611a015760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610883565b838281518110611a1357611a13614c3b565b602002602001015181611a269190614bb1565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611a5657611a56614c3b565b60200260200101516001600160a01b0316858481518110611a7957611a79614c3b565b602002602001015160405160006040518083038185875af1925050503d8060008114611ac1576040519150601f19603f3d011682016040523d82523d6000602084013e611ac6565b606091505b5050905080611b0a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610883565b858381518110611b1c57611b1c614c3b565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611b6a57611b6a614c3b565b6020026020010151604051611b8191815260200190565b60405180910390a350508080611b9690614bf4565b9150506118e7565b50505050565b611bac613410565b8051825114611bfd5760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e67746800006044820152606401610883565b60005b8251811015611cf657818181518110611c1b57611c1b614c3b565b602002602001015160086000858481518110611c3957611c39614c3b565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611c9857611c98614c3b565b6020026020010151838381518110611cb257611cb2614c3b565b6020026020010151604051611cdc9291906001600160a01b03929092168252602082015260400190565b60405180910390a180611cee81614bf4565b915050611c00565b505050565b600654600090600160a01b900460ff16611d1757506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611d4857506000611d4b565b50485b6000611d678435611d623a81602089013587614b58565b613503565b600754909150606490611d7e9061ffff1682614b32565b61ffff16611d8c8388614b92565b611d969190614b92565b611da09190614b70565b600654611dbd9190600160a81b90046001600160501b0316614b58565b95945050505050565b611dce613410565b60648160c0015160ff1610611e185760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b6044820152606401610883565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e724791611f6191815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b60006060611fc6604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b611fce610807565b81525a611fdb9086614bb1565b602082015233301461202f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c61794875620000000000006044820152606401610883565b600b600061204060208e018e614a39565b6120519060a0810190608001613c1f565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b90612092908d908d908d908d908d908b9060240161498e565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906120dc908e018e614a39565b6120ed9060a0810190608001613c1f565b6001600160a01b031688602001358460e0015160405161210d9190614526565b60006040518083038160008787f1925050503d806000811461214b576040519150601f19603f3d011682016040523d82523d6000602084013e612150565b606091505b5090925090508161216f576121648161351b565b61216f600282613527565b808060200190518101906121839190613eff565b8460c001856101000182151515158152508290525050505060006121ed8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d613560565b60a08501521515608084015290508061220f5761220f60038360a00151613527565b816101000151801561222357508160800151155b156122375761223760048360a00151613527565b506376fa01c360e01b8160c001518260800151612252610807565b845161225e9190614bb1565b846020015161226d9190614b58565b8e806020019061227d9190614a39565b6040516024016122909493929190614741565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906122d9908e018e614a39565b6122ea9060a0810190608001613c1f565b6001600160a01b031688604001358460e0015160405161230a9190614526565b60006040518083038160008787f1925050503d8060008114612348576040519150601f19603f3d011682016040523d82523d6000602084013e61234d565b606091505b50915091508161236257612362600582613527565b50506040810151600b600061237a60208f018f614a39565b61238b9060a0810190608001613c1f565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156123cc576123cc600660405180602001604052806000815250613527565b80608001516123dc5760016123df565b60005b8160a0015192509250509a509a98505050505050505050565b6001600160a01b0381166000908152600b6020526040902054349061241e908290614b58565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b61247b613410565b600c5442106124c15760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b6044820152606401610883565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001611f61565b336000818152600a6020526040812054612511908490614b58565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156125745760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b6044820152606401610883565b61257d82612877565b60005b8381101561268d57600060098187878581811061259f5761259f614c3b565b90506020020160208101906125b49190613c1f565b6001600160a01b039081168252602082019290925260400160002054161461261e5760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e61676572000000000000006044820152606401610883565b826009600087878581811061263557612635614c3b565b905060200201602081019061264a9190613c1f565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061268581614bf4565b915050612580565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a288585846040516126cb939291906146aa565b60405180910390a250505050565b6126e1613410565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b15801561274257600080fd5b505afa158015612756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277a9190613e77565b6127c65760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c65207965746044820152606401610883565b6001600160a01b038082166000908152600b602052604080822080549083905560065490931682529020546127fc908290614b58565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b6060604051806060016040528060228152602001614cd660229139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b1580156128de57600080fd5b505afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612916919061422e565b60a0820180516001600160a01b03908116600090815260086020526040902054915193955091935091166129875760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b82518111156129d85760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c000000000000006044820152606401610883565b80612a255760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e006044820152606401610883565b60055460208401511015612a7b5760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c0000000000006044820152606401610883565b604083015115612acd5760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e00000000000000006044820152606401610883565b81611b9e5760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d6044820152606401610883565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b825760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b6044820152606401610883565b6001600160a01b038083166000908152600960205260409020541680612be15760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612c4857600080fd5b505afa158015612c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c80919061422e565b508051909150612ccd5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612d4457600080fd5b505af1158015612d58573d6000803e3d6000fd5b5050505050505050565b612d6a613410565b6001600160a01b038116612dcf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610883565b612dd88161346a565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612e3457612e34614c3b565b6020026020010181815250508381600081518110612e5457612e54614c3b565b60200260200101906001600160a01b031690816001600160a01b031681525050611b9e81836118e3565b60006001600160e01b03612e928580614a23565b612ea0906020810190613c1f565b612eaa8680614a23565b608001358585604051602001612ec39493929190614682565b604051602081830303815290604052805190602001201690509392505050565b612dd881604051602401612ef7919061472e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613746565b612dd881604051602401612f3c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b179052613746565b612fb08282604051602401612f81929190614835565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052613746565b5050565b612fb08282604051602401612fca92919061485f565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052613746565b612dd88160405160240161300d919061472e565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052613746565b6000613049826004614b58565b835110156130995760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f72740000000000006044820152606401610883565b5001602001516001600160e01b03191690565b6130d76040518060800160405280600081526020016000815260200160008152602001600081525090565b60006130e66020850185614a39565b6130f79060a0810190608001613c1f565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b15801561313257600080fd5b5086fa158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b9190614136565b60608101519092503611156131c25760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d69740000000000000000006044820152606401610883565b81518510156132135760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f20686967680000000000006044820152606401610883565b6020820151825110156132685760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f77000000000000006044820152606401610883565b826132766020860186614a39565b604001356132849190614b58565b90506000613299826104c26020880188614a39565b9050600b60006132ac6020880188614a39565b6132bd9060a0810190608001613c1f565b6001600160a01b03166001600160a01b031681526020019081526020016000205481111561332d5760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f77000000000000006044820152606401610883565b50935093915050565b600061335b6133486020880188614a39565b6133569060c08101906149dd565b613767565b6133766133688880614a23565b6133569060a08101906149dd565b6133808585613767565b61338a8888613767565b6133948c8c613767565b6133a0906102c4614b58565b6133aa9190614b58565b6133b49190614b58565b6133be9190614b58565b6133c89190614b58565b9050368114612d585760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b6044820152606401610883565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610883565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b9e848484846040516024016134d49493929190614881565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b179052613746565b60008183106135125781613514565b825b9392505050565b612dd88161040061378d565b6000828260405160200161353c92919061477f565b60405160208183030381529060405290506135568161351b565b8051602082018181fd5b600080606060006135708761379a565b9050600061359b8961358560208b018b614a39565b6135969060c081019060a001613c1f565b6137d9565b90506135aa6020890189614a39565b6135bb9060c081019060a001613c1f565b6001600160a01b031663e024dc7f60e01b6135d68a80614a23565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614cf8606191396040518060e0016040528060bc8152602001614ed860bc913960405160200161363e91906145a1565b60408051601f198184030181529082905261365d939291602001614542565b60405160208183030381529060405280519060200120868c8c60405160240161368b969594939291906148b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516136c99190614526565b6000604051808303816000865af19150503d8060008114613706576040519150601f19603f3d011682016040523d82523d6000602084013e61370b565b606091505b5090955092508415613731578280602001905181019061372b9190613e92565b90945092505b61373a8361351b565b50509450945094915050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000613776601f600019614bb1565b61378183601f614b58565b61351491166020614b58565b8082511115612fb0579052565b60606137b16137ac6020840184614a39565b61382c565b6040516020016137c391815260200190565b6040516020818303038152906040529050919050565b60006135146040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016138154690565b8152602001846001600160a01b031681525061392a565b60006040518060e0016040528060bc8152602001614ed860bc9139805160209182012090833590840135604085013561386b6080870160608801613c1f565b61387b60a0880160808901613c1f565b61388b60c0890160a08a01613c1f565b61389860c08a018a6149dd565b6040516138a6929190614516565b60405190819003812061390d989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260000151805190602001208360200151805190602001208460400151856060015160405160200161390d9594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613a106040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613a8181614c67565b919050565b600082601f830112613a9757600080fd5b81356020613aac613aa783614aca565b614a9a565b80838252828201915082860187848660051b8901011115613acc57600080fd5b60005b85811015613aeb57813584529284019290840190600101613acf565b5090979650505050505050565b80518015158114613a8157600080fd5b60008083601f840112613b1a57600080fd5b5081356001600160401b03811115613b3157600080fd5b602083019150836020828501011115613b4957600080fd5b9250929050565b600082601f830112613b6157600080fd5b81516001600160401b03811115613b7a57613b7a614c51565b613b8d601f8201601f1916602001614a9a565b818152846020838601011115613ba257600080fd5b613bb3826020830160208701614bc8565b949350505050565b600060808284031215613bcd57600080fd5b50919050565b600060408284031215613bcd57600080fd5b803561ffff81168114613a8157600080fd5b803560ff81168114613a8157600080fd5b80356001600160501b0381168114613a8157600080fd5b600060208284031215613c3157600080fd5b813561351481614c67565b60008060408385031215613c4f57600080fd5b8235613c5a81614c67565b946020939093013593505050565b60008060408385031215613c7b57600080fd5b8235613c8681614c67565b91506020830135613c9681614c67565b809150509250929050565b60008060208385031215613cb457600080fd5b82356001600160401b0380821115613ccb57600080fd5b818501915085601f830112613cdf57600080fd5b813581811115613cee57600080fd5b8660208260051b8501011115613d0357600080fd5b60209290920196919550909350505050565b60008060408385031215613d2857600080fd5b82356001600160401b0380821115613d3f57600080fd5b818501915085601f830112613d5357600080fd5b81356020613d63613aa783614aca565b8083825282820191508286018a848660051b8901011115613d8357600080fd5b600096505b84871015613daf578035613d9b81614c67565b835260019690960195918301918301613d88565b5096505086013592505080821115613dc657600080fd5b50613dd385828601613a86565b9150509250929050565b60008060408385031215613df057600080fd5b82356001600160401b0380821115613e0757600080fd5b818501915085601f830112613e1b57600080fd5b81356020613e2b613aa783614aca565b8083825282820191508286018a848660051b8901011115613e4b57600080fd5b600096505b84871015613daf578035613e6381614c67565b835260019690960195918301918301613e50565b600060208284031215613e8957600080fd5b61351482613af8565b60008060408385031215613ea557600080fd5b613eae83613af8565b915060208301516001600160401b03811115613ec957600080fd5b613dd385828601613b50565b600060208284031215613ee757600080fd5b81356001600160e01b03198116811461351457600080fd5b60008060408385031215613f1257600080fd5b82516001600160401b03811115613f2857600080fd5b613f3485828601613b50565b925050613f4360208401613af8565b90509250929050565b60008060408385031215613f5f57600080fd5b825160078110613f6e57600080fd5b60208401519092506001600160401b03811115613ec957600080fd5b6000806000806000806000806000806101408b8d031215613faa57600080fd5b8a356001600160401b0380821115613fc157600080fd5b613fcd8e838f01613b08565b909c509a5060208d0135915080821115613fe657600080fd5b613ff28e838f01613bd3565b995060408d013591508082111561400857600080fd5b6140148e838f01613b08565b909950975060608d013591508082111561402d57600080fd5b5061403a8d828e01613b08565b909650945061404e90508c60808d01613bbb565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b03121561408b57600080fd5b88356001600160401b03808211156140a257600080fd5b6140ae8c838d01613b08565b909a50985060208b0135975060408b01359150808211156140ce57600080fd5b6140da8c838d01613bd3565b965060608b01359150808211156140f057600080fd5b6140fc8c838d01613b08565b909650945060808b013591508082111561411557600080fd5b506141228b828c01613b08565b999c989b5096995094979396929594505050565b60006080828403121561414857600080fd5b604051608081018181106001600160401b038211171561416a5761416a614c51565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012082840312156141ae57600080fd5b6141b6614a4f565b82358152602083013560208201526040830135604082015260608301356060820152608083013560808201526141ee60a08401613a76565b60a08201526141ff60c08401613bf7565b60c082015261421060e08401613c08565b60e0820152610100614223818501613be5565b908201529392505050565b60008082840361010081121561424357600080fd5b60e081121561425157600080fd5b5061425a614a78565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a084015161429481614c67565b60a082015260c08401516142a781614c67565b60c08201529150613f4360e08401613af8565b6000602082840312156142cc57600080fd5b5035919050565b600080604083850312156142e657600080fd5b8235915060208301356001600160401b0381111561430357600080fd5b83016101008186031215613c9657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614357816020860160208601614bc8565b601f01601f19169290920160200192915050565b6007811061438957634e487b7160e01b600052602160045260246000fd5b9052565b6000813561439a81614c67565b6001600160a01b0390811684526020830135906143b682614c67565b1660208401526040828101359084015260608083013590840152608080830135908401526143e760a0830183614aed565b60e060a08601526143fc60e086018284614316565b91505060c083013560c08501528091505092915050565b6000610100823584526020830135602085015260408301356040850152606083013561443e81614c67565b6001600160a01b03908116606086015260808401359061445d82614c67565b16608085015260a083013561447181614c67565b6001600160a01b031660a085015261448c60c0840184614aed565b8260c087015261449f8387018284614316565b9250505060e083013560e08501528091505092915050565b6000813582360360de19810182126144ce57600080fd5b604085526144e16040860185840161438d565b9150602084013560fe19820181126144f857600080fd5b858303602087015261450c83868301614413565b9695505050505050565b8183823760009101908152919050565b60008251614538818460208701614bc8565b9190910192915050565b60008451614554818460208901614bc8565b600560fb1b9083019081528451614572816001840160208901614bc8565b600b60fa1b600192909101918201528351614594816002840160208801614bc8565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b8152600082516145d0816014850160208701614bc8565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161461a608083018561436b565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906146769083018461433f565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061450c606083018486614316565b6040808252810183905260008460608301825b868110156146ed5782356146d081614c67565b6001600160a01b03168252602092830192909101906001016146bd565b5060209390930193909352509392505050565b8415158152836020820152614718604082018461436b565b60806060820152600061450c608083018461433f565b602081526000613514602083018461433f565b608081526000614754608083018761433f565b851515602084015284604084015282810360608401526147748185614413565b979650505050505050565b614789818461436b565b604060208201526000613bb3604083018461433f565b60006101408083526147b48184018d8f614316565b905082810360208401526147c8818c6144b7565b905082810360408401526147dd818a8c614316565b905082810360608401526147f281888a614316565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b604081526000614848604083018561433f565b905060018060a01b03831660208301529392505050565b604081526000614872604083018561433f565b90508260208301529392505050565b608081526000614894608083018761433f565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a0815260006148cc60a083018961438d565b87602084015286604084015282810360608401526148ea818761433f565b905082810360808401526148ff818587614316565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e083015161497a60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b6080815260006149a160808301896144b7565b82810360208401526149b481888a614316565b905082810360408401526149c9818688614316565b915050826060830152979650505050505050565b6000808335601e198436030181126149f457600080fd5b8301803591506001600160401b03821115614a0e57600080fd5b602001915036819003821315613b4957600080fd5b6000823560de1983360301811261453857600080fd5b6000823560fe1983360301811261453857600080fd5b60405161012081016001600160401b0381118282101715614a7257614a72614c51565b60405290565b60405160e081016001600160401b0381118282101715614a7257614a72614c51565b604051601f8201601f191681016001600160401b0381118282101715614ac257614ac2614c51565b604052919050565b60006001600160401b03821115614ae357614ae3614c51565b5060051b60200190565b6000808335601e19843603018112614b0457600080fd5b83016020810192503590506001600160401b03811115614b2357600080fd5b803603831315613b4957600080fd5b600061ffff808316818516808303821115614b4f57614b4f614c0f565b01949350505050565b60008219821115614b6b57614b6b614c0f565b500190565b600082614b8d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614bac57614bac614c0f565b500290565b600082821015614bc357614bc3614c0f565b500390565b60005b83811015614be3578181015183820152602001614bcb565b83811115611b9e5750506000910152565b6000600019821415614c0857614c08614c0f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612dd857600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c756572656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da26469706673582212203f9d981cbd1c46f6fcc33248e49a6ab98479afd55cc70e17490d4d242d4c8efb64736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106101f95760003560e01c80638e53548b1161010d578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e1214610664578063ebcd31ac14610684578063f2fde38b146106a4578063f3fef3a3146106c4578063f7908a74146106e457600080fd5b8063ca64f9e7146105b9578063d26152f9146105ec578063d904c7321461060c578063ddf737891461062e57600080fd5b8063af595dfc116100dc578063af595dfc14610528578063be7c76ad14610548578063c2da078614610581578063c7178230146105a157600080fd5b80638e53548b146104a75780639bcde3f3146104c7578063a6e61b60146104e7578063aa67c9191461051557600080fd5b80636bd50cef1161019057806372c1ab0c1161015f57806372c1ab0c146103f657806375dc7b4e146104165780638a09fb56146104495780638ac3b845146104695780638da5cb5b1461048957600080fd5b80636bd50cef146103595780636ca862e21461037b57806370a08231146103ab578063715018a6146103e157600080fd5b806345bdade7116101cc57806345bdade7146102a55780634f7de031146102ba57806351d85156146102dc57806359c4afc01461032357600080fd5b806301ffc9a7146101fe57806320ffd56d1461023357806339622167146102705780633c16e59a14610290575b600080fd5b34801561020a57600080fd5b5061021e610219366004613ed5565b610717565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161022a565b34801561027c57600080fd5b5061021e61028b366004613c1f565b610769565b34801561029c57600080fd5b50600c54610262565b3480156102b157600080fd5b50610262610807565b3480156102c657600080fd5b506102da6102d5366004613c1f565b61080f565b005b3480156102e857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161022a565b34801561032f57600080fd5b5061026261033e366004613c1f565b6001600160a01b03166000908152600a602052604090205490565b34801561036557600080fd5b5061036e61096b565b60405161022a919061490c565b34801561038757600080fd5b5061039b61039636600461406f565b610a4c565b60405161022a9493929190614700565b3480156103b757600080fd5b506102626103c6366004613c1f565b6001600160a01b03166000908152600b602052604090205490565b3480156103ed57600080fd5b506102da6118cf565b34801561040257600080fd5b506102da610411366004613d15565b6118e3565b34801561042257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b34801561045557600080fd5b506102da610464366004613ddd565b611ba4565b34801561047557600080fd5b506102626104843660046142ba565b611cfb565b34801561049557600080fd5b506000546001600160a01b031661030b565b3480156104b357600080fd5b506102626104c23660046142d3565b611d30565b3480156104d357600080fd5b506102da6104e236600461419b565b611dc6565b3480156104f357600080fd5b50610507610502366004613f8a565b611f6c565b60405161022a92919061477f565b6102da610523366004613c1f565b6123f8565b34801561053457600080fd5b506102da6105433660046142ba565b612473565b34801561055457600080fd5b5061030b610563366004613c1f565b6001600160a01b039081166000908152600960205260409020541690565b34801561058d57600080fd5b506102da61059c366004613ca1565b6124f6565b3480156105ad57600080fd5b50600c5442101561021e565b3480156105c557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b3480156105f857600080fd5b506102da610607366004613c1f565b6126d9565b34801561061857600080fd5b50610621612857565b60405161022a919061472e565b34801561063a57600080fd5b50610262610649366004613c1f565b6001600160a01b031660009081526008602052604090205490565b34801561067057600080fd5b506102da61067f366004613c1f565b612877565b34801561069057600080fd5b506102da61069f366004613c68565b612b1a565b3480156106b057600080fd5b506102da6106bf366004613c1f565b612d62565b3480156106d057600080fd5b506102da6106df366004613c3c565b612ddb565b3480156106f057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b60006001600160e01b0319821663e9fb30f760e01b148061074857506001600160e01b03198216630704183b60e11b145b8061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b1580156107cf57600080fd5b505afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107639190613e77565b60005a905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088c5760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b61089581612877565b6001600160a01b0381166000908152600a60205260409020546108ed5760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b6044820152606401610883565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505050565b6109d3604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610a5b6139aa565b610a63610807565b6040820152610a738a8a8a612e7e565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610ab690612ee3565b610ac4816101e00151612f26565b610afd60405180606001604052806023815260200161500b60239139610aea8c80614a23565b610af8906020810190613c1f565b612f6b565b610b34604051806060016040528060218152602001614d7d60219139610b238c80614a23565b610af8906040810190602001613c1f565b610b63604051806060016040528060248152602001614e8660249139610b5a8c80614a23565b60400135612fb4565b610b92604051806060016040528060228152602001614d9e60229139610b898c80614a23565b60600135612fb4565b610bc1604051806060016040528060248152602001614d5960249139610bb88c80614a23565b60800135612fb4565b610bf06040518060600160405280602d8152602001614ca9602d9139610be78c80614a23565b60c00135612fb4565b610c1f6040518060600160405280602d8152602001614dfb602d9139610c1960208d018d614a39565b35612fb4565b610c51604051806060016040528060358152602001614e5160359139610c4860208d018d614a39565b60200135612fb4565b610c7a6040518060600160405280603b8152602001614dc0603b9139610b5a60208d018d614a39565b610cb46040518060600160405280602c8152602001614c7d602c9139610ca360208d018d614a39565b610af8906080810190606001613c1f565b610cee6040518060600160405280602a8152602001614fe1602a9139610cdd60208d018d614a39565b610af89060a0810190608001613c1f565b610d286040518060600160405280602a8152602001614fb7602a9139610d1760208d018d614a39565b610af89060c081019060a001613c1f565b610d5a604051806060016040528060298152602001614e2860299139610d5160208d018d614a39565b60e00135612fb4565b610d986040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250612ee3565b610dd78d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ee392505050565b610e0b6040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250612ee3565b610e4a89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610e816040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250612ee3565b610ec087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610ee1604051806060016040528060238152602001614f9460239139612ee3565b610f36610eee8b80614a23565b610efc9060a08101906149dd565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b610f576040518060600160405280602e8152602001614eaa602e9139612ee3565b610f75610f6760208c018c614a39565b610efc9060c08101906149dd565b610fb46040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c612fb4565b600c544210610ff65760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b6044820152606401610883565b60046110028b80614a23565b6110109060a08101906149dd565b9050101561101f576000611074565b61107461102c8b80614a23565b61103a9060a08101906149dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061303c915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906110bb57503215155b156111cf578761110d5760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f722062616420676174657761796044820152606401610883565b33321461115c5760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f4100000000000000006044820152606401610883565b61116960208b018b614a39565b61117a906080810190606001613c1f565b6001600160a01b0316336001600160a01b0316146111cf5760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b6044820152606401610883565b321561126d57600960006111e660208d018d614a39565b6111f7906080810190606001613c1f565b6001600160a01b039081168252602082019290925260400160002054166101c0820181905261125f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b61126d816101c00151612877565b61127c8b8b83604001516130ac565b61010083015260a08201526112968d8d8c8c8c8c8c613336565b60025460405a6112a790603f614b92565b6112b19190614b70565b6112bb9190614bb1565b6101208201526112c9610807565b61014082015260035460045461012083015160408401516112ed60208f018f614a39565b604001356112fb9190614b58565b6113059190614b58565b61130f9190614b58565b6113199190614b58565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a0015161134f610807565b8c610200015161135f9190614bb1565b8c610100015160405160240161137e9a9998979695949392919061479f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113bc9190614526565b60006040518083038160008787f1925050503d80600081146113fa576040519150601f19603f3d011682016040523d82523d6000602084013e6113ff565b606091505b5061022083015215158152611412610807565b8161014001516114229190614bb1565b60e0820152610220810151805161144191602091810182019101613f4c565b8260c0018360800182905282600681111561145e5761145e614c25565b600681111561146f5761146f614c25565b90525050608081015151156114c0577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516114b792919061477f565b60405180910390a15b80516116225760028160c0015160068111156114de576114de614c25565b148061154d57506114f260208b018b614a39565b60a082015151611506916040013590614b58565b8160e001511115801561154d575060038160c00151600681111561152c5761152c614c25565b148061154d575060048160c00151600681111561154b5761154b614c25565b145b15611622576101e081015161156560208c018c614a39565b6115769060a0810190608001613c1f565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846115b48e80614a23565b6115c2906020810190613c1f565b6115cc8f80614a23565b6115dd906040810190602001613c1f565b3387602001518860e0015189608001516040516115ff9695949392919061462b565b60405180910390a46000808260c0015183608001519450945094509450506118c0565b60045461162d610807565b826040015161163c9190614bb1565b61164960208d018d614a39565b604001356116579190614b58565b6116619190614b58565b610160820181905261167a906104c260208d018d614a39565b935061168584611cfb565b61018082015283600b600061169d60208e018e614a39565b6116ae9060a0810190608001613c1f565b6001600160a01b03166001600160a01b03168152602001908152602001600020546116d99190614bb1565b600b60006116ea60208e018e614a39565b6116fb9060a0810190608001613c1f565b6001600160a01b031681526020810191909152604001600020556101808101516117259085614bb1565b6101c08201516001600160a01b03166000908152600b602052604090205461174d9190614b58565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156117bd576101808101516006546001600160a01b03166000908152600b60205260409020546117a19190614b58565b6006546001600160a01b03166000908152600b60205260409020555b60006117c98b80614a23565b6117d7906020810190613c1f565b905060006117e58c80614a23565b6117f6906040810190602001613c1f565b9050600061180760208e018e614a39565b6118189060a0810190608001613c1f565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f60405161187a969594939291906145dd565b60405180910390a4505050326118a35760c08101516080909101516001955090925090506118c0565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6118d7613410565b6118e1600061346a565b565b3360005b8251811015611b9e576119886040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205486848151811061196157611961614c3b565b602002602001015186858151811061197b5761197b614c3b565b60200260200101516134ba565b6001600160a01b0382166000908152600b602052604090205483518490839081106119b5576119b5614c3b565b6020026020010151811015611a015760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610883565b838281518110611a1357611a13614c3b565b602002602001015181611a269190614bb1565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611a5657611a56614c3b565b60200260200101516001600160a01b0316858481518110611a7957611a79614c3b565b602002602001015160405160006040518083038185875af1925050503d8060008114611ac1576040519150601f19603f3d011682016040523d82523d6000602084013e611ac6565b606091505b5050905080611b0a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610883565b858381518110611b1c57611b1c614c3b565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611b6a57611b6a614c3b565b6020026020010151604051611b8191815260200190565b60405180910390a350508080611b9690614bf4565b9150506118e7565b50505050565b611bac613410565b8051825114611bfd5760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e67746800006044820152606401610883565b60005b8251811015611cf657818181518110611c1b57611c1b614c3b565b602002602001015160086000858481518110611c3957611c39614c3b565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611c9857611c98614c3b565b6020026020010151838381518110611cb257611cb2614c3b565b6020026020010151604051611cdc9291906001600160a01b03929092168252602082015260400190565b60405180910390a180611cee81614bf4565b915050611c00565b505050565b600654600090600160a01b900460ff16611d1757506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611d4857506000611d4b565b50485b6000611d678435611d623a81602089013587614b58565b613503565b600754909150606490611d7e9061ffff1682614b32565b61ffff16611d8c8388614b92565b611d969190614b92565b611da09190614b70565b600654611dbd9190600160a81b90046001600160501b0316614b58565b95945050505050565b611dce613410565b60648160c0015160ff1610611e185760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b6044820152606401610883565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e724791611f6191815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b60006060611fc6604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b611fce610807565b81525a611fdb9086614bb1565b602082015233301461202f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c61794875620000000000006044820152606401610883565b600b600061204060208e018e614a39565b6120519060a0810190608001613c1f565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b90612092908d908d908d908d908d908b9060240161498e565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906120dc908e018e614a39565b6120ed9060a0810190608001613c1f565b6001600160a01b031688602001358460e0015160405161210d9190614526565b60006040518083038160008787f1925050503d806000811461214b576040519150601f19603f3d011682016040523d82523d6000602084013e612150565b606091505b5090925090508161216f576121648161351b565b61216f600282613527565b808060200190518101906121839190613eff565b8460c001856101000182151515158152508290525050505060006121ed8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d613560565b60a08501521515608084015290508061220f5761220f60038360a00151613527565b816101000151801561222357508160800151155b156122375761223760048360a00151613527565b506376fa01c360e01b8160c001518260800151612252610807565b845161225e9190614bb1565b846020015161226d9190614b58565b8e806020019061227d9190614a39565b6040516024016122909493929190614741565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906122d9908e018e614a39565b6122ea9060a0810190608001613c1f565b6001600160a01b031688604001358460e0015160405161230a9190614526565b60006040518083038160008787f1925050503d8060008114612348576040519150601f19603f3d011682016040523d82523d6000602084013e61234d565b606091505b50915091508161236257612362600582613527565b50506040810151600b600061237a60208f018f614a39565b61238b9060a0810190608001613c1f565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156123cc576123cc600660405180602001604052806000815250613527565b80608001516123dc5760016123df565b60005b8160a0015192509250509a509a98505050505050505050565b6001600160a01b0381166000908152600b6020526040902054349061241e908290614b58565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b61247b613410565b600c5442106124c15760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b6044820152606401610883565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001611f61565b336000818152600a6020526040812054612511908490614b58565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156125745760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b6044820152606401610883565b61257d82612877565b60005b8381101561268d57600060098187878581811061259f5761259f614c3b565b90506020020160208101906125b49190613c1f565b6001600160a01b039081168252602082019290925260400160002054161461261e5760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e61676572000000000000006044820152606401610883565b826009600087878581811061263557612635614c3b565b905060200201602081019061264a9190613c1f565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061268581614bf4565b915050612580565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a288585846040516126cb939291906146aa565b60405180910390a250505050565b6126e1613410565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b15801561274257600080fd5b505afa158015612756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277a9190613e77565b6127c65760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c65207965746044820152606401610883565b6001600160a01b038082166000908152600b602052604080822080549083905560065490931682529020546127fc908290614b58565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b6060604051806060016040528060228152602001614cd660229139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b1580156128de57600080fd5b505afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612916919061422e565b60a0820180516001600160a01b03908116600090815260086020526040902054915193955091935091166129875760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b82518111156129d85760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c000000000000006044820152606401610883565b80612a255760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e006044820152606401610883565b60055460208401511015612a7b5760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c0000000000006044820152606401610883565b604083015115612acd5760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e00000000000000006044820152606401610883565b81611b9e5760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d6044820152606401610883565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b825760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b6044820152606401610883565b6001600160a01b038083166000908152600960205260409020541680612be15760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612c4857600080fd5b505afa158015612c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c80919061422e565b508051909150612ccd5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612d4457600080fd5b505af1158015612d58573d6000803e3d6000fd5b5050505050505050565b612d6a613410565b6001600160a01b038116612dcf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610883565b612dd88161346a565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612e3457612e34614c3b565b6020026020010181815250508381600081518110612e5457612e54614c3b565b60200260200101906001600160a01b031690816001600160a01b031681525050611b9e81836118e3565b60006001600160e01b03612e928580614a23565b612ea0906020810190613c1f565b612eaa8680614a23565b608001358585604051602001612ec39493929190614682565b604051602081830303815290604052805190602001201690509392505050565b612dd881604051602401612ef7919061472e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613746565b612dd881604051602401612f3c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b179052613746565b612fb08282604051602401612f81929190614835565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052613746565b5050565b612fb08282604051602401612fca92919061485f565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052613746565b612dd88160405160240161300d919061472e565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052613746565b6000613049826004614b58565b835110156130995760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f72740000000000006044820152606401610883565b5001602001516001600160e01b03191690565b6130d76040518060800160405280600081526020016000815260200160008152602001600081525090565b60006130e66020850185614a39565b6130f79060a0810190608001613c1f565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b15801561313257600080fd5b5086fa158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b9190614136565b60608101519092503611156131c25760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d69740000000000000000006044820152606401610883565b81518510156132135760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f20686967680000000000006044820152606401610883565b6020820151825110156132685760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f77000000000000006044820152606401610883565b826132766020860186614a39565b604001356132849190614b58565b90506000613299826104c26020880188614a39565b9050600b60006132ac6020880188614a39565b6132bd9060a0810190608001613c1f565b6001600160a01b03166001600160a01b031681526020019081526020016000205481111561332d5760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f77000000000000006044820152606401610883565b50935093915050565b600061335b6133486020880188614a39565b6133569060c08101906149dd565b613767565b6133766133688880614a23565b6133569060a08101906149dd565b6133808585613767565b61338a8888613767565b6133948c8c613767565b6133a0906102c4614b58565b6133aa9190614b58565b6133b49190614b58565b6133be9190614b58565b6133c89190614b58565b9050368114612d585760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b6044820152606401610883565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610883565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b9e848484846040516024016134d49493929190614881565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b179052613746565b60008183106135125781613514565b825b9392505050565b612dd88161040061378d565b6000828260405160200161353c92919061477f565b60405160208183030381529060405290506135568161351b565b8051602082018181fd5b600080606060006135708761379a565b9050600061359b8961358560208b018b614a39565b6135969060c081019060a001613c1f565b6137d9565b90506135aa6020890189614a39565b6135bb9060c081019060a001613c1f565b6001600160a01b031663e024dc7f60e01b6135d68a80614a23565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614cf8606191396040518060e0016040528060bc8152602001614ed860bc913960405160200161363e91906145a1565b60408051601f198184030181529082905261365d939291602001614542565b60405160208183030381529060405280519060200120868c8c60405160240161368b969594939291906148b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516136c99190614526565b6000604051808303816000865af19150503d8060008114613706576040519150601f19603f3d011682016040523d82523d6000602084013e61370b565b606091505b5090955092508415613731578280602001905181019061372b9190613e92565b90945092505b61373a8361351b565b50509450945094915050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000613776601f600019614bb1565b61378183601f614b58565b61351491166020614b58565b8082511115612fb0579052565b60606137b16137ac6020840184614a39565b61382c565b6040516020016137c391815260200190565b6040516020818303038152906040529050919050565b60006135146040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016138154690565b8152602001846001600160a01b031681525061392a565b60006040518060e0016040528060bc8152602001614ed860bc9139805160209182012090833590840135604085013561386b6080870160608801613c1f565b61387b60a0880160808901613c1f565b61388b60c0890160a08a01613c1f565b61389860c08a018a6149dd565b6040516138a6929190614516565b60405190819003812061390d989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260000151805190602001208360200151805190602001208460400151856060015160405160200161390d9594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613a106040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613a8181614c67565b919050565b600082601f830112613a9757600080fd5b81356020613aac613aa783614aca565b614a9a565b80838252828201915082860187848660051b8901011115613acc57600080fd5b60005b85811015613aeb57813584529284019290840190600101613acf565b5090979650505050505050565b80518015158114613a8157600080fd5b60008083601f840112613b1a57600080fd5b5081356001600160401b03811115613b3157600080fd5b602083019150836020828501011115613b4957600080fd5b9250929050565b600082601f830112613b6157600080fd5b81516001600160401b03811115613b7a57613b7a614c51565b613b8d601f8201601f1916602001614a9a565b818152846020838601011115613ba257600080fd5b613bb3826020830160208701614bc8565b949350505050565b600060808284031215613bcd57600080fd5b50919050565b600060408284031215613bcd57600080fd5b803561ffff81168114613a8157600080fd5b803560ff81168114613a8157600080fd5b80356001600160501b0381168114613a8157600080fd5b600060208284031215613c3157600080fd5b813561351481614c67565b60008060408385031215613c4f57600080fd5b8235613c5a81614c67565b946020939093013593505050565b60008060408385031215613c7b57600080fd5b8235613c8681614c67565b91506020830135613c9681614c67565b809150509250929050565b60008060208385031215613cb457600080fd5b82356001600160401b0380821115613ccb57600080fd5b818501915085601f830112613cdf57600080fd5b813581811115613cee57600080fd5b8660208260051b8501011115613d0357600080fd5b60209290920196919550909350505050565b60008060408385031215613d2857600080fd5b82356001600160401b0380821115613d3f57600080fd5b818501915085601f830112613d5357600080fd5b81356020613d63613aa783614aca565b8083825282820191508286018a848660051b8901011115613d8357600080fd5b600096505b84871015613daf578035613d9b81614c67565b835260019690960195918301918301613d88565b5096505086013592505080821115613dc657600080fd5b50613dd385828601613a86565b9150509250929050565b60008060408385031215613df057600080fd5b82356001600160401b0380821115613e0757600080fd5b818501915085601f830112613e1b57600080fd5b81356020613e2b613aa783614aca565b8083825282820191508286018a848660051b8901011115613e4b57600080fd5b600096505b84871015613daf578035613e6381614c67565b835260019690960195918301918301613e50565b600060208284031215613e8957600080fd5b61351482613af8565b60008060408385031215613ea557600080fd5b613eae83613af8565b915060208301516001600160401b03811115613ec957600080fd5b613dd385828601613b50565b600060208284031215613ee757600080fd5b81356001600160e01b03198116811461351457600080fd5b60008060408385031215613f1257600080fd5b82516001600160401b03811115613f2857600080fd5b613f3485828601613b50565b925050613f4360208401613af8565b90509250929050565b60008060408385031215613f5f57600080fd5b825160078110613f6e57600080fd5b60208401519092506001600160401b03811115613ec957600080fd5b6000806000806000806000806000806101408b8d031215613faa57600080fd5b8a356001600160401b0380821115613fc157600080fd5b613fcd8e838f01613b08565b909c509a5060208d0135915080821115613fe657600080fd5b613ff28e838f01613bd3565b995060408d013591508082111561400857600080fd5b6140148e838f01613b08565b909950975060608d013591508082111561402d57600080fd5b5061403a8d828e01613b08565b909650945061404e90508c60808d01613bbb565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b03121561408b57600080fd5b88356001600160401b03808211156140a257600080fd5b6140ae8c838d01613b08565b909a50985060208b0135975060408b01359150808211156140ce57600080fd5b6140da8c838d01613bd3565b965060608b01359150808211156140f057600080fd5b6140fc8c838d01613b08565b909650945060808b013591508082111561411557600080fd5b506141228b828c01613b08565b999c989b5096995094979396929594505050565b60006080828403121561414857600080fd5b604051608081018181106001600160401b038211171561416a5761416a614c51565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012082840312156141ae57600080fd5b6141b6614a4f565b82358152602083013560208201526040830135604082015260608301356060820152608083013560808201526141ee60a08401613a76565b60a08201526141ff60c08401613bf7565b60c082015261421060e08401613c08565b60e0820152610100614223818501613be5565b908201529392505050565b60008082840361010081121561424357600080fd5b60e081121561425157600080fd5b5061425a614a78565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a084015161429481614c67565b60a082015260c08401516142a781614c67565b60c08201529150613f4360e08401613af8565b6000602082840312156142cc57600080fd5b5035919050565b600080604083850312156142e657600080fd5b8235915060208301356001600160401b0381111561430357600080fd5b83016101008186031215613c9657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614357816020860160208601614bc8565b601f01601f19169290920160200192915050565b6007811061438957634e487b7160e01b600052602160045260246000fd5b9052565b6000813561439a81614c67565b6001600160a01b0390811684526020830135906143b682614c67565b1660208401526040828101359084015260608083013590840152608080830135908401526143e760a0830183614aed565b60e060a08601526143fc60e086018284614316565b91505060c083013560c08501528091505092915050565b6000610100823584526020830135602085015260408301356040850152606083013561443e81614c67565b6001600160a01b03908116606086015260808401359061445d82614c67565b16608085015260a083013561447181614c67565b6001600160a01b031660a085015261448c60c0840184614aed565b8260c087015261449f8387018284614316565b9250505060e083013560e08501528091505092915050565b6000813582360360de19810182126144ce57600080fd5b604085526144e16040860185840161438d565b9150602084013560fe19820181126144f857600080fd5b858303602087015261450c83868301614413565b9695505050505050565b8183823760009101908152919050565b60008251614538818460208701614bc8565b9190910192915050565b60008451614554818460208901614bc8565b600560fb1b9083019081528451614572816001840160208901614bc8565b600b60fa1b600192909101918201528351614594816002840160208801614bc8565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b8152600082516145d0816014850160208701614bc8565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161461a608083018561436b565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906146769083018461433f565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061450c606083018486614316565b6040808252810183905260008460608301825b868110156146ed5782356146d081614c67565b6001600160a01b03168252602092830192909101906001016146bd565b5060209390930193909352509392505050565b8415158152836020820152614718604082018461436b565b60806060820152600061450c608083018461433f565b602081526000613514602083018461433f565b608081526000614754608083018761433f565b851515602084015284604084015282810360608401526147748185614413565b979650505050505050565b614789818461436b565b604060208201526000613bb3604083018461433f565b60006101408083526147b48184018d8f614316565b905082810360208401526147c8818c6144b7565b905082810360408401526147dd818a8c614316565b905082810360608401526147f281888a614316565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b604081526000614848604083018561433f565b905060018060a01b03831660208301529392505050565b604081526000614872604083018561433f565b90508260208301529392505050565b608081526000614894608083018761433f565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a0815260006148cc60a083018961438d565b87602084015286604084015282810360608401526148ea818761433f565b905082810360808401526148ff818587614316565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e083015161497a60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b6080815260006149a160808301896144b7565b82810360208401526149b481888a614316565b905082810360408401526149c9818688614316565b915050826060830152979650505050505050565b6000808335601e198436030181126149f457600080fd5b8301803591506001600160401b03821115614a0e57600080fd5b602001915036819003821315613b4957600080fd5b6000823560de1983360301811261453857600080fd5b6000823560fe1983360301811261453857600080fd5b60405161012081016001600160401b0381118282101715614a7257614a72614c51565b60405290565b60405160e081016001600160401b0381118282101715614a7257614a72614c51565b604051601f8201601f191681016001600160401b0381118282101715614ac257614ac2614c51565b604052919050565b60006001600160401b03821115614ae357614ae3614c51565b5060051b60200190565b6000808335601e19843603018112614b0457600080fd5b83016020810192503590506001600160401b03811115614b2357600080fd5b803603831315613b4957600080fd5b600061ffff808316818516808303821115614b4f57614b4f614c0f565b01949350505050565b60008219821115614b6b57614b6b614c0f565b500190565b600082614b8d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614bac57614bac614c0f565b500290565b600082821015614bc357614bc3614c0f565b500390565b60005b83811015614be3578181015183820152602001614bcb565b83811115611b9e5750506000910152565b6000600019821415614c0857614c08614c0f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612dd857600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c756572656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da26469706673582212203f9d981cbd1c46f6fcc33248e49a6ab98479afd55cc70e17490d4d242d4c8efb64736f6c63430008070033",
    "immutableReferences": {
        "1227": [
            {
                "length": 32,
                "start": 1480
            },
            {
                "length": 32,
                "start": 1931
            },
            {
                "length": 32,
                "start": 2316
            },
            {
                "length": 32,
                "start": 9984
            },
            {
                "length": 32,
                "start": 10395
            },
            {
                "length": 32,
                "start": 11267
            },
            {
                "length": 32,
                "start": 11518
            }
        ],
        "1229": [
            {
                "length": 32,
                "start": 1061
            },
            {
                "length": 32,
                "start": 11045
            }
        ],
        "1231": [
            {
                "length": 32,
                "start": 1779
            },
            {
                "length": 32,
                "start": 4238
            }
        ],
        "1233": [
            {
                "length": 32,
                "start": 747
            },
            {
                "length": 32,
                "start": 2074
            }
        ],
        "1352": [
            {
                "length": 32,
                "start": 578
            }
        ]
    },
    "sourceMap": "94:652:31:-:0;;;-1:-1:-1;;3123:52:4;;135:314:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;379:13;394:10;406:13;421:15;438:7;936:32:47;719:10:55;936:18:47;:32::i;:::-;3395:12:4;3379:28;;-1:-1:-1;;;;;;3417:28:4;;;;;;;;3455:22;;;;;;;3487:28;;;;;;;3525:32;;;;;;3567:25;3584:7;3567:16;:25::i;:::-;3182:417;;;;;135:314:31;;;;;94:652;;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2009:216:4:-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;3178:2:63;2102:49:4::1;::::0;::::1;3160:21:63::0;3217:2;3197:18;;;3190:30;-1:-1:-1;;;3236:18:63;;;3229:46;3292:18;;2102:49:4::1;;;;;;;;;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;3547:13:63;;3529:32;;3617:4;3605:17;;3599:24;3592:4;3577:20;;3570:54;3680:4;3668:17;;3662:24;3655:4;3640:20;;3633:54;3743:4;3731:17;;3725:24;3718:4;3703:20;;3696:54;3806:4;3794:17;;3788:24;3781:4;3766:20;;3759:54;3857:4;3845:17;;3839:24;-1:-1:-1;;;;;3891:35:63;;3943:4;3928:20;;;2278:44;;;;4001:4;3979:20;;;;3975:31;4023:4;4008:20;;2579:29;4064:3;4060:19;-1:-1:-1;;;;;4056:44:63;4117:4;4102:20;;2481:43;4212:4;4200:17;;;4194:24;4757:6;4741:23;4275:6;4260:22;;2386:31;3516:3;3501:19;;3321:968;2192:26:4::1;;;;;;;;2009:216:::0;:::o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;2817:2:63;1414:68:47;;;2799:21:63;;;2836:18;;;2829:30;2895:34;2875:18;;;2868:62;2947:18;;1414:68:47;2615:356:63;1414:68:47;1359:130::o;14:138:63:-;93:13;;115:31;93:13;115:31;:::i;:::-;14:138;;;:::o;157:163::-;235:13;;288:6;277:18;;267:29;;257:57;;310:1;307;300:12;325:175;403:13;;-1:-1:-1;;;;;445:30:63;;435:41;;425:69;;490:1;487;480:12;505:160;582:13;;635:4;624:16;;614:27;;604:55;;655:1;652;645:12;670:1549;830:6;838;846;854;862;906:9;897:7;893:23;936:3;932:2;928:12;925:32;;;953:1;950;943:12;925:32;985:9;979:16;1004:31;1029:5;1004:31;:::i;:::-;1104:2;1089:18;;1083:25;1054:5;;-1:-1:-1;1117:33:63;1083:25;1117:33;:::i;:::-;1221:2;1206:18;;1200:25;1169:7;;-1:-1:-1;1234:33:63;1200:25;1234:33;:::i;:::-;1338:2;1323:18;;1317:25;1286:7;;-1:-1:-1;1351:33:63;1317:25;1351:33;:::i;:::-;1403:7;-1:-1:-1;1429:6:63;-1:-1:-1;;1451:17:63;;1447:26;-1:-1:-1;1444:46:63;;;1486:1;1483;1476:12;1444:46;1514:17;;:::i;:::-;1499:32;;1577:3;1566:9;1562:19;1556:26;1547:7;1540:43;1638:3;1627:9;1623:19;1617:26;1612:2;1603:7;1599:16;1592:52;1699:3;1688:9;1684:19;1678:26;1673:2;1664:7;1660:16;1653:52;1760:3;1749:9;1745:19;1739:26;1734:2;1725:7;1721:16;1714:52;1785:3;1844:2;1833:9;1829:18;1823:25;1817:3;1808:7;1804:17;1797:52;1884:49;1929:2;1918:9;1914:18;1884:49;:::i;:::-;1878:3;1869:7;1865:17;1858:76;1969:48;2012:3;2001:9;1997:19;1969:48;:::i;:::-;1963:3;1954:7;1950:17;1943:75;2053:49;2097:3;2086:9;2082:19;2053:49;:::i;:::-;2047:3;2038:7;2034:17;2027:76;2137:49;2181:3;2170:9;2166:19;2137:49;:::i;:::-;2119:16;;;2112:75;-1:-1:-1;670:1549:63;;;;-1:-1:-1;670:1549:63;;-1:-1:-1;670:1549:63;2123:7;670:1549;-1:-1:-1;670:1549:63:o;4294:347::-;4361:2;4355:9;4403:6;4391:19;;-1:-1:-1;;;;;4425:34:63;;4461:22;;;4422:62;4419:185;;;4526:10;4521:3;4517:20;4514:1;4507:31;4561:4;4558:1;4551:15;4589:4;4586:1;4579:15;4419:185;4620:2;4613:22;4294:347;:::o;4775:131::-;-1:-1:-1;;;;;4850:31:63;;4840:42;;4830:70;;4896:1;4893;4886:12;4830:70;4775:131;:::o;:::-;94:652:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "94:652:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:282:4;;;;;;;;;;-1:-1:-1;4995:282:4;;;;;:::i;:::-;;:::i;:::-;;;24389:14:63;;24382:22;24364:41;;24352:2;24337:18;4995:282:4;;;;;;;;3635:113;;;;;;;;;;-1:-1:-1;3728:13:4;3635:113;;;25052:25:63;;;25040:2;25025:18;3635:113:4;24906:177:63;26328:154:4;;;;;;;;;;-1:-1:-1;26328:154:4;;;;;:::i;:::-;;:::i;3784:110::-;;;;;;;;;;-1:-1:-1;3872:15:4;;3784:110;;26987:107;;;;;;;;;;;;;:::i;5313:337::-;;;;;;;;;;-1:-1:-1;5313:337:4;;;;;:::i;:::-;;:::i;:::-;;4350:108;;;;;;;;;;-1:-1:-1;4437:14:4;4350:108;;;-1:-1:-1;;;;;20963:32:63;;;20945:51;;20933:2;20918:18;4350:108:4;20799:203:63;4835:126:4;;;;;;;;;;-1:-1:-1;4835:126:4;;;;;:::i;:::-;-1:-1:-1;;;;;4934:20:4;4908:7;4934:20;;;:11;:20;;;;;;;4835:126;1862:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9838:8413::-;;;;;;;;;;-1:-1:-1;9838:8413:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6798:116::-;;;;;;;;;;-1:-1:-1;6798:116:4;;;;;:::i;:::-;-1:-1:-1;;;;;6891:16:4;6865:7;6891:16;;;:8;:16;;;;;;;6798:116;1831:101:47;;;;;;;;;;;;;:::i;7302:658:4:-;;;;;;;;;;-1:-1:-1;7302:658:4;;;;;:::i;:::-;;:::i;4076:98::-;;;;;;;;;;-1:-1:-1;4158:9:4;4076:98;;2383:404;;;;;;;;;;-1:-1:-1;2383:404:4;;;;;:::i;:::-;;:::i;23449:281::-;;;;;;;;;;-1:-1:-1;23449:281:4;;;;;:::i;:::-;;:::i;1201:85:47:-;;;;;;;;;;-1:-1:-1;1247:7:47;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;23766:561:4;;;;;;;;;;-1:-1:-1;23766:561:4;;;;;:::i;:::-;;:::i;2009:216::-;;;;;;;;;;-1:-1:-1;2009:216:4;;;;;:::i;:::-;;:::i;18753:4174::-;;;;;;;;;;-1:-1:-1;18753:4174:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;535:209:31:-;;;;;;:::i;:::-;;:::i;25118:226:4:-;;;;;;;;;;-1:-1:-1;25118:226:4;;;;;:::i;:::-;;:::i;4669:130::-;;;;;;;;;;-1:-1:-1;4669:130:4;;;;;:::i;:::-;-1:-1:-1;;;;;4769:23:4;;;4743:7;4769:23;;;:15;:23;;;;;;;;4669:130;5686:712;;;;;;;;;;-1:-1:-1;5686:712:4;;;;;:::i;:::-;;:::i;25380:118::-;;;;;;;;;;-1:-1:-1;25476:15:4;;25457;:34;;25380:118;;3930:110;;;;;;;;;;-1:-1:-1;4021:12:4;3930:110;;26518:433;;;;;;;;;;-1:-1:-1;26518:433:4;;;;;:::i;:::-;;:::i;1469:134::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4494:139::-;;;;;;;;;;-1:-1:-1;4494:139:4;;;;;:::i;:::-;-1:-1:-1;;;;;4599:27:4;4573:7;4599:27;;;:20;:27;;;;;;;4494:139;24363:719;;;;;;;;;;-1:-1:-1;24363:719:4;;;;;:::i;:::-;;:::i;25733:559::-;;;;;;;;;;-1:-1:-1;25733:559:4;;;;;:::i;:::-;;:::i;2081:198:47:-;;;;;;;;;;-1:-1:-1;2081:198:47;;;;;:::i;:::-;;:::i;6950:316:4:-;;;;;;;;;;-1:-1:-1;6950:316:4;;;;;:::i;:::-;;:::i;4210:104::-;;;;;;;;;;-1:-1:-1;4295:12:4;4210:104;;4995:282;5097:4;-1:-1:-1;;;;;;5120:42:4;;-1:-1:-1;;;5120:42:4;;:98;;-1:-1:-1;;;;;;;5178:40:4;;-1:-1:-1;;;5178:40:4;5120:98;:150;;;-1:-1:-1;;;;;;;;;;937:40:58;;;5234:36:4;5113:157;4995:282;-1:-1:-1;;4995:282:4:o;26328:154::-;26430:45;;-1:-1:-1;;;26430:45:4;;-1:-1:-1;;;;;20963:32:63;;;26430:45:4;;;20945:51:63;26408:4:4;;26430:12;:31;;;;;;20918:18:63;;26430:45:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26987:107::-;27053:7;27078:9;27071:16;;26987:107;:::o;5313:337::-;5404:10;-1:-1:-1;;;;;5418:14:4;5404:28;;5396:70;;;;-1:-1:-1;;;5396:70:4;;31341:2:63;5396:70:4;;;31323:21:63;31380:2;31360:18;;;31353:30;31419:31;31399:18;;;31392:59;31468:18;;5396:70:4;;;;;;;;;5476:38;5501:12;5476:24;:38::i;:::-;-1:-1:-1;;;;;5532:25:4;;5560:1;5532:25;;;:11;:25;;;;;;5524:58;;;;-1:-1:-1;;;5524:58:4;;36010:2:63;5524:58:4;;;35992:21:63;36049:2;36029:18;;;36022:30;-1:-1:-1;;;36068:18:63;;;36061:46;36124:18;;5524:58:4;35808:340:63;5524:58:4;5592:51;;-1:-1:-1;;;5592:51:4;;-1:-1:-1;;;;;20963:32:63;;;5592:51:4;;;20945::63;5592:12:4;:37;;;;20918:18:63;;5592:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5313:337;:::o;1862:111::-;1920:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1920:21:4;-1:-1:-1;1953:13:4;;;;;;;;1960:6;1953:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1953:13:4;;;;;;-1:-1:-1;;;1953:13:4;;;;;;;;-1:-1:-1;;;1953:13:4;;-1:-1:-1;;;;;1953:13:4;;;;;;;;;;;;;;1862:111::o;9838:8413::-;10117:22;10149:14;10173:32;10215:24;10255:25;;:::i;:::-;10312:18;:16;:18::i;:::-;10290:19;;;:40;10362:51;10389:12;10403:9;;10362:26;:51::i;:::-;10340:19;;;:73;10424:39;;;;;;;;;;;;;;;;;;;:11;:39::i;:::-;10473;10492:4;:19;;;10473:18;:39::i;:::-;10522:77;;;;;;;;;;;;;;;;;;10573:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;10522:11;:77::i;:::-;10609:73;;;;;;;;;;;;;;;;;;10658:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;10609:73::-;10692:79;;;;;;;;;;;;;;;;;;10744:20;:12;;:20;:::i;:::-;:26;;;10692:11;:79::i;:::-;10781:75;;;;;;;;;;;;;;;;;;10831:20;:12;;:20;:::i;:::-;:24;;;10781:11;:75::i;:::-;10866:79;;;;;;;;;;;;;;;;;;10918:20;:12;;:20;:::i;:::-;:26;;;10866:11;:79::i;:::-;10955:97;;;;;;;;;;;;;;;;;;11016:20;:12;;:20;:::i;:::-;:35;;;10955:11;:97::i;:::-;11063;;;;;;;;;;;;;;;;;;11124:22;;;;:12;:22;:::i;:::-;:35;11063:11;:97::i;:::-;11170:113;;;;;;;;;;;;;;;;;;11239:22;;;;:12;:22;:::i;:::-;:43;;;11170:11;:113::i;:::-;11293:125;;;;;;;;;;;;;;;;;;11368:22;;;;:12;:22;:::i;11293:125::-;11428:95;;;;;;;;;;;;;;;;;;11488:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;11428:95::-;11533:91;;;;;;;;;;;;;;;;;;11591:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11533:91::-;11634;;;;;;;;;;;;;;;;;;11692:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11634:91::-;11735:89;;;;;;;;;;;;;;;;;;11792:22;;;;:12;:22;:::i;:::-;:31;;;11735:11;:89::i;:::-;11835:44;;;;;;;;;;;;;;;;;;:11;:44::i;:::-;11889:38;11907:19;;11889:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11889:17:4;;-1:-1:-1;;;11889:38:4:i;:::-;11937:34;;;;;;;;;;;;;;-1:-1:-1;;;11937:34:4;;;:11;:34::i;:::-;11981:27;11998:9;;11981:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11981:16:4;;-1:-1:-1;;;11981:27:4:i;:::-;12018:37;;;;;;;;;;;;;;-1:-1:-1;;;12018:37:4;;;:11;:37::i;:::-;12065:30;12082:12;;12065:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12065:16:4;;-1:-1:-1;;;12065:30:4:i;:::-;12105:50;;;;;;;;;;;;;;;;;;:11;:50::i;:::-;12165:43;12182:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12165:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12165:16:4;;-1:-1:-1;;;12165:43:4:i;:::-;12218:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;12289:54;12306:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;12289:54::-;12353:65;;;;;;;;;;;;;;;;;;12398:19;12353:11;:65::i;:::-;25476:15;;25457;:34;12429:42;;;;-1:-1:-1;;;12429:42:4;;30998:2:63;12429:42:4;;;30980:21:63;31037:2;31017:18;;;31010:30;-1:-1:-1;;;31056:18:63;;;31049:44;31110:18;;12429:42:4;30796:338:63;12429:42:4;12539:1;12505:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;:32;;:35;;:102;;12605:1;12505:102;;;12543:52;12566:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12543:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12543:52:4;-1:-1:-1;12543:22:4;;-1:-1:-1;;12543:52:4:i;:::-;-1:-1:-1;;;;;;12481:126:4;:21;;;:126;12622:10;-1:-1:-1;;;;;12636:12:4;12622:26;;;;;:58;;-1:-1:-1;12652:9:4;:28;;12622:58;12618:322;;;12704:21;12696:66;;;;-1:-1:-1;;;12696:66:4;;34936:2:63;12696:66:4;;;34918:21:63;;;34955:18;;;34948:30;35014:34;34994:18;;;34987:62;35066:18;;12696:66:4;34734:356:63;12696:66:4;12784:10;12798:9;12784:23;12776:60;;;;-1:-1:-1;;;12776:60:4;;34583:2:63;12776:60:4;;;34565:21:63;34622:2;34602:18;;;34595:30;34661:26;34641:18;;;34634:54;34705:18;;12776:60:4;34381:348:63;12776:60:4;12872:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12858:48:4;:10;-1:-1:-1;;;;;12858:48:4;;12850:79;;;;-1:-1:-1;;;12850:79:4;;39866:2:63;12850:79:4;;;39848:21:63;39905:2;39885:18;;;39878:30;-1:-1:-1;;;39924:18:63;;;39917:48;39982:18;;12850:79:4;39664:342:63;12850:79:4;12954:9;:28;12950:265;;13018:15;:51;13034:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13018:51:4;;;;;;;;;;;;;;-1:-1:-1;13018:51:4;;;12998:17;;;:71;;;13083:64;;;;-1:-1:-1;;;13083:64:4;;41267:2:63;13083:64:4;;;41249:21:63;41306:2;41286:18;;;41279:30;-1:-1:-1;;;41325:18:63;;;41318:50;41385:18;;13083:64:4;41065:344:63;13083:64:4;13161:43;13186:4;:17;;;13161:24;:43::i;:::-;13284:78;13307:19;13328:12;13342:4;:19;;;13284:22;:78::i;:::-;13249:19;;;13225:137;13226:21;;;13225:137;13373:99;13416:19;;13436:12;13449:9;;13459:12;;13373:42;:99::i;:::-;13698:17;;13694:2;13681:9;:12;;13691:2;13681:12;:::i;:::-;:15;;;;:::i;:::-;:34;;;;:::i;:::-;13660:18;;;:55;13747:18;:16;:18::i;:::-;13725:19;;;:40;14699:19;;14678:18;;14657;;;;14635:19;;;;14583:22;;;;:12;:22;:::i;:::-;:49;;;:71;;;;:::i;:::-;:92;;;;:::i;:::-;:113;;;;:::i;:::-;:135;;;;:::i;:::-;14562:4;:18;;:156;;;;;15033:4;-1:-1:-1;;;;;15025:18:4;15048:4;:18;;;15104:32;;;15138:19;;15159:12;15173:9;;15184:12;;15198:4;:21;;;15254:18;:16;:18::i;:::-;15233:4;:18;;;:39;;;;:::i;:::-;15308:4;:19;;;15081:260;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15081:260:4;;;;;;;;;;;;;;-1:-1:-1;;;;;15081:260:4;-1:-1:-1;;;;;;15081:260:4;;;;;;;;;;15025:326;;;;15081:260;15025:326;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15001:20:4;;;14986:365;;;;;15401:18;:16;:18::i;:::-;15381:4;:19;;;:38;;;;:::i;:::-;15361:17;;;:58;15485:20;;;;15474:58;;;;;;;;;;;;;:::i;:::-;15430:4;:11;;15443:4;:27;;15429:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;;15547:27:4;;;;:34;:36;15542:133;;15605:59;15623:4;:11;;;15636:4;:27;;;15605:59;;;;;;;:::i;:::-;;;;;;;;15542:133;15701:12;;15696:1054;;15801:36;15786:4;:11;;;:51;;;;;;;;:::i;:::-;;:417;;;-1:-1:-1;15924:22:4;;;;:12;:22;:::i;:::-;15883:21;;;;:38;:90;;15924:49;;;;15883:90;:::i;:::-;15862:4;:17;;;:111;;15861:342;;;;-1:-1:-1;16015:35:4;16000:4;:11;;;:50;;;;;;;;:::i;:::-;;:130;;;-1:-1:-1;16089:41:4;16074:4;:11;;;:56;;;;;;;;:::i;:::-;;16000:130;15782:958;;;16373:19;;;;16319:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;16280:17;;;;-1:-1:-1;;;;;16228:420:4;;;;;;16414:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;16461:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;16506:10;16538:4;:21;;;16581:4;:17;;;16620:4;:27;;;16228:420;;;;;;;;;;;:::i;:::-;;;;;;;;16674:5;16681:1;16684:4;:11;;;16697:4;:27;;;16666:59;;;;;;;;;;;15782:958;16960:18;;16938;:16;:18::i;:::-;16916:4;:19;;;:40;;;;:::i;:::-;16863:22;;;;:12;:22;:::i;:::-;:49;;;:94;;;;:::i;:::-;:115;;;;:::i;:::-;16848:12;;;:130;;;16997:53;;17027:22;;;;:12;:22;:::i;16997:53::-;16988:62;;17077:26;17096:6;17077:18;:26::i;:::-;17060:14;;;:43;17204:6;17159:8;:42;17168:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17159:42:4;-1:-1:-1;;;;;17159:42:4;;;;;;;;;;;;;:51;;;;:::i;:::-;17114:8;:42;17123:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17114:42:4;;;;;;;;;;;;-1:-1:-1;17114:42:4;:96;17290:14;;;;17281:23;;:6;:23;:::i;:::-;17259:17;;;;-1:-1:-1;;;;;17250:27:4;;;;;:8;:27;;;;;;:55;;;;:::i;:::-;17229:17;;;;-1:-1:-1;;;;;17220:27:4;;;;;:8;:27;;;;;:85;17319:14;;;;:18;17315:167;;17457:14;;;;17436:17;;-1:-1:-1;;;;;17436:17:4;17427:27;;;;:8;:27;;;;;;:44;;17457:14;17427:44;:::i;:::-;17406:17;;-1:-1:-1;;;;;17406:17:4;17397:27;;;;:8;:27;;;;;:74;17315:167;17506:12;17521:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;17506:40;-1:-1:-1;17560:10:4;17573:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;17560:36;-1:-1:-1;17610:17:4;17630:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;17610:52;;17780:4;:19;;;17752:10;-1:-1:-1;;;;;17681:280:4;17717:4;:17;;;-1:-1:-1;;;;;17681:280:4;;17817:4;17839:2;17859:9;17886:4;:21;;;17925:4;:11;;;17954:6;17681:280;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;18073:9:4;18069:122;;18139:11;;;;18152:27;;;;;18125:4;;-1:-1:-1;18139:11:4;;-1:-1:-1;18152:27:4;-1:-1:-1;18117:63:4;;18069:122;18222:11;;;18200:38;;;;;;;;;-1:-1:-1;18200:38:4;;18208:4;;-1:-1:-1;18222:11:4;;-1:-1:-1;18200:38:4;-1:-1:-1;9838:8413:4;;;;;;;;;;;;;;:::o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;7302:658:4:-;7444:10;7410:23;7465:489;7489:6;:13;7485:1;:17;7465:489;;;7523:79;;;;;;;;;;;;;;;;;;7564:8;:17;7573:7;-1:-1:-1;;;;;7564:17:4;-1:-1:-1;;;;;7564:17:4;;;;;;;;;;;;;7583:4;7588:1;7583:7;;;;;;;;:::i;:::-;;;;;;;7592:6;7599:1;7592:9;;;;;;;;:::i;:::-;;;;;;;7523:11;:79::i;:::-;-1:-1:-1;;;;;7634:17:4;;7616:15;7634:17;;;:8;:17;;;;;;7684:9;;:6;;7691:1;;7684:9;;;;;;:::i;:::-;;;;;;;7673:7;:20;;7665:51;;;;-1:-1:-1;;;7665:51:4;;38470:2:63;7665:51:4;;;38452:21:63;38509:2;38489:18;;;38482:30;-1:-1:-1;;;38528:18:63;;;38521:48;38586:18;;7665:51:4;38268:342:63;7665:51:4;7760:6;7767:1;7760:9;;;;;;;;:::i;:::-;;;;;;;7750:7;:19;;;;:::i;:::-;-1:-1:-1;;;;;7730:17:4;;;;;;:8;:17;;;;;:39;;;;7802:7;;:4;;7807:1;;7802:7;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7802:12:4;7822:6;7829:1;7822:9;;;;;;;;:::i;:::-;;;;;;;7802:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7783:53;;;7858:7;7850:36;;;;-1:-1:-1;;;7850:36:4;;38817:2:63;7850:36:4;;;38799:21:63;38856:2;38836:18;;;38829:30;-1:-1:-1;;;38875:18:63;;;38868:46;38931:18;;7850:36:4;38615:340:63;7850:36:4;7924:4;7929:1;7924:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7905:38:4;7915:7;-1:-1:-1;;;;;7905:38:4;;7933:6;7940:1;7933:9;;;;;;;;:::i;:::-;;;;;;;7905:38;;;;25052:25:63;;25040:2;25025:18;;24906:177;7905:38:4;;;;;;;;7509:445;;7504:3;;;;;:::i;:::-;;;;7465:489;;;;7400:560;7302:658;;:::o;2383:404::-;1094:13:47;:11;:13::i;:::-;2523:12:4::1;:19;2507:5;:12;:35;2499:78;;;::::0;-1:-1:-1;;;2499:78:4;;35297:2:63;2499:78:4::1;::::0;::::1;35279:21:63::0;35336:2;35316:18;;;35309:30;35375:32;35355:18;;;35348:60;35425:18;;2499:78:4::1;35095:354:63::0;2499:78:4::1;2592:9;2587:194;2611:5;:12;2607:1;:16;2587:194;;;2677:12;2690:1;2677:15;;;;;;;;:::i;:::-;;;;;;;2644:20;:30;2665:5;2671:1;2665:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2644:30:4::1;-1:-1:-1::0;;;;;2644:30:4::1;;;;;;;;;;;;:48;;;;2711:59;2743:5;2749:1;2743:8;;;;;;;;:::i;:::-;;;;;;;2754:12;2767:1;2754:15;;;;;;;;:::i;:::-;;;;;;;2711:59;;;;;;-1:-1:-1::0;;;;;22931:32:63;;;;22913:51;;22995:2;22980:18;;22973:34;22901:2;22886:18;;22739:274;2711:59:4::1;;;;;;;;2625:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2587:194;;;;2383:404:::0;;:::o;23449:281::-;23553:13;;23531:7;;-1:-1:-1;;;23553:13:4;;;;23549:100;;-1:-1:-1;23637:1:4;;23449:281;-1:-1:-1;23449:281:4:o;23549:100::-;23694:13;;23710:3;;-1:-1:-1;;;23694:13:4;;;;23685:22;;:28;;23449:281;-1:-1:-1;;23449:281:4:o;23766:561::-;23885:7;;23933:22;;23959:30;;;;23933:56;23929:152;;;-1:-1:-1;24015:1:4;23929:152;;;-1:-1:-1;24057:13:4;23929:152;24090:26;24119:97;24128:22;;24152:63;24161:11;24152:63;24184:30;;;;24174:7;:40;:::i;:::-;24152:8;:63::i;24119:97::-;24288:18;;24090:126;;-1:-1:-1;24317:3:4;;24288:24;;:18;;24317:3;24288:24;:::i;:::-;24256:57;;:28;24266:18;24256:7;:28;:::i;:::-;:57;;;;:::i;:::-;24255:65;;;;:::i;:::-;24233:19;;:87;;;-1:-1:-1;;;24233:19:4;;-1:-1:-1;;;;;24233:19:4;:87;:::i;:::-;24226:94;23766:561;-1:-1:-1;;;;;23766:561:4:o;2009:216::-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;40567:2:63;2102:49:4::1;::::0;::::1;40549:21:63::0;40606:2;40586:18;;;40579:30;-1:-1:-1;;;40625:18:63;;;40618:46;40681:18;;2102:49:4::1;40365:340:63::0;2102:49:4::1;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;43351:13:63;;43333:32;;43421:4;43409:17;;43403:24;43396:4;43381:20;;43374:54;43484:4;43472:17;;43466:24;43459:4;43444:20;;43437:54;43547:4;43535:17;;43529:24;43522:4;43507:20;;43500:54;43610:4;43598:17;;43592:24;43585:4;43570:20;;43563:54;43661:4;43649:17;;43643:24;-1:-1:-1;;;;;43695:35:63;;43747:4;43732:20;;;14898:44;;;;43805:4;43783:20;;;;43779:31;43827:4;43812:20;;18611:29;-1:-1:-1;;;;;43868:3:63;43864:19;;;;43860:48;43925:4;43910:20;;18509:47;44020:4;44008:17;;;44002:24;48975:6;48959:23;44083:6;44068:22;;18414:31;43320:3;43305:19;;43125:972;2192:26:4::1;;;;;;;;2009:216:::0;:::o;18753:4174::-;19106:15;19123:12;19151:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19151:30:4;19213:18;:16;:18::i;:::-;19191:40;;19285:9;19267:27;;:15;:27;:::i;:::-;19241:23;;;:53;19722:10;19744:4;19722:27;19714:66;;;;-1:-1:-1;;;19714:66:4;;33875:2:63;19714:66:4;;;33857:21:63;33914:2;33894:18;;;33887:30;33953:28;33933:18;;;33926:56;33999:18;;19714:66:4;33673:350:63;19714:66:4;20200:8;:42;20209:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20200:42:4;;;;;;;;;;;;;;-1:-1:-1;20200:42:4;;20179:18;;;:63;20384:147;-1:-1:-1;;;20420:34:4;20384:147;;20468:12;;20482:9;;;;20493:12;;;;20507:14;;20384:147;;;:::i;:::-;;;;-1:-1:-1;;20384:147:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;20384:147:4;-1:-1:-1;;;;;;20384:147:4;;;;;;;;;;20372:9;;;:159;-1:-1:-1;;20581:20:4;;20636:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20636:37:4;20678:16;:39;;;20719:4;:9;;;20636:93;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20615:114:4;;-1:-1:-1;20615:114:4;-1:-1:-1;20615:114:4;20743:169;;20775:41;20808:7;20775:32;:41::i;:::-;20834:63;20851:36;20889:7;20834:16;:63::i;:::-;20992:7;20981:33;;;;;;;;;;;;:::i;:::-;20926:4;:21;;20949:4;:28;;20925:89;;;;;;;;;;;;;20541:484;;21170:21;21280:70;21305:19;;21280:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21326:12;21340:9;;21280:24;:70::i;:::-;21249:27;;;21205:145;;;21224:23;;;21205:145;;-1:-1:-1;21205:145:4;21364:140;;21407:82;21424:35;21461:4;:27;;;21407:16;:82::i;:::-;21522:4;:28;;;:56;;;;;21555:4;:23;;;21554:24;21522:56;21518:247;;;21662:88;21679:41;21722:4;:27;;;21662:16;:88::i;:::-;21156:619;22085:35;;;22134:4;:21;;;22169:4;:23;;;22255:18;:16;:18::i;:::-;22233:19;;:40;;;;:::i;:::-;22206:4;:23;;;:68;;;;:::i;:::-;22310:12;:22;;;;;;;;:::i;:::-;22049:293;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22049:293:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;22049:293:4;-1:-1:-1;;;;;;22049:293:4;;;;;;;;;;22037:9;;;:305;-1:-1:-1;;;;22401:22:4;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22401:37:4;22443:16;:40;;;22485:4;:9;;;22401:94;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22363:132;;;;22515:11;22510:107;;22546:56;22563:33;22598:3;22546:16;:56::i;:::-;-1:-1:-1;;22686:18:4;;;;22641:8;:42;22650:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22641:42:4;-1:-1:-1;;;;;22641:42:4;;;;;;;;;;;;;:63;22637:155;;;22720:61;22737:39;22720:61;;;;;;;;;;;;:16;:61::i;:::-;22810:4;:23;;;:80;;22857:33;22810:80;;;22836:18;22810:80;22892:4;:27;;;22802:118;;;;;18753:4174;;;;;;;;;;;;;:::o;535:209:31:-;-1:-1:-1;;;;;660:16:31;;605:14;660:16;;;:8;:16;;;;;;622:9;;660:25;;622:9;;660:25;:::i;:::-;-1:-1:-1;;;;;641:16:31;;;;;;:8;:16;;;;;;;;;:44;;;;700:37;25052:25:63;;;718:10:31;;700:37;;25025:18:63;700:37:31;;;;;;;595:149;535:209;:::o;25118:226:4:-;1094:13:47;:11;:13::i;:::-;25476:15:4;;25457;:34;25202:46:::1;;;::::0;-1:-1:-1;;;25202:46:4;;31699:2:63;25202:46:4::1;::::0;::::1;31681:21:63::0;31738:2;31718:18;;;31711:30;-1:-1:-1;;;31757:18:63;;;31750:48;31815:18;;25202:46:4::1;31497:342:63::0;25202:46:4::1;25258:15;:34:::0;;;25307:30:::1;::::0;25052:25:63;;;25307:30:4::1;::::0;25040:2:63;25025:18;25307:30:4::1;24906:177:63::0;5686:712:4;5798:10;5775:20;5843:25;;;:11;:25;;;;;;:50;;5871:15;;5843:50;:::i;:::-;-1:-1:-1;;;;;5903:25:4;;;;;;:11;:25;;;;;:42;;;5981:6;:21;5818:75;;-1:-1:-1;5963:39:4;;;5955:68;;;;-1:-1:-1;;;5955:68:4;;37770:2:63;5955:68:4;;;37752:21:63;37809:2;37789:18;;;37782:30;-1:-1:-1;;;37828:18:63;;;37821:46;37884:18;;5955:68:4;37568:340:63;5955:68:4;6034:38;6059:12;6034:24;:38::i;:::-;6088:9;6083:229;6103:26;;;6083:229;;;6205:1;6158:15;6205:1;6174:15;;6190:1;6174:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6158:35:4;;;;;;;;;;;;;;-1:-1:-1;6158:35:4;;;:49;6150:87;;;;-1:-1:-1;;;6150:87:4;;32046:2:63;6150:87:4;;;32028:21:63;32085:2;32065:18;;;32058:30;32124:27;32104:18;;;32097:55;32169:18;;6150:87:4;31844:349:63;6150:87:4;6289:12;6251:15;:35;6267:15;;6283:1;6267:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6251:35:4;;;;;;;;;;;;;;-1:-1:-1;6251:35:4;:50;;-1:-1:-1;;;;;;6251:50:4;;;;;;;;;;;6131:3;;;;:::i;:::-;;;;6083:229;;;;6345:12;-1:-1:-1;;;;;6327:64:4;;6359:15;;6376:14;6327:64;;;;;;;;:::i;:::-;;;;;;;;5765:633;;5686:712;;:::o;26518:433::-;1094:13:47;:11;:13::i;:::-;26624:45:4::1;::::0;-1:-1:-1;;;26624:45:4;;-1:-1:-1;;;;;20963:32:63;;;26624:45:4::1;::::0;::::1;20945:51:63::0;26624:12:4::1;:31;::::0;::::1;::::0;20918:18:63;;26624:45:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26616:90;;;::::0;-1:-1:-1;;;26616:90:4;;33160:2:63;26616:90:4::1;::::0;::::1;33142:21:63::0;;;33179:18;;;33172:30;33238:34;33218:18;;;33211:62;33290:18;;26616:90:4::1;32958:356:63::0;26616:90:4::1;-1:-1:-1::0;;;;;26734:22:4;;::::1;26716:15;26734:22:::0;;;:8:::1;:22;::::0;;;;;;;26766:26;;;;26841:17;;;;::::1;26832:27:::0;;;;;:37:::1;::::0;26734:22;;26832:37:::1;:::i;:::-;26811:17:::0;;-1:-1:-1;;;;;26811:17:4;;::::1;26802:27;::::0;;;:8:::1;:27;::::0;;;;;;;;:67;;;;26884:60;25052:25:63;;;26884:60:4;;::::1;::::0;::::1;::::0;25025:18:63;26884:60:4::1;;;;;;;26606:345;26518:433:::0;:::o;1469:134::-;1529:13;1553:43;;;;;;;;;;;;;;;;;;;1469:134;:::o;24363:719::-;24512:39;;-1:-1:-1;;;24512:39:4;;-1:-1:-1;;;;;20963:32:63;;;24512:39:4;;;20945:51:63;24451:35:4;;;;24512:12;:25;;;;20918:18:63;;24512:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24605:10;;;;;-1:-1:-1;;;;;24584:32:4;;;24561:20;24584:32;;;:20;:32;;;;;;24634:10;;24450:101;;-1:-1:-1;24450:101:4;;-1:-1:-1;24584:32:4;24634;24626:69;;;;-1:-1:-1;;;24626:69:4;;34230:2:63;24626:69:4;;;34212:21:63;34269:2;34249:18;;;34242:30;-1:-1:-1;;;34288:18:63;;;34281:54;34352:18;;24626:69:4;34028:348:63;24626:69:4;24713:10;;:26;-1:-1:-1;24713:26:4;24705:64;;;;-1:-1:-1;;;24705:64:4;;35656:2:63;24705:64:4;;;35638:21:63;35695:2;35675:18;;;35668:30;35734:27;35714:18;;;35707:55;35779:18;;24705:64:4;35454:349:63;24705:64:4;24787:17;24779:61;;;;-1:-1:-1;;;24779:61:4;;37410:2:63;24779:61:4;;;37392:21:63;37449:2;37429:18;;;37422:30;37488:33;37468:18;;;37461:61;37539:18;;24779:61:4;37208:355:63;24779:61:4;24879:26;;24858:17;;;;:47;;24850:86;;;;-1:-1:-1;;;24850:86:4;;39511:2:63;24850:86:4;;;39493:21:63;39550:2;39530:18;;;39523:30;39589:28;39569:18;;;39562:56;39635:18;;24850:86:4;39309:350:63;24850:86:4;24954:17;;;;:22;24946:59;;;;-1:-1:-1;;;24946:59:4;;32400:2:63;24946:59:4;;;32382:21:63;32439:2;32419:18;;;32412:30;32478:26;32458:18;;;32451:54;32522:18;;24946:59:4;32198:348:63;24946:59:4;25023:15;25015:60;;;;-1:-1:-1;;;25015:60:4;;30637:2:63;25015:60:4;;;30619:21:63;;;30656:18;;;30649:30;30715:34;30695:18;;;30688:62;30767:18;;25015:60:4;30435:356:63;25733:559:4;25638:10;-1:-1:-1;;;;;25652:9:4;25638:23;;25630:49;;;;-1:-1:-1;;;25630:49:4;;36707:2:63;25630:49:4;;;36689:21:63;36746:2;36726:18;;;36719:30;-1:-1:-1;;;36765:18:63;;;36758:43;36818:18;;25630:49:4;36505:337:63;25630:49:4;-1:-1:-1;;;;;25866:28:4;;::::1;25843:20;25866:28:::0;;;:15:::1;:28;::::0;;;;;::::1;25986:26:::0;25978:59:::1;;;::::0;-1:-1:-1;;;25978:59:4;;41267:2:63;25978:59:4::1;::::0;::::1;41249:21:63::0;41306:2;41286:18;;;41279:30;-1:-1:-1;;;41325:18:63;;;41318:50;41385:18;;25978:59:4::1;41065:344:63::0;25978:59:4::1;26093:39;::::0;-1:-1:-1;;;26093:39:4;;-1:-1:-1;;;;;20963:32:63;;;26093:39:4::1;::::0;::::1;20945:51:63::0;26048:40:4::1;::::0;26093:12:::1;:25:::0;;::::1;::::0;::::1;::::0;20918:18:63;;26093:39:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26150:15:4;;26047:85;;-1:-1:-1;26142:56:4::1;;;::::0;-1:-1:-1;;;26142:56:4;;34230:2:63;26142:56:4::1;::::0;::::1;34212:21:63::0;34269:2;34249:18;;;34242:30;-1:-1:-1;;;34288:18:63;;;34281:54;34352:18;;26142:56:4::1;34028:348:63::0;26142:56:4::1;26269:15:::0;;26208:77:::1;::::0;-1:-1:-1;;;26208:77:4;;-1:-1:-1;;;;;21273:15:63;;;26208:77:4::1;::::0;::::1;21255:34:63::0;21325:15;;;21305:18;;;21298:43;21357:18;;;21350:34;;;;26208:12:4::1;:33:::0;;::::1;::::0;::::1;::::0;21190:18:63;;26208:77:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25833:459;;25733:559:::0;;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;32753:2:63;2161:73:47::1;::::0;::::1;32735:21:63::0;32792:2;32772:18;;;32765:30;32831:34;32811:18;;;32804:62;-1:-1:-1;;;32882:18:63;;;32875:36;32928:19;;2161:73:47::1;32551:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;6950:316:4:-;7059:16;;;7073:1;7059:16;;;;;;;;;7032:24;;7059:16;;;;;;;;;-1:-1:-1;;7125:24:4;;;7147:1;7125:24;;;;;;;;;7032:43;;-1:-1:-1;7085:37:4;;7125:24;-1:-1:-1;7125:24:4;;;;;;;;;;;-1:-1:-1;7125:24:4;7085:64;;7172:6;7159:7;7167:1;7159:10;;;;;;;;:::i;:::-;;;;;;:19;;;;;7206:4;7188:12;7201:1;7188:15;;;;;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;7188:22:4;;;-1:-1:-1;;;;;7188:22:4;;;;;7220:39;7237:12;7251:7;7220:16;:39::i;922:277:40:-;1055:7;-1:-1:-1;;;;;1102:20:40;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;1129:20;:12;;:20;:::i;:::-;:26;;;1157:9;;1091:76;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1081:87;;;;;;:111;1074:118;;922:277;;;;;:::o;5054:112:62:-;5103:59;5158:2;5119:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5119:42:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5119:42:62;-1:-1:-1;;;5119:42:62;;;5103:15;:59::i;4833:114::-;4883:60;4939:2;4899:43;;;;;;25052:25:63;;25040:2;25025:18;;24906:177;4899:43:62;;;;-1:-1:-1;;4899:43:62;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:43:62;-1:-1:-1;;;4899:43:62;;;4883:15;:60::i;6298:136::-;6359:71;6422:2;6426;6375:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6375:54:62;;;;;;;;;;;;;;-1:-1:-1;;;;;6375:54:62;-1:-1:-1;;;6375:54:62;;;6359:15;:71::i;:::-;6298:136;;:::o;5888:130::-;5946:68;6006:2;6010;5962:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5962:51:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5962:51:62;-1:-1:-1;;;5962:51:62;;;5946:15;:68::i;1115:115::-;1168:58;1222:2;1184:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1184:41:62;;;;;;;;;;;;;;-1:-1:-1;;;;;1184:41:62;-1:-1:-1;;;1184:41:62;;;1168:15;:58::i;2483:571:41:-;2603:13;2652:9;:5;2660:1;2652:9;:::i;:::-;2640:1;:8;:21;;2632:60;;;;-1:-1:-1;;;2632:60:41;;40912:2:63;2632:60:41;;;40894:21:63;40951:2;40931:18;;;40924:30;40990:28;40970:18;;;40963:56;41036:18;;2632:60:41;40710:350:63;2632:60:41;-1:-1:-1;2787:21:41;2804:2;2787:21;2781:28;-1:-1:-1;;;;;;2936:79:41;;2483:571::o;7966:1235:4:-;8160:51;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8160:51:4;8213:22;8289;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8278:64:4;;8347:5;8278:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8392:34;;;;8247:108;;-1:-1:-1;8373:8:4;:53;;8365:90;;;;-1:-1:-1;;;8365:90:4;;36355:2:63;8365:90:4;;;36337:21:63;36394:2;36374:18;;;36367:30;36433:25;36413:18;;;36406:53;36476:18;;8365:90:4;36153:347:63;8365:90:4;8497:33;;8474:56;;;8466:95;;;;-1:-1:-1;;;8466:95:4;;38115:2:63;8466:95:4;;;38097:21:63;38154:2;38134:18;;;38127:30;38193:28;38173:18;;;38166:56;38239:18;;8466:95:4;37913:350:63;8466:95:4;8616:39;;;;8579:33;;:76;;8571:114;;;;-1:-1:-1;;;8571:114:4;;33521:2:63;8571:114:4;;;33503:21:63;33560:2;33540:18;;;33533:30;33599:27;33579:18;;;33572:55;33644:18;;8571:114:4;33319:349:63;8571:114:4;8765:14;8713:22;;;;:12;:22;:::i;:::-;:49;;;:66;;;;:::i;:::-;8696:83;-1:-1:-1;8790:25:4;8818:89;8696:83;8875:22;;;;:12;:22;:::i;8818:89::-;8790:117;-1:-1:-1;9110:8:4;:42;9119:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9110:42:4;-1:-1:-1;;;;;9110:42:4;;;;;;;;;;;;;9089:17;:63;;9081:113;;;;-1:-1:-1;;;9081:113:4;;40213:2:63;9081:113:4;;;40195:21:63;40252:2;40232:18;;;40225:30;40291:27;40271:18;;;40264:55;40336:18;;9081:113:4;40011:349:63;9081:113:4;8237:964;7966:1235;;;;;;:::o;510:1245:43:-;1281:26;1540:54;1557:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;:::-;1540:16;:54::i;:::-;1482:43;1499:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;1482:43::-;1437:30;1454:12;;1437:16;:30::i;:::-;1395:27;1412:9;;1395:16;:27::i;:::-;1336:44;1359:19;;1336:16;:44::i;:::-;1310:70;;:11;:70;:::i;:::-;:112;;;;:::i;:::-;:157;;;;:::i;:::-;:215;;;;:::i;:::-;:284;;;;:::i;:::-;1281:313;-1:-1:-1;1707:8:43;1685:37;;1677:71;;;;-1:-1:-1;;;1677:71:43;;39162:2:63;1677:71:43;;;39144:21:63;39201:2;39181:18;;;39174:30;-1:-1:-1;;;39220:18:63;;;39213:50;39280:18;;1677:71:43;38960:344:63;1359:130:47;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;37049:2:63;1414:68:47;;;37031:21:63;;;37068:18;;;37061:30;37127:34;37107:18;;;37100:62;37179:18;;1414:68:47;36847:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;30298:172:62:-;30377:89;30450:2;30454;30458;30462;30393:72;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30393:72:62;;;;;;;;;;;;;;-1:-1:-1;;;;;30393:72:62;-1:-1:-1;;;30393:72:62;;;30377:15;:89::i;589:104:61:-;647:7;677:1;673;:5;:13;;685:1;673:13;;;681:1;673:13;666:20;589:104;-1:-1:-1;;;589:104:61:o;4713:125:38:-;4781:50;4809:4;563;4781:27;:50::i;23074:339:4:-;23165:17;23196:6;23204:3;23185:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23165:43;;23218:38;23251:4;23218:32;:38::i;:::-;23312:4;23306:11;23355:2;23349:4;23345:13;23388:8;23379:7;23372:25;3558:929:38;3738:21;3769:16;3795;3829:23;3856:26;3869:12;3856;:26::i;:::-;3828:54;-1:-1:-1;3892:24:38;3919:70;3935:19;3956:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;3919:15;:70::i;:::-;3892:97;-1:-1:-1;4087:22:38;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4087:37:38;-1:-1:-1;;;4202:20:38;:12;;:20;:::i;:::-;4224:16;1295:18;;;;;;;;;;;;;-1:-1:-1;;;1295:18:38;;;1318:14;;;;;;;;;;;;;;;;;1203;;;;;;;;;;;;;;;;;1162:56;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1162:56:38;;;;;;;;;;1269:90;;;;1162:56;1269:90;;:::i;:::-;;;;;;;;;;;;;1491:29;;;;;;4266:10;4278:9;;4138:159;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4138:159:38;;;;;;;;;;;;;;-1:-1:-1;;;;;4138:159:38;-1:-1:-1;;;;;;4138:159:38;;;;;;;;;;4087:211;;;;4138:159;4087:211;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4061:237:38;;-1:-1:-1;4061:237:38;-1:-1:-1;4308:143:38;;;;4421:3;4410:30;;;;;;;;;;;;:::i;:::-;4389:51;;-1:-1:-1;4389:51:38;-1:-1:-1;4308:143:38;4460:20;4476:3;4460:15;:20::i;:::-;3818:669;;3558:929;;;;;;;;:::o;176:288:62:-;264:14;;129:42;373:2;360:16;;240:21;;264:14;360:16;129:42;400:5;389:68;380:77;;335:126;;176:288;:::o;1969:153:43:-;2038:7;2091:22;2111:2;-1:-1:-1;;2091:22:43;:::i;:::-;2071:15;:3;2084:2;2071:15;:::i;:::-;2064:51;;2070:44;2064:2;:51;:::i;429:173:41:-;531:6;517:4;:11;:20;513:83;;;564:20;;429:173::o;1829:229:38:-;1945:23;2022:28;2036:13;;;;:3;:13;:::i;:::-;2022;:28::i;:::-;1998:53;;;;;;25052:25:63;;25040:2;25025:18;;24906:177;1998:53:38;;;;;;;;;;;;;1985:66;;1829:229;;;:::o;4844:291::-;4931:7;4957:171;4968:159;;;;;;;;5002:4;4968:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;4968:159:38;;;;;;;5057:12;5286:9;;5141:170;5057:12;4968:159;;;;5103:9;-1:-1:-1;;;;;4968:159:38;;;;4957:10;:171::i;5644:478::-;5723:7;1421:14;;;;;;;;;;;;;;;;;1411:25;;;;;;;;5823:16;;;5857:24;;;5899:30;;;;5947:15;;;;;;;;:::i;:::-;5980:13;;;;;;;;:::i;:::-;6011;;;;;;;;:::i;:::-;6052:17;;;;:3;:17;:::i;:::-;6042:28;;;;;;;:::i;:::-;;;;;;;;;5759:355;;;;;;;;;6088:12;;;;;5759:355;;25953:25:63;;;26009:2;25994:18;;25987:34;;;;26052:2;26037:18;;26030:34;;;;26095:2;26080:18;;26073:34;;;;-1:-1:-1;;;;;26182:15:63;;;26176:3;26161:19;;26154:44;26235:15;;26134:3;26214:19;;26207:44;26288:15;26282:3;26267:19;;26260:44;26335:3;26320:19;;26313:35;26379:3;26364:19;;26357:35;25940:3;25925:19;;25582:816;5759:355:38;;;;;;;;;;;;;5749:366;;;;;;5742:373;;5644:478;;;:::o;5317:321::-;5385:7;1713:109;5504:3;:8;;;5488:26;;;;;;5548:3;:11;;;5532:29;;;;;;5579:3;:11;;;5608:3;:21;;;5421:209;;;;;;;;;;;25347:25:63;;;25403:2;25388:18;;25381:34;;;;25446:2;25431:18;;25424:34;;;;25489:2;25474:18;;25467:34;-1:-1:-1;;;;;25538:32:63;25532:3;25517:19;;25510:61;25334:3;25319:19;;25088:489;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:63:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:681::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;364:68;380:51;428:2;380:51;:::i;:::-;364:68;:::i;:::-;454:3;478:2;473:3;466:15;506:2;501:3;497:12;490:19;;541:2;533:6;529:15;593:3;588:2;582;579:1;575:10;567:6;563:23;559:32;556:41;553:61;;;610:1;607;600:12;553:61;632:1;642:163;656:2;653:1;650:9;642:163;;;713:17;;701:30;;751:12;;;;783;;;;674:1;667:9;642:163;;;-1:-1:-1;823:5:63;;153:681;-1:-1:-1;;;;;;;153:681:63:o;839:164::-;915:13;;964;;957:21;947:32;;937:60;;993:1;990;983:12;1008:347;1059:8;1069:6;1123:3;1116:4;1108:6;1104:17;1100:27;1090:55;;1141:1;1138;1131:12;1090:55;-1:-1:-1;1164:20:63;;-1:-1:-1;;;;;1196:30:63;;1193:50;;;1239:1;1236;1229:12;1193:50;1276:4;1268:6;1264:17;1252:29;;1328:3;1321:4;1312:6;1304;1300:19;1296:30;1293:39;1290:59;;;1345:1;1342;1335:12;1290:59;1008:347;;;;;:::o;1360:496::-;1413:5;1466:3;1459:4;1451:6;1447:17;1443:27;1433:55;;1484:1;1481;1474:12;1433:55;1513:6;1507:13;-1:-1:-1;;;;;1535:2:63;1532:26;1529:52;;;1561:18;;:::i;:::-;1605:55;1648:2;1629:13;;-1:-1:-1;;1625:27:63;1654:4;1621:38;1605:55;:::i;:::-;1685:2;1676:7;1669:19;1731:3;1724:4;1719:2;1711:6;1707:15;1703:26;1700:35;1697:55;;;1748:1;1745;1738:12;1697:55;1761:64;1822:2;1815:4;1806:7;1802:18;1795:4;1787:6;1783:17;1761:64;:::i;:::-;1843:7;1360:496;-1:-1:-1;;;;1360:496:63:o;1861:165::-;1930:5;1975:3;1966:6;1961:3;1957:16;1953:26;1950:46;;;1992:1;1989;1982:12;1950:46;-1:-1:-1;2014:6:63;1861:165;-1:-1:-1;1861:165:63:o;2031:160::-;2096:5;2141:2;2132:6;2127:3;2123:16;2119:25;2116:45;;;2157:1;2154;2147:12;2196:159;2263:20;;2323:6;2312:18;;2302:29;;2292:57;;2345:1;2342;2335:12;2360:156;2426:20;;2486:4;2475:16;;2465:27;;2455:55;;2506:1;2503;2496:12;2521:175;2588:20;;-1:-1:-1;;;;;2637:34:63;;2627:45;;2617:73;;2686:1;2683;2676:12;2701:247;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;2953:323::-;3029:6;3037;3090:2;3078:9;3069:7;3065:23;3061:32;3058:52;;;3106:1;3103;3096:12;3058:52;3145:9;3132:23;3164:31;3189:5;3164:31;:::i;:::-;3214:5;3266:2;3251:18;;;;3238:32;;-1:-1:-1;;;2953:323:63:o;3281:396::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:52;;;3434:1;3431;3424:12;3386:52;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3599:2:63;3584:18;;3571:32;3612:33;3571:32;3612:33;:::i;:::-;3664:7;3654:17;;;3281:396;;;;;:::o;3682:615::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3885:9;3872:23;-1:-1:-1;;;;;3955:2:63;3947:6;3944:14;3941:34;;;3971:1;3968;3961:12;3941:34;4009:6;3998:9;3994:22;3984:32;;4054:7;4047:4;4043:2;4039:13;4035:27;4025:55;;4076:1;4073;4066:12;4025:55;4116:2;4103:16;4142:2;4134:6;4131:14;4128:34;;;4158:1;4155;4148:12;4128:34;4211:7;4206:2;4196:6;4193:1;4189:14;4185:2;4181:23;4177:32;4174:45;4171:65;;;4232:1;4229;4222:12;4171:65;4263:2;4255:11;;;;;4285:6;;-1:-1:-1;3682:615:63;;-1:-1:-1;;;;3682:615:63:o;4302:1242::-;4428:6;4436;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;4545:9;4532:23;-1:-1:-1;;;;;4615:2:63;4607:6;4604:14;4601:34;;;4631:1;4628;4621:12;4601:34;4669:6;4658:9;4654:22;4644:32;;4714:7;4707:4;4703:2;4699:13;4695:27;4685:55;;4736:1;4733;4726:12;4685:55;4772:2;4759:16;4794:4;4818:68;4834:51;4882:2;4834:51;:::i;4818:68::-;4908:3;4932:2;4927:3;4920:15;4960:2;4955:3;4951:12;4944:19;;4991:2;4987;4983:11;5039:7;5034:2;5028;5025:1;5021:10;5017:2;5013:19;5009:28;5006:41;5003:61;;;5060:1;5057;5050:12;5003:61;5082:1;5073:10;;5092:238;5106:2;5103:1;5100:9;5092:238;;;5177:3;5164:17;5194:31;5219:5;5194:31;:::i;:::-;5238:18;;5124:1;5117:9;;;;;5276:12;;;;5308;;5092:238;;;-1:-1:-1;5349:5:63;-1:-1:-1;;5392:18:63;;5379:32;;-1:-1:-1;;5423:16:63;;;5420:36;;;5452:1;5449;5442:12;5420:36;;5475:63;5530:7;5519:8;5508:9;5504:24;5475:63;:::i;:::-;5465:73;;;4302:1242;;;;;:::o;5549:1250::-;5683:6;5691;5744:2;5732:9;5723:7;5719:23;5715:32;5712:52;;;5760:1;5757;5750:12;5712:52;5800:9;5787:23;-1:-1:-1;;;;;5870:2:63;5862:6;5859:14;5856:34;;;5886:1;5883;5876:12;5856:34;5924:6;5913:9;5909:22;5899:32;;5969:7;5962:4;5958:2;5954:13;5950:27;5940:55;;5991:1;5988;5981:12;5940:55;6027:2;6014:16;6049:4;6073:68;6089:51;6137:2;6089:51;:::i;6073:68::-;6163:3;6187:2;6182:3;6175:15;6215:2;6210:3;6206:12;6199:19;;6246:2;6242;6238:11;6294:7;6289:2;6283;6280:1;6276:10;6272:2;6268:19;6264:28;6261:41;6258:61;;;6315:1;6312;6305:12;6258:61;6337:1;6328:10;;6347:238;6361:2;6358:1;6355:9;6347:238;;;6432:3;6419:17;6449:31;6474:5;6449:31;:::i;:::-;6493:18;;6379:1;6372:9;;;;;6531:12;;;;6563;;6347:238;;6804:202;6871:6;6924:2;6912:9;6903:7;6899:23;6895:32;6892:52;;;6940:1;6937;6930:12;6892:52;6963:37;6990:9;6963:37;:::i;7011:414::-;7096:6;7104;7157:2;7145:9;7136:7;7132:23;7128:32;7125:52;;;7173:1;7170;7163:12;7125:52;7196:37;7223:9;7196:37;:::i;:::-;7186:47;;7277:2;7266:9;7262:18;7256:25;-1:-1:-1;;;;;7296:6:63;7293:30;7290:50;;;7336:1;7333;7326:12;7290:50;7359:60;7411:7;7402:6;7391:9;7387:22;7359:60;:::i;7430:286::-;7488:6;7541:2;7529:9;7520:7;7516:23;7512:32;7509:52;;;7557:1;7554;7547:12;7509:52;7583:23;;-1:-1:-1;;;;;;7635:32:63;;7625:43;;7615:71;;7682:1;7679;7672:12;7721:414;7806:6;7814;7867:2;7855:9;7846:7;7842:23;7838:32;7835:52;;;7883:1;7880;7873:12;7835:52;7916:9;7910:16;-1:-1:-1;;;;;7941:6:63;7938:30;7935:50;;;7981:1;7978;7971:12;7935:50;8004:60;8056:7;8047:6;8036:9;8032:22;8004:60;:::i;:::-;7994:70;;;8083:46;8125:2;8114:9;8110:18;8083:46;:::i;:::-;8073:56;;7721:414;;;;;:::o;8408:492::-;8516:6;8524;8577:2;8565:9;8556:7;8552:23;8548:32;8545:52;;;8593:1;8590;8583:12;8545:52;8625:9;8619:16;8664:1;8657:5;8654:12;8644:40;;8680:1;8677;8670:12;8644:40;8752:2;8737:18;;8731:25;8703:5;;-1:-1:-1;;;;;;8768:30:63;;8765:50;;;8811:1;8808;8801:12;8905:1533;9120:6;9128;9136;9144;9152;9160;9168;9176;9184;9192;9245:3;9233:9;9224:7;9220:23;9216:33;9213:53;;;9262:1;9259;9252:12;9213:53;9302:9;9289:23;-1:-1:-1;;;;;9372:2:63;9364:6;9361:14;9358:34;;;9388:1;9385;9378:12;9358:34;9427:58;9477:7;9468:6;9457:9;9453:22;9427:58;:::i;:::-;9504:8;;-1:-1:-1;9401:84:63;-1:-1:-1;9592:2:63;9577:18;;9564:32;;-1:-1:-1;9608:16:63;;;9605:36;;;9637:1;9634;9627:12;9605:36;9660:74;9726:7;9715:8;9704:9;9700:24;9660:74;:::i;:::-;9650:84;;9787:2;9776:9;9772:18;9759:32;9743:48;;9816:2;9806:8;9803:16;9800:36;;;9832:1;9829;9822:12;9800:36;9871:60;9923:7;9912:8;9901:9;9897:24;9871:60;:::i;:::-;9950:8;;-1:-1:-1;9845:86:63;-1:-1:-1;10038:2:63;10023:18;;10010:32;;-1:-1:-1;10054:16:63;;;10051:36;;;10083:1;10080;10073:12;10051:36;;10122:60;10174:7;10163:8;10152:9;10148:24;10122:60;:::i;:::-;10201:8;;-1:-1:-1;10096:86:63;-1:-1:-1;10255:73:63;;-1:-1:-1;10320:7:63;10314:3;10299:19;;10255:73;:::i;:::-;10245:83;;10375:3;10364:9;10360:19;10347:33;10337:43;;10427:3;10416:9;10412:19;10399:33;10389:43;;8905:1533;;;;;;;;;;;;;:::o;10443:1319::-;10604:6;10612;10620;10628;10636;10644;10652;10660;10713:3;10701:9;10692:7;10688:23;10684:33;10681:53;;;10730:1;10727;10720:12;10681:53;10770:9;10757:23;-1:-1:-1;;;;;10840:2:63;10832:6;10829:14;10826:34;;;10856:1;10853;10846:12;10826:34;10895:58;10945:7;10936:6;10925:9;10921:22;10895:58;:::i;:::-;10972:8;;-1:-1:-1;10869:84:63;-1:-1:-1;11054:2:63;11039:18;;11026:32;;-1:-1:-1;11111:2:63;11096:18;;11083:32;;-1:-1:-1;11127:16:63;;;11124:36;;;11156:1;11153;11146:12;11124:36;11179:74;11245:7;11234:8;11223:9;11219:24;11179:74;:::i;:::-;11169:84;;11306:2;11295:9;11291:18;11278:32;11262:48;;11335:2;11325:8;11322:16;11319:36;;;11351:1;11348;11341:12;11319:36;11390:60;11442:7;11431:8;11420:9;11416:24;11390:60;:::i;:::-;11469:8;;-1:-1:-1;11364:86:63;-1:-1:-1;11557:3:63;11542:19;;11529:33;;-1:-1:-1;11574:16:63;;;11571:36;;;11603:1;11600;11593:12;11571:36;;11642:60;11694:7;11683:8;11672:9;11668:24;11642:60;:::i;:::-;10443:1319;;;;-1:-1:-1;10443:1319:63;;-1:-1:-1;10443:1319:63;;;;;;11721:8;-1:-1:-1;;;10443:1319:63:o;11767:630::-;11871:6;11924:3;11912:9;11903:7;11899:23;11895:33;11892:53;;;11941:1;11938;11931:12;11892:53;11974:2;11968:9;12016:3;12008:6;12004:16;12086:6;12074:10;12071:22;-1:-1:-1;;;;;12038:10:63;12035:34;12032:62;12029:88;;;12097:18;;:::i;:::-;12137:10;12133:2;12126:22;;12178:9;12172:16;12164:6;12157:32;12243:2;12232:9;12228:18;12222:25;12217:2;12209:6;12205:15;12198:50;12302:2;12291:9;12287:18;12281:25;12276:2;12268:6;12264:15;12257:50;12361:2;12350:9;12346:18;12340:25;12335:2;12327:6;12323:15;12316:50;12385:6;12375:16;;;11767:630;;;;:::o;12402:856::-;12493:6;12546:3;12534:9;12525:7;12521:23;12517:33;12514:53;;;12563:1;12560;12553:12;12514:53;12589:22;;:::i;:::-;12647:9;12634:23;12627:5;12620:38;12718:2;12707:9;12703:18;12690:32;12685:2;12678:5;12674:14;12667:56;12783:2;12772:9;12768:18;12755:32;12750:2;12743:5;12739:14;12732:56;12848:2;12837:9;12833:18;12820:32;12815:2;12808:5;12804:14;12797:56;12914:3;12903:9;12899:19;12886:33;12880:3;12873:5;12869:15;12862:58;12953:39;12987:3;12976:9;12972:19;12953:39;:::i;:::-;12947:3;12940:5;12936:15;12929:64;13026:37;13058:3;13047:9;13043:19;13026:37;:::i;:::-;13020:3;13013:5;13009:15;13002:62;13097:38;13130:3;13119:9;13115:19;13097:38;:::i;:::-;13091:3;13084:5;13080:15;13073:63;13155:3;13190:37;13223:2;13212:9;13208:18;13190:37;:::i;:::-;13174:14;;;13167:61;13178:5;12402:856;-1:-1:-1;;;12402:856:63:o;13263:929::-;13366:6;13374;13418:9;13409:7;13405:23;13448:3;13444:2;13440:12;13437:32;;;13465:1;13462;13455:12;13437:32;13489:4;13485:2;13481:13;13478:33;;;13507:1;13504;13497:12;13478:33;;13533:22;;:::i;:::-;13584:9;13578:16;13571:5;13564:31;13648:2;13637:9;13633:18;13627:25;13622:2;13615:5;13611:14;13604:49;13706:2;13695:9;13691:18;13685:25;13680:2;13673:5;13669:14;13662:49;13764:2;13753:9;13749:18;13743:25;13738:2;13731:5;13727:14;13720:49;13823:3;13812:9;13808:19;13802:26;13796:3;13789:5;13785:15;13778:51;13874:3;13863:9;13859:19;13853:26;13888:33;13913:7;13888:33;:::i;:::-;13948:3;13937:15;;13930:32;14007:3;13992:19;;13986:26;14021:33;13986:26;14021:33;:::i;:::-;14081:3;14070:15;;14063:32;14074:5;-1:-1:-1;14138:48:63;14180:4;14165:20;;14138:48;:::i;14197:180::-;14256:6;14309:2;14297:9;14288:7;14284:23;14280:32;14277:52;;;14325:1;14322;14315:12;14277:52;-1:-1:-1;14348:23:63;;14197:180;-1:-1:-1;14197:180:63:o;14382:457::-;14479:6;14487;14540:2;14528:9;14519:7;14515:23;14511:32;14508:52;;;14556:1;14553;14546:12;14508:52;14592:9;14579:23;14569:33;;14653:2;14642:9;14638:18;14625:32;-1:-1:-1;;;;;14672:6:63;14669:30;14666:50;;;14712:1;14709;14702:12;14666:50;14735:22;;14791:3;14773:16;;;14769:26;14766:46;;;14808:1;14805;14798:12;14953:266;15041:6;15036:3;15029:19;15093:6;15086:5;15079:4;15074:3;15070:14;15057:43;-1:-1:-1;15145:1:63;15120:16;;;15138:4;15116:27;;;15109:38;;;;15201:2;15180:15;;;-1:-1:-1;;15176:29:63;15167:39;;;15163:50;;14953:266::o;15224:257::-;15265:3;15303:5;15297:12;15330:6;15325:3;15318:19;15346:63;15402:6;15395:4;15390:3;15386:14;15379:4;15372:5;15368:16;15346:63;:::i;:::-;15463:2;15442:15;-1:-1:-1;;15438:29:63;15429:39;;;;15470:4;15425:50;;15224:257;-1:-1:-1;;15224:257:63:o;15486:243::-;15573:1;15566:5;15563:12;15553:143;;15618:10;15613:3;15609:20;15606:1;15599:31;15653:4;15650:1;15643:15;15681:4;15678:1;15671:15;15553:143;15705:18;;15486:243::o;15734:884::-;15800:3;15846:5;15833:19;15861:33;15886:7;15861:33;:::i;:::-;-1:-1:-1;;;;;15953:16:63;;;15941:29;;16018:4;16007:16;;15994:30;;16033:33;15994:30;16033:33;:::i;:::-;16098:16;16091:4;16082:14;;16075:40;16171:4;16160:16;;;16147:30;16131:14;;;16124:54;16234:4;16223:16;;;16210:30;16194:14;;;16187:54;16297:4;16286:16;;;16273:30;16257:14;;;16250:54;16347:55;16396:4;16385:16;;16164:5;16347:55;:::i;:::-;16434:4;16427;16422:3;16418:14;16411:28;16460:69;16523:4;16518:3;16514:14;16500:12;16486;16460:69;:::i;:::-;16448:81;;;16585:4;16578:5;16574:16;16561:30;16554:4;16549:3;16545:14;16538:54;16608:4;16601:11;;;15734:884;;;;:::o;16623:1048::-;16684:3;16712:6;16752:5;16739:19;16734:3;16727:32;16815:4;16808:5;16804:16;16791:30;16784:4;16779:3;16775:14;16768:54;16878:4;16871:5;16867:16;16854:30;16847:4;16842:3;16838:14;16831:54;16933:4;16926:5;16922:16;16909:30;16948:33;16973:7;16948:33;:::i;:::-;-1:-1:-1;;;;;17051:16:63;;;17044:4;17035:14;;17028:40;17116:4;17105:16;;17092:30;;17131:33;17092:30;17131:33;:::i;:::-;17196:16;17189:4;17180:14;;17173:40;17261:4;17250:16;;17237:30;17276:33;17237:30;17276:33;:::i;:::-;-1:-1:-1;;;;;14910:31:63;17355:4;17346:14;;14898:44;17404:55;17453:4;17442:16;;17446:5;17404:55;:::i;:::-;17491:2;17484:4;17479:3;17475:14;17468:26;17515:67;17578:2;17573:3;17569:12;17555;17541;17515:67;:::i;:::-;17503:79;;;;17638:4;17631:5;17627:16;17614:30;17607:4;17602:3;17598:14;17591:54;17661:4;17654:11;;;16623:1048;;;;:::o;17676:680::-;17740:3;17797:5;17784:19;17842:5;17826:14;17822:26;17903:3;17899:8;17895:2;17891:17;17871:18;17867:42;17857:70;;17923:1;17920;17913:12;17857:70;17948:4;17943:3;17936:17;17974:89;18057:4;18052:3;18048:14;18040:5;18020:18;18016:30;17974:89;:::i;:::-;17962:101;-1:-1:-1;18124:4:63;18113:16;;18100:30;-1:-1:-1;;18175:17:63;;18149:44;;18139:72;;18207:1;18204;18197:12;18139:72;18253:3;18247:4;18243:14;18236:4;18231:3;18227:14;18220:38;18274:76;18345:4;18337:5;18315:20;18311:32;18274:76;:::i;:::-;18267:83;17676:680;-1:-1:-1;;;;;;17676:680:63:o;18647:271::-;18830:6;18822;18817:3;18804:33;18786:3;18856:16;;18881:13;;;18856:16;18647:271;-1:-1:-1;18647:271:63:o;18923:274::-;19052:3;19090:6;19084:13;19106:53;19152:6;19147:3;19140:4;19132:6;19128:17;19106:53;:::i;:::-;19175:16;;;;;18923:274;-1:-1:-1;;18923:274:63:o;19202:940::-;19631:3;19669:6;19663:13;19685:53;19731:6;19726:3;19719:4;19711:6;19707:17;19685:53;:::i;:::-;-1:-1:-1;;;19760:16:63;;;19785:18;;;19828:13;;19850:65;19828:13;19902:1;19891:13;;19884:4;19872:17;;19850:65;:::i;:::-;-1:-1:-1;;;19978:1:63;19934:20;;;;19970:10;;;19963:23;20011:13;;20033:62;20011:13;20082:1;20074:10;;20067:4;20055:17;;20033:62;:::i;:::-;20115:17;20134:1;20111:25;;19202:940;-1:-1:-1;;;;;19202:940:63:o;20147:437::-;-1:-1:-1;;;20402:3:63;20395:35;20377:3;20459:6;20453:13;20475:62;20530:6;20525:2;20520:3;20516:12;20509:4;20501:6;20497:17;20475:62;:::i;:::-;20557:16;;;;20575:2;20553:25;;20147:437;-1:-1:-1;;20147:437:63:o;21395:668::-;-1:-1:-1;;;;;21754:15:63;;;21736:34;;21806:15;;;21801:2;21786:18;;21779:43;21858:15;;21853:2;21838:18;;21831:43;-1:-1:-1;;;;;;21910:33:63;;21905:2;21890:18;;21883:61;21685:3;21670:19;;21953:60;22008:3;21993:19;;21985:6;21953:60;:::i;:::-;22050:6;22044:3;22033:9;22029:19;22022:35;21395:668;;;;;;;;;:::o;22068:666::-;-1:-1:-1;;;;;22391:15:63;;;22373:34;;22443:15;;;22438:2;22423:18;;22416:43;22495:15;;22490:2;22475:18;;22468:43;-1:-1:-1;;;;;;22547:33:63;;22542:2;22527:18;;22520:61;22612:3;22597:19;;22590:35;;;22662:3;22353;22641:19;;22634:32;;;22316:4;;22683:45;;22708:19;;22700:6;22683:45;:::i;:::-;22675:53;22068:666;-1:-1:-1;;;;;;;;22068:666:63:o;23018:412::-;23260:1;23256;23251:3;23247:11;23243:19;23235:6;23231:32;23220:9;23213:51;23300:6;23295:2;23284:9;23280:18;23273:34;23343:2;23338;23327:9;23323:18;23316:30;23194:4;23363:61;23420:2;23409:9;23405:18;23397:6;23389;23363:61;:::i;23435:784::-;23663:2;23675:21;;;23648:18;;23731:22;;;23615:4;23810:6;23784:2;23769:18;;23615:4;23844:304;23858:6;23855:1;23852:13;23844:304;;;23933:6;23920:20;23953:31;23978:5;23953:31;:::i;:::-;-1:-1:-1;;;;;24009:31:63;23997:44;;24064:4;24123:15;;;;24088:12;;;;24037:1;23873:9;23844:304;;;-1:-1:-1;24199:4:63;24184:20;;;;24177:36;;;;-1:-1:-1;24165:3:63;23435:784;-1:-1:-1;;;23435:784:63:o;24416:485::-;24673:6;24666:14;24659:22;24648:9;24641:41;24718:6;24713:2;24702:9;24698:18;24691:34;24734:59;24789:2;24778:9;24774:18;24766:6;24734:59;:::i;:::-;24829:3;24824:2;24813:9;24809:18;24802:31;24622:4;24850:45;24890:3;24879:9;24875:19;24867:6;24850:45;:::i;26403:217::-;26550:2;26539:9;26532:21;26513:4;26570:44;26610:2;26599:9;26595:18;26587:6;26570:44;:::i;26625:589::-;26906:3;26895:9;26888:22;26869:4;26933:45;26973:3;26962:9;26958:19;26950:6;26933:45;:::i;:::-;27028:6;27021:14;27014:22;27009:2;26998:9;26994:18;26987:50;27073:6;27068:2;27057:9;27053:18;27046:34;27128:9;27120:6;27116:22;27111:2;27100:9;27096:18;27089:50;27156:52;27201:6;27193;27156:52;:::i;:::-;27148:60;26625:589;-1:-1:-1;;;;;;;26625:589:63:o;27449:331::-;27624:50;27664:9;27656:6;27624:50;:::i;:::-;27710:2;27705;27694:9;27690:18;27683:30;27605:4;27730:44;27770:2;27759:9;27755:18;27747:6;27730:44;:::i;27785:1340::-;28261:4;28290:3;28320:2;28309:9;28302:21;28346:61;28403:2;28392:9;28388:18;28380:6;28372;28346:61;:::i;:::-;28332:75;;28455:9;28447:6;28443:22;28438:2;28427:9;28423:18;28416:50;28489:55;28537:6;28529;28489:55;:::i;:::-;28475:69;;28592:9;28584:6;28580:22;28575:2;28564:9;28560:18;28553:50;28626:49;28668:6;28660;28652;28626:49;:::i;:::-;28612:63;;28723:9;28715:6;28711:22;28706:2;28695:9;28691:18;28684:50;28751:49;28793:6;28785;28777;28751:49;:::i;:::-;28837:13;;28831:3;28816:19;;28809:42;28906:2;28894:15;;28888:22;28882:3;28867:19;;28860:51;28966:2;28954:15;;28948:22;28942:3;28927:19;;28920:51;29026:2;29014:15;;;29008:22;29002:3;28987:19;;28980:51;-1:-1:-1;;29062:3:63;29047:19;;29040:35;;;;29106:3;29091:19;;;29084:35;28743:57;27785:1340;-1:-1:-1;;;;;;;27785:1340:63:o;29354:316::-;29531:2;29520:9;29513:21;29494:4;29551:44;29591:2;29580:9;29576:18;29568:6;29551:44;:::i;:::-;29543:52;;29660:1;29656;29651:3;29647:11;29643:19;29635:6;29631:32;29626:2;29615:9;29611:18;29604:60;29354:316;;;;;:::o;29675:290::-;29852:2;29841:9;29834:21;29815:4;29872:44;29912:2;29901:9;29897:18;29889:6;29872:44;:::i;:::-;29864:52;;29952:6;29947:2;29936:9;29932:18;29925:34;29675:290;;;;;:::o;29970:460::-;30203:3;30192:9;30185:22;30166:4;30224:45;30264:3;30253:9;30249:19;30241:6;30224:45;:::i;:::-;30300:2;30285:18;;30278:34;;;;-1:-1:-1;;;;;;30348:32:63;;;;30343:2;30328:18;;30321:60;30412:2;30397:18;;;30390:34;30216:53;29970:460;-1:-1:-1;29970:460:63:o;41414:782::-;41767:3;41756:9;41749:22;41730:4;41794:70;41859:3;41848:9;41844:19;41836:6;41794:70;:::i;:::-;41900:6;41895:2;41884:9;41880:18;41873:34;41943:6;41938:2;41927:9;41923:18;41916:34;41998:9;41990:6;41986:22;41981:2;41970:9;41966:18;41959:50;42032:32;42057:6;42049;42032:32;:::i;:::-;42018:46;;42113:9;42105:6;42101:22;42095:3;42084:9;42080:19;42073:51;42141:49;42183:6;42175;42167;42141:49;:::i;:::-;42133:57;41414:782;-1:-1:-1;;;;;;;;;41414:782:63:o;42201:919::-;42357:4;42399:3;42388:9;42384:19;42376:27;;42436:6;42430:13;42419:9;42412:32;42500:4;42492:6;42488:17;42482:24;42475:4;42464:9;42460:20;42453:54;42563:4;42555:6;42551:17;42545:24;42538:4;42527:9;42523:20;42516:54;42626:4;42618:6;42614:17;42608:24;42601:4;42590:9;42586:20;42579:54;42689:4;42681:6;42677:17;42671:24;42664:4;42653:9;42649:20;42642:54;42781:1;42777;42772:3;42768:11;42764:19;42756:4;42748:6;42744:17;42738:24;42734:50;42727:4;42716:9;42712:20;42705:80;42853:4;42845;42837:6;42833:17;42827:24;42823:35;42816:4;42805:9;42801:20;42794:65;42906:4;42898:6;42894:17;42888:24;42921:53;42968:4;42957:9;42953:20;42939:12;-1:-1:-1;;;;;18521:34:63;18509:47;;18456:106;42921:53;-1:-1:-1;42993:6:63;43036:15;;;43030:22;18437:6;18426:18;43095;;;;18414:31;42201:919;:::o;44102:731::-;44433:3;44422:9;44415:22;44396:4;44460:68;44523:3;44512:9;44508:19;44500:6;44460:68;:::i;:::-;44576:9;44568:6;44564:22;44559:2;44548:9;44544:18;44537:50;44610:49;44652:6;44644;44636;44610:49;:::i;:::-;44596:63;;44707:9;44699:6;44695:22;44690:2;44679:9;44675:18;44668:50;44735:49;44777:6;44769;44761;44735:49;:::i;:::-;44727:57;;;44820:6;44815:2;44804:9;44800:18;44793:34;44102:731;;;;;;;;;:::o;45020:521::-;45097:4;45103:6;45163:11;45150:25;45257:2;45253:7;45242:8;45226:14;45222:29;45218:43;45198:18;45194:68;45184:96;;45276:1;45273;45266:12;45184:96;45303:33;;45355:20;;;-1:-1:-1;;;;;;45387:30:63;;45384:50;;;45430:1;45427;45420:12;45384:50;45463:4;45451:17;;-1:-1:-1;45494:14:63;45490:27;;;45480:38;;45477:58;;;45531:1;45528;45521:12;45546:332;45646:4;45704:11;45691:25;45798:3;45794:8;45783;45767:14;45763:29;45759:44;45739:18;45735:69;45725:97;;45818:1;45815;45808:12;45883:327;45978:4;46036:11;46023:25;46130:3;46126:8;46115;46099:14;46095:29;46091:44;46071:18;46067:69;46057:97;;46150:1;46147;46140:12;46215:252;46287:2;46281:9;46329:3;46317:16;;-1:-1:-1;;;;;46348:34:63;;46384:22;;;46345:62;46342:88;;;46410:18;;:::i;:::-;46446:2;46439:22;46215:252;:::o;46472:253::-;46544:2;46538:9;46586:4;46574:17;;-1:-1:-1;;;;;46606:34:63;;46642:22;;;46603:62;46600:88;;;46668:18;;:::i;46730:275::-;46801:2;46795:9;46866:2;46847:13;;-1:-1:-1;;46843:27:63;46831:40;;-1:-1:-1;;;;;46886:34:63;;46922:22;;;46883:62;46880:88;;;46948:18;;:::i;:::-;46984:2;46977:22;46730:275;;-1:-1:-1;46730:275:63:o;47010:191::-;47078:4;-1:-1:-1;;;;;47103:6:63;47100:30;47097:56;;;47133:18;;:::i;:::-;-1:-1:-1;47178:1:63;47174:14;47190:4;47170:25;;47010:191::o;47206:503::-;47264:5;47271:6;47331:3;47318:17;47417:2;47413:7;47402:8;47386:14;47382:29;47378:43;47358:18;47354:68;47344:96;;47436:1;47433;47426:12;47344:96;47464:33;;47568:4;47555:18;;;-1:-1:-1;47516:21:63;;-1:-1:-1;;;;;;47585:30:63;;47582:50;;;47628:1;47625;47618:12;47582:50;47678:6;47662:14;47658:27;47648:8;47644:42;47641:62;;;47699:1;47696;47689:12;47714:224;47753:3;47781:6;47814:2;47811:1;47807:10;47844:2;47841:1;47837:10;47875:3;47871:2;47867:12;47862:3;47859:21;47856:47;;;47883:18;;:::i;:::-;47919:13;;47714:224;-1:-1:-1;;;;47714:224:63:o;47943:128::-;47983:3;48014:1;48010:6;48007:1;48004:13;48001:39;;;48020:18;;:::i;:::-;-1:-1:-1;48056:9:63;;47943:128::o;48076:217::-;48116:1;48142;48132:132;;48186:10;48181:3;48177:20;48174:1;48167:31;48221:4;48218:1;48211:15;48249:4;48246:1;48239:15;48132:132;-1:-1:-1;48278:9:63;;48076:217::o;48298:168::-;48338:7;48404:1;48400;48396:6;48392:14;48389:1;48386:21;48381:1;48374:9;48367:17;48363:45;48360:71;;;48411:18;;:::i;:::-;-1:-1:-1;48451:9:63;;48298:168::o;48471:125::-;48511:4;48539:1;48536;48533:8;48530:34;;;48544:18;;:::i;:::-;-1:-1:-1;48581:9:63;;48471:125::o;48601:258::-;48673:1;48683:113;48697:6;48694:1;48691:13;48683:113;;;48773:11;;;48767:18;48754:11;;;48747:39;48719:2;48712:10;48683:113;;;48814:6;48811:1;48808:13;48805:48;;;-1:-1:-1;;48849:1:63;48831:16;;48824:27;48601:258::o;48993:135::-;49032:3;-1:-1:-1;;49053:17:63;;49050:43;;;49073:18;;:::i;:::-;-1:-1:-1;49120:1:63;49109:13;;48993:135::o;49133:127::-;49194:10;49189:3;49185:20;49182:1;49175:31;49225:4;49222:1;49215:15;49249:4;49246:1;49239:15;49397:127;49458:10;49453:3;49449:20;49446:1;49439:31;49489:4;49486:1;49479:15;49513:4;49510:1;49503:15;49529:127;49590:10;49585:3;49581:20;49578:1;49571:31;49621:4;49618:1;49611:15;49645:4;49642:1;49635:15;49661:127;49722:10;49717:3;49713:20;49710:1;49703:31;49753:4;49750:1;49743:15;49777:4;49774:1;49767:15;49793:131;-1:-1:-1;;;;;49868:31:63;;49858:42;;49848:70;;49914:1;49911;49904:12",
    "source": "pragma solidity ^0.8.0;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"../RelayHub.sol\";\n\ncontract TestRelayHub is RelayHub {\n\n    constructor(\n        IStakeManager _stakeManager,\n        address _penalizer,\n        address _batchGateway,\n        address _relayRegistrar,\n        RelayHubConfig memory _config\n    // solhint-disable-next-line no-empty-blocks\n    ) RelayHub(_stakeManager, _penalizer, _batchGateway, _relayRegistrar, _config) {}\n\n    /// Allow depositing for non-paymaster addresses for Gas Calculations tests\n    function depositFor(address target) public override payable {\n        uint256 amount = msg.value;\n        balances[target] = balances[target] + amount;\n        emit Deposited(target, msg.sender, amount);\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestRelayHub.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestRelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "TestRelayHub": [
                7655
            ],
            "console": [
                20920
            ]
        },
        "id": 7656,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 7598,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:31"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
                "file": "../RelayHub.sol",
                "id": 7599,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7656,
                "sourceUnit": 3331,
                "src": "67:25:31",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 7600,
                            "name": "RelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 3330,
                            "src": "119:8:31"
                        },
                        "id": 7601,
                        "nodeType": "InheritanceSpecifier",
                        "src": "119:8:31"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7655,
                "linearizedBaseContracts": [
                    7655,
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "TestRelayHub",
                "nameLocation": "103:12:31",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 7623,
                            "nodeType": "Block",
                            "src": "447:2:31",
                            "statements": []
                        },
                        "id": 7624,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 7616,
                                        "name": "_stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7604,
                                        "src": "379:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    {
                                        "id": 7617,
                                        "name": "_penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7606,
                                        "src": "394:10:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7618,
                                        "name": "_batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7608,
                                        "src": "406:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7619,
                                        "name": "_relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7610,
                                        "src": "421:15:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7620,
                                        "name": "_config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7613,
                                        "src": "438:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                        }
                                    }
                                ],
                                "id": 7621,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 7615,
                                    "name": "RelayHub",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3330,
                                    "src": "370:8:31"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "370:76:31"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 7614,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7604,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "170:13:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "156:27:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 7603,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7602,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "156:13:31"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "156:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7606,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "201:10:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "193:18:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7605,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "193:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7608,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "229:13:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "221:21:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7607,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "221:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7610,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "260:15:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "252:23:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7609,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "252:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7613,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "307:7:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "285:29:31",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 7612,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7611,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "285:14:31"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "285:14:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "146:223:31"
                        },
                        "returnParameters": {
                            "id": 7622,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "447:0:31"
                        },
                        "scope": 7655,
                        "src": "135:314:31",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            1693
                        ],
                        "body": {
                            "id": 7653,
                            "nodeType": "Block",
                            "src": "595:149:31",
                            "statements": [
                                {
                                    "assignments": [
                                        7632
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 7632,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "613:6:31",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 7653,
                                            "src": "605:14:31",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 7631,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "605:7:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 7635,
                                    "initialValue": {
                                        "expression": {
                                            "id": 7633,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "622:3:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 7634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "src": "622:9:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "605:26:31"
                                },
                                {
                                    "expression": {
                                        "id": 7644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 7636,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "641:8:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 7638,
                                            "indexExpression": {
                                                "id": 7637,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7627,
                                                "src": "650:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "641:16:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 7643,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 7639,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "660:8:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 7641,
                                                "indexExpression": {
                                                    "id": 7640,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 7627,
                                                    "src": "669:6:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "660:16:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 7642,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7632,
                                                "src": "679:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "660:25:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "641:44:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 7645,
                                    "nodeType": "ExpressionStatement",
                                    "src": "641:44:31"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 7647,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7627,
                                                "src": "710:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 7648,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "718:3:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 7649,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "718:10:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 7650,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7632,
                                                "src": "730:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 7646,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5590,
                                            "src": "700:9:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 7651,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "700:37:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7652,
                                    "nodeType": "EmitStatement",
                                    "src": "695:42:31"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 7625,
                            "nodeType": "StructuredDocumentation",
                            "src": "455:75:31",
                            "text": "Allow depositing for non-paymaster addresses for Gas Calculations tests"
                        },
                        "functionSelector": "aa67c919",
                        "id": 7654,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "544:10:31",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7629,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "578:8:31"
                        },
                        "parameters": {
                            "id": 7628,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7627,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "563:6:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7654,
                                    "src": "555:14:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7626,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "555:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "554:16:31"
                        },
                        "returnParameters": {
                            "id": 7630,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "595:0:31"
                        },
                        "scope": 7655,
                        "src": "535:209:31",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 7656,
                "src": "94:652:31",
                "usedErrors": []
            }
        ],
        "src": "0:746:31"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestRelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "TestRelayHub": [
                7655
            ],
            "console": [
                20920
            ]
        },
        "id": 7656,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 7598,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:31"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
                "file": "../RelayHub.sol",
                "id": 7599,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7656,
                "sourceUnit": 3331,
                "src": "67:25:31",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 7600,
                            "name": "RelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 3330,
                            "src": "119:8:31"
                        },
                        "id": 7601,
                        "nodeType": "InheritanceSpecifier",
                        "src": "119:8:31"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7655,
                "linearizedBaseContracts": [
                    7655,
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "TestRelayHub",
                "nameLocation": "103:12:31",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 7623,
                            "nodeType": "Block",
                            "src": "447:2:31",
                            "statements": []
                        },
                        "id": 7624,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 7616,
                                        "name": "_stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7604,
                                        "src": "379:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    {
                                        "id": 7617,
                                        "name": "_penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7606,
                                        "src": "394:10:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7618,
                                        "name": "_batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7608,
                                        "src": "406:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7619,
                                        "name": "_relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7610,
                                        "src": "421:15:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 7620,
                                        "name": "_config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7613,
                                        "src": "438:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                        }
                                    }
                                ],
                                "id": 7621,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 7615,
                                    "name": "RelayHub",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3330,
                                    "src": "370:8:31"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "370:76:31"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 7614,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7604,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "170:13:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "156:27:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 7603,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7602,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "156:13:31"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "156:13:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7606,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "201:10:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "193:18:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7605,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "193:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7608,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "229:13:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "221:21:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7607,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "221:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7610,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "260:15:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "252:23:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7609,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "252:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7613,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "307:7:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7624,
                                    "src": "285:29:31",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 7612,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7611,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "285:14:31"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "285:14:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "146:223:31"
                        },
                        "returnParameters": {
                            "id": 7622,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "447:0:31"
                        },
                        "scope": 7655,
                        "src": "135:314:31",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            1693
                        ],
                        "body": {
                            "id": 7653,
                            "nodeType": "Block",
                            "src": "595:149:31",
                            "statements": [
                                {
                                    "assignments": [
                                        7632
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 7632,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "613:6:31",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 7653,
                                            "src": "605:14:31",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 7631,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "605:7:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 7635,
                                    "initialValue": {
                                        "expression": {
                                            "id": 7633,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "622:3:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 7634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "src": "622:9:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "605:26:31"
                                },
                                {
                                    "expression": {
                                        "id": 7644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 7636,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "641:8:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 7638,
                                            "indexExpression": {
                                                "id": 7637,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7627,
                                                "src": "650:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "641:16:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 7643,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 7639,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "660:8:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 7641,
                                                "indexExpression": {
                                                    "id": 7640,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 7627,
                                                    "src": "669:6:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "660:16:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 7642,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7632,
                                                "src": "679:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "660:25:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "641:44:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 7645,
                                    "nodeType": "ExpressionStatement",
                                    "src": "641:44:31"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 7647,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7627,
                                                "src": "710:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 7648,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "718:3:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 7649,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "718:10:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 7650,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7632,
                                                "src": "730:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 7646,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5590,
                                            "src": "700:9:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 7651,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "700:37:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7652,
                                    "nodeType": "EmitStatement",
                                    "src": "695:42:31"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 7625,
                            "nodeType": "StructuredDocumentation",
                            "src": "455:75:31",
                            "text": "Allow depositing for non-paymaster addresses for Gas Calculations tests"
                        },
                        "functionSelector": "aa67c919",
                        "id": 7654,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "544:10:31",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7629,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "578:8:31"
                        },
                        "parameters": {
                            "id": 7628,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7627,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "563:6:31",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7654,
                                    "src": "555:14:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7626,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "555:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "554:16:31"
                        },
                        "returnParameters": {
                            "id": 7630,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "595:0:31"
                        },
                        "scope": 7655,
                        "src": "535:209:31",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 7656,
                "src": "94:652:31",
                "usedErrors": []
            }
        ],
        "src": "0:746:31"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.233Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "aggregateGasleft()": {
                "returns": {
                    "_0": "A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                }
            },
            "balanceOf(address)": {
                "returns": {
                    "_0": "An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                }
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "gasUsed": "An amount of gas used by the transaction.",
                    "relayData": "The details of a transaction signed by the sender."
                },
                "returns": {
                    "_0": "The calculated charge, in wei."
                }
            },
            "calculateDevCharge(uint256)": {
                "params": {
                    "charge": "The amount of Ether in wei the Paymaster will be charged for this transaction."
                },
                "returns": {
                    "_0": "The calculated devFee, in wei."
                }
            },
            "deprecateHub(uint256)": {
                "params": {
                    "_deprecationTime": "The timestamp in seconds after which the `RelayHub` stops serving transactions."
                }
            },
            "getBatchGateway()": {
                "returns": {
                    "_0": "The `BatchGateway` address for this `RelayHub`."
                }
            },
            "getConfiguration()": {
                "returns": {
                    "_0": "The configuration of the `RelayHub`."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "The block number in which the contract has been deployed."
                }
            },
            "getDeprecationTime()": {
                "returns": {
                    "_0": "The timestamp from which the hub no longer allows relaying calls."
                }
            },
            "getMinimumStakePerToken(address)": {
                "params": {
                    "token": "An address of an ERC-20 compatible tokens."
                },
                "returns": {
                    "_0": "The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                }
            },
            "getPenalizer()": {
                "returns": {
                    "_0": "The `Penalizer` address for this `RelayHub`."
                }
            },
            "getRelayRegistrar()": {
                "returns": {
                    "_0": "The `RelayRegistrar` address for this `RelayHub`."
                }
            },
            "getStakeManager()": {
                "returns": {
                    "_0": "The `StakeManager` address for this `RelayHub`."
                }
            },
            "getWorkerCount(address)": {
                "params": {
                    "manager": "An address of the Relay Manager."
                },
                "returns": {
                    "_0": "The count of Relay Workers associated with this Relay Manager."
                }
            },
            "getWorkerManager(address)": {
                "params": {
                    "worker": "An address of the Relay Worker."
                },
                "returns": {
                    "_0": "The address of its Relay Manager."
                }
            },
            "isDeprecated()": {
                "returns": {
                    "_0": "`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "penalize(address,address)": {
                "params": {
                    "beneficiary": "The address that called the `Penalizer` and will receive a reward for it.",
                    "relayWorker": "The address of the Relay Worker that committed a penalizable offense."
                }
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "params": {
                    "approvalData": "The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.",
                    "domainSeparatorName": "The name of the Domain Separator used to verify the EIP-712 signature",
                    "maxAcceptanceBudget": "The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.",
                    "relayRequest": "All details of the requested relayed call.",
                    "signature": "The client's EIP-712 signature over the `relayRequest` struct."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "params": {
                    "_config": "The new configuration."
                }
            },
            "setMinimumStakes(address[],uint256[])": {
                "params": {
                    "minimumStake": "An array of minimal amounts necessary for a corresponding token, in wei.",
                    "token": "An array of addresses of ERC-20 compatible tokens."
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "versionHub()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `RelayHub` contract."
                }
            }
        },
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerBalanceEscheated(address,uint256)": {
                "notice": "This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`."
            },
            "Deposited(address,address,uint256)": {
                "notice": "Emitted when `depositFor` is called, including the amount and account that was funded."
            },
            "HubDeprecated(uint256)": {
                "notice": "This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
            },
            "RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Emitted when a configuration of the `RelayHub` is changed"
            },
            "RelayWorkersAdded(address,address[],uint256)": {
                "notice": "Emitted when relays are added by a relayManager"
            },
            "StakingTokenDataChanged(address,uint256)": {
                "notice": "Emitted for each token configured for staking in setMinimumStakes"
            },
            "TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)": {
                "notice": "Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged."
            },
            "TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)": {
                "notice": "Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
            },
            "TransactionResult(uint8,bytes)": {
                "notice": "This event is emitted in case the internal function returns a value or reverts with a revert string."
            },
            "Withdrawn(address,address,uint256)": {
                "notice": "Emitted when an account withdraws funds from the `RelayHub`."
            }
        },
        "kind": "user",
        "methods": {
            "addRelayWorkers(address[])": {
                "notice": "Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events."
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount."
            },
            "calculateDevCharge(uint256)": {
                "notice": "The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`."
            },
            "depositFor(address)": {
                "notice": "Allow depositing for non-paymaster addresses for Gas Calculations tests"
            },
            "deprecateHub(uint256)": {
                "notice": "Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp"
            },
            "escheatAbandonedRelayBalance(address)": {
                "notice": "@param relayManager"
            },
            "innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)": {
                "notice": "This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context."
            },
            "isRelayEscheatable(address)": {
                "notice": "Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
            },
            "onRelayServerRegistered(address)": {
                "notice": "The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
            },
            "penalize(address,address)": {
                "notice": "In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either."
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "notice": "Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Sets or changes the configuration of this `RelayHub`."
            },
            "setMinimumStakes(address[],uint256[])": {
                "notice": "Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
            },
            "verifyRelayManagerStaked(address)": {
                "notice": "Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
            },
            "withdraw(address,uint256)": {
                "notice": "Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event."
            },
            "withdrawMultiple(address[],uint256[])": {
                "notice": "Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination."
            }
        },
        "version": 1
    }
}
