{
  "contractName": "Redistribution",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staking",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "postageContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oracleContract",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyClaimed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyCommitted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyRevealed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "BatchDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "BucketDiffers",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CommitRoundNotStarted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CommitRoundOver",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FirstRevealDone",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "InclusionProofFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "IndexOutsideSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LastElementCheckFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MustStake2Rounds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoCommitsReceived",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoMatchingCommit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoReveals",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotAdmin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotClaimPhase",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotCommitPhase",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotMatchingOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotRevealPhase",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotStaked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPauser",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfDepth",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "OutOfDepthClaim",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "OutOfDepthReveal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PhaseLastBlock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RandomElementCheckFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "trALast",
          "type": "bytes32"
        }
      ],
      "name": "ReserveCheckFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "SigRecoveryFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "SocCalcNotMatching",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "SocVerificationFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongPhase",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "validChunkCount",
          "type": "uint256"
        }
      ],
      "name": "ChunkCount",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "roundNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "overlay",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "height",
          "type": "uint8"
        }
      ],
      "name": "Committed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "CountCommits",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "CountReveals",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "roundNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "anchor",
          "type": "bytes32"
        }
      ],
      "name": "CurrentRevealAnchor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "redundancyCount",
          "type": "uint16"
        }
      ],
      "name": "PriceAdjustmentSkipped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "roundNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "overlay",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakeDensity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "reserveCommitment",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "depth",
          "type": "uint8"
        }
      ],
      "name": "Revealed",
      "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": false,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "depth",
          "type": "uint8"
        }
      ],
      "name": "TruthSelected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "overlay",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "depth",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "stake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeDensity",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "hash",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct Redistribution.Reveal",
          "name": "winner",
          "type": "tuple"
        }
      ],
      "name": "WinnerSelected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "WithdrawFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "indexInRC",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "chunkAddress",
          "type": "bytes32"
        }
      ],
      "name": "transformedChunkAddressFromInclusionProof",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OracleContract",
      "outputs": [
        {
          "internalType": "contract IPriceOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PostageContract",
      "outputs": [
        {
          "internalType": "contract IPostageStamp",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "Stakes",
      "outputs": [
        {
          "internalType": "contract IStakeRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32[]",
              "name": "proofSegments",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments2",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment2",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "chunkSpan",
              "type": "uint64"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments3",
              "type": "bytes32[]"
            },
            {
              "components": [
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "postageId",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "index",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "timeStamp",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Redistribution.PostageProof",
              "name": "postageProof",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "signer",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "identifier",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "chunkAddr",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Redistribution.SOCProof[]",
              "name": "socProof",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Redistribution.ChunkInclusionProof",
          "name": "entryProof1",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bytes32[]",
              "name": "proofSegments",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments2",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment2",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "chunkSpan",
              "type": "uint64"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments3",
              "type": "bytes32[]"
            },
            {
              "components": [
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "postageId",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "index",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "timeStamp",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Redistribution.PostageProof",
              "name": "postageProof",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "signer",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "identifier",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "chunkAddr",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Redistribution.SOCProof[]",
              "name": "socProof",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Redistribution.ChunkInclusionProof",
          "name": "entryProof2",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bytes32[]",
              "name": "proofSegments",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments2",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes32",
              "name": "proveSegment2",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "chunkSpan",
              "type": "uint64"
            },
            {
              "internalType": "bytes32[]",
              "name": "proofSegments3",
              "type": "bytes32[]"
            },
            {
              "components": [
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "postageId",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "index",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "timeStamp",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Redistribution.PostageProof",
              "name": "postageProof",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "signer",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "identifier",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "chunkAddr",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Redistribution.SOCProof[]",
              "name": "socProof",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Redistribution.ChunkInclusionProof",
          "name": "entryProofLast",
          "type": "tuple"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_obfuscatedHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "_roundNumber",
          "type": "uint64"
        }
      ],
      "name": "commit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentClaimRound",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentCommitRound",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "currentCommits",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "overlay",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "revealed",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "height",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "obfuscatedHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "revealIndex",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentMinimumDepth",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentPhaseClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentPhaseCommit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentPhaseReveal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRevealRound",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "currentReveals",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "overlay",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "depth",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakeDensity",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRound",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRoundAnchor",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "returnVal",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRoundReveals",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "overlay",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "depth",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "stake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeDensity",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "hash",
              "type": "bytes32"
            }
          ],
          "internalType": "struct Redistribution.Reveal[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentSeed",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "A",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "B",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "minimum",
          "type": "uint8"
        }
      ],
      "name": "inProximity",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "_depth",
          "type": "uint8"
        }
      ],
      "name": "isParticipatingInUpcomingRound",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_overlay",
          "type": "bytes32"
        }
      ],
      "name": "isWinner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextSeed",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_depth",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_revealNonce",
          "type": "bytes32"
        }
      ],
      "name": "reveal",
      "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": "uint8",
          "name": "_penaltyMultiplierDisagreement",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "_penaltyMultiplierNonRevealed",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "_penaltyRandomFactor",
          "type": "uint8"
        }
      ],
      "name": "setFreezingParams",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_sampleMaxValue",
          "type": "uint256"
        }
      ],
      "name": "setSampleMaxValue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "winner",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "overlay",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "depth",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakeDensity",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_overlay",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "_depth",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "revealNonce",
          "type": "bytes32"
        }
      ],
      "name": "wrapCommit",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526008805462ffffff60c01b19166264020160c01b1790557dba1914b54e0348a1028d1a103a95ed55c4004b9d332400000000000000006009553480156200004a57600080fd5b506040516200470c3803806200470c8339810160408190526200006d916200019d565b60018054600380546001600160a01b03199081166001600160a01b03888116919091179092556001600160a81b0319909216610100868316021790925560028054909116918316919091179055620000c7600033620000d0565b505050620001e7565b620000dc8282620000e0565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000dc576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200013c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b03811681146200019857600080fd5b919050565b600080600060608486031215620001b357600080fd5b620001be8462000180565b9250620001ce6020850162000180565b9150620001de6040850162000180565b90509250925092565b61451580620001f76000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806377c75d1011610130578063b6cd5822116100b8578063dfbf53ae1161007c578063dfbf53ae14610524578063f4e6fcca14610554578063f69ee1d114610567578063f7b188a51461057a578063fb00f2f31461058257600080fd5b8063b6cd5822146104c9578063c46b4029146104dc578063ce987745146104f6578063d1e8b63d14610509578063d547741f1461051157600080fd5b80638456cb59116100ff5780638456cb59146104965780638a19c8bc1461049e5780638d8b6428146104a657806391d14854146104ae578063a217fddf146104c157600080fd5b806377c75d10146104115780637fe019c61461042457806382b39b1b1461043e578063832206261461048e57600080fd5b80635c975abb116101b357806364c34a851161018257806364c34a851461035957806369bfac011461036157806369da91141461038c5780636f94aaf21461039f57806372286cba146103b957600080fd5b80635c975abb146103205780635d4844ea1461032b57806362fd29ae1461033e57806363f5cf7c1461034657600080fd5b80632a4e6249116101fa5780632a4e6249146102c85780632f2ff15d146102dd5780632f3906da146102f257806336568abe146102fa5780635838d6731461030d57600080fd5b806301ffc9a71461022c5780631736d472146102545780631835009614610267578063248a9ca314610297575b600080fd5b61023f61023a366004613c67565b610595565b60405190151581526020015b60405180910390f35b61023f610262366004613cb5565b6105cc565b60015461027f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b6102ba6102a5366004613cee565b60009081526020819052604090206001015490565b60405190815260200161024b565b6102d06107c0565b60405161024b9190613d4a565b6102f06102eb366004613d98565b6108cc565b005b61023f6108f6565b6102f0610308366004613d98565b610940565b6102f061031b366004613dd9565b6109c3565b60015460ff1661023f565b60035461027f906001600160a01b031681565b6102ba610ec2565b6102f0610354366004613e1e565b610f89565b6102ba611390565b600854610374906001600160401b031681565b6040516001600160401b03909116815260200161024b565b60025461027f906001600160a01b031681565b60085461037490600160801b90046001600160401b031681565b6103cc6103c7366004613cee565b611453565b604080519788526001600160a01b0390961660208801529315159486019490945260ff9091166060850152608084015260a083019190915260c082015260e00161024b565b61023f61041f366004613cee565b6114b1565b60085461037490600160401b90046001600160401b031681565b61045161044c366004613cee565b611756565b604080519687526001600160a01b03909516602087015260ff909316938501939093526060840152608083019190915260a082015260c00161024b565b6102ba6117ad565b6102f06117b8565b6103746117ea565b61023f6117f7565b61023f6104bc366004613d98565b611821565b6102ba600081565b6102f06104d7366004613ea5565b61184a565b6104e4611d07565b60405160ff909116815260200161024b565b6102ba610504366004613eda565b611d8a565b61023f611de1565b6102f061051f366004613d98565b611e06565b600a54600b54600c54600d54600e5461045194936001600160a01b03811693600160a01b90910460ff1692909186565b6102f0610562366004613f17565b611e2b565b6102f0610575366004613cee565b611e9b565b6102f0611ec8565b61023f610590366004613f62565b611ef8565b60006001600160e01b03198216637965db0b60e01b14806105c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60035460405163d1052d1f60e01b81526001600160a01b038481166004830152600092839291169063d1052d1f90602401602060405180830381865afa15801561061a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063e9190613f90565b600354604051631d54805360e01b81526001600160a01b03878116600483015292935060009290911690631d54805390602401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613fa9565b6106bc9085613fdc565b90506106c66108f6565b156106e4576040516338961af360e21b815260040160405180910390fd5b81600003610704576040516273e5c360e31b815260040160405180910390fd5b61071060986002613ff5565b61071a904361400c565b821061073957604051630a0744c560e01b815260040160405180910390fd5b6003546040516397adedb560e01b81526001600160a01b0387811660048301526107b79216906397adedb590602401602060405180830381865afa158015610785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a99190613f90565b6107b1611390565b83611ef8565b95945050505050565b60606107ca6117f7565b6107e757604051633788c6c160e11b815260040160405180910390fd5b60006107f16117ea565b6008549091506001600160401b03808316600160401b909204161461082957604051636fbabc7760e01b815260040160405180910390fd5b6005805480602002602001604051908101604052809291908181526020016000905b828210156108c25760008481526020908190206040805160c08101825260058602909201805483526001808201546001600160a01b03811685870152600160a01b900460ff169284019290925260028101546060840152600381015460808401526004015460a0830152908352909201910161084b565b5050505091505090565b6000828152602081905260409020600101546108e781611f35565b6108f18383611f42565b505050565b600080610904609843614035565b905061091260046098614049565b811015801561092b575061092860026098614049565b81105b1561093857600191505090565b600091505090565b6001600160a01b03811633146109b55760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6109bf8282611fc6565b5050565b6109cb61202b565b60006109d56117ea565b6003546040516397adedb560e01b81523360048201529192506000916001600160a01b03909116906397adedb590602401602060405180830381865afa158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190613f90565b600354604051634185029f60e11b81523360048201529192506000916001600160a01b039091169063830a053e90602401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190613f90565b60035460405163d1052d1f60e01b81523360048201529192506000916001600160a01b039091169063d1052d1f90602401602060405180830381865afa158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613f90565b600354604051631d54805360e01b81523360048201529192506000916001600160a01b0390911690631d54805390602401602060405180830381865afa158015610b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9d9190613fa9565b905081600003610bbf576040516273e5c360e31b815260040160405180910390fd5b610bcb60986002613ff5565b610bd5904361400c565b8210610bf457604051630a0744c560e01b815260040160405180910390fd5b856001600160401b0316856001600160401b03161115610c265760405162143fdf60ea1b815260040160405180910390fd5b856001600160401b0316856001600160401b03161015610c5957604051633d0607eb60e11b815260040160405180910390fd5b610c61611de1565b610c7e5760405163dc816a8760e01b815260040160405180910390fd5b6001610c8c60046098614049565b610c96919061400c565b610ca1609843614035565b03610cbf57604051632dd77b5b60e11b815260040160405180910390fd5b6008546001600160401b03868116911614610cfd57610ce060046000613bab565b6008805467ffffffffffffffff19166001600160401b0387161790555b60045460005b81811015610d57578560048281548110610d1f57610d1f61405d565b90600052602060002090600502016000015403610d4f576040516317fd8aab60e31b815260040160405180910390fd5b600101610d03565b5060046040518060e00160405280878152602001336001600160a01b031681526020016000151581526020018460ff1681526020018681526020018a8152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015550507faadc88121471799d39ee2bbe1dd30a4ab57510e2a33bd6e537de5fafd2daa886878684604051610eb0939291906001600160401b03939093168352602083019190915260ff16604082015260600190565b60405180910390a15050505050505050565b600080610ecd6117ea565b610ed8906001614073565b60075460085491925090610efd90600160401b90046001600160401b03166001614073565b6001600160401b0316826001600160401b031611156105c657600854600090600190610f3990600160401b90046001600160401b03168561409a565b610f43919061409a565b6001600160401b031690508181604051602001610f6a929190918252602082015260400190565b6040516020818303038152906040528051906020012091505092915050565b610f9161202b565b610f99612071565b6040805160c081018252600a548152600b546001600160a01b0381166020830152600160a01b900460ff1691810191909152600c546060820152600d546080820152600e5460a08201526006546007546000918291610ff9600f82614035565b9350611006600e82614035565b925083831061101d5782611019816140ba565b9350505b6110308660200135838760400151611ef8565b61105057604051633b5f43a360e01b8152600360048201526024016109ac565b61105b86601e61269c565b611064866129ae565b61106d86612c55565b6110808860200135838760400151611ef8565b6110a057604051633b5f43a360e01b8152600260048201526024016109ac565b6110b4886110af866002613ff5565b61269c565b6110bd886129ae565b6110c688612c55565b6110d98760200135838760400151611ef8565b6110f957604051633b5f43a360e01b8152600160048201526024016109ac565b611108876110af856002613ff5565b611111876129ae565b61111a87612c55565b61119084846111298b806140d3565b600081811061113a5761113a61405d565b6020029190910135905061114e8b806140d3565b600081811061115f5761115f61405d565b602002919091013590506111738b806140d3565b60008181106111845761118461405d565b90506020020135612eb7565b6111ba61119d87806140d3565b60008181106111ae576111ae61405d565b90506020020135612f44565b60015460208601516040516001600160a01b03918216602482015260009261010090049091169060440160408051601f198184030181529181526020820180516001600160e01b03166351cff8d960e01b179052516112199190614147565b6000604051808303816000865af19150503d8060008114611256576040519150601f19603f3d011682016040523d82523d6000602084013e61125b565b606091505b50509050806112a6576020808701516040516001600160a01b0390911681527f7ae187a0c04cf55b655ca83fa11d37854c882bf1fdcb588469b414731bb0e05a910160405180910390a15b7f788e77979e6e6a8a6a5d2c19c58b1ff9671298f54c85ac6f6aa30379aed5861a866040516112d59190614163565b60405180910390a17fbee3fc8a3523c1a65fa9308ce1f2b8fd90c24975b141b754603194597846e4dd60018054906101000a90046001600160a01b03166001600160a01b0316638a5e8e326040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113739190613f90565b6040519081526020015b60405180910390a1505050505050505050565b600061139a611de1565b806113d65750600854600160401b90046001600160401b03166113bb6117ea565b6001600160401b03161180156113d657506113d46117f7565b155b156113e8576113e36117ad565b905090565b6113f06117f7565b156113fd576113e3610ec2565b6114056108f6565b80156114325750600854600160401b90046001600160401b03166114276117ea565b6001600160401b0316145b15611450576040516336b7884b60e01b815260040160405180910390fd5b90565b6004818154811061146357600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b0382169360ff600160a01b8404811694600160a81b909404169287565b60006114bb6117f7565b6114d857604051633788c6c160e11b815260040160405180910390fd5b60006114e26117ea565b6008549091506001600160401b03808316600160401b909204161461151a57604051636fbabc7760e01b815260040160405180910390fd5b6008546001600160401b03600160801b90910481169082161161155057604051630c8d9eab60e31b815260040160405180910390fd5b600080600080600080600080611564612f69565b90506000611570613006565b600454919650945060005b8181101561174257600481815481106115965761159661405d565b9060005260206000209060050201600401549450600481815481106115bd576115bd61405d565b906000526020600020906005020160010160149054906101000a900460ff16801561160b5750600585815481106115f6576115f661405d565b90600052602060002090600502016004015487145b80156116495750600585815481106116255761162561405d565b600091825260209091206001600590920201015460ff878116600160a01b90920416145b1561173a57600585815481106116615761166161405d565b9060005260206000209060050201600301548b61167e9190614171565b9a508383604051602001611693929190614184565b60408051601f19818403018152919052805160209091012098506001600160801b03808a1698506116c5906001614171565b600586815481106116d8576116d861405d565b9060005260206000209060050201600301546116f49190613ff5565b6116fe8c8a613ff5565b101561172c57600585815481106117175761171761405d565b90600052602060002090600502016000015499505b82611736816140ba565b9350505b60010161157b565b505050959099149998505050505050505050565b6005818154811061176657600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b03821693600160a01b90920460ff169290919086565b600080610ed86117ea565b6117c3600033611821565b6117e057604051631d77d47760e21b815260040160405180910390fd5b6117e86131b6565b565b60006113e3609843614049565b600061180560026098614049565b611810609843614035565b1061181b5750600190565b50600090565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61185261202b565b600061185c6117ea565b6003546040516397adedb560e01b81523360048201529192506000916001600160a01b03909116906397adedb590602401602060405180830381865afa1580156118aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ce9190613f90565b6008549091506001600160401b038381169116146118ff576040516342154f0560e11b815260040160405180910390fd5b6119076108f6565b6119245760405163688446db60e11b815260040160405180910390fd5b61192c611d07565b60ff168560ff161015611952576040516383d9b7bd60e01b815260040160405180910390fd5b6008546001600160401b03838116600160401b9092041614611a2957611976611390565b60065561198560056000613bcc565b600880546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556006546040805192835260208301919091527ff0ae472da9c8da86bda4991a549c03a3cb328b5f360ea11a5b8814f32bb85176910160405180910390a1611a29600754604080516020810192909252449082015260600160408051601f198184030181529190528051602090910120600755565b6000611a3782878787611d8a565b90506000611a45838361320a565b9050600060048281548110611a5c57611a5c61405d565b600091825260208083206040805160e08101825260059094029091018054845260018101546001600160a01b0381169385019390935260ff600160a01b84048116151592850192909252600160a81b909204166060830181905260028201546080840152600382015460a084015260049091015460c0830152909250611ae2908a613fdc565b9050611af5826000015160065483611ef8565b611b185760065460405163053aeef960e21b81526004016109ac91815260200190565b816040015115611b3b5760405163a89ac15160e01b815260040160405180910390fd5b600160048481548110611b5057611b5061405d565b906000526020600020906005020160010160146101000a81548160ff02191690831515021790555060058054905060048481548110611b9157611b9161405d565b90600052602060002090600502016004018190555060056040518060c001604052808460000151815260200184602001516001600160a01b031681526020018b60ff16815260200184608001518152602001836002611bf0919061428a565b8560800151611bff9190613ff5565b815260209081018b90528254600181810185556000948552938290208351600590920201908155908201519281018054604084015160ff16600160a01b026001600160a81b03199091166001600160a01b0390951694909417939093179092556060810151600280840191909155608080830151600385015560a0909201516004909301929092558351908401517f13fc17fd71632266fe82092de6dd91a06b4fa68d8dc950492e5421cbed55a6a59289929190611cbe90869061428a565b8660800151611ccd9190613ff5565b604080516001600160401b0390951685526020850193909352918301526060820152608081018a905260ff8b1660a082015260c00161137d565b6008546000908190611d2b906001600160401b03600160801b82048116911661409a565b6001600160401b03169050600060fe8211611d465781611d49565b60fe5b611d54906001614299565b600b5490915060ff600160a01b9091048116908216811115611d7f57611d7a8282613fdc565b611d82565b60005b935050505090565b60408051602081018690526001600160f81b031960f886901b169181019190915260418101839052606181018290526000906081015b6040516020818303038152906040528051906020012090505b949350505050565b6000611def60046098614049565b611dfa609843614035565b101561181b5750600190565b600082815260208190526040902060010154611e2181611f35565b6108f18383611fc6565b611e36600033611821565b611e5357604051637bfa4b9f60e01b815260040160405180910390fd5b6008805461ffff60c01b1916600160c01b60ff9586160260ff60c81b191617600160c81b938516939093029290921760ff60d01b1916600160d01b9190931602919091179055565b611ea6600033611821565b611ec357604051637bfa4b9f60e01b815260040160405180910390fd5b600955565b611ed3600033611821565b611ef057604051631d77d47760e21b815260040160405180910390fd5b6117e861329c565b60008160ff16600003611f0d57506001611f2e565b611f1c60ff83166101006142b2565b611f279060026142cd565b8484181090505b9392505050565b611f3f81336132d5565b50565b611f4c8282611821565b6109bf576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611f823390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611fd08282611821565b156109bf576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60015460ff16156117e85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109ac565b600061207b6117ea565b90506120856117f7565b6120a257604051633788c6c160e11b815260040160405180910390fd5b6008546001600160401b03828116600160401b90920416146120d757604051636fbabc7760e01b815260040160405180910390fd5b6008546001600160401b03600160801b90910481169082161161210d57604051630c8d9eab60e31b815260040160405180910390fd5b600454604051818152600091829182918291829182917f6752c5e71c95fb93bc7137adeb115a33fa4e54e2683e33d3f90c2bb1c4b6c2a59060200160405180910390a16005546040519081527f4c03de6a759749c0c9387b7014634dc5c6af610e1366023d90751c783a998f8d9060200160405180910390a161218e613006565b6040805183815260ff831660208201529295509093507f34e8eda4cd857cd2865becf58a47748f31415f4a382cbb2cc0c64b9a27c717be910160405180910390a160006121d9612f69565b905060005b828110156125af576000600482815481106121fb576121fb61405d565b600091825260208083206040805160e08101825260059485029092018054835260018101546001600160a01b0381169484019490945260ff600160a01b85048116151592840192909252600160a81b90930416606082015260028201546080820152600382015460a082015260049091015460c0820181905282549194509291908390811061228c5761228c61405d565b60009182526020918290206040805160c0810182526005939093029091018054835260018101546001600160a01b03811694840194909452600160a01b90930460ff1682820152600283015460608301526003830154608083015260049092015460a082015290840151909150801561230857508060a0015188145b801561231d5750806040015160ff168760ff16145b156123fb576080810151612331908d614171565b9b50848b604051602001612346929190614184565b60408051601f19818403018152919052805160209091012099506001600160801b03808b169950612378906001614171565b81608001516123879190613ff5565b6123918d8b613ff5565b10156123ed578051600a556020810151600b8054604084015160ff16600160a01b026001600160a81b03199091166001600160a01b03909316929092179190911790556060810151600c556080810151600d5560a0810151600e555b8a6123f7816140ba565b9b50505b8260400151801561242457508060a00151881415806124245750806040015160ff168760ff1614155b80156124455750600854600160d01b900460ff16612443606444614035565b105b156124f15760035460208201516001600160a01b039091169063d009b2d69061246f8a600261428a565b60085461248890609890600160c01b900460ff16613ff5565b6124929190613ff5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124d857600080fd5b505af11580156124ec573d6000803e3d6000fd5b505050505b82604001516125a15760035460208401516001600160a01b039091169063d009b2d69061251f8a600261428a565b60085461253890609890600160c81b900460ff16613ff5565b6125429190613ff5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561258857600080fd5b505af115801561259c573d6000803e3d6000fd5b505050505b8360010193505050506121de565b5060025460405160016246701d60e01b0319815261ffff891660048201526000916001600160a01b03169063ffb98fe3906024016020604051808303816000875af1158015612602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262691906142ed565b9050806126655760405161ffff891681527f20378e5d379eabfa30444ecc5eb2b87d0d77bdbf5a58d80d008673b0ca6421419060200160405180910390a15b5050600880546001600160401b03909916600160801b0267ffffffffffffffff60801b199099169890981790975550505050505050565b6007546000906126ae90608090614035565b905060006127116126c260a08601866140d3565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060608601358461270960a0890160808a01614308565b60065461332e565b60408051858152602081018390529192507f94e252069a85aa79db21f5bd8ca4e14dd3a3927aa492711017a2c8ddad95af00910160405180910390a161279961275a85806140d3565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060208601358561040061339c565b600e54146127c45760405163755f0a2560e01b815260016004820152602481018290526044016109ac565b6127d160a08501856140d3565b60008181106127e2576127e261405d565b905060200201358480604001906127f991906140d3565b600081811061280a5761280a61405d565b90506020020135146128395760405163755f0a2560e01b815260026004820152602481018290526044016109ac565b60008061284960e08701876140d3565b90501161285a57846020013561288f565b61286760e08601866140d3565b60008181106128785761287861405d565b905060200281019061288a9190614323565b606001355b90506128ed6128a160408701876140d3565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506060870135856128e860a08a0160808b01614308565b61339c565b81146129165760405163755f0a2560e01b815260036004820152602481018390526044016109ac565b600061292560e08701876140d3565b9050111561295d5760408051602080880135908201529081018390526060016040516020818303038152906040528051906020012091505b8161296886806140d3565b60008181106129795761297961405d565b90506020020135146129a75760405163755f0a2560e01b8152600481810152602481018390526044016109ac565b5050505050565b6001546000908190819061010090046001600160a01b031663c81e25ab6129d860c0870187614323565b602001356040518263ffffffff1660e01b81526004016129fa91815260200190565b60c060405180830381865afa158015612a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3b9190614339565b509396509194509250506001600160a01b0384169050612a8257612a6260c0850185614323565b602001356040516311cb69a760e11b81526004016109ac91815260200190565b6000612aa5612a9460c0870187614323565b611450906060810190604001614308565b90506000612ab38484613400565b9050808263ffffffff1610612aee57612acf60c0870187614323565b60200135604051629b172560e51b81526004016109ac91815260200190565b6000612b1d612b0060c0890189614323565b612b11906060810190604001614308565b60201c63ffffffff1690565b90506000612b2f88602001358661341b565b63ffffffff1690506001600160401b0382168114612b7457612b5460c0890189614323565b60200135604051636dd6a24f60e01b81526004016109ac91815260200190565b612c1a87612b8560c08b018b614323565b612b8f90806143a7565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208b0135612bd560c08d018d614323565b60200135612be660c08e018e614323565b612bf7906060810190604001614308565b612c0460c08f018f614323565b612c15906080810190606001614308565b613442565b612c4b57612c2b60c0890189614323565b6020013560405163db12fb9d60e01b81526004016109ac91815260200190565b5050505050505050565b612c6260e08201826140d3565b9050600003612c6e5750565b612d8f612c7e60e08301836140d3565b6000818110612c8f57612c8f61405d565b9050602002810190612ca19190614323565b612caf9060208101906143ed565b612cbc60e08401846140d3565b6000818110612ccd57612ccd61405d565b9050602002810190612cdf9190614323565b612ced9060208101906143a7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d2f9250505060e08501856140d3565b6000818110612d4057612d4061405d565b9050602002810190612d529190614323565b60400135612d6360e08601866140d3565b6000818110612d7457612d7461405d565b9050602002810190612d869190614323565b6060013561348b565b612de357612da060e08201826140d3565b6000818110612db157612db161405d565b9050602002810190612dc39190614323565b6060013560405163d740df6160e01b81526004016109ac91815260200190565b6020810135612e62612df860e08401846140d3565b6000818110612e0957612e0961405d565b9050602002810190612e1b9190614323565b60400135612e2c60e08501856140d3565b6000818110612e3d57612e3d61405d565b9050602002810190612e4f9190614323565b612e5d9060208101906143ed565b6134d0565b14611f3f57612e7460e08201826140d3565b6000818110612e8557612e8561405d565b9050602002810190612e979190614323565b606001356040516382f2469d60e01b81526004016109ac91815260200190565b83851015612f0457818310612edf57604051633d386eb360e11b815260040160405180910390fd5b808210612eff57604051633588c6d360e11b815260040160405180910390fd5b6129a7565b828210612f2457604051633d386eb360e11b815260040160405180910390fd5b8083106129a757604051633588c6d360e11b815260040160405180910390fd5b6009548110611f3f5760405163b6052cdf60e01b8152600481018290526024016109ac565b6060612f736117f7565b612f9057604051633788c6c160e11b815260040160405180910390fd5b6000612f9a6117ea565b6008549091506001600160401b03808316600160401b9092041614612fd257604051636fbabc7760e01b815260040160405180910390fd5b600754604051602001612ff1918152603160f81b602082015260210190565b60405160208183030381529060405291505090565b600080600080600080600080600061301c61351e565b60045490915060005b818110156131a557600481815481106130405761304061405d565b906000526020600020906005020160010160149054906101000a900460ff161561319d57600481815481106130775761307761405d565b90600052602060002090600502016004015493506005848154811061309e5761309e61405d565b906000526020600020906005020160030154896130bb9190614171565b985082816040516020016130d0929190614184565b60408051601f19818403018152919052805160209091012097506001600160801b038089169750613102906001614171565b600585815481106131155761311561405d565b9060005260206000209060050201600301546131319190613ff5565b61313b8a89613ff5565b101561319d57600584815481106131545761315461405d565b90600052602060002090600502016004015495506005848154811061317b5761317b61405d565b906000526020600020906005020160010160149054906101000a900460ff1694505b600101613025565b509399929850919650505050505050565b6131be61202b565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b6000805b60045481101561328257836004828154811061322c5761322c61405d565b90600052602060002090600502016000015414801561326e5750600481815481106132595761325961405d565b90600052602060002090600502016003015483145b1561327a5790506105c6565b60010161320e565b5060405163d950091560e01b815260040160405180910390fd5b6132a46135a6565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336131ed565b6132df8282611821565b6109bf576132ec816135ef565b6132f7836020613601565b60405160200161330892919061440a565b60408051601f198184030181529082905262461bcd60e51b82526109ac9160040161447f565b60008061333d8787878661379c565b90508261334985613812565b8260405160200161337a9392919092835260c09190911b6001600160c01b0319166020830152602882015260480190565b6040516020818303038152906040528051906020012091505095945050505050565b6000806133aa86868661390f565b90506133b583613812565b816040516020016133df92919060c09290921b6001600160c01b0319168252600882015260280190565b60405160208183030381529060405280519060200120915050949350505050565b600061340c8284613fdc565b60ff166001901b905092915050565b600060e083901c61342d836020613fdc565b60ff168163ffffffff16901c91505092915050565b60008061345186868686613977565b9050600061345e826139b1565b9050886001600160a01b0316613474828a613a04565b6001600160a01b0316149998505050505050505050565b6000806134988484613a83565b905060006134a5826139b1565b9050866001600160a01b03166134bb8288613a04565b6001600160a01b031614979650505050505050565b6000828260405160200161350092919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b60606135286117f7565b61354557604051633788c6c160e11b815260040160405180910390fd5b600061354f6117ea565b6008549091506001600160401b03808316600160401b909204161461358757604051636fbabc7760e01b815260040160405180910390fd5b600754604051602001612ff1918152600360fc1b602082015260210190565b60015460ff166117e85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109ac565b60606105c66001600160a01b03831660145b60606000613610836002613ff5565b61361b906002614171565b6001600160401b03811115613632576136326144b2565b6040519080825280601f01601f19166020018201604052801561365c576020820181803683370190505b509050600360fc1b816000815181106136775761367761405d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106136a6576136a661405d565b60200101906001600160f81b031916908160001a90535060006136ca846002613ff5565b6136d5906001614171565b90505b600181111561374d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106137095761370961405d565b1a60f81b82828151811061371f5761371f61405d565b60200101906001600160f81b031916908160001a90535060049490941c93613746816144c8565b90506136d8565b508315611f2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ac565b8260005b85518110156138095760006137b6600286614035565b156137c25760006137c5565b60015b90506137ec838884815181106137dd576137dd61405d565b60200260200101518387613a9f565b9250600185901c9450508080613801906140ba565b9150506137a0565b50949350505050565b600080826001600160401b031690506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905080915050919050565b8160005b845181101561396f576000613929600285614035565b6000149050613952838784815181106139445761394461405d565b602002602001015183613aff565b9250600184901c9350508080613967906140ba565b915050613913565b509392505050565b60408051602081018690529081018490526001600160c01b031960c084811b8216606084015283901b166068820152600090607001611dc0565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b600080600080613a1385613b66565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015613a6e573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6040805160208101849052908101829052600090606001613500565b60008215613adf57604080516020810184905290810186905260608101859052608001604051602081830303815290604052805190602001209050611dd9565b604080516020810184905290810185905260608101869052608001611dc0565b60008115613b38576040805160208101869052908101849052606001604051602081830303815290604052805190602001209050611f2e565b5050604080516020808201939093528082019390935280518084038201815260609093019052815191012090565b60008060008351604114613b8d57604051634be6321b60e01b815260040160405180910390fd5b50505060208101516040820151606090920151909260009190911a90565b5080546000825560050290600052602060002090810190611f3f9190613bed565b5080546000825560050290600052602060002090810190611f3f9190613c2c565b5b80821115613c285760008082556001820180546001600160b01b031916905560028201819055600382018190556004820155600501613bee565b5090565b5b80821115613c285760008082556001820180546001600160a81b031916905560028201819055600382018190556004820155600501613c2d565b600060208284031215613c7957600080fd5b81356001600160e01b031981168114611f2e57600080fd5b6001600160a01b0381168114611f3f57600080fd5b60ff81168114611f3f57600080fd5b60008060408385031215613cc857600080fd5b8235613cd381613c91565b91506020830135613ce381613ca6565b809150509250929050565b600060208284031215613d0057600080fd5b5035919050565b805182526020808201516001600160a01b03169083015260408082015160ff1690830152606080820151908301526080808201519083015260a090810151910152565b6020808252825182820181905260009190848201906040850190845b81811015613d8c57613d79838551613d07565b9284019260c09290920191600101613d66565b50909695505050505050565b60008060408385031215613dab57600080fd5b823591506020830135613ce381613c91565b80356001600160401b0381168114613dd457600080fd5b919050565b60008060408385031215613dec57600080fd5b82359150613dfc60208401613dbd565b90509250929050565b60006101008284031215613e1857600080fd5b50919050565b600080600060608486031215613e3357600080fd5b83356001600160401b0380821115613e4a57600080fd5b613e5687838801613e05565b94506020860135915080821115613e6c57600080fd5b613e7887838801613e05565b93506040860135915080821115613e8e57600080fd5b50613e9b86828701613e05565b9150509250925092565b600080600060608486031215613eba57600080fd5b8335613ec581613ca6565b95602085013595506040909401359392505050565b60008060008060808587031215613ef057600080fd5b843593506020850135613f0281613ca6565b93969395505050506040820135916060013590565b600080600060608486031215613f2c57600080fd5b8335613f3781613ca6565b92506020840135613f4781613ca6565b91506040840135613f5781613ca6565b809150509250925092565b600080600060608486031215613f7757600080fd5b83359250602084013591506040840135613f5781613ca6565b600060208284031215613fa257600080fd5b5051919050565b600060208284031215613fbb57600080fd5b8151611f2e81613ca6565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156105c6576105c6613fc6565b80820281158282048414176105c6576105c6613fc6565b818103818111156105c6576105c6613fc6565b634e487b7160e01b600052601260045260246000fd5b6000826140445761404461401f565b500690565b6000826140585761405861401f565b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160401b0381811683821601908082111561409357614093613fc6565b5092915050565b6001600160401b0382811682821603908082111561409357614093613fc6565b6000600182016140cc576140cc613fc6565b5060010190565b6000808335601e198436030181126140ea57600080fd5b8301803591506001600160401b0382111561410457600080fd5b6020019150600581901b360382131561411c57600080fd5b9250929050565b60005b8381101561413e578181015183820152602001614126565b50506000910152565b60008251614159818460208701614123565b9190910192915050565b60c081016105c68284613d07565b808201808211156105c6576105c6613fc6565b60008351614196818460208801614123565b9190910191825250602001919050565b600181815b808511156141e15781600019048211156141c7576141c7613fc6565b808516156141d457918102915b93841c93908002906141ab565b509250929050565b6000826141f8575060016105c6565b81614205575060006105c6565b816001811461421b576002811461422557614241565b60019150506105c6565b60ff84111561423657614236613fc6565b50506001821b6105c6565b5060208310610133831016604e8410600b8410161715614264575081810a6105c6565b61426e83836141a6565b806000190482111561428257614282613fc6565b029392505050565b6000611f2e60ff8416836141e9565b60ff81811683821601908111156105c6576105c6613fc6565b61ffff82811682821603908082111561409357614093613fc6565b6000611f2e61ffff8416836141e9565b80518015158114613dd457600080fd5b6000602082840312156142ff57600080fd5b611f2e826142dd565b60006020828403121561431a57600080fd5b611f2e82613dbd565b60008235607e1983360301811261415957600080fd5b60008060008060008060c0878903121561435257600080fd5b865161435d81613c91565b602088015190965061436e81613ca6565b604088015190955061437f81613ca6565b935061438d606088016142dd565b92506080870151915060a087015190509295509295509295565b6000808335601e198436030181126143be57600080fd5b8301803591506001600160401b038211156143d857600080fd5b60200191503681900382131561411c57600080fd5b6000602082840312156143ff57600080fd5b8135611f2e81613c91565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614442816017850160208801614123565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614473816028840160208801614123565b01602801949350505050565b602081526000825180602084015261449e816040850160208701614123565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b6000816144d7576144d7613fc6565b50600019019056fea26469706673582212200e0e63a7c86f4191bfc45193777714c74c1a5fefdab1a7157ef365d93ef8a70064736f6c63430008130033"
}