{
  "title" : "Duplication",
  "timestamp" : "2026-04-18 12:56:23",
  "duplicates" : [ {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 99,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/tic_tac_toe_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 100,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 99,
      "startLine" : 1,
      "endLine" : 109,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 99
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 69,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeView.java",
        "extension" : "java",
        "linesOfCode" : 95,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 69,
      "startLine" : 31,
      "endLine" : 122,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 55,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 55,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 55,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 123,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 53,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 28,
      "endLine" : 102,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 53
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 28,
      "endLine" : 102,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 53
    } ]
  }, {
    "blockSize" : 50,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 50,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 50,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 60,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 48,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 113,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 113,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 48,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 48,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 48,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 115,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 47,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 112,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 112,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 47
    } ]
  }, {
    "blockSize" : 43,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 46,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 43,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    } ]
  }, {
    "blockSize" : 43,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 46,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 43,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    } ]
  }, {
    "blockSize" : 43,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 46,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 43,
      "startLine" : 1,
      "endLine" : 51,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 43
    } ]
  }, {
    "blockSize" : 39,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 26,
      "endLine" : 77,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 39
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 26,
      "endLine" : 77,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 39
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 36,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/Board.java",
        "extension" : "java",
        "linesOfCode" : 48,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 36,
      "startLine" : 20,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 31,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 48,
      "endLine" : 89,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 35
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 55,
      "endLine" : 96,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 35
    } ]
  }, {
    "blockSize" : 30,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 113,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 78,
      "endLine" : 123,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 53
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 113,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 82,
      "endLine" : 126,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 54
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 115,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 115,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 78,
      "endLine" : 123,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 53
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 82,
      "endLine" : 126,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 54
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 78,
      "endLine" : 123,
      "cleanedStartLine" : 25,
      "cleanedEndLine" : 53
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 113,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 113,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 82,
      "endLine" : 126,
      "cleanedStartLine" : 26,
      "cleanedEndLine" : 54
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 68,
      "endLine" : 115,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 29,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 75,
      "endLine" : 120,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 67,
      "endLine" : 112,
      "cleanedStartLine" : 19,
      "cleanedEndLine" : 47
    } ]
  }, {
    "blockSize" : 27,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 32,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 32,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 27
    } ]
  }, {
    "blockSize" : 25,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 45,
      "endLine" : 73,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 37
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 38,
      "endLine" : 66,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 32
    } ]
  }, {
    "blockSize" : 25,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 38,
      "endLine" : 66,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 32
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 45,
      "endLine" : 73,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 37
    } ]
  }, {
    "blockSize" : 25,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 32,
      "endLine" : 74,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 33,
      "endLine" : 75,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 25
    } ]
  }, {
    "blockSize" : 24,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 38,
      "endLine" : 65,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 31
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 46,
      "endLine" : 73,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 24,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 45,
      "endLine" : 72,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 36
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 46,
      "endLine" : 73,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 24,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 38,
      "endLine" : 65,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 31
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 46,
      "endLine" : 73,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 36
    } ]
  }, {
    "blockSize" : 22,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 54,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 34,
      "startLine" : 31,
      "endLine" : 62,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 30,
      "endLine" : 61,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 22
    } ]
  }, {
    "blockSize" : 22,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 25,
      "endLine" : 52,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 25,
      "endLine" : 52,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 22
    } ]
  }, {
    "blockSize" : 21,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 55,
      "endLine" : 86,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 32
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 50,
      "endLine" : 81,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 21,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 50,
      "endLine" : 81,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 62,
      "endLine" : 93,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 32
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 32,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 33,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 27,
      "endLine" : 57,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 27,
      "endLine" : 57,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 32,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 32,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 34,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 35,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 33,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 20,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 33,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 35,
      "endLine" : 71,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 19,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 35,
      "endLine" : 67,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 38,
      "endLine" : 69,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 19
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 34,
      "endLine" : 64,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 31,
      "endLine" : 52,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 46,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 38,
      "endLine" : 59,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 24
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 35,
      "endLine" : 65,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 35,
      "endLine" : 65,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 38,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 35,
      "endLine" : 65,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 34,
      "endLine" : 64,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 38,
      "endLine" : 68,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 70,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::TODOs" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 48,
      "startLine" : 33,
      "endLine" : 63,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameBuilder.java",
        "extension" : "java",
        "linesOfCode" : 78,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 35,
      "endLine" : 65,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 18
    } ]
  }, {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 31,
      "endLine" : 52,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootRouter.java",
        "extension" : "java",
        "linesOfCode" : 46,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 38,
      "endLine" : 59,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 24
    } ]
  }, {
    "blockSize" : 16,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 81,
      "endLine" : 109,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 60
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 71,
      "endLine" : 99,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 52
    } ]
  }, {
    "blockSize" : 16,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 16,
      "endLine" : 37,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 22,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 18,
      "startLine" : 16,
      "endLine" : 37,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 16
    } ]
  }, {
    "blockSize" : 16,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 71,
      "endLine" : 99,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 81,
      "endLine" : 109,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 54,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 34,
      "startLine" : 56,
      "endLine" : 76,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 32
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 74,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 59,
      "endLine" : 79,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 29,
      "endLine" : 45,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 15
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 30,
      "endLine" : 46,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 223,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 146,
      "startLine" : 115,
      "endLine" : 139,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 46
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 136,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 85,
      "startLine" : 85,
      "endLine" : 109,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 34
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 34,
      "endLine" : 49,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 34,
      "endLine" : 49,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 85,
      "endLine" : 107,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 99,
      "endLine" : 123,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 54,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 34,
      "startLine" : 34,
      "endLine" : 54,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 74,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 38,
      "endLine" : 58,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 34,
      "endLine" : 49,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 20
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 34,
      "endLine" : 49,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 20
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-compiler-app/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 29,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 34,
      "endLine" : 52,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 24
    }, {
      "file" : {
        "relativePath" : "libraries/rib-compiler-test/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 33,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 37,
      "endLine" : 55,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 28
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 33,
      "endLine" : 53,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 74,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 38,
      "endLine" : 58,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 85,
      "endLine" : 107,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 99,
      "endLine" : 123,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 14,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 85,
      "endLine" : 107,
      "cleanedStartLine" : 32,
      "cleanedEndLine" : 45
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 99,
      "endLine" : 123,
      "cleanedStartLine" : 42,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 83,
      "endLine" : 103,
      "cleanedStartLine" : 30,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 101,
      "endLine" : 123,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 111,
      "endLine" : 127,
      "cleanedStartLine" : 49,
      "cleanedEndLine" : 61
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 88,
      "endLine" : 104,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 46
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 83,
      "endLine" : 103,
      "cleanedStartLine" : 30,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 101,
      "endLine" : 123,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 83,
      "endLine" : 103,
      "cleanedStartLine" : 30,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 87,
      "endLine" : 107,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 45
    } ]
  }, {
    "blockSize" : 13,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 83,
      "endLine" : 103,
      "cleanedStartLine" : 30,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 101,
      "endLine" : 123,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 32,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 33,
      "endLine" : 49,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 13
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 54,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 34,
      "startLine" : 39,
      "endLine" : 55,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 13,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 32,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 33,
      "endLine" : 49,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 13
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 38,
      "endLine" : 54,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 13,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 13,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 1,
      "endLine" : 11,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 1,
      "endLine" : 13,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 77,
      "endLine" : 90,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 78,
      "endLine" : 91,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-flipper-plugin/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 25,
      "endLine" : 34,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 15
    }, {
      "file" : {
        "relativePath" : "tooling/utils/intellij-broadcast-core/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 26,
      "endLine" : 35,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 32,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 33,
      "endLine" : 48,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameView.java",
        "extension" : "java",
        "linesOfCode" : 74,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 43,
      "endLine" : 58,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/BoardCoordinate.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 10,
      "startLine" : 18,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-compiler-app/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 29,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 24,
      "startLine" : 43,
      "endLine" : 52,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 24
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 80,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 60,
      "startLine" : 98,
      "endLine" : 107,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 30,
      "endLine" : 40,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 1,
      "endLine" : 9,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 1,
      "endLine" : 9,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyTreeStructure.kt",
        "extension" : "kt",
        "linesOfCode" : 89,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 70,
      "startLine" : 83,
      "endLine" : 91,
      "cleanedStartLine" : 51,
      "cleanedEndLine" : 59
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/ui/RibHierarchyTreeStructure.kt",
        "extension" : "kt",
        "linesOfCode" : 89,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 70,
      "startLine" : 95,
      "endLine" : 103,
      "cleanedStartLine" : 61,
      "cleanedEndLine" : 69
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 53,
      "endLine" : 63,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 53,
      "endLine" : 63,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 53,
      "endLine" : 63,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInRouter.java",
        "extension" : "java",
        "linesOfCode" : 55,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 39,
      "startLine" : 53,
      "endLine" : 63,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-compiler-test/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 33,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 46,
      "endLine" : 55,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 28
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 80,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 60,
      "startLine" : 98,
      "endLine" : 107,
      "cleanedStartLine" : 52,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 14,
      "endLine" : 22,
      "cleanedStartLine" : 14,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 20,
      "endLine" : 28,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 28
    } ]
  }, {
    "blockSize" : 9,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 108,
      "endLine" : 119,
      "cleanedStartLine" : 47,
      "cleanedEndLine" : 54
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 190,
      "endLine" : 200,
      "cleanedStartLine" : 100,
      "cleanedEndLine" : 107
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 29,
      "endLine" : 43,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 30,
      "endLine" : 44,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 137,
      "endLine" : 148,
      "cleanedStartLine" : 66,
      "cleanedEndLine" : 73
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 190,
      "endLine" : 200,
      "cleanedStartLine" : 100,
      "cleanedEndLine" : 107
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 98,
      "endLine" : 112,
      "cleanedStartLine" : 54,
      "cleanedEndLine" : 61
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 99,
      "endLine" : 113,
      "cleanedStartLine" : 54,
      "cleanedEndLine" : 61
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 29,
      "endLine" : 38,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 30,
      "endLine" : 39,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 59,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 41,
      "startLine" : 52,
      "endLine" : 60,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 24
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 38,
      "endLine" : 46,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 16
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 38,
      "endLine" : 46,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 59,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 41,
      "startLine" : 52,
      "endLine" : 60,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 24
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 137,
      "endLine" : 148,
      "cleanedStartLine" : 66,
      "cleanedEndLine" : 73
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 108,
      "endLine" : 119,
      "cleanedStartLine" : 47,
      "cleanedEndLine" : 54
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 16,
      "endLine" : 22,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 27,
      "endLine" : 34,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 34,
      "endLine" : 40,
      "cleanedStartLine" : 13,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 25,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 36,
      "endLine" : 42,
      "cleanedStartLine" : 15,
      "cleanedEndLine" : 21
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 25,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 14,
      "startLine" : 30,
      "endLine" : 40,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 33,
      "endLine" : 40,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 34,
      "endLine" : 41,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 85,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 76,
      "startLine" : 110,
      "endLine" : 131,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 85,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 76,
      "startLine" : 131,
      "endLine" : 151,
      "cleanedStartLine" : 27,
      "cleanedEndLine" : 33
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 25,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 14,
      "startLine" : 30,
      "endLine" : 40,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 88,
      "endLine" : 99,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 99,
      "endLine" : 110,
      "cleanedStartLine" : 54,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-flipper-plugin/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 29,
      "endLine" : 35,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/native/intellij-broadcast-rib/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 29,
      "endLine" : 35,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 16
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 27,
      "endLine" : 34,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 22,
      "endLine" : 28,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 28
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 119,
      "endLine" : 129,
      "cleanedStartLine" : 56,
      "cleanedEndLine" : 62
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 172,
      "endLine" : 182,
      "cleanedStartLine" : 90,
      "cleanedEndLine" : 96
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 22,
      "startLine" : 16,
      "endLine" : 22,
      "cleanedStartLine" : 16,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 27,
      "endLine" : 34,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 29,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 22,
      "endLine" : 28,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 28
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/logged_out_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 31,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 30,
      "startLine" : 27,
      "endLine" : 34,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 30
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 88,
      "endLine" : 99,
      "cleanedStartLine" : 46,
      "cleanedEndLine" : 52
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 99,
      "endLine" : 110,
      "cleanedStartLine" : 54,
      "cleanedEndLine" : 60
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootView.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 24,
      "endLine" : 35,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 7
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
        "extension" : "kt",
        "linesOfCode" : 143,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 110,
      "startLine" : 84,
      "endLine" : 90,
      "cleanedStartLine" : 38,
      "cleanedEndLine" : 44
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyPanel.kt",
        "extension" : "kt",
        "linesOfCode" : 143,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 110,
      "startLine" : 106,
      "endLine" : 112,
      "cleanedStartLine" : 59,
      "cleanedEndLine" : 65
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 111,
      "endLine" : 116,
      "cleanedStartLine" : 49,
      "cleanedEndLine" : 54
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 163,
      "endLine" : 168,
      "cleanedStartLine" : 82,
      "cleanedEndLine" : 87
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 71,
      "endLine" : 80,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 82,
      "endLine" : 91,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 69,
      "endLine" : 75,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 96,
      "endLine" : 104,
      "cleanedStartLine" : 41,
      "cleanedEndLine" : 46
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 172,
      "endLine" : 180,
      "cleanedStartLine" : 90,
      "cleanedEndLine" : 95
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 37,
      "endLine" : 43,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 38,
      "endLine" : 44,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 25,
      "endLine" : 32,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 16,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 25,
      "endLine" : 32,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 103,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 73,
      "startLine" : 91,
      "endLine" : 100,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 98,
      "endLine" : 107,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 55,
      "endLine" : 60,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/game_button.xml",
        "extension" : "xml",
        "linesOfCode" : 8,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 3,
      "endLine" : 8,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 341,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 277,
      "startLine" : 291,
      "endLine" : 296,
      "cleanedStartLine" : 189,
      "cleanedEndLine" : 194
    }, {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/StackRouterNavigator.kt",
        "extension" : "kt",
        "linesOfCode" : 341,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 277,
      "startLine" : 323,
      "endLine" : 328,
      "cleanedStartLine" : 214,
      "cleanedEndLine" : 219
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibHierarchyBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 223,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 146,
      "startLine" : 60,
      "endLine" : 69,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 11
    }, {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/src/main/kotlin/com/uber/intellij/plugin/android/rib/RibViewBrowser.kt",
        "extension" : "kt",
        "linesOfCode" : 136,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 85,
      "startLine" : 51,
      "endLine" : 60,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 20,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 17,
      "endLine" : 25,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 28,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 18,
      "endLine" : 26,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 25,
      "endLine" : 32,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 68,
      "endLine" : 74,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 79,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 54,
      "startLine" : 88,
      "endLine" : 93,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 39
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInBuilder.java",
        "extension" : "java",
        "linesOfCode" : 149,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 107,
      "startLine" : 163,
      "endLine" : 168,
      "cleanedStartLine" : 82,
      "cleanedEndLine" : 87
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 32,
      "endLine" : 41,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 55,
      "endLine" : 60,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/game_button.xml",
        "extension" : "xml",
        "linesOfCode" : 8,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 3,
      "endLine" : 8,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tooling/rib-intellij-plugin/native/intellij-broadcast-rib/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 29,
      "endLine" : 34,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 15
    }, {
      "file" : {
        "relativePath" : "tooling/utils/intellij-broadcast-core/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 19,
        "components" : [ "primary::tooling" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 30,
      "endLine" : 35,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 15
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 68,
      "endLine" : 74,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 40,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 49,
      "endLine" : 62,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 22
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutInteractor.java",
        "extension" : "java",
        "linesOfCode" : 41,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 50,
      "endLine" : 63,
      "cleanedStartLine" : 17,
      "cleanedEndLine" : 22
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 15,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 25,
      "endLine" : 32,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootInteractor.java",
        "extension" : "java",
        "linesOfCode" : 24,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 26,
      "endLine" : 33,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 64,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 68,
      "endLine" : 74,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 31,
      "endLine" : 40,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial1/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-base/src/main/kotlin/com/uber/rib/core/Worker.kt",
        "extension" : "kt",
        "linesOfCode" : 17,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 13,
      "startLine" : 16,
      "endLine" : 38,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "libraries/rib-base/src/main/kotlin/com/uber/rib/core/WorkerUnbinder.kt",
        "extension" : "kt",
        "linesOfCode" : 10,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 16,
      "endLine" : 26,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/layout/off_game_rib.xml",
        "extension" : "xml",
        "linesOfCode" : 53,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 50,
      "startLine" : 55,
      "endLine" : 60,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 50
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/layout/game_button.xml",
        "extension" : "xml",
        "linesOfCode" : 8,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 3,
      "endLine" : 8,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 59,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 41,
      "startLine" : 35,
      "endLine" : 41,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 82,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 37,
      "endLine" : 43,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/randomWinner/RandomWinnerInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 33,
      "endLine" : 39,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 38,
      "endLine" : 44,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/offgame/OffGameInteractor.java",
        "extension" : "java",
        "linesOfCode" : 63,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 42,
      "startLine" : 37,
      "endLine" : 43,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/randomWinner/RandomWinnerInteractor.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 20,
      "startLine" : 33,
      "endLine" : 39,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedin/LoggedInInteractor.java",
        "extension" : "java",
        "linesOfCode" : 22,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 11,
      "startLine" : 29,
      "endLine" : 39,
      "cleanedStartLine" : 3,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/LoggedInInteractor.java",
        "extension" : "java",
        "linesOfCode" : 45,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 23,
      "startLine" : 39,
      "endLine" : 49,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 11
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/randomWinner/RandomWinnerBuilder.java",
        "extension" : "java",
        "linesOfCode" : 76,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 71,
      "endLine" : 79,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeBuilder.java",
        "extension" : "java",
        "linesOfCode" : 77,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 52,
      "startLine" : 68,
      "endLine" : 76,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 69,
      "endLine" : 75,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 23,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 25,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterAndState.kt",
        "extension" : "kt",
        "linesOfCode" : 98,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 81,
      "endLine" : 87,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 38
    }, {
      "file" : {
        "relativePath" : "libraries/rib-router-navigator/src/main/kotlin/com/uber/rib/core/RouterAndState.kt",
        "extension" : "kt",
        "linesOfCode" : 98,
        "components" : [ "primary::libraries" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 77,
      "startLine" : 98,
      "endLine" : 104,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 48
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/RootActivity.java",
        "extension" : "java",
        "linesOfCode" : 13,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 6,
      "startLine" : 24,
      "endLine" : 30,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 71,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 53,
      "startLine" : 71,
      "endLine" : 80,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/tictactoe/TicTacToeInteractor.java",
        "extension" : "java",
        "linesOfCode" : 83,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 62,
      "startLine" : 82,
      "endLine" : 91,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 50
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 22,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 18,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 25,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 21,
      "startLine" : 25,
      "endLine" : 33,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 12
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 68,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 69,
      "endLine" : 75,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/RootBuilder.java",
        "extension" : "java",
        "linesOfCode" : 81,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 77,
      "endLine" : 83,
      "cleanedStartLine" : 24,
      "cleanedEndLine" : 29
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 33,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 31,
      "endLine" : 40,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedin/MutableScoreStream.java",
        "extension" : "java",
        "linesOfCode" : 27,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 36,
      "endLine" : 46,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 14
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/java/com/uber/rib/root/loggedin/MutableScoreStream.java",
        "extension" : "java",
        "linesOfCode" : 28,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 37,
      "endLine" : 47,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 14
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial2/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial4/src/main/res/values/ub__strings.xml",
        "extension" : "xml",
        "linesOfCode" : 10,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 9,
      "startLine" : 4,
      "endLine" : 9,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "tutorials/tutorial3-completed/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 47,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 27,
      "startLine" : 38,
      "endLine" : 47,
      "cleanedStartLine" : 5,
      "cleanedEndLine" : 10
    }, {
      "file" : {
        "relativePath" : "tutorials/tutorial3/src/main/java/com/uber/rib/root/loggedout/LoggedOutView.java",
        "extension" : "java",
        "linesOfCode" : 36,
        "components" : [ "primary::tutorials" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 19,
      "startLine" : 32,
      "endLine" : 41,
      "cleanedStartLine" : 2,
      "cleanedEndLine" : 7
    } ]
  } ],
  "overallDuplication" : null
}