{
  "title" : "Duplication",
  "timestamp" : "2026-01-18 17:24:05",
  "duplicates" : [ {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/CodeReviewUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 125,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 91,
      "startLine" : 107,
      "endLine" : 113,
      "cleanedStartLine" : 68,
      "cleanedEndLine" : 74
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/CodeReviewUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 125,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 91,
      "startLine" : 129,
      "endLine" : 135,
      "cleanedStartLine" : 84,
      "cleanedEndLine" : 90
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/ChatUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 42,
      "endLine" : 48,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/ChatUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 64,
      "endLine" : 70,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 40
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/ChatUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 217,
      "endLine" : 222,
      "cleanedStartLine" : 143,
      "cleanedEndLine" : 148
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/ChatUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 161,
      "startLine" : 233,
      "endLine" : 238,
      "cleanedStartLine" : 156,
      "cleanedEndLine" : 161
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "client/src/setupProxy.js",
        "extension" : "js",
        "linesOfCode" : 24,
        "components" : [ "primary::client" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 6,
      "endLine" : 11,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "client/src/setupProxy.js",
        "extension" : "js",
        "linesOfCode" : 24,
        "components" : [ "primary::client" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 13,
      "endLine" : 18,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/storage/Interface.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 81,
      "startLine" : 47,
      "endLine" : 52,
      "cleanedStartLine" : 27,
      "cleanedEndLine" : 32
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/storage/postgres/Interface.kt",
        "extension" : "kt",
        "linesOfCode" : 506,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 372,
      "startLine" : 219,
      "endLine" : 224,
      "cleanedStartLine" : 143,
      "cleanedEndLine" : 148
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/storage/Interface.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 81,
      "startLine" : 67,
      "endLine" : 72,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/storage/postgres/Interface.kt",
        "extension" : "kt",
        "linesOfCode" : 506,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 372,
      "startLine" : 368,
      "endLine" : 373,
      "cleanedStartLine" : 247,
      "cleanedEndLine" : 252
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/CodeReviewUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 125,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 91,
      "startLine" : 26,
      "endLine" : 32,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 17
    }, {
      "file" : {
        "relativePath" : "src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/IssueUnfurlProvider.kt",
        "extension" : "kt",
        "linesOfCode" : 79,
        "components" : [ "primary::src" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 57,
      "startLine" : 22,
      "endLine" : 28,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 13
    } ]
  } ],
  "overallDuplication" : null
}