{
    "_format": "hh-sol-artifact-1",
    "contractName": "Operator",
    "sourceName": "contracts/OperatorTokenomics/Operator.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "AccessDenied",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedDATATokenOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedNodesOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedOperatorOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedStreamrSponsorshipOnly",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "DelegationBelowMinimum",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "DidNotReceiveReward",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FirstEmptyQueueThenStake",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "InvalidOperatorsCut",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "module",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleCallError",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleGetError",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NoEarnings",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotMyStakedSponsorship",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumSelfDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "SelfDelegationTooLow",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "StakedInSponsorships",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ZeroUndelegation",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balanceWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalSupplyWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataValueWithoutEarnings",
                    "type": "uint256"
                }
            ],
            "name": "BalanceUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Delegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "nodeAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "Heartbeat",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueDecreaseWei",
                    "type": "uint256"
                }
            ],
            "name": "Loss",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operatorAddress",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "MetadataUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "nodes",
                    "type": "address[]"
                }
            ],
            "name": "NodesSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountInOperatorTokensWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actuallySlashedInOperatorTokensWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorSlashed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalStakeInSponsorshipsWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataTokenBalanceWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorValueUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueIncreaseWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "protocolFeeDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Profit",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueueUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueuedDataPayout",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteStartTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteEndTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "ReviewRequest",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stakedWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Staked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Undelegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Unstaked",
            "type": "event"
        },
        {
            "stateMutability": "nonpayable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "CONTROLLER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "OWNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                }
            ],
            "name": "balanceInData",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "delegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "delegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "exchangeRatePolicy",
            "outputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "flag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "maxQueuePayoutIterations",
                    "type": "uint256"
                }
            ],
            "name": "forceUnstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNodeAddresses",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getSponsorshipsAndEarnings",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "addresses",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "earnings",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAllowedEarnings",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStreamMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "heartbeat",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "indexOfSponsorships",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "contract StreamrConfig",
                    "name": "config",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "operatorTokenName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "operatorMetadataJson",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "operatorsCut",
                    "type": "uint256"
                },
                {
                    "internalType": "address[3]",
                    "name": "modules",
                    "type": "address[3]"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "latestDelegationTimestamp",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "metadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "nodeIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nodeModule",
            "outputs": [
                {
                    "internalType": "contract INodeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "nodes",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashedDataWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "receivedPayoutWei",
                    "type": "uint256"
                }
            ],
            "name": "onKick",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                }
            ],
            "name": "onReviewRequest",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashed",
                    "type": "uint256"
                }
            ],
            "name": "onSlash",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onTokenTransfer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "operatorsCutFraction",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "payOutFirstInQueue",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "payoutComplete",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "maxIterations",
                    "type": "uint256"
                }
            ],
            "name": "payOutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueCurrentIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "queueEntryAt",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "timestamp",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueIsEmpty",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueLastIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueModule",
            "outputs": [
                {
                    "internalType": "contract IQueueModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setDelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setExchangeRatePolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newNodes",
                    "type": "address[]"
                }
            ],
            "name": "setNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setUndelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "slashedIn",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "sponsorships",
            "outputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "stakeModule",
            "outputs": [
                {
                    "internalType": "contract IStakeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakedInto",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamId",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamRegistry",
            "outputs": [
                {
                    "internalType": "contract IStreamRegistryV4",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamrConfig",
            "outputs": [
                {
                    "internalType": "contract StreamrConfig",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "internalType": "contract IERC677",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSlashedInSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalStakedIntoSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Operator",
                    "name": "other",
                    "type": "address"
                },
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "triggerAnotherOperatorWithdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "undelegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationQueue",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "delegator",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountWei",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "timestamp",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct Operator.UndelegationQueueEntry[]",
                    "name": "queue",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "addNodes",
                    "type": "address[]"
                },
                {
                    "internalType": "address[]",
                    "name": "removeNodes",
                    "type": "address[]"
                }
            ],
            "name": "updateNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "updateOperatorsCutFraction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateStreamMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "valueWithoutEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "version",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "voteData",
                    "type": "bytes32"
                }
            ],
            "name": "voteOnFlag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorships",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorshipsWithoutQueue",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "withdrawnEarningsDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50614881806100206000396000f3fe608060405234801561001057600080fd5b50600436106104965760003560e01c8063870ffde211610262578063adc9772e11610151578063d673de46116100ce578063f2888dbb11610092578063f2888dbb14610ba0578063f3aea65014610bb3578063f4350c2414610bc6578063f4408e4b14610bd9578063fc0c546a14610be1578063ffff59a614610bf457610496565b8063d673de4614610b32578063dd62ed3e14610b52578063e364215314610b65578063e58378bb14610b78578063e8e658b414610b8d57610496565b8063bc9b30c811610115578063bc9b30c814610ade578063bed6ff0914610af1578063c229918e14610b04578063d1b6861114610b0c578063d547741f14610b1f57610496565b8063adc9772e14610a27578063b07f3c4714610a3a578063b72cd7a814610a98578063ba2bfc0a14610aab578063bc697ec514610acb57610496565b8063a457c2d7116101df578063a9059cbb116101a3578063a9059cbb146109dd578063a93a019f146109f0578063a99fa31a14610a03578063aa5703ad14610a16578063aa77fd5514610a1e57610496565b8063a457c2d71461097e578063a48dca1814610991578063a4c0ed36146109a4578063a63ed2c8146109b7578063a74194af146109ca57610496565b80639413462c116102265780639413462c1461093f57806395d89b411461094857806398833130146109505780639fa6dd3514610963578063a217fddf1461097657610496565b8063870ffde2146108ea57806387396e3b146108f35780638da5cb5b14610906578063918b5be11461091957806391d148541461092c57610496565b8063313ce5671161038957806358fc614a116103065780636c68c0e1116102ca5780636c68c0e11461086957806370a082311461087c578063799e25901461088f5780637bf713b6146108a25780637d429385146108b55780637e82fd6f146108d557610496565b806358fc614a146108045780635dff6e9f146108245780635e61bb871461083757806363d1ecf21461084357806364f1abb71461085657610496565b80634a178fe41161034d5780634a178fe4146107bb5780634b095c03146107ce57806350d3ba9e146107e157806354fd4d50146107f4578063558a1568146107fb57610496565b8063313ce5671461075e57806336568abe1461076d578063392f37e9146107805780633950935114610788578063430457e11461079b57610496565b80631c53c28011610417578063248a9ca3116103db578063248a9ca3146106e957806325c335491461070c5780632e9498241461071f5780632ebd89d1146107345780632f2ff15d1461074b57610496565b80631c53c2801461067d57806320fed94f1461069d57806321194bd7146106b057806321a76907146106c357806323b872dd146106d657610496565b80630fd6ff491161045e5780630fd6ff491461063257806311606010146106475780631401f70b1461064f57806314797daa1461066257806318160ddd1461067557610496565b806301ffc9a7146105b657806304cbab8b146105de57806306fdde03146105f5578063092c5b3b1461060a578063095ea7b31461061f575b60003660603330146104bb57604051634ca8886760e01b815260040160405180910390fd5b81600084826104cb601482613a8b565b6104d792859290613aa2565b6104e091613acc565b60601c905060008581866104f5602087613a8b565b9261050293929190613aa2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061055491508590613b2d565b600060405180830381855af49150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b5091509150816105a657805181602001fd5b8051975060200195505050505050f35b6105c96105c4366004613b49565b610c07565b60405190151581526020015b60405180910390f35b6105e760c95481565b6040519081526020016105d5565b6105fd610c3e565b6040516105d59190613b9f565b6105e76000805160206147cc83398151915281565b6105c961062d366004613bc7565b610cd0565b610645610640366004613c3b565b610ce8565b005b6105c9610d5e565b61064561065d366004613c7c565b610da9565b610645610670366004613cdd565b610e44565b6099546105e7565b61069061068b366004613d48565b610eb1565b6040516105d59190613d61565b6106456106ab366004613d75565b610edb565b6106456106be366004613c3b565b610f7c565b60d054610690906001600160a01b031681565b6105c96106e4366004613d97565b61101c565b6105e76106f7366004613d48565b60009081526065602052604090206001015490565b61064561071a366004613dd8565b611040565b6107276110a6565b6040516105d59190613e51565b61073c611107565b6040516105d593929190613e64565b610645610759366004613ec4565b611336565b604051601281526020016105d5565b61064561077b366004613ec4565b61135b565b6105fd6113da565b6105c9610796366004613bc7565b611468565b6105e76107a9366004613c7c565b60d96020526000908152604090205481565b6106456107c9366004613fdf565b61148a565b6106456107dc366004613bc7565b61151e565b6105e76107ef3660046140c8565b611580565b60036105e7565b6105e760d45481565b6105e7610812366004613c7c565b60d66020526000908152604090205481565b610645610832366004613d48565b6115af565b60db5460dc54146105c9565b60ce54610690906001600160a01b031681565b610645610864366004613c7c565b6115f0565b610645610877366004613d48565b6118bc565b6105e761088a366004613c7c565b6118ee565b60cb54610690906001600160a01b031681565b6106456108b0366004613d48565b611909565b6105e76108c3366004613c7c565b60d76020526000908152604090205481565b6108dd611a94565b6040516105d59190614104565b6105e760ca5481565b610645610901366004613d48565b611bb3565b60d254610690906001600160a01b031681565b610645610927366004613c3b565b611bdf565b6105c961093a366004613ec4565b611c71565b6105e760db5481565b6105fd611c9c565b60d154610690906001600160a01b031681565b610645610971366004613d48565b611cab565b6105e7600081565b6105c961098c366004613bc7565b611d49565b60cf54610690906001600160a01b031681565b6106456109b2366004614166565b611dc4565b6105e76109c5366004613c7c565b611e4b565b6106906109d8366004613d48565b611ecf565b6105c96109eb366004613bc7565b611edf565b6106456109fe366004613bc7565b611eed565b610645610a113660046141b5565b612002565b6105fd612268565b6105e760dc5481565b610645610a35366004613bc7565b6122e4565b610a73610a48366004613d48565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105d5565b60cc54610690906001600160a01b031681565b6105e7610ab9366004613c7c565b60d86020526000908152604090205481565b610645610ad9366004613bc7565b612346565b60cd54610690906001600160a01b031681565b610645610aff366004613d97565b61238f565b6105e76123ec565b610645610b1a366004613bc7565b61247a565b610645610b2d366004613ec4565b6124c3565b6105e7610b40366004613c7c565b60de6020526000908152604090205481565b6105e7610b603660046142b5565b6124e8565b60e054610690906001600160a01b031681565b6105e76000805160206147ac83398151915281565b610645610b9b3660046140c8565b612513565b610645610bae366004613c7c565b6127da565b610645610bc1366004613bc7565b612818565b610645610bd43660046142e3565b612861565b6105fd61288e565b60d354610690906001600160a01b031681565b610645610c02366004613bc7565b61289b565b60006001600160e01b03198216637965db0b60e01b1480610c3857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610c4d90614332565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7990614332565b8015610cc65780601f10610c9b57610100808354040283529160200191610cc6565b820191906000526020600020905b815481529060010190602001808311610ca957829003601f168201915b5050505050905090565b600033610cde8185856128e4565b5060019392505050565b33600090815260de60205260408120549003610d1757604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610d52929190614395565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610da2916001600160a01b0390911690612a08565b1515919050565b610dc16000805160206147cc83398151915233611c71565b610dde57604051631a76708960e21b815260040160405180910390fd5b60d054604051610e40916001600160a01b03169063af9ee81d60e01b90610e09908590602401613d61565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a08565b5050565b610e5c6000805160206147cc83398151915233611c71565b610e7957604051631a76708960e21b815260040160405180910390fd5b60ce54604051610eaa916001600160a01b031690635e2cb23f60e11b90610e099088908890889088906024016143e7565b5050505050565b60dd8181548110610ec157600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f0a5760405163012d886f60e51b815260040160405180910390fd5b8215610f49578160ca6000828254610f22919061440e565b90915550610f31905083612aa9565b8160ca6000828254610f439190613a8b565b90915550505b60d054604051610f76916001600160a01b031690631644f38560e31b90610e099085908790602401614426565b50505050565b610f946000805160206147cc83398151915233611c71565b610fb157604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe790610fe69060df90869086906004016144de565b600060405180830381600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050505050565b60003361102a858285612bbb565b611035858585612c2f565b506001949350505050565b6110586000805160206147cc83398151915233611c71565b61107557604051631a76708960e21b815260040160405180910390fd5b60ce546040516110a1916001600160a01b03169062b08f2560e61b90610e09908690869060240161450e565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610cc657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110e0575050505050905090565b606080600060d5805490506001600160401b0381111561112957611129613ef4565b604051908082528060200260200182016040528015611152578160200160208202803683370190505b5060d5549093506001600160401b0381111561117057611170613ef4565b604051908082528060200260200182016040528015611199578160200160208202803683370190505b50915060005b60d55481101561129d57600060d582815481106111be576111be614522565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106111f1576111f1614522565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c049061122c903090600401613d61565b602060405180830381865afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190614538565b84838151811061127f5761127f614522565b6020908102919091010152508061129581614551565b91505061119f565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190614538565b61131b6123ec565b611325919061456a565b61132f9190614589565b9050909192565b60008281526065602052604090206001015461135181612e4a565b6110a18383612e54565b6001600160a01b03811633146113d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e408282612eda565b60e180546113e790614332565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614332565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b505050505081565b600033610cde81858561147b83836124e8565b611485919061440e565b6128e4565b33600090815260de602052604081205490036114b957604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906114e790859085906004016145ab565b600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50505050505050565b6115366000805160206147cc83398151915233611c71565b61155357604051631a76708960e21b815260040160405180910390fd5b60d0546040516110a1916001600160a01b03169063d572a9cd60e01b90610e099086908690602401614426565b60d054604051600091610c38916001600160a01b039091169062d8aad560e51b90610e09908690602401613e51565b6115c76000805160206147cc83398151915233611c71565b6115e457604051631a76708960e21b815260040160405180910390fd5b6115ed81612f41565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166791906145cf565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116929190613d61565b602060405180830381865afa1580156116af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d39190614538565b6000036116f3576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117669190614538565b611770904261440e565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117eb9190614538565b6117f5908361440e565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b815260040161185a9190613d61565b600060405180830381865afa158015611877573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261189f91908101906145ec565b6040516118ae93929190614662565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e40916001600160a01b031690630744132360e21b90606401610e09565b6001600160a01b031660009081526097602052604090205490565b33600081815260d6602052604081205490036119385760405163012d886f60e51b815260040160405180910390fd5b61194182612aa9565b6001600160a01b038116600090815260d860205260408120805484929061196990849061440e565b925050819055508160ca6000828254611982919061440e565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78916119d791613a8b565b60405190815260200160405180910390a260008051602061482c83398151915260ca5460c954611a079190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611a37903090600401613d61565b602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614538565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611aa89190613a8b565b9050806001600160401b03811115611ac257611ac2613ef4565b604051908082528060200260200182016040528015611b2057816020015b611b0d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611ae05790505b50915060005b81811015611bae5760da60008260dc54611b40919061440e565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611b9057611b90614522565b60200260200101819052508080611ba690614551565b915050611b26565b505090565b60cf5460405160248101839052610e40916001600160a01b03169063211cccd160e21b90604401610e09565b611bf76000805160206147cc83398151915233611c71565b611c1457604051631a76708960e21b815260040160405180910390fd5b611c2060e18383613968565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611c659086908690614395565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c4d90614332565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d349190614681565b50611d3f3382612fde565b6115ed6000611bb3565b60003381611d5782866124e8565b905083811015611db75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016113c7565b61103582868684036128e4565b60d3546001600160a01b03163314611def5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e155750610f76565b846014839003611e2a5750823560601c611e37565b6020839003611e37575082355b611e418186612fde565b6110146000611bb3565b6000611e56826118ee565b600003611e6557506000919050565b610c38630de731f360e31b611e79846118ee565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261324d565b60d58181548110610ec157600080fd5b600033610cde818585612c2f565b60db5460dc541480611f93575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190614538565b60dc54600090815260da6020526040902060020154611f90919061440e565b42105b15611fcd57611fb06000805160206147cc83398151915233611c71565b611fcd57604051631a76708960e21b815260040160405180910390fd5b60d054604051611ff8916001600160a01b031690633d16f42d60e01b90610e09908690602401613d61565b50610e4081611bb3565b600054610100900460ff16158080156120225750600054600160ff909116105b8061203c5750303b15801561203c575060005460ff166001145b61209f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113c7565b6000805460ff1916600117905580156120c2576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556120e56132e3565b6120fd6000805160206147ac8339815191528761330c565b6121156000805160206147cc8339815191528761330c565b61213b6000805160206147cc8339815191526000805160206147ac833981519152613316565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556121b08580613361565b6121bb60003361330c565b83516121ce9060e19060208701906139ec565b506121d883612f41565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612217916001600160a01b031690612a08565b50801561225e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd29061229a9060df906004016146a3565b600060405180830381865afa1580156122b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122df91908101906145ec565b905090565b6122fc6000805160206147cc83398151915233611c71565b61231957604051631a76708960e21b815260040160405180910390fd5b60d0546040516110a1916001600160a01b03169063aa0d97b360e01b90610e099086908690602401614426565b600061235181612e4a565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b33600090815260de602052604081205490036123be57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906114e79085908590600401614426565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a0823190612425903090600401613d61565b602060405180830381865afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190614538565b612470919061440e565b6122df9190613a8b565b6124926000805160206147cc83398151915233611c71565b6124af57604051631a76708960e21b815260040160405180910390fd5b6124b9828261151e565b610e406000611bb3565b6000828152606560205260409020600101546124de81612e4a565b6110a18383612eda565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600061251d6123ec565b9050600061252a83611580565b9050336125456000805160206147cc83398151915282611c71565b15801561256857506001600160a01b038116600090815260de6020526040902054155b156127d0576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ef9190614538565b6125f9908661456a565b6126039190614589565b9050808311156127ce576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561266b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268f9190614538565b612699908661456a565b6126a39190614589565b90506126ae81612aa9565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906126e09086908590600401614426565b6020604051808303816000875af11580156126ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127239190614681565b5060008051602061482c83398151915260ca5460c9546127439190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612773903090600401613d61565b602060405180830381865afa158015612790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b49190614538565b6040805192835260208301919091520160405180910390a1505b505b610f766000611bb3565b6127f26000805160206147cc83398151915233611c71565b61280f57604051631a76708960e21b815260040160405180910390fd5b611d3f81610da9565b600061282381612e4a565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b60cf546040516110a1916001600160a01b031690637a227c9f60e01b90610e0990869086906024016146b6565b60df80546113e790614332565b60006128a681612e4a565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b6001600160a01b0383166129465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016113c7565b6001600160a01b0382166129a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016113c7565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612a259190613b2d565b600060405180830381855af49150503d8060008114612a60576040519150601f19603f3d011682016040523d82523d6000602084013e612a65565b606091505b509150915081612a9d578051600003612a9557848460405163918623b760e01b81526004016113c79291906145ab565b805181602001fd5b60200151949350505050565b60d254600090612ac1906001600160a01b03166118ee565b905080600003612acf575050565b60cc5460405160248101849052600091612b00916001600160a01b0390911690632b911c0960e21b90604401610e09565b90506000612b0e8383613392565b60d254909150612b27906001600160a01b0316826133aa565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b03166000805160206147ec833981519152612b8c826118ee565b609954612b976123ec565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612bc784846124e8565b90506000198114610f765781811015612c225760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016113c7565b610f7684848484036128e4565b6000612c3a836118ee565b159050612c488484846134cc565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb69190614538565b905080612cc2866118ee565b108015612cd757506000612cd5866118ee565b115b15612d0957612ce5856118ee565b6040516324c6940760e01b81526004810191909152602481018290526044016113c7565b80612d13856118ee565b1015612d2257612ce5846118ee565b8115612d665760cb546001600160a01b031615612d665760cb54604051612d64916001600160a01b03169063217fb33b60e01b90610e09908890602401613d61565b505b60cd546001600160a01b031615612dad5760cd546040516001600160a01b03878116602483015260006044830152612dab921690633608993560e21b90606401610e09565b505b846001600160a01b03166000805160206147ec833981519152612dcf876118ee565b609954612dda6123ec565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b03166000805160206147ec833981519152612e1a866118ee565b609954612e256123ec565b6040805193845260208401929092529082015260600160405180910390a25050505050565b6115ed8133613665565b612e5e8282611c71565b610e405760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612e963390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ee48282611c71565b15610e405760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c95415612f62576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a7640000811115612f8e57604051631e6f460160e31b8152600481018290526024016113c7565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090612fd39060e1906146a3565b60405180910390a350565b60cc546040516024810183905260448101839052600091613016916001600160a01b0390911690633a49b55760e21b90606401610e09565b905061302283826136be565b60d2546001600160a01b038481169116146131005760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614538565b9050806130b1856118ee565b10156130c057612ce5846118ee565b60cb546001600160a01b0316156130fe5760cb546040516130fc916001600160a01b03169063217fb33b60e01b90610e09908890602401613d61565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061314d9085815260200190565b60405180910390a2826001600160a01b03166000805160206147ec833981519152613177856118ee565b6099546131826123ec565b6040805193845260208401929092529082015260600160405180910390a260008051602061482c83398151915260ca5460c9546131bf9190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a08231906131ef903090600401613d61565b602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132309190614538565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b03168460405161326a9190613b2d565b600060405180830381855afa9150503d80600081146132a5576040519150601f19603f3d011682016040523d82523d6000602084013e6132aa565b606091505b5091509150816132d8578051600003612a95578360405163029801d760e41b81526004016113c79190613b9f565b602001519392505050565b600054610100900460ff1661330a5760405162461bcd60e51b81526004016113c7906146da565b565b610e408282612e54565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166133885760405162461bcd60e51b81526004016113c7906146da565b610e40828261376d565b60008183106133a157816133a3565b825b9392505050565b6001600160a01b03821661340a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016113c7565b6001600160a01b0382166000908152609760205260409020548181101561347e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016113c7565b6001600160a01b038316600081815260976020908152604080832086860390556099805487900390555185815291929160008051602061480c833981519152910160405180910390a3505050565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016113c7565b6001600160a01b0382166135925760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016113c7565b6001600160a01b0383166000908152609760205260409020548181101561360a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016113c7565b6001600160a01b03808516600081815260976020526040808220868603905592861680825290839020805486019055915160008051602061480c833981519152906136589086815260200190565b60405180910390a3610f76565b61366f8282611c71565b610e405761367c816137bb565b6136878360206137cd565b604051602001613698929190614725565b60408051601f198184030181529082905262461bcd60e51b82526113c791600401613b9f565b6001600160a01b0382166137145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016113c7565b8060996000828254613726919061440e565b90915550506001600160a01b03821660008181526097602090815260408083208054860190555184815260008051602061480c833981519152910160405180910390a35050565b600054610100900460ff166137945760405162461bcd60e51b81526004016113c7906146da565b81516137a790609a9060208501906139ec565b5080516110a190609b9060208401906139ec565b6060610c386001600160a01b03831660145b606060006137dc83600261456a565b6137e790600261440e565b6001600160401b038111156137fe576137fe613ef4565b6040519080825280601f01601f191660200182016040528015613828576020820181803683370190505b509050600360fc1b8160008151811061384357613843614522565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061387257613872614522565b60200101906001600160f81b031916908160001a905350600061389684600261456a565b6138a190600161440e565b90505b6001811115613919576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138d5576138d5614522565b1a60f81b8282815181106138eb576138eb614522565b60200101906001600160f81b031916908160001a90535060049490941c9361391281614794565b90506138a4565b5083156133a35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113c7565b82805461397490614332565b90600052602060002090601f01602090048101928261399657600085556139dc565b82601f106139af5782800160ff198235161785556139dc565b828001600101855582156139dc579182015b828111156139dc5782358255916020019190600101906139c1565b506139e8929150613a60565b5090565b8280546139f890614332565b90600052602060002090601f016020900481019282613a1a57600085556139dc565b82601f10613a3357805160ff19168380011785556139dc565b828001600101855582156139dc579182015b828111156139dc578251825591602001919060010190613a45565b5b808211156139e85760008155600101613a61565b634e487b7160e01b600052601160045260246000fd5b600082821015613a9d57613a9d613a75565b500390565b60008085851115613ab257600080fd5b83861115613abf57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613af95780818660140360031b1b83161692505b505092915050565b60005b83811015613b1c578181015183820152602001613b04565b83811115610f765750506000910152565b60008251613b3f818460208701613b01565b9190910192915050565b600060208284031215613b5b57600080fd5b81356001600160e01b0319811681146133a357600080fd5b60008151808452613b8b816020860160208601613b01565b601f01601f19169290920160200192915050565b6020815260006133a36020830184613b73565b6001600160a01b03811681146115ed57600080fd5b60008060408385031215613bda57600080fd5b8235613be581613bb2565b946020939093013593505050565b60008083601f840112613c0557600080fd5b5081356001600160401b03811115613c1c57600080fd5b602083019150836020828501011115613c3457600080fd5b9250929050565b60008060208385031215613c4e57600080fd5b82356001600160401b03811115613c6457600080fd5b613c7085828601613bf3565b90969095509350505050565b600060208284031215613c8e57600080fd5b81356133a381613bb2565b60008083601f840112613cab57600080fd5b5081356001600160401b03811115613cc257600080fd5b6020830191508360208260051b8501011115613c3457600080fd5b60008060008060408587031215613cf357600080fd5b84356001600160401b0380821115613d0a57600080fd5b613d1688838901613c99565b90965094506020870135915080821115613d2f57600080fd5b50613d3c87828801613c99565b95989497509550505050565b600060208284031215613d5a57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215613d8857600080fd5b50508035926020909101359150565b600080600060608486031215613dac57600080fd5b8335613db781613bb2565b92506020840135613dc781613bb2565b929592945050506040919091013590565b60008060208385031215613deb57600080fd5b82356001600160401b03811115613e0157600080fd5b613c7085828601613c99565b600081518084526020808501945080840160005b83811015613e465781516001600160a01b031687529582019590820190600101613e21565b509495945050505050565b6020815260006133a36020830184613e0d565b606081526000613e776060830186613e0d565b82810360208481019190915285518083528682019282019060005b81811015613eae57845183529383019391830191600101613e92565b5050809350505050826040830152949350505050565b60008060408385031215613ed757600080fd5b823591506020830135613ee981613bb2565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613f2c57613f2c613ef4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613f5a57613f5a613ef4565b604052919050565b60006001600160401b03821115613f7b57613f7b613ef4565b50601f01601f191660200190565b600082601f830112613f9a57600080fd5b8135613fad613fa882613f62565b613f32565b818152846020838601011115613fc257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ff457600080fd5b8335613fff81613bb2565b9250602084013561400f81613bb2565b915060408401356001600160401b0381111561402a57600080fd5b61403686828701613f89565b9150509250925092565b600082601f83011261405157600080fd5b813560206001600160401b0382111561406c5761406c613ef4565b8160051b61407b828201613f32565b928352848101820192828101908785111561409557600080fd5b83870192505b848310156140bd5782356140ae81613bb2565b8252918301919083019061409b565b979650505050505050565b6000602082840312156140da57600080fd5b81356001600160401b038111156140f057600080fd5b6140fc84828501614040565b949350505050565b602080825282518282018190526000919060409081850190868401855b8281101561415957815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101614121565b5091979650505050505050565b6000806000806060858703121561417c57600080fd5b843561418781613bb2565b93506020850135925060408501356001600160401b038111156141a957600080fd5b613d3c87828801613bf3565b600080600080600080600061012080898b0312156141d257600080fd5b88356141dd81613bb2565b97506020898101356141ee81613bb2565b975060408a01356141fe81613bb2565b965060608a01356001600160401b038082111561421a57600080fd5b6142268d838e01613f89565b975060808c013591508082111561423c57600080fd5b506142498c828d01613f89565b95505060a08a013593508a60df8b011261426257600080fd5b61426a613f0a565b918a0191808c84111561427c57600080fd5b60c08c015b848110156142a157803561429481613bb2565b8352918301918301614281565b508094505050505092959891949750929550565b600080604083850312156142c857600080fd5b82356142d381613bb2565b91506020830135613ee981613bb2565b600080604083850312156142f657600080fd5b823561430181613bb2565b915060208301356001600160401b0381111561431c57600080fd5b61432885828601614040565b9150509250929050565b600181811c9082168061434657607f821691505b60208210810361436657634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006140fc60208301848661436c565b8183526000602080850194508260005b85811015613e465781356143cc81613bb2565b6001600160a01b0316875295820195908201906001016143b9565b6040815260006143fb6040830186886143a9565b82810360208401526140bd8185876143a9565b6000821982111561442157614421613a75565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c908083168061445957607f831692505b6020808410820361447a57634e487b7160e01b600052602260045260246000fd5b8388526020880182801561449557600181146144a6576144d1565b60ff198716825282820197506144d1565b60008981526020902060005b878110156144cb578154848201529086019084016144b2565b83019850505b5050505050505092915050565b6040815260006144f1604083018661443f565b828103602084015261450481858761436c565b9695505050505050565b6020815260006140fc6020830184866143a9565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561454a57600080fd5b5051919050565b60006001820161456357614563613a75565b5060010190565b600081600019048311821515161561458457614584613a75565b500290565b6000826145a657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082018190526000906140fc90830184613b73565b6000602082840312156145e157600080fd5b81516133a381613bb2565b6000602082840312156145fe57600080fd5b81516001600160401b0381111561461457600080fd5b8201601f8101841361462557600080fd5b8051614633613fa882613f62565b81815285602083850101111561464857600080fd5b614659826020830160208601613b01565b95945050505050565b8381528260208201526060604082015260006146596060830184613b73565b60006020828403121561469357600080fd5b815180151581146133a357600080fd5b6020815260006133a3602083018461443f565b6001600160a01b03831681526040602082018190526000906140fc90830184613e0d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614757816017850160208801613b01565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614788816028840160208801613b01565b01602801949350505050565b6000816147a3576147a3613a75565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a26469706673582212205139021815553afc0f16c1bc7e027f005ab22adad8a3ee7864a3f91722236f7964736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104965760003560e01c8063870ffde211610262578063adc9772e11610151578063d673de46116100ce578063f2888dbb11610092578063f2888dbb14610ba0578063f3aea65014610bb3578063f4350c2414610bc6578063f4408e4b14610bd9578063fc0c546a14610be1578063ffff59a614610bf457610496565b8063d673de4614610b32578063dd62ed3e14610b52578063e364215314610b65578063e58378bb14610b78578063e8e658b414610b8d57610496565b8063bc9b30c811610115578063bc9b30c814610ade578063bed6ff0914610af1578063c229918e14610b04578063d1b6861114610b0c578063d547741f14610b1f57610496565b8063adc9772e14610a27578063b07f3c4714610a3a578063b72cd7a814610a98578063ba2bfc0a14610aab578063bc697ec514610acb57610496565b8063a457c2d7116101df578063a9059cbb116101a3578063a9059cbb146109dd578063a93a019f146109f0578063a99fa31a14610a03578063aa5703ad14610a16578063aa77fd5514610a1e57610496565b8063a457c2d71461097e578063a48dca1814610991578063a4c0ed36146109a4578063a63ed2c8146109b7578063a74194af146109ca57610496565b80639413462c116102265780639413462c1461093f57806395d89b411461094857806398833130146109505780639fa6dd3514610963578063a217fddf1461097657610496565b8063870ffde2146108ea57806387396e3b146108f35780638da5cb5b14610906578063918b5be11461091957806391d148541461092c57610496565b8063313ce5671161038957806358fc614a116103065780636c68c0e1116102ca5780636c68c0e11461086957806370a082311461087c578063799e25901461088f5780637bf713b6146108a25780637d429385146108b55780637e82fd6f146108d557610496565b806358fc614a146108045780635dff6e9f146108245780635e61bb871461083757806363d1ecf21461084357806364f1abb71461085657610496565b80634a178fe41161034d5780634a178fe4146107bb5780634b095c03146107ce57806350d3ba9e146107e157806354fd4d50146107f4578063558a1568146107fb57610496565b8063313ce5671461075e57806336568abe1461076d578063392f37e9146107805780633950935114610788578063430457e11461079b57610496565b80631c53c28011610417578063248a9ca3116103db578063248a9ca3146106e957806325c335491461070c5780632e9498241461071f5780632ebd89d1146107345780632f2ff15d1461074b57610496565b80631c53c2801461067d57806320fed94f1461069d57806321194bd7146106b057806321a76907146106c357806323b872dd146106d657610496565b80630fd6ff491161045e5780630fd6ff491461063257806311606010146106475780631401f70b1461064f57806314797daa1461066257806318160ddd1461067557610496565b806301ffc9a7146105b657806304cbab8b146105de57806306fdde03146105f5578063092c5b3b1461060a578063095ea7b31461061f575b60003660603330146104bb57604051634ca8886760e01b815260040160405180910390fd5b81600084826104cb601482613a8b565b6104d792859290613aa2565b6104e091613acc565b60601c905060008581866104f5602087613a8b565b9261050293929190613aa2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061055491508590613b2d565b600060405180830381855af49150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b5091509150816105a657805181602001fd5b8051975060200195505050505050f35b6105c96105c4366004613b49565b610c07565b60405190151581526020015b60405180910390f35b6105e760c95481565b6040519081526020016105d5565b6105fd610c3e565b6040516105d59190613b9f565b6105e76000805160206147cc83398151915281565b6105c961062d366004613bc7565b610cd0565b610645610640366004613c3b565b610ce8565b005b6105c9610d5e565b61064561065d366004613c7c565b610da9565b610645610670366004613cdd565b610e44565b6099546105e7565b61069061068b366004613d48565b610eb1565b6040516105d59190613d61565b6106456106ab366004613d75565b610edb565b6106456106be366004613c3b565b610f7c565b60d054610690906001600160a01b031681565b6105c96106e4366004613d97565b61101c565b6105e76106f7366004613d48565b60009081526065602052604090206001015490565b61064561071a366004613dd8565b611040565b6107276110a6565b6040516105d59190613e51565b61073c611107565b6040516105d593929190613e64565b610645610759366004613ec4565b611336565b604051601281526020016105d5565b61064561077b366004613ec4565b61135b565b6105fd6113da565b6105c9610796366004613bc7565b611468565b6105e76107a9366004613c7c565b60d96020526000908152604090205481565b6106456107c9366004613fdf565b61148a565b6106456107dc366004613bc7565b61151e565b6105e76107ef3660046140c8565b611580565b60036105e7565b6105e760d45481565b6105e7610812366004613c7c565b60d66020526000908152604090205481565b610645610832366004613d48565b6115af565b60db5460dc54146105c9565b60ce54610690906001600160a01b031681565b610645610864366004613c7c565b6115f0565b610645610877366004613d48565b6118bc565b6105e761088a366004613c7c565b6118ee565b60cb54610690906001600160a01b031681565b6106456108b0366004613d48565b611909565b6105e76108c3366004613c7c565b60d76020526000908152604090205481565b6108dd611a94565b6040516105d59190614104565b6105e760ca5481565b610645610901366004613d48565b611bb3565b60d254610690906001600160a01b031681565b610645610927366004613c3b565b611bdf565b6105c961093a366004613ec4565b611c71565b6105e760db5481565b6105fd611c9c565b60d154610690906001600160a01b031681565b610645610971366004613d48565b611cab565b6105e7600081565b6105c961098c366004613bc7565b611d49565b60cf54610690906001600160a01b031681565b6106456109b2366004614166565b611dc4565b6105e76109c5366004613c7c565b611e4b565b6106906109d8366004613d48565b611ecf565b6105c96109eb366004613bc7565b611edf565b6106456109fe366004613bc7565b611eed565b610645610a113660046141b5565b612002565b6105fd612268565b6105e760dc5481565b610645610a35366004613bc7565b6122e4565b610a73610a48366004613d48565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105d5565b60cc54610690906001600160a01b031681565b6105e7610ab9366004613c7c565b60d86020526000908152604090205481565b610645610ad9366004613bc7565b612346565b60cd54610690906001600160a01b031681565b610645610aff366004613d97565b61238f565b6105e76123ec565b610645610b1a366004613bc7565b61247a565b610645610b2d366004613ec4565b6124c3565b6105e7610b40366004613c7c565b60de6020526000908152604090205481565b6105e7610b603660046142b5565b6124e8565b60e054610690906001600160a01b031681565b6105e76000805160206147ac83398151915281565b610645610b9b3660046140c8565b612513565b610645610bae366004613c7c565b6127da565b610645610bc1366004613bc7565b612818565b610645610bd43660046142e3565b612861565b6105fd61288e565b60d354610690906001600160a01b031681565b610645610c02366004613bc7565b61289b565b60006001600160e01b03198216637965db0b60e01b1480610c3857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610c4d90614332565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7990614332565b8015610cc65780601f10610c9b57610100808354040283529160200191610cc6565b820191906000526020600020905b815481529060010190602001808311610ca957829003601f168201915b5050505050905090565b600033610cde8185856128e4565b5060019392505050565b33600090815260de60205260408120549003610d1757604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610d52929190614395565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610da2916001600160a01b0390911690612a08565b1515919050565b610dc16000805160206147cc83398151915233611c71565b610dde57604051631a76708960e21b815260040160405180910390fd5b60d054604051610e40916001600160a01b03169063af9ee81d60e01b90610e09908590602401613d61565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a08565b5050565b610e5c6000805160206147cc83398151915233611c71565b610e7957604051631a76708960e21b815260040160405180910390fd5b60ce54604051610eaa916001600160a01b031690635e2cb23f60e11b90610e099088908890889088906024016143e7565b5050505050565b60dd8181548110610ec157600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f0a5760405163012d886f60e51b815260040160405180910390fd5b8215610f49578160ca6000828254610f22919061440e565b90915550610f31905083612aa9565b8160ca6000828254610f439190613a8b565b90915550505b60d054604051610f76916001600160a01b031690631644f38560e31b90610e099085908790602401614426565b50505050565b610f946000805160206147cc83398151915233611c71565b610fb157604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe790610fe69060df90869086906004016144de565b600060405180830381600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050505050565b60003361102a858285612bbb565b611035858585612c2f565b506001949350505050565b6110586000805160206147cc83398151915233611c71565b61107557604051631a76708960e21b815260040160405180910390fd5b60ce546040516110a1916001600160a01b03169062b08f2560e61b90610e09908690869060240161450e565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610cc657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110e0575050505050905090565b606080600060d5805490506001600160401b0381111561112957611129613ef4565b604051908082528060200260200182016040528015611152578160200160208202803683370190505b5060d5549093506001600160401b0381111561117057611170613ef4565b604051908082528060200260200182016040528015611199578160200160208202803683370190505b50915060005b60d55481101561129d57600060d582815481106111be576111be614522565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106111f1576111f1614522565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c049061122c903090600401613d61565b602060405180830381865afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190614538565b84838151811061127f5761127f614522565b6020908102919091010152508061129581614551565b91505061119f565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190614538565b61131b6123ec565b611325919061456a565b61132f9190614589565b9050909192565b60008281526065602052604090206001015461135181612e4a565b6110a18383612e54565b6001600160a01b03811633146113d05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e408282612eda565b60e180546113e790614332565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614332565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b505050505081565b600033610cde81858561147b83836124e8565b611485919061440e565b6128e4565b33600090815260de602052604081205490036114b957604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906114e790859085906004016145ab565b600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50505050505050565b6115366000805160206147cc83398151915233611c71565b61155357604051631a76708960e21b815260040160405180910390fd5b60d0546040516110a1916001600160a01b03169063d572a9cd60e01b90610e099086908690602401614426565b60d054604051600091610c38916001600160a01b039091169062d8aad560e51b90610e09908690602401613e51565b6115c76000805160206147cc83398151915233611c71565b6115e457604051631a76708960e21b815260040160405180910390fd5b6115ed81612f41565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166791906145cf565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116929190613d61565b602060405180830381865afa1580156116af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d39190614538565b6000036116f3576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117669190614538565b611770904261440e565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117eb9190614538565b6117f5908361440e565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b815260040161185a9190613d61565b600060405180830381865afa158015611877573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261189f91908101906145ec565b6040516118ae93929190614662565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e40916001600160a01b031690630744132360e21b90606401610e09565b6001600160a01b031660009081526097602052604090205490565b33600081815260d6602052604081205490036119385760405163012d886f60e51b815260040160405180910390fd5b61194182612aa9565b6001600160a01b038116600090815260d860205260408120805484929061196990849061440e565b925050819055508160ca6000828254611982919061440e565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78916119d791613a8b565b60405190815260200160405180910390a260008051602061482c83398151915260ca5460c954611a079190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611a37903090600401613d61565b602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614538565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611aa89190613a8b565b9050806001600160401b03811115611ac257611ac2613ef4565b604051908082528060200260200182016040528015611b2057816020015b611b0d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611ae05790505b50915060005b81811015611bae5760da60008260dc54611b40919061440e565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611b9057611b90614522565b60200260200101819052508080611ba690614551565b915050611b26565b505090565b60cf5460405160248101839052610e40916001600160a01b03169063211cccd160e21b90604401610e09565b611bf76000805160206147cc83398151915233611c71565b611c1457604051631a76708960e21b815260040160405180910390fd5b611c2060e18383613968565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611c659086908690614395565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c4d90614332565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d349190614681565b50611d3f3382612fde565b6115ed6000611bb3565b60003381611d5782866124e8565b905083811015611db75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016113c7565b61103582868684036128e4565b60d3546001600160a01b03163314611def5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e155750610f76565b846014839003611e2a5750823560601c611e37565b6020839003611e37575082355b611e418186612fde565b6110146000611bb3565b6000611e56826118ee565b600003611e6557506000919050565b610c38630de731f360e31b611e79846118ee565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261324d565b60d58181548110610ec157600080fd5b600033610cde818585612c2f565b60db5460dc541480611f93575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190614538565b60dc54600090815260da6020526040902060020154611f90919061440e565b42105b15611fcd57611fb06000805160206147cc83398151915233611c71565b611fcd57604051631a76708960e21b815260040160405180910390fd5b60d054604051611ff8916001600160a01b031690633d16f42d60e01b90610e09908690602401613d61565b50610e4081611bb3565b600054610100900460ff16158080156120225750600054600160ff909116105b8061203c5750303b15801561203c575060005460ff166001145b61209f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113c7565b6000805460ff1916600117905580156120c2576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556120e56132e3565b6120fd6000805160206147ac8339815191528761330c565b6121156000805160206147cc8339815191528761330c565b61213b6000805160206147cc8339815191526000805160206147ac833981519152613316565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556121b08580613361565b6121bb60003361330c565b83516121ce9060e19060208701906139ec565b506121d883612f41565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612217916001600160a01b031690612a08565b50801561225e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd29061229a9060df906004016146a3565b600060405180830381865afa1580156122b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122df91908101906145ec565b905090565b6122fc6000805160206147cc83398151915233611c71565b61231957604051631a76708960e21b815260040160405180910390fd5b60d0546040516110a1916001600160a01b03169063aa0d97b360e01b90610e099086908690602401614426565b600061235181612e4a565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b33600090815260de602052604081205490036123be57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906114e79085908590600401614426565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a0823190612425903090600401613d61565b602060405180830381865afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190614538565b612470919061440e565b6122df9190613a8b565b6124926000805160206147cc83398151915233611c71565b6124af57604051631a76708960e21b815260040160405180910390fd5b6124b9828261151e565b610e406000611bb3565b6000828152606560205260409020600101546124de81612e4a565b6110a18383612eda565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600061251d6123ec565b9050600061252a83611580565b9050336125456000805160206147cc83398151915282611c71565b15801561256857506001600160a01b038116600090815260de6020526040902054155b156127d0576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ef9190614538565b6125f9908661456a565b6126039190614589565b9050808311156127ce576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561266b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268f9190614538565b612699908661456a565b6126a39190614589565b90506126ae81612aa9565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906126e09086908590600401614426565b6020604051808303816000875af11580156126ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127239190614681565b5060008051602061482c83398151915260ca5460c9546127439190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612773903090600401613d61565b602060405180830381865afa158015612790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b49190614538565b6040805192835260208301919091520160405180910390a1505b505b610f766000611bb3565b6127f26000805160206147cc83398151915233611c71565b61280f57604051631a76708960e21b815260040160405180910390fd5b611d3f81610da9565b600061282381612e4a565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b60cf546040516110a1916001600160a01b031690637a227c9f60e01b90610e0990869086906024016146b6565b60df80546113e790614332565b60006128a681612e4a565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f769190632522e97360e11b90604401610e09565b6001600160a01b0383166129465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016113c7565b6001600160a01b0382166129a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016113c7565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612a259190613b2d565b600060405180830381855af49150503d8060008114612a60576040519150601f19603f3d011682016040523d82523d6000602084013e612a65565b606091505b509150915081612a9d578051600003612a9557848460405163918623b760e01b81526004016113c79291906145ab565b805181602001fd5b60200151949350505050565b60d254600090612ac1906001600160a01b03166118ee565b905080600003612acf575050565b60cc5460405160248101849052600091612b00916001600160a01b0390911690632b911c0960e21b90604401610e09565b90506000612b0e8383613392565b60d254909150612b27906001600160a01b0316826133aa565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b03166000805160206147ec833981519152612b8c826118ee565b609954612b976123ec565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612bc784846124e8565b90506000198114610f765781811015612c225760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016113c7565b610f7684848484036128e4565b6000612c3a836118ee565b159050612c488484846134cc565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb69190614538565b905080612cc2866118ee565b108015612cd757506000612cd5866118ee565b115b15612d0957612ce5856118ee565b6040516324c6940760e01b81526004810191909152602481018290526044016113c7565b80612d13856118ee565b1015612d2257612ce5846118ee565b8115612d665760cb546001600160a01b031615612d665760cb54604051612d64916001600160a01b03169063217fb33b60e01b90610e09908890602401613d61565b505b60cd546001600160a01b031615612dad5760cd546040516001600160a01b03878116602483015260006044830152612dab921690633608993560e21b90606401610e09565b505b846001600160a01b03166000805160206147ec833981519152612dcf876118ee565b609954612dda6123ec565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b03166000805160206147ec833981519152612e1a866118ee565b609954612e256123ec565b6040805193845260208401929092529082015260600160405180910390a25050505050565b6115ed8133613665565b612e5e8282611c71565b610e405760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612e963390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ee48282611c71565b15610e405760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c95415612f62576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a7640000811115612f8e57604051631e6f460160e31b8152600481018290526024016113c7565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090612fd39060e1906146a3565b60405180910390a350565b60cc546040516024810183905260448101839052600091613016916001600160a01b0390911690633a49b55760e21b90606401610e09565b905061302283826136be565b60d2546001600160a01b038481169116146131005760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614538565b9050806130b1856118ee565b10156130c057612ce5846118ee565b60cb546001600160a01b0316156130fe5760cb546040516130fc916001600160a01b03169063217fb33b60e01b90610e09908890602401613d61565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061314d9085815260200190565b60405180910390a2826001600160a01b03166000805160206147ec833981519152613177856118ee565b6099546131826123ec565b6040805193845260208401929092529082015260600160405180910390a260008051602061482c83398151915260ca5460c9546131bf9190613a8b565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a08231906131ef903090600401613d61565b602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132309190614538565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b03168460405161326a9190613b2d565b600060405180830381855afa9150503d80600081146132a5576040519150601f19603f3d011682016040523d82523d6000602084013e6132aa565b606091505b5091509150816132d8578051600003612a95578360405163029801d760e41b81526004016113c79190613b9f565b602001519392505050565b600054610100900460ff1661330a5760405162461bcd60e51b81526004016113c7906146da565b565b610e408282612e54565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166133885760405162461bcd60e51b81526004016113c7906146da565b610e40828261376d565b60008183106133a157816133a3565b825b9392505050565b6001600160a01b03821661340a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016113c7565b6001600160a01b0382166000908152609760205260409020548181101561347e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016113c7565b6001600160a01b038316600081815260976020908152604080832086860390556099805487900390555185815291929160008051602061480c833981519152910160405180910390a3505050565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016113c7565b6001600160a01b0382166135925760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016113c7565b6001600160a01b0383166000908152609760205260409020548181101561360a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016113c7565b6001600160a01b03808516600081815260976020526040808220868603905592861680825290839020805486019055915160008051602061480c833981519152906136589086815260200190565b60405180910390a3610f76565b61366f8282611c71565b610e405761367c816137bb565b6136878360206137cd565b604051602001613698929190614725565b60408051601f198184030181529082905262461bcd60e51b82526113c791600401613b9f565b6001600160a01b0382166137145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016113c7565b8060996000828254613726919061440e565b90915550506001600160a01b03821660008181526097602090815260408083208054860190555184815260008051602061480c833981519152910160405180910390a35050565b600054610100900460ff166137945760405162461bcd60e51b81526004016113c7906146da565b81516137a790609a9060208501906139ec565b5080516110a190609b9060208401906139ec565b6060610c386001600160a01b03831660145b606060006137dc83600261456a565b6137e790600261440e565b6001600160401b038111156137fe576137fe613ef4565b6040519080825280601f01601f191660200182016040528015613828576020820181803683370190505b509050600360fc1b8160008151811061384357613843614522565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061387257613872614522565b60200101906001600160f81b031916908160001a905350600061389684600261456a565b6138a190600161440e565b90505b6001811115613919576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138d5576138d5614522565b1a60f81b8282815181106138eb576138eb614522565b60200101906001600160f81b031916908160001a90535060049490941c9361391281614794565b90506138a4565b5083156133a35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113c7565b82805461397490614332565b90600052602060002090601f01602090048101928261399657600085556139dc565b82601f106139af5782800160ff198235161785556139dc565b828001600101855582156139dc579182015b828111156139dc5782358255916020019190600101906139c1565b506139e8929150613a60565b5090565b8280546139f890614332565b90600052602060002090601f016020900481019282613a1a57600085556139dc565b82601f10613a3357805160ff19168380011785556139dc565b828001600101855582156139dc579182015b828111156139dc578251825591602001919060010190613a45565b5b808211156139e85760008155600101613a61565b634e487b7160e01b600052601160045260246000fd5b600082821015613a9d57613a9d613a75565b500390565b60008085851115613ab257600080fd5b83861115613abf57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613af95780818660140360031b1b83161692505b505092915050565b60005b83811015613b1c578181015183820152602001613b04565b83811115610f765750506000910152565b60008251613b3f818460208701613b01565b9190910192915050565b600060208284031215613b5b57600080fd5b81356001600160e01b0319811681146133a357600080fd5b60008151808452613b8b816020860160208601613b01565b601f01601f19169290920160200192915050565b6020815260006133a36020830184613b73565b6001600160a01b03811681146115ed57600080fd5b60008060408385031215613bda57600080fd5b8235613be581613bb2565b946020939093013593505050565b60008083601f840112613c0557600080fd5b5081356001600160401b03811115613c1c57600080fd5b602083019150836020828501011115613c3457600080fd5b9250929050565b60008060208385031215613c4e57600080fd5b82356001600160401b03811115613c6457600080fd5b613c7085828601613bf3565b90969095509350505050565b600060208284031215613c8e57600080fd5b81356133a381613bb2565b60008083601f840112613cab57600080fd5b5081356001600160401b03811115613cc257600080fd5b6020830191508360208260051b8501011115613c3457600080fd5b60008060008060408587031215613cf357600080fd5b84356001600160401b0380821115613d0a57600080fd5b613d1688838901613c99565b90965094506020870135915080821115613d2f57600080fd5b50613d3c87828801613c99565b95989497509550505050565b600060208284031215613d5a57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215613d8857600080fd5b50508035926020909101359150565b600080600060608486031215613dac57600080fd5b8335613db781613bb2565b92506020840135613dc781613bb2565b929592945050506040919091013590565b60008060208385031215613deb57600080fd5b82356001600160401b03811115613e0157600080fd5b613c7085828601613c99565b600081518084526020808501945080840160005b83811015613e465781516001600160a01b031687529582019590820190600101613e21565b509495945050505050565b6020815260006133a36020830184613e0d565b606081526000613e776060830186613e0d565b82810360208481019190915285518083528682019282019060005b81811015613eae57845183529383019391830191600101613e92565b5050809350505050826040830152949350505050565b60008060408385031215613ed757600080fd5b823591506020830135613ee981613bb2565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613f2c57613f2c613ef4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613f5a57613f5a613ef4565b604052919050565b60006001600160401b03821115613f7b57613f7b613ef4565b50601f01601f191660200190565b600082601f830112613f9a57600080fd5b8135613fad613fa882613f62565b613f32565b818152846020838601011115613fc257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ff457600080fd5b8335613fff81613bb2565b9250602084013561400f81613bb2565b915060408401356001600160401b0381111561402a57600080fd5b61403686828701613f89565b9150509250925092565b600082601f83011261405157600080fd5b813560206001600160401b0382111561406c5761406c613ef4565b8160051b61407b828201613f32565b928352848101820192828101908785111561409557600080fd5b83870192505b848310156140bd5782356140ae81613bb2565b8252918301919083019061409b565b979650505050505050565b6000602082840312156140da57600080fd5b81356001600160401b038111156140f057600080fd5b6140fc84828501614040565b949350505050565b602080825282518282018190526000919060409081850190868401855b8281101561415957815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101614121565b5091979650505050505050565b6000806000806060858703121561417c57600080fd5b843561418781613bb2565b93506020850135925060408501356001600160401b038111156141a957600080fd5b613d3c87828801613bf3565b600080600080600080600061012080898b0312156141d257600080fd5b88356141dd81613bb2565b97506020898101356141ee81613bb2565b975060408a01356141fe81613bb2565b965060608a01356001600160401b038082111561421a57600080fd5b6142268d838e01613f89565b975060808c013591508082111561423c57600080fd5b506142498c828d01613f89565b95505060a08a013593508a60df8b011261426257600080fd5b61426a613f0a565b918a0191808c84111561427c57600080fd5b60c08c015b848110156142a157803561429481613bb2565b8352918301918301614281565b508094505050505092959891949750929550565b600080604083850312156142c857600080fd5b82356142d381613bb2565b91506020830135613ee981613bb2565b600080604083850312156142f657600080fd5b823561430181613bb2565b915060208301356001600160401b0381111561431c57600080fd5b61432885828601614040565b9150509250929050565b600181811c9082168061434657607f821691505b60208210810361436657634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006140fc60208301848661436c565b8183526000602080850194508260005b85811015613e465781356143cc81613bb2565b6001600160a01b0316875295820195908201906001016143b9565b6040815260006143fb6040830186886143a9565b82810360208401526140bd8185876143a9565b6000821982111561442157614421613a75565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c908083168061445957607f831692505b6020808410820361447a57634e487b7160e01b600052602260045260246000fd5b8388526020880182801561449557600181146144a6576144d1565b60ff198716825282820197506144d1565b60008981526020902060005b878110156144cb578154848201529086019084016144b2565b83019850505b5050505050505092915050565b6040815260006144f1604083018661443f565b828103602084015261450481858761436c565b9695505050505050565b6020815260006140fc6020830184866143a9565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561454a57600080fd5b5051919050565b60006001820161456357614563613a75565b5060010190565b600081600019048311821515161561458457614584613a75565b500290565b6000826145a657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082018190526000906140fc90830184613b73565b6000602082840312156145e157600080fd5b81516133a381613bb2565b6000602082840312156145fe57600080fd5b81516001600160401b0381111561461457600080fd5b8201601f8101841361462557600080fd5b8051614633613fa882613f62565b81815285602083850101111561464857600080fd5b614659826020830160208601613b01565b95945050505050565b8381528260208201526060604082015260006146596060830184613b73565b60006020828403121561469357600080fd5b815180151581146133a357600080fd5b6020815260006133a3602083018461443f565b6001600160a01b03831681526040602082018190526000906140fc90830184613e0d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614757816017850160208801613b01565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614788816028840160208801613b01565b01602801949350505050565b6000816147a3576147a3613a75565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a26469706673582212205139021815553afc0f16c1bc7e027f005ab22adad8a3ee7864a3f91722236f7964736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
