1. load libraries

Le chargement a nécessité le package : SeuratObject
Le chargement a nécessité le package : sp

Attachement du package : ‘SeuratObject’

Les objets suivants sont masqués depuis ‘package:base’:

    intersect, t

Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
── Installed datasets ─────────────────────────────────────────────────────────────────────────────── SeuratData v0.2.2.9001 ──
✔ pbmc3k  3.1.4                                                ✔ pbmcsca 3.0.0

───────────────────────────────────────────────────────────── Key ─────────────────────────────────────────────────────────────
✔ Dataset loaded successfully
❯ Dataset built with a newer version of Seurat than installed
❓ Unknown version of Seurat installed


Attachement du package : ‘dplyr’

Les objets suivants sont masqués depuis ‘package:stats’:

    filter, lag

Les objets suivants sont masqués depuis ‘package:base’:

    intersect, setdiff, setequal, union

── Attaching core tidyverse packages ─────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ ggplot2   3.5.1     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.1── Conflicts ───────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
Attachement du package : ‘magrittr’

L'objet suivant est masqué depuis ‘package:purrr’:

    set_names

L'objet suivant est masqué depuis ‘package:tidyr’:

    extract

Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      

Attachement du package : ‘dbplyr’

Les objets suivants sont masqués depuis ‘package:dplyr’:

    ident, sql

Registered S3 method overwritten by 'rmarkdown':
  method         from
  print.paged_df     
Registered S3 method overwritten by 'SeuratDisk':
  method            from  
  as.sparse.H5Group Seurat

Attaching shinyBS
Le chargement a nécessité le package : SummarizedExperiment
Le chargement a nécessité le package : MatrixGenerics
Le chargement a nécessité le package : matrixStats

Attachement du package : 'matrixStats'

L'objet suivant est masqué depuis 'package:dplyr':

    count


Attachement du package : 'MatrixGenerics'

Les objets suivants sont masqués depuis 'package:matrixStats':

    colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse, colCounts, colCummaxs, colCummins, colCumprods,
    colCumsums, colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs, colMads, colMaxs, colMeans2,
    colMedians, colMins, colOrderStats, colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
    colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads, colWeightedMeans, colWeightedMedians,
    colWeightedSds, colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet, rowCollapse, rowCounts,
    rowCummaxs, rowCummins, rowCumprods, rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps, rowMadDiffs,
    rowMads, rowMaxs, rowMeans2, rowMedians, rowMins, rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
    rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars, rowWeightedMads, rowWeightedMeans,
    rowWeightedMedians, rowWeightedSds, rowWeightedVars

Le chargement a nécessité le package : GenomicRanges
Le chargement a nécessité le package : stats4
Le chargement a nécessité le package : BiocGenerics

Attachement du package : 'BiocGenerics'

Les objets suivants sont masqués depuis 'package:lubridate':

    intersect, setdiff, union

Les objets suivants sont masqués depuis 'package:dplyr':

    combine, intersect, setdiff, union

L'objet suivant est masqué depuis 'package:SeuratObject':

    intersect

Les objets suivants sont masqués depuis 'package:stats':

    IQR, mad, sd, var, xtabs

Les objets suivants sont masqués depuis 'package:base':

    anyDuplicated, aperm, append, as.data.frame, basename, cbind, colnames, dirname, do.call, duplicated, eval,
    evalq, Filter, Find, get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget, order,
    paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort, table,
    tapply, union, unique, unsplit, which.max, which.min

Le chargement a nécessité le package : S4Vectors

Attachement du package : 'S4Vectors'

Les objets suivants sont masqués depuis 'package:lubridate':

    second, second<-

L'objet suivant est masqué depuis 'package:tidyr':

    expand

Les objets suivants sont masqués depuis 'package:dplyr':

    first, rename

Les objets suivants sont masqués depuis 'package:base':

    expand.grid, I, unname

Le chargement a nécessité le package : IRanges

Attachement du package : 'IRanges'

L'objet suivant est masqué depuis 'package:lubridate':

    %within%

L'objet suivant est masqué depuis 'package:purrr':

    reduce

Les objets suivants sont masqués depuis 'package:dplyr':

    collapse, desc, slice

L'objet suivant est masqué depuis 'package:sp':

    %over%

Le chargement a nécessité le package : GenomeInfoDb

Attachement du package : 'GenomicRanges'

L'objet suivant est masqué depuis 'package:magrittr':

    subtract

Le chargement a nécessité le package : Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.


Attachement du package : 'Biobase'

L'objet suivant est masqué depuis 'package:MatrixGenerics':

    rowMedians

Les objets suivants sont masqués depuis 'package:matrixStats':

    anyMissing, rowMedians


Attachement du package : 'SummarizedExperiment'

L'objet suivant est masqué depuis 'package:Seurat':

    Assays

L'objet suivant est masqué depuis 'package:SeuratObject':

    Assays


Attachement du package : 'celldex'

Les objets suivants sont masqués depuis 'package:SingleR':

    BlueprintEncodeData, DatabaseImmuneCellExpressionData, HumanPrimaryCellAtlasData, ImmGenData,
    MonacoImmuneData, MouseRNAseqData, NovershternHematopoieticData

Le chargement a nécessité le package : ggraph

Attachement du package : 'ggraph'

L'objet suivant est masqué depuis 'package:sp':

    geometry

2. Load Seurat Object

All_samples_Merged
An object of class Seurat 
64169 features across 59355 samples within 6 assays 
Active assay: SCT (27417 features, 3000 variable features)
 3 layers present: counts, data, scale.data
 5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 3 dimensional reductions calculated: integrated_dr, ref.umap, pca

Azimuth Annotation

# InstallData("pbmcref")
# 
# # The RunAzimuth function can take a Seurat object as input
# All_samples_Merged <- RunAzimuth(All_samples_Merged, reference = "pbmcref")

3. QC


# Remove the percent.mito column
All_samples_Merged$percent.mito <- NULL
Avis : Cannot find cell-level meta data named  percent.mito
# Set identity classes to an existing column in meta data
Idents(object = All_samples_Merged) <- "cell_line"

All_samples_Merged[["percent.rb"]] <- PercentageFeatureSet(All_samples_Merged, 
                                                           pattern = "^RP[SL]")
# Convert 'percent.mt' to numeric, replacing "NaN" with 0
All_samples_Merged$percent.rb <- replace(as.numeric(All_samples_Merged$percent.rb), is.na(All_samples_Merged$percent.rb), 0)



# The [[ operator can add columns to object metadata. This is a great place to stash QC stats
All_samples_Merged[["percent.mt"]] <- PercentageFeatureSet(All_samples_Merged, pattern = "^MT-")

# Convert 'percent.mt' to numeric, replacing "NaN" with 0
All_samples_Merged$percent.mt <- replace(as.numeric(All_samples_Merged$percent.mt), is.na(All_samples_Merged$percent.mt), 0)





VlnPlot(All_samples_Merged, features = c("nFeature_RNA", 
                                         "nCount_RNA", 
                                         "percent.mt",
                                         "percent.rb"), 
                            ncol = 4, pt.size = 0.1) & 
              theme(plot.title = element_text(size=10))


FeatureScatter(All_samples_Merged, feature1 = "percent.mt", 
                                  feature2 = "percent.rb")


VlnPlot(All_samples_Merged, features = c("nFeature_RNA", 
                                    "nCount_RNA", 
                                    "percent.mt"), 
                                      ncol = 3)


FeatureScatter(All_samples_Merged, 
               feature1 = "percent.mt", 
               feature2 = "percent.rb") +
        geom_smooth(method = 'lm')


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "nFeature_RNA") +
        geom_smooth(method = 'lm')

##FeatureScatter is typically used to visualize feature-feature relationships ##for anything calculated by the object, ##i.e. columns in object metadata, PC scores etc.


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "percent.mt")+
  geom_smooth(method = 'lm')


FeatureScatter(All_samples_Merged, 
               feature1 = "nCount_RNA", 
               feature2 = "nFeature_RNA")+
  geom_smooth(method = 'lm')

Assign Cell-Cycle Scores

Running SCTransform on assay: RNA
Running SCTransform on layer: counts
vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Variance stabilizing transformation of count matrix of size 27417 by 59355
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Found 453 outliers - those will be ignored in fitting/regularization step

Second step: Get residuals using fitted parameters for 27417 genes
Computing corrected count matrix for 27417 genes
Calculating gene attributes
Wall clock passed: Time difference of 8.810053 mins
Determine variable features

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Getting residuals for block 1(of 12) for counts dataset
Getting residuals for block 2(of 12) for counts dataset
Getting residuals for block 3(of 12) for counts dataset
Getting residuals for block 4(of 12) for counts dataset
Getting residuals for block 5(of 12) for counts dataset
Getting residuals for block 6(of 12) for counts dataset
Getting residuals for block 7(of 12) for counts dataset
Getting residuals for block 8(of 12) for counts dataset
Getting residuals for block 9(of 12) for counts dataset
Getting residuals for block 10(of 12) for counts dataset
Getting residuals for block 11(of 12) for counts dataset
Getting residuals for block 12(of 12) for counts dataset

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Finished calculating residuals for counts
Set default assay to SCT
Avis : The following features are not present in the object: MLF1IP, not searching for symbol synonymsAvis : The following features are not present in the object: FAM64A, HN1, not searching for symbol synonyms

4. Normalize data

DefaultAssay(All_samples_Merged) <- "RNA"

# Apply SCTransform
All_samples_Merged <- SCTransform(All_samples_Merged, 
                                  vars.to.regress = c("percent.rb","percent.mt", "CC.Difference"), 
                                  do.scale=TRUE, 
                                  do.center=TRUE, 
                                  verbose = TRUE)
Running SCTransform on assay: RNA
Running SCTransform on layer: counts
vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Variance stabilizing transformation of count matrix of size 27417 by 59355
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Found 453 outliers - those will be ignored in fitting/regularization step

Second step: Get residuals using fitted parameters for 27417 genes
Computing corrected count matrix for 27417 genes
Calculating gene attributes
Wall clock passed: Time difference of 9.458052 mins
Determine variable features
Regressing out percent.rb, percent.mt, CC.Difference

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=                                                                                                                    |   0%
  |                                                                                                                           
  |=                                                                                                                    |   1%
  |                                                                                                                           
  |==                                                                                                                   |   1%
  |                                                                                                                           
  |==                                                                                                                   |   2%
  |                                                                                                                           
  |===                                                                                                                  |   2%
  |                                                                                                                           
  |===                                                                                                                  |   3%
  |                                                                                                                           
  |====                                                                                                                 |   3%
  |                                                                                                                           
  |====                                                                                                                 |   4%
  |                                                                                                                           
  |=====                                                                                                                |   4%
  |                                                                                                                           
  |=====                                                                                                                |   5%
  |                                                                                                                           
  |======                                                                                                               |   5%
  |                                                                                                                           
  |======                                                                                                               |   6%
  |                                                                                                                           
  |=======                                                                                                              |   6%
  |                                                                                                                           
  |========                                                                                                             |   6%
  |                                                                                                                           
  |========                                                                                                             |   7%
  |                                                                                                                           
  |=========                                                                                                            |   7%
  |                                                                                                                           
  |=========                                                                                                            |   8%
  |                                                                                                                           
  |==========                                                                                                           |   8%
  |                                                                                                                           
  |==========                                                                                                           |   9%
  |                                                                                                                           
  |===========                                                                                                          |   9%
  |                                                                                                                           
  |===========                                                                                                          |  10%
  |                                                                                                                           
  |============                                                                                                         |  10%
  |                                                                                                                           
  |============                                                                                                         |  11%
  |                                                                                                                           
  |=============                                                                                                        |  11%
  |                                                                                                                           
  |=============                                                                                                        |  12%
  |                                                                                                                           
  |==============                                                                                                       |  12%
  |                                                                                                                           
  |===============                                                                                                      |  12%
  |                                                                                                                           
  |===============                                                                                                      |  13%
  |                                                                                                                           
  |================                                                                                                     |  13%
  |                                                                                                                           
  |================                                                                                                     |  14%
  |                                                                                                                           
  |=================                                                                                                    |  14%
  |                                                                                                                           
  |=================                                                                                                    |  15%
  |                                                                                                                           
  |==================                                                                                                   |  15%
  |                                                                                                                           
  |==================                                                                                                   |  16%
  |                                                                                                                           
  |===================                                                                                                  |  16%
  |                                                                                                                           
  |===================                                                                                                  |  17%
  |                                                                                                                           
  |====================                                                                                                 |  17%
  |                                                                                                                           
  |====================                                                                                                 |  18%
  |                                                                                                                           
  |=====================                                                                                                |  18%
  |                                                                                                                           
  |======================                                                                                               |  18%
  |                                                                                                                           
  |======================                                                                                               |  19%
  |                                                                                                                           
  |=======================                                                                                              |  19%
  |                                                                                                                           
  |=======================                                                                                              |  20%
  |                                                                                                                           
  |========================                                                                                             |  20%
  |                                                                                                                           
  |========================                                                                                             |  21%
  |                                                                                                                           
  |=========================                                                                                            |  21%
  |                                                                                                                           
  |=========================                                                                                            |  22%
  |                                                                                                                           
  |==========================                                                                                           |  22%
  |                                                                                                                           
  |==========================                                                                                           |  23%
  |                                                                                                                           
  |===========================                                                                                          |  23%
  |                                                                                                                           
  |===========================                                                                                          |  24%
  |                                                                                                                           
  |============================                                                                                         |  24%
  |                                                                                                                           
  |=============================                                                                                        |  24%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==============================                                                                                       |  25%
  |                                                                                                                           
  |==============================                                                                                       |  26%
  |                                                                                                                           
  |===============================                                                                                      |  26%
  |                                                                                                                           
  |===============================                                                                                      |  27%
  |                                                                                                                           
  |================================                                                                                     |  27%
  |                                                                                                                           
  |================================                                                                                     |  28%
  |                                                                                                                           
  |=================================                                                                                    |  28%
  |                                                                                                                           
  |=================================                                                                                    |  29%
  |                                                                                                                           
  |==================================                                                                                   |  29%
  |                                                                                                                           
  |===================================                                                                                  |  30%
  |                                                                                                                           
  |====================================                                                                                 |  30%
  |                                                                                                                           
  |====================================                                                                                 |  31%
  |                                                                                                                           
  |=====================================                                                                                |  31%
  |                                                                                                                           
  |=====================================                                                                                |  32%
  |                                                                                                                           
  |======================================                                                                               |  32%
  |                                                                                                                           
  |======================================                                                                               |  33%
  |                                                                                                                           
  |=======================================                                                                              |  33%
  |                                                                                                                           
  |=======================================                                                                              |  34%
  |                                                                                                                           
  |========================================                                                                             |  34%
  |                                                                                                                           
  |========================================                                                                             |  35%
  |                                                                                                                           
  |=========================================                                                                            |  35%
  |                                                                                                                           
  |==========================================                                                                           |  36%
  |                                                                                                                           
  |===========================================                                                                          |  36%
  |                                                                                                                           
  |===========================================                                                                          |  37%
  |                                                                                                                           
  |============================================                                                                         |  37%
  |                                                                                                                           
  |============================================                                                                         |  38%
  |                                                                                                                           
  |=============================================                                                                        |  38%
  |                                                                                                                           
  |=============================================                                                                        |  39%
  |                                                                                                                           
  |==============================================                                                                       |  39%
  |                                                                                                                           
  |==============================================                                                                       |  40%
  |                                                                                                                           
  |===============================================                                                                      |  40%
  |                                                                                                                           
  |===============================================                                                                      |  41%
  |                                                                                                                           
  |================================================                                                                     |  41%
  |                                                                                                                           
  |=================================================                                                                    |  41%
  |                                                                                                                           
  |=================================================                                                                    |  42%
  |                                                                                                                           
  |==================================================                                                                   |  42%
  |                                                                                                                           
  |==================================================                                                                   |  43%
  |                                                                                                                           
  |===================================================                                                                  |  43%
  |                                                                                                                           
  |===================================================                                                                  |  44%
  |                                                                                                                           
  |====================================================                                                                 |  44%
  |                                                                                                                           
  |====================================================                                                                 |  45%
  |                                                                                                                           
  |=====================================================                                                                |  45%
  |                                                                                                                           
  |=====================================================                                                                |  46%
  |                                                                                                                           
  |======================================================                                                               |  46%
  |                                                                                                                           
  |======================================================                                                               |  47%
  |                                                                                                                           
  |=======================================================                                                              |  47%
  |                                                                                                                           
  |========================================================                                                             |  47%
  |                                                                                                                           
  |========================================================                                                             |  48%
  |                                                                                                                           
  |=========================================================                                                            |  48%
  |                                                                                                                           
  |=========================================================                                                            |  49%
  |                                                                                                                           
  |==========================================================                                                           |  49%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |===========================================================                                                          |  50%
  |                                                                                                                           
  |===========================================================                                                          |  51%
  |                                                                                                                           
  |============================================================                                                         |  51%
  |                                                                                                                           
  |============================================================                                                         |  52%
  |                                                                                                                           
  |=============================================================                                                        |  52%
  |                                                                                                                           
  |=============================================================                                                        |  53%
  |                                                                                                                           
  |==============================================================                                                       |  53%
  |                                                                                                                           
  |===============================================================                                                      |  53%
  |                                                                                                                           
  |===============================================================                                                      |  54%
  |                                                                                                                           
  |================================================================                                                     |  54%
  |                                                                                                                           
  |================================================================                                                     |  55%
  |                                                                                                                           
  |=================================================================                                                    |  55%
  |                                                                                                                           
  |=================================================================                                                    |  56%
  |                                                                                                                           
  |==================================================================                                                   |  56%
  |                                                                                                                           
  |==================================================================                                                   |  57%
  |                                                                                                                           
  |===================================================================                                                  |  57%
  |                                                                                                                           
  |===================================================================                                                  |  58%
  |                                                                                                                           
  |====================================================================                                                 |  58%
  |                                                                                                                           
  |====================================================================                                                 |  59%
  |                                                                                                                           
  |=====================================================================                                                |  59%
  |                                                                                                                           
  |======================================================================                                               |  59%
  |                                                                                                                           
  |======================================================================                                               |  60%
  |                                                                                                                           
  |=======================================================================                                              |  60%
  |                                                                                                                           
  |=======================================================================                                              |  61%
  |                                                                                                                           
  |========================================================================                                             |  61%
  |                                                                                                                           
  |========================================================================                                             |  62%
  |                                                                                                                           
  |=========================================================================                                            |  62%
  |                                                                                                                           
  |=========================================================================                                            |  63%
  |                                                                                                                           
  |==========================================================================                                           |  63%
  |                                                                                                                           
  |==========================================================================                                           |  64%
  |                                                                                                                           
  |===========================================================================                                          |  64%
  |                                                                                                                           
  |============================================================================                                         |  65%
  |                                                                                                                           
  |=============================================================================                                        |  65%
  |                                                                                                                           
  |=============================================================================                                        |  66%
  |                                                                                                                           
  |==============================================================================                                       |  66%
  |                                                                                                                           
  |==============================================================================                                       |  67%
  |                                                                                                                           
  |===============================================================================                                      |  67%
  |                                                                                                                           
  |===============================================================================                                      |  68%
  |                                                                                                                           
  |================================================================================                                     |  68%
  |                                                                                                                           
  |================================================================================                                     |  69%
  |                                                                                                                           
  |=================================================================================                                    |  69%
  |                                                                                                                           
  |=================================================================================                                    |  70%
  |                                                                                                                           
  |==================================================================================                                   |  70%
  |                                                                                                                           
  |===================================================================================                                  |  71%
  |                                                                                                                           
  |====================================================================================                                 |  71%
  |                                                                                                                           
  |====================================================================================                                 |  72%
  |                                                                                                                           
  |=====================================================================================                                |  72%
  |                                                                                                                           
  |=====================================================================================                                |  73%
  |                                                                                                                           
  |======================================================================================                               |  73%
  |                                                                                                                           
  |======================================================================================                               |  74%
  |                                                                                                                           
  |=======================================================================================                              |  74%
  |                                                                                                                           
  |=======================================================================================                              |  75%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |========================================================================================                             |  76%
  |                                                                                                                           
  |=========================================================================================                            |  76%
  |                                                                                                                           
  |==========================================================================================                           |  76%
  |                                                                                                                           
  |==========================================================================================                           |  77%
  |                                                                                                                           
  |===========================================================================================                          |  77%
  |                                                                                                                           
  |===========================================================================================                          |  78%
  |                                                                                                                           
  |============================================================================================                         |  78%
  |                                                                                                                           
  |============================================================================================                         |  79%
  |                                                                                                                           
  |=============================================================================================                        |  79%
  |                                                                                                                           
  |=============================================================================================                        |  80%
  |                                                                                                                           
  |==============================================================================================                       |  80%
  |                                                                                                                           
  |==============================================================================================                       |  81%
  |                                                                                                                           
  |===============================================================================================                      |  81%
  |                                                                                                                           
  |===============================================================================================                      |  82%
  |                                                                                                                           
  |================================================================================================                     |  82%
  |                                                                                                                           
  |=================================================================================================                    |  82%
  |                                                                                                                           
  |=================================================================================================                    |  83%
  |                                                                                                                           
  |==================================================================================================                   |  83%
  |                                                                                                                           
  |==================================================================================================                   |  84%
  |                                                                                                                           
  |===================================================================================================                  |  84%
  |                                                                                                                           
  |===================================================================================================                  |  85%
  |                                                                                                                           
  |====================================================================================================                 |  85%
  |                                                                                                                           
  |====================================================================================================                 |  86%
  |                                                                                                                           
  |=====================================================================================================                |  86%
  |                                                                                                                           
  |=====================================================================================================                |  87%
  |                                                                                                                           
  |======================================================================================================               |  87%
  |                                                                                                                           
  |======================================================================================================               |  88%
  |                                                                                                                           
  |=======================================================================================================              |  88%
  |                                                                                                                           
  |========================================================================================================             |  88%
  |                                                                                                                           
  |========================================================================================================             |  89%
  |                                                                                                                           
  |=========================================================================================================            |  89%
  |                                                                                                                           
  |=========================================================================================================            |  90%
  |                                                                                                                           
  |==========================================================================================================           |  90%
  |                                                                                                                           
  |==========================================================================================================           |  91%
  |                                                                                                                           
  |===========================================================================================================          |  91%
  |                                                                                                                           
  |===========================================================================================================          |  92%
  |                                                                                                                           
  |============================================================================================================         |  92%
  |                                                                                                                           
  |============================================================================================================         |  93%
  |                                                                                                                           
  |=============================================================================================================        |  93%
  |                                                                                                                           
  |=============================================================================================================        |  94%
  |                                                                                                                           
  |==============================================================================================================       |  94%
  |                                                                                                                           
  |===============================================================================================================      |  94%
  |                                                                                                                           
  |===============================================================================================================      |  95%
  |                                                                                                                           
  |================================================================================================================     |  95%
  |                                                                                                                           
  |================================================================================================================     |  96%
  |                                                                                                                           
  |=================================================================================================================    |  96%
  |                                                                                                                           
  |=================================================================================================================    |  97%
  |                                                                                                                           
  |==================================================================================================================   |  97%
  |                                                                                                                           
  |==================================================================================================================   |  98%
  |                                                                                                                           
  |===================================================================================================================  |  98%
  |                                                                                                                           
  |===================================================================================================================  |  99%
  |                                                                                                                           
  |==================================================================================================================== |  99%
  |                                                                                                                           
  |==================================================================================================================== | 100%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Centering and scaling data matrix

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Getting residuals for block 1(of 12) for counts dataset
Getting residuals for block 2(of 12) for counts dataset
Getting residuals for block 3(of 12) for counts dataset
Getting residuals for block 4(of 12) for counts dataset
Getting residuals for block 5(of 12) for counts dataset
Getting residuals for block 6(of 12) for counts dataset
Getting residuals for block 7(of 12) for counts dataset
Getting residuals for block 8(of 12) for counts dataset
Getting residuals for block 9(of 12) for counts dataset
Getting residuals for block 10(of 12) for counts dataset
Getting residuals for block 11(of 12) for counts dataset
Getting residuals for block 12(of 12) for counts dataset
Regressing out percent.rb, percent.mt, CC.Difference

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=                                                                                                                    |   0%
  |                                                                                                                           
  |=                                                                                                                    |   1%
  |                                                                                                                           
  |==                                                                                                                   |   1%
  |                                                                                                                           
  |==                                                                                                                   |   2%
  |                                                                                                                           
  |===                                                                                                                  |   2%
  |                                                                                                                           
  |===                                                                                                                  |   3%
  |                                                                                                                           
  |====                                                                                                                 |   3%
  |                                                                                                                           
  |====                                                                                                                 |   4%
  |                                                                                                                           
  |=====                                                                                                                |   4%
  |                                                                                                                           
  |=====                                                                                                                |   5%
  |                                                                                                                           
  |======                                                                                                               |   5%
  |                                                                                                                           
  |======                                                                                                               |   6%
  |                                                                                                                           
  |=======                                                                                                              |   6%
  |                                                                                                                           
  |========                                                                                                             |   6%
  |                                                                                                                           
  |========                                                                                                             |   7%
  |                                                                                                                           
  |=========                                                                                                            |   7%
  |                                                                                                                           
  |=========                                                                                                            |   8%
  |                                                                                                                           
  |==========                                                                                                           |   8%
  |                                                                                                                           
  |==========                                                                                                           |   9%
  |                                                                                                                           
  |===========                                                                                                          |   9%
  |                                                                                                                           
  |===========                                                                                                          |  10%
  |                                                                                                                           
  |============                                                                                                         |  10%
  |                                                                                                                           
  |============                                                                                                         |  11%
  |                                                                                                                           
  |=============                                                                                                        |  11%
  |                                                                                                                           
  |=============                                                                                                        |  12%
  |                                                                                                                           
  |==============                                                                                                       |  12%
  |                                                                                                                           
  |===============                                                                                                      |  12%
  |                                                                                                                           
  |===============                                                                                                      |  13%
  |                                                                                                                           
  |================                                                                                                     |  13%
  |                                                                                                                           
  |================                                                                                                     |  14%
  |                                                                                                                           
  |=================                                                                                                    |  14%
  |                                                                                                                           
  |=================                                                                                                    |  15%
  |                                                                                                                           
  |==================                                                                                                   |  15%
  |                                                                                                                           
  |==================                                                                                                   |  16%
  |                                                                                                                           
  |===================                                                                                                  |  16%
  |                                                                                                                           
  |===================                                                                                                  |  17%
  |                                                                                                                           
  |====================                                                                                                 |  17%
  |                                                                                                                           
  |====================                                                                                                 |  18%
  |                                                                                                                           
  |=====================                                                                                                |  18%
  |                                                                                                                           
  |======================                                                                                               |  18%
  |                                                                                                                           
  |======================                                                                                               |  19%
  |                                                                                                                           
  |=======================                                                                                              |  19%
  |                                                                                                                           
  |=======================                                                                                              |  20%
  |                                                                                                                           
  |========================                                                                                             |  20%
  |                                                                                                                           
  |========================                                                                                             |  21%
  |                                                                                                                           
  |=========================                                                                                            |  21%
  |                                                                                                                           
  |=========================                                                                                            |  22%
  |                                                                                                                           
  |==========================                                                                                           |  22%
  |                                                                                                                           
  |==========================                                                                                           |  23%
  |                                                                                                                           
  |===========================                                                                                          |  23%
  |                                                                                                                           
  |===========================                                                                                          |  24%
  |                                                                                                                           
  |============================                                                                                         |  24%
  |                                                                                                                           
  |=============================                                                                                        |  24%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==============================                                                                                       |  25%
  |                                                                                                                           
  |==============================                                                                                       |  26%
  |                                                                                                                           
  |===============================                                                                                      |  26%
  |                                                                                                                           
  |===============================                                                                                      |  27%
  |                                                                                                                           
  |================================                                                                                     |  27%
  |                                                                                                                           
  |================================                                                                                     |  28%
  |                                                                                                                           
  |=================================                                                                                    |  28%
  |                                                                                                                           
  |=================================                                                                                    |  29%
  |                                                                                                                           
  |==================================                                                                                   |  29%
  |                                                                                                                           
  |===================================                                                                                  |  30%
  |                                                                                                                           
  |====================================                                                                                 |  30%
  |                                                                                                                           
  |====================================                                                                                 |  31%
  |                                                                                                                           
  |=====================================                                                                                |  31%
  |                                                                                                                           
  |=====================================                                                                                |  32%
  |                                                                                                                           
  |======================================                                                                               |  32%
  |                                                                                                                           
  |======================================                                                                               |  33%
  |                                                                                                                           
  |=======================================                                                                              |  33%
  |                                                                                                                           
  |=======================================                                                                              |  34%
  |                                                                                                                           
  |========================================                                                                             |  34%
  |                                                                                                                           
  |========================================                                                                             |  35%
  |                                                                                                                           
  |=========================================                                                                            |  35%
  |                                                                                                                           
  |==========================================                                                                           |  36%
  |                                                                                                                           
  |===========================================                                                                          |  36%
  |                                                                                                                           
  |===========================================                                                                          |  37%
  |                                                                                                                           
  |============================================                                                                         |  37%
  |                                                                                                                           
  |============================================                                                                         |  38%
  |                                                                                                                           
  |=============================================                                                                        |  38%
  |                                                                                                                           
  |=============================================                                                                        |  39%
  |                                                                                                                           
  |==============================================                                                                       |  39%
  |                                                                                                                           
  |==============================================                                                                       |  40%
  |                                                                                                                           
  |===============================================                                                                      |  40%
  |                                                                                                                           
  |===============================================                                                                      |  41%
  |                                                                                                                           
  |================================================                                                                     |  41%
  |                                                                                                                           
  |=================================================                                                                    |  41%
  |                                                                                                                           
  |=================================================                                                                    |  42%
  |                                                                                                                           
  |==================================================                                                                   |  42%
  |                                                                                                                           
  |==================================================                                                                   |  43%
  |                                                                                                                           
  |===================================================                                                                  |  43%
  |                                                                                                                           
  |===================================================                                                                  |  44%
  |                                                                                                                           
  |====================================================                                                                 |  44%
  |                                                                                                                           
  |====================================================                                                                 |  45%
  |                                                                                                                           
  |=====================================================                                                                |  45%
  |                                                                                                                           
  |=====================================================                                                                |  46%
  |                                                                                                                           
  |======================================================                                                               |  46%
  |                                                                                                                           
  |======================================================                                                               |  47%
  |                                                                                                                           
  |=======================================================                                                              |  47%
  |                                                                                                                           
  |========================================================                                                             |  47%
  |                                                                                                                           
  |========================================================                                                             |  48%
  |                                                                                                                           
  |=========================================================                                                            |  48%
  |                                                                                                                           
  |=========================================================                                                            |  49%
  |                                                                                                                           
  |==========================================================                                                           |  49%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |===========================================================                                                          |  50%
  |                                                                                                                           
  |===========================================================                                                          |  51%
  |                                                                                                                           
  |============================================================                                                         |  51%
  |                                                                                                                           
  |============================================================                                                         |  52%
  |                                                                                                                           
  |=============================================================                                                        |  52%
  |                                                                                                                           
  |=============================================================                                                        |  53%
  |                                                                                                                           
  |==============================================================                                                       |  53%
  |                                                                                                                           
  |===============================================================                                                      |  53%
  |                                                                                                                           
  |===============================================================                                                      |  54%
  |                                                                                                                           
  |================================================================                                                     |  54%
  |                                                                                                                           
  |================================================================                                                     |  55%
  |                                                                                                                           
  |=================================================================                                                    |  55%
  |                                                                                                                           
  |=================================================================                                                    |  56%
  |                                                                                                                           
  |==================================================================                                                   |  56%
  |                                                                                                                           
  |==================================================================                                                   |  57%
  |                                                                                                                           
  |===================================================================                                                  |  57%
  |                                                                                                                           
  |===================================================================                                                  |  58%
  |                                                                                                                           
  |====================================================================                                                 |  58%
  |                                                                                                                           
  |====================================================================                                                 |  59%
  |                                                                                                                           
  |=====================================================================                                                |  59%
  |                                                                                                                           
  |======================================================================                                               |  59%
  |                                                                                                                           
  |======================================================================                                               |  60%
  |                                                                                                                           
  |=======================================================================                                              |  60%
  |                                                                                                                           
  |=======================================================================                                              |  61%
  |                                                                                                                           
  |========================================================================                                             |  61%
  |                                                                                                                           
  |========================================================================                                             |  62%
  |                                                                                                                           
  |=========================================================================                                            |  62%
  |                                                                                                                           
  |=========================================================================                                            |  63%
  |                                                                                                                           
  |==========================================================================                                           |  63%
  |                                                                                                                           
  |==========================================================================                                           |  64%
  |                                                                                                                           
  |===========================================================================                                          |  64%
  |                                                                                                                           
  |============================================================================                                         |  65%
  |                                                                                                                           
  |=============================================================================                                        |  65%
  |                                                                                                                           
  |=============================================================================                                        |  66%
  |                                                                                                                           
  |==============================================================================                                       |  66%
  |                                                                                                                           
  |==============================================================================                                       |  67%
  |                                                                                                                           
  |===============================================================================                                      |  67%
  |                                                                                                                           
  |===============================================================================                                      |  68%
  |                                                                                                                           
  |================================================================================                                     |  68%
  |                                                                                                                           
  |================================================================================                                     |  69%
  |                                                                                                                           
  |=================================================================================                                    |  69%
  |                                                                                                                           
  |=================================================================================                                    |  70%
  |                                                                                                                           
  |==================================================================================                                   |  70%
  |                                                                                                                           
  |===================================================================================                                  |  71%
  |                                                                                                                           
  |====================================================================================                                 |  71%
  |                                                                                                                           
  |====================================================================================                                 |  72%
  |                                                                                                                           
  |=====================================================================================                                |  72%
  |                                                                                                                           
  |=====================================================================================                                |  73%
  |                                                                                                                           
  |======================================================================================                               |  73%
  |                                                                                                                           
  |======================================================================================                               |  74%
  |                                                                                                                           
  |=======================================================================================                              |  74%
  |                                                                                                                           
  |=======================================================================================                              |  75%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |========================================================================================                             |  76%
  |                                                                                                                           
  |=========================================================================================                            |  76%
  |                                                                                                                           
  |==========================================================================================                           |  76%
  |                                                                                                                           
  |==========================================================================================                           |  77%
  |                                                                                                                           
  |===========================================================================================                          |  77%
  |                                                                                                                           
  |===========================================================================================                          |  78%
  |                                                                                                                           
  |============================================================================================                         |  78%
  |                                                                                                                           
  |============================================================================================                         |  79%
  |                                                                                                                           
  |=============================================================================================                        |  79%
  |                                                                                                                           
  |=============================================================================================                        |  80%
  |                                                                                                                           
  |==============================================================================================                       |  80%
  |                                                                                                                           
  |==============================================================================================                       |  81%
  |                                                                                                                           
  |===============================================================================================                      |  81%
  |                                                                                                                           
  |===============================================================================================                      |  82%
  |                                                                                                                           
  |================================================================================================                     |  82%
  |                                                                                                                           
  |=================================================================================================                    |  82%
  |                                                                                                                           
  |=================================================================================================                    |  83%
  |                                                                                                                           
  |==================================================================================================                   |  83%
  |                                                                                                                           
  |==================================================================================================                   |  84%
  |                                                                                                                           
  |===================================================================================================                  |  84%
  |                                                                                                                           
  |===================================================================================================                  |  85%
  |                                                                                                                           
  |====================================================================================================                 |  85%
  |                                                                                                                           
  |====================================================================================================                 |  86%
  |                                                                                                                           
  |=====================================================================================================                |  86%
  |                                                                                                                           
  |=====================================================================================================                |  87%
  |                                                                                                                           
  |======================================================================================================               |  87%
  |                                                                                                                           
  |======================================================================================================               |  88%
  |                                                                                                                           
  |=======================================================================================================              |  88%
  |                                                                                                                           
  |========================================================================================================             |  88%
  |                                                                                                                           
  |========================================================================================================             |  89%
  |                                                                                                                           
  |=========================================================================================================            |  89%
  |                                                                                                                           
  |=========================================================================================================            |  90%
  |                                                                                                                           
  |==========================================================================================================           |  90%
  |                                                                                                                           
  |==========================================================================================================           |  91%
  |                                                                                                                           
  |===========================================================================================================          |  91%
  |                                                                                                                           
  |===========================================================================================================          |  92%
  |                                                                                                                           
  |============================================================================================================         |  92%
  |                                                                                                                           
  |============================================================================================================         |  93%
  |                                                                                                                           
  |=============================================================================================================        |  93%
  |                                                                                                                           
  |=============================================================================================================        |  94%
  |                                                                                                                           
  |==============================================================================================================       |  94%
  |                                                                                                                           
  |===============================================================================================================      |  94%
  |                                                                                                                           
  |===============================================================================================================      |  95%
  |                                                                                                                           
  |================================================================================================================     |  95%
  |                                                                                                                           
  |================================================================================================================     |  96%
  |                                                                                                                           
  |=================================================================================================================    |  96%
  |                                                                                                                           
  |=================================================================================================================    |  97%
  |                                                                                                                           
  |==================================================================================================================   |  97%
  |                                                                                                                           
  |==================================================================================================================   |  98%
  |                                                                                                                           
  |===================================================================================================================  |  98%
  |                                                                                                                           
  |===================================================================================================================  |  99%
  |                                                                                                                           
  |==================================================================================================================== |  99%
  |                                                                                                                           
  |==================================================================================================================== | 100%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Centering and scaling data matrix

  |                                                                                                                           
  |                                                                                                                     |   0%
  |                                                                                                                           
  |=============================                                                                                        |  25%
  |                                                                                                                           
  |==========================================================                                                           |  50%
  |                                                                                                                           
  |========================================================================================                             |  75%
  |                                                                                                                           
  |=====================================================================================================================| 100%
Finished calculating residuals for counts
Set default assay to SCT
                                      

5. Perform PCA


Variables_genes <- All_samples_Merged@assays$SCT@var.features

# Exclude genes starting with "HLA-" AND "Xist" AND "TRBV, TRAV"
Variables_genes_after_exclusion <- Variables_genes[!grepl("^HLA-|^XIST|^TRBV|^TRAV", Variables_genes)]


# These are now standard steps in the Seurat workflow for visualization and clustering
All_samples_Merged <- RunPCA(All_samples_Merged,
                        features = Variables_genes_after_exclusion,
                        do.print = TRUE, 
                        pcs.print = 1:5, 
                        genes.print = 15,
                        npcs = 50)

# determine dimensionality of the data
ElbowPlot(All_samples_Merged, ndims = 50)

6. Perform PCA TEST



library(ggplot2)
library(RColorBrewer)  

# Assuming you have 10 different cell lines, generating a color palette with 10 colors
cell_line_colors <- brewer.pal(10, "Set3")

# Assuming All_samples_Merged$cell_line is a factor or character vector containing cell line names
data <- as.data.frame(table(All_samples_Merged$cell_line))
colnames(data) <- c("cell_line", "nUMI")  # Change column name to nUMI

ncells <- ggplot(data, aes(x = cell_line, y = nUMI, fill = cell_line)) + 
  geom_col() +
  theme_classic() +
  geom_text(aes(label = nUMI), 
            position = position_dodge(width = 0.9), 
            vjust = -0.25) +
  scale_fill_manual(values = cell_line_colors) + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5)) +  # Adjust the title position
  ggtitle("Filtered cells per sample") +
  xlab("Cell lines") +  # Adjust x-axis label
  ylab("Frequency")    # Adjust y-axis label

print(ncells)




# TEST-1
# given that the output of RunPCA is "pca"
# replace "so" by the name of your seurat object

pct <- All_samples_Merged[["pca"]]@stdev / sum(All_samples_Merged[["pca"]]@stdev) * 100
cumu <- cumsum(pct) # Calculate cumulative percents for each PC
# Determine the difference between variation of PC and subsequent PC
co2 <- sort(which((pct[-length(pct)] - pct[-1]) > 0.1), decreasing = T)[1] + 1
# last point where change of % of variation is more than 0.1%. -> co2
co2
[1] 22
# TEST-2
# get significant PCs
stdv <- All_samples_Merged[["pca"]]@stdev
sum.stdv <- sum(All_samples_Merged[["pca"]]@stdev)
percent.stdv <- (stdv / sum.stdv) * 100
cumulative <- cumsum(percent.stdv)
co1 <- which(cumulative > 90 & percent.stdv < 5)[1]
co2 <- sort(which((percent.stdv[1:length(percent.stdv) - 1] - 
                       percent.stdv[2:length(percent.stdv)]) > 0.1), 
              decreasing = T)[1] + 1
min.pc <- min(co1, co2)
min.pc
[1] 22
# Create a dataframe with values
plot_df <- data.frame(pct = percent.stdv, 
           cumu = cumulative, 
           rank = 1:length(percent.stdv))

# Elbow plot to visualize 
  ggplot(plot_df, aes(cumulative, percent.stdv, label = rank, color = rank > min.pc)) + 
  geom_text() + 
  geom_vline(xintercept = 90, color = "grey") + 
  geom_hline(yintercept = min(percent.stdv[percent.stdv > 5]), color = "grey") +
  theme_bw()

NA
NA
NA

7. Clustering

All_samples_Merged <- FindNeighbors(All_samples_Merged, 
                                dims = 1:22, 
                                verbose = FALSE)

# understanding resolution
All_samples_Merged <- FindClusters(All_samples_Merged, 
                                    resolution = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,0.8, 0.9, 1, 1.2, 1.5,2))
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9888
Number of communities: 14
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9804
Number of communities: 17
Elapsed time: 39 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9723
Number of communities: 18
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9643
Number of communities: 20
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9567
Number of communities: 22
Elapsed time: 39 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9497
Number of communities: 25
Elapsed time: 35 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9426
Number of communities: 25
Elapsed time: 21 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9359
Number of communities: 28
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9296
Number of communities: 29
Elapsed time: 24 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9235
Number of communities: 31
Elapsed time: 23 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9127
Number of communities: 35
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9001
Number of communities: 41
Elapsed time: 22 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 59355
Number of edges: 1966818

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8810
Number of communities: 45
Elapsed time: 20 seconds

# non-linear dimensionality reduction --------------
All_samples_Merged <- RunUMAP(All_samples_Merged, 
                          dims = 1:22,
                          verbose = FALSE)
Avis : The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
                                  

# note that you can set `label = TRUE` or use the Label Clusters function to help label
# individual clusters
DimPlot(All_samples_Merged,group.by = "cell_line", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,group.by = "predicted.celltype.l2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.1",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.2",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.3",
        reduction = "umap",
        label.size = 3,
        repel = T, 
        label = T, label.box = T)



DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.4", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)



DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.5", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.6", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.7", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.8", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.0.9", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1.2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)

DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.1.5", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged,
        group.by = "SCT_snn_res.2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


# Set identity classes to an existing column in meta data
Idents(object = All_samples_Merged) <- "SCT_snn_res.0.7"

cluster_table <- table(Idents(All_samples_Merged))


barplot(cluster_table, main = "Number of Cells in Each Cluster", 
                      xlab = "Cluster", 
                      ylab = "Number of Cells", 
                      col = rainbow(length(cluster_table)))


print(cluster_table)

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19 
6391 5923 5827 5582 5516 4948 4627 4054 3329 3235 1978 1878 1364  945  927  822  431  394  316  309 
  20   21   22   23   24 
 252  122   90   60   35 
table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$SCT_snn_res.0.7)
                   
                       0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
  ASDC                 0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  B intermediate       0    0    0    1    0    0    0    1    0    6    0    0  488    1  177   17
  B memory             9    0    0    0    0   80    1   31    0    1  117    4  195    0   69    4
  B naive              0    0    0    0    0    0    0    0    0   13    0    0  499    0  677    0
  CD14 Mono            0    0    0    2    0    0    0    4    0 3034    7    0    0    0    0  758
  CD16 Mono            0    0    0    0    0    0    0    0    0    8    0    0    1    0    0    2
  CD4 CTL              0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    0
  CD4 Naive            0    0    0  518    0    0 1480    0    0    1    0    0    7    0    0    0
  CD4 Proliferating 5449 2849 2462    0 5345 3889    4 3213 2809    0 1318 1464    2    1    0    0
  CD4 TCM            870  267 3322 4201  146  535 1831  109   26   20  462   44   89   11    2   35
  CD4 TEM              0    0    1   61    0    0   16    0    0    0    0    0    0    9    0    0
  CD8 Naive            0    0    0  341    0    0 1002    0    0    2    0    0    2    1    0    1
  CD8 Proliferating    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0    0
  CD8 TCM              0   16    1  225    0    0  144    0    0    0    0    0    2   29    0    0
  CD8 TEM              0    6    1   29    0    3   23    2    0    1    1    0    1  171    0    0
  cDC1                 0    0    0    0    0    4    0    2    0   13    0    0    0    0    0    0
  cDC2                 0    0    0    0    0    3    0    9    0  123   36    0    0    0    0    1
  dnT                  0    0    1   22    0    1   16    3    0    1    3    0    6    0    0    2
  gdT                  0    0    0    1    0    0   14    0    0    0    0    0    0   52    0    0
  HSPC                55    0    0    0    1  203    0  670  483    0    6  365   38    0    0    0
  ILC                  0    0    0    0    0    0    0    0    0    0    0    0    2    3    0    0
  MAIT                 0    0    0    0    0    0    3    0    0    2    0    0    0  220    0    0
  NK                   0    0    0    0    0    0    0    0    0    8    0    0    0  432    1    1
  NK Proliferating     6 2785   38    0   23  227    1   10   11    0   27    1    1    2    0    0
  NK_CD56bright        0    0    0    0    0    0    0    0    0    0    0    0    0   13    0    0
  pDC                  0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  Plasmablast          0    0    0    0    0    0    0    0    0    0    0    0   18    0    1    0
  Platelet             0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1
  Treg                 2    0    1  181    1    2   92    0    0    1    0    0   13    0    0    0
                   
                      16   17   18   19   20   21   22   23   24
  ASDC                 0    0    0    0    0    0    0    3    0
  B intermediate       0    0    3    0    0    0    2    0    0
  B memory             2    0    7    0    0    0    3    0    0
  B naive              0    0    0    1    0    2    0    0    0
  CD14 Mono            2    0    0    0    0    4    7    1    4
  CD16 Mono            0    0    0    0    0  115    0    0    0
  CD4 CTL              0   16    0    0    0    0    0    0    0
  CD4 Naive            0    0    0    4   33    0    0    0    0
  CD4 Proliferating   46    0  157    0    3    0    0    0    0
  CD4 TCM            377   33   71  256  169    0    2    0    0
  CD4 TEM              0    7    0    0    0    0    0    0    0
  CD8 Naive            0    0    0   10   14    0    0    0    0
  CD8 Proliferating    0    0    0    0    0    0    0    0    0
  CD8 TCM              0   56    0    2    2    0    0    0    0
  CD8 TEM              0  150    0    0    3    0    0    0    0
  cDC1                 0    0    2    0    0    0   21    0    0
  cDC2                 2    0    1    0    0    1   53    0    0
  dnT                  1    0    3   10   13    0    0    0    0
  gdT                  0   26    0    0    0    0    0    0    0
  HSPC                 0    0   12    0    0    0    1    0    0
  ILC                  0    1    1    0    0    0    0    0    0
  MAIT                 0   14    0    1    2    0    0    0    0
  NK                   0   90    0    0    2    0    0    0    0
  NK Proliferating     0    0   35    0    0    0    0    0    0
  NK_CD56bright        0    1    0    0    2    0    0    0    0
  pDC                  0    0    0    0    0    0    0   56    0
  Plasmablast          0    0    0    0    0    0    0    0    0
  Platelet             0    0    0    0    0    0    0    0   31
  Treg                 1    0   24   25    9    0    1    0    0

8. clusTree

clustree(All_samples_Merged, prefix = "SCT_snn_res.")

9. Azimuth Annotation

# InstallData("pbmcref")
# 
# # The RunAzimuth function can take a Seurat object as input
# All_samples_Merged <- RunAzimuth(All_samples_Merged, reference = "pbmcref")

10. Azimuth Visualization

DimPlot(All_samples_Merged, group.by = "predicted.celltype.l1", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged, group.by = "predicted.celltype.l1", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = F)


DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)


DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = F)



DimPlot(All_samples_Merged, group.by = "predicted.celltype.l2", 
        reduction = "umap",
        label.size = 3,
        repel = T,
        label = T, label.box = T)




table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$SCT_snn_res.0.7)
                   
                       0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
  ASDC                 0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  B intermediate       0    0    0    1    0    0    0    1    0    6    0    0  488    1  177   17
  B memory             9    0    0    0    0   80    1   31    0    1  117    4  195    0   69    4
  B naive              0    0    0    0    0    0    0    0    0   13    0    0  499    0  677    0
  CD14 Mono            0    0    0    2    0    0    0    4    0 3034    7    0    0    0    0  758
  CD16 Mono            0    0    0    0    0    0    0    0    0    8    0    0    1    0    0    2
  CD4 CTL              0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    0
  CD4 Naive            0    0    0  518    0    0 1480    0    0    1    0    0    7    0    0    0
  CD4 Proliferating 5449 2849 2462    0 5345 3889    4 3213 2809    0 1318 1464    2    1    0    0
  CD4 TCM            870  267 3322 4201  146  535 1831  109   26   20  462   44   89   11    2   35
  CD4 TEM              0    0    1   61    0    0   16    0    0    0    0    0    0    9    0    0
  CD8 Naive            0    0    0  341    0    0 1002    0    0    2    0    0    2    1    0    1
  CD8 Proliferating    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0    0
  CD8 TCM              0   16    1  225    0    0  144    0    0    0    0    0    2   29    0    0
  CD8 TEM              0    6    1   29    0    3   23    2    0    1    1    0    1  171    0    0
  cDC1                 0    0    0    0    0    4    0    2    0   13    0    0    0    0    0    0
  cDC2                 0    0    0    0    0    3    0    9    0  123   36    0    0    0    0    1
  dnT                  0    0    1   22    0    1   16    3    0    1    3    0    6    0    0    2
  gdT                  0    0    0    1    0    0   14    0    0    0    0    0    0   52    0    0
  HSPC                55    0    0    0    1  203    0  670  483    0    6  365   38    0    0    0
  ILC                  0    0    0    0    0    0    0    0    0    0    0    0    2    3    0    0
  MAIT                 0    0    0    0    0    0    3    0    0    2    0    0    0  220    0    0
  NK                   0    0    0    0    0    0    0    0    0    8    0    0    0  432    1    1
  NK Proliferating     6 2785   38    0   23  227    1   10   11    0   27    1    1    2    0    0
  NK_CD56bright        0    0    0    0    0    0    0    0    0    0    0    0    0   13    0    0
  pDC                  0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
  Plasmablast          0    0    0    0    0    0    0    0    0    0    0    0   18    0    1    0
  Platelet             0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1
  Treg                 2    0    1  181    1    2   92    0    0    1    0    0   13    0    0    0
                   
                      16   17   18   19   20   21   22   23   24
  ASDC                 0    0    0    0    0    0    0    3    0
  B intermediate       0    0    3    0    0    0    2    0    0
  B memory             2    0    7    0    0    0    3    0    0
  B naive              0    0    0    1    0    2    0    0    0
  CD14 Mono            2    0    0    0    0    4    7    1    4
  CD16 Mono            0    0    0    0    0  115    0    0    0
  CD4 CTL              0   16    0    0    0    0    0    0    0
  CD4 Naive            0    0    0    4   33    0    0    0    0
  CD4 Proliferating   46    0  157    0    3    0    0    0    0
  CD4 TCM            377   33   71  256  169    0    2    0    0
  CD4 TEM              0    7    0    0    0    0    0    0    0
  CD8 Naive            0    0    0   10   14    0    0    0    0
  CD8 Proliferating    0    0    0    0    0    0    0    0    0
  CD8 TCM              0   56    0    2    2    0    0    0    0
  CD8 TEM              0  150    0    0    3    0    0    0    0
  cDC1                 0    0    2    0    0    0   21    0    0
  cDC2                 2    0    1    0    0    1   53    0    0
  dnT                  1    0    3   10   13    0    0    0    0
  gdT                  0   26    0    0    0    0    0    0    0
  HSPC                 0    0   12    0    0    0    1    0    0
  ILC                  0    1    1    0    0    0    0    0    0
  MAIT                 0   14    0    1    2    0    0    0    0
  NK                   0   90    0    0    2    0    0    0    0
  NK Proliferating     0    0   35    0    0    0    0    0    0
  NK_CD56bright        0    1    0    0    2    0    0    0    0
  pDC                  0    0    0    0    0    0    0   56    0
  Plasmablast          0    0    0    0    0    0    0    0    0
  Platelet             0    0    0    0    0    0    0    0   31
  Treg                 1    0   24   25    9    0    1    0    0

11.Save the Seurat object as an Robj file


save(All_samples_Merged, file = "/home/nabbasi/isilon/0-IMP-OBJECTS/All_Samples_Merged_with_10x_Rserver.robj")
LS0tCnRpdGxlOiAiTWVyZ2VkIEFsbCBzYW1wbGVzIHdpdGggUEJNQ18xMHggYW5kIFNDVCBhbmFseXNpcyBvbiBhbm5vdGF0ZWQgT2JqZWN0LVJzZXJ2ZXIiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgI3JtZGZvcm1hdHM6OnJlYWR0aGVkb3duCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgZWNobz1GQUxTRX0KCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KFNldXJhdE9iamVjdCkKbGlicmFyeShTZXVyYXREYXRhKQpsaWJyYXJ5KHBhdGNod29yaykKCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KGRicGx5cikKbGlicmFyeShybWFya2Rvd24pCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkodGlueXRleCkKI0F6aW11dGggQW5ub3RhdGlvbiBsaWJyYXJpZXMKbGlicmFyeShBemltdXRoKQojUHJvamVjVGlscyBBbm5vdGF0aW9uIGxpYnJhcmllcwpsaWJyYXJ5KFNUQUNBUykKbGlicmFyeShQcm9qZWNUSUxzKQojc2luZ2xlUiBBbm5vdGF0aW9uIGxpYnJhcmllcwpsaWJyYXJ5KFNpbmdsZVIpCmxpYnJhcnkoY2VsbGRleCkKbGlicmFyeShTaW5nbGVDZWxsRXhwZXJpbWVudCkKCmxpYnJhcnkoY2x1c3RyZWUpCgoKYGBgCgoKIyAyLiBMb2FkIFNldXJhdCBPYmplY3QgCmBgYHtyIGxvYWRfc2V1cmF0fQoKI0xvYWQgU2V1cmF0IE9iamVjdCBtZXJnZWQgZnJvbSBjZWxsIGxpbmVzIGFuZCBhIGNvbnRyb2woUEJNQykgYWZ0ZXIgZmlsdHJhdGlvbgpsb2FkKCIvaG9tZS9uYWJiYXNpL2lzaWxvbi8wLUlNUC1PQkpFQ1RTL0FsbF9TYW1wbGVzX01lcmdlZF93aXRoXzEweF9Beml0bXV0aF9Bbm5vdGF0ZWQucm9iaiIpCgpBbGxfc2FtcGxlc19NZXJnZWQKIApgYGAKIyMgQXppbXV0aCBBbm5vdGF0aW9uCmBgYHtyIGF6aW11dGhfQW5ub3RhdGlvbjEsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQojIEluc3RhbGxEYXRhKCJwYm1jcmVmIikKIyAKIyAjIFRoZSBSdW5BemltdXRoIGZ1bmN0aW9uIGNhbiB0YWtlIGEgU2V1cmF0IG9iamVjdCBhcyBpbnB1dAojIEFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5BemltdXRoKEFsbF9zYW1wbGVzX01lcmdlZCwgcmVmZXJlbmNlID0gInBibWNyZWYiKQoKYGBgCgojIDMuIFFDCmBgYHtyIFFDLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCiMgUmVtb3ZlIHRoZSBwZXJjZW50Lm1pdG8gY29sdW1uCkFsbF9zYW1wbGVzX01lcmdlZCRwZXJjZW50Lm1pdG8gPC0gTlVMTAoKCiMgU2V0IGlkZW50aXR5IGNsYXNzZXMgdG8gYW4gZXhpc3RpbmcgY29sdW1uIGluIG1ldGEgZGF0YQpJZGVudHMob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSAiY2VsbF9saW5lIgoKQWxsX3NhbXBsZXNfTWVyZ2VkW1sicGVyY2VudC5yYiJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiXlJQW1NMXSIpCiMgQ29udmVydCAncGVyY2VudC5tdCcgdG8gbnVtZXJpYywgcmVwbGFjaW5nICJOYU4iIHdpdGggMApBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5yYiA8LSByZXBsYWNlKGFzLm51bWVyaWMoQWxsX3NhbXBsZXNfTWVyZ2VkJHBlcmNlbnQucmIpLCBpcy5uYShBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5yYiksIDApCgoKCiMgVGhlIFtbIG9wZXJhdG9yIGNhbiBhZGQgY29sdW1ucyB0byBvYmplY3QgbWV0YWRhdGEuIFRoaXMgaXMgYSBncmVhdCBwbGFjZSB0byBzdGFzaCBRQyBzdGF0cwpBbGxfc2FtcGxlc19NZXJnZWRbWyJwZXJjZW50Lm10Il1dIDwtIFBlcmNlbnRhZ2VGZWF0dXJlU2V0KEFsbF9zYW1wbGVzX01lcmdlZCwgcGF0dGVybiA9ICJeTVQtIikKCiMgQ29udmVydCAncGVyY2VudC5tdCcgdG8gbnVtZXJpYywgcmVwbGFjaW5nICJOYU4iIHdpdGggMApBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5tdCA8LSByZXBsYWNlKGFzLm51bWVyaWMoQWxsX3NhbXBsZXNfTWVyZ2VkJHBlcmNlbnQubXQpLCBpcy5uYShBbGxfc2FtcGxlc19NZXJnZWQkcGVyY2VudC5tdCksIDApCgoKCgoKVmxuUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gYygibkZlYXR1cmVfUk5BIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5Db3VudF9STkEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudC5tdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmNlbnQucmIiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gNCwgcHQuc2l6ZSA9IDAuMSkgJiAKICAgICAgICAgICAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTApKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlMSA9ICJwZXJjZW50Lm10IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJwZXJjZW50LnJiIikKClZsblBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudC5tdCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMykKCkZlYXR1cmVTY2F0dGVyKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgIGZlYXR1cmUxID0gInBlcmNlbnQubXQiLCAKICAgICAgICAgICAgICAgZmVhdHVyZTIgPSAicGVyY2VudC5yYiIpICsKICAgICAgICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJuRmVhdHVyZV9STkEiKSArCiAgICAgICAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykKCmBgYAoKIyNGZWF0dXJlU2NhdHRlciBpcyB0eXBpY2FsbHkgdXNlZCB0byB2aXN1YWxpemUgZmVhdHVyZS1mZWF0dXJlIHJlbGF0aW9uc2hpcHMKIyNmb3IgYW55dGhpbmcgY2FsY3VsYXRlZCBieSB0aGUgb2JqZWN0LCAKIyNpLmUuIGNvbHVtbnMgaW4gb2JqZWN0IG1ldGFkYXRhLCBQQyBzY29yZXMgZXRjLgoKYGBge3IgRkMsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJwZXJjZW50Lm10IikrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykKCkZlYXR1cmVTY2F0dGVyKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgIGZlYXR1cmUxID0gIm5Db3VudF9STkEiLCAKICAgICAgICAgICAgICAgZmVhdHVyZTIgPSAibkZlYXR1cmVfUk5BIikrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykKCmBgYAoKCiMjIEFzc2lnbiBDZWxsLUN5Y2xlIFNjb3JlcwpgYGB7ciBSZWdyZXNzLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0Kb3B0aW9ucyhmdXR1cmUuZ2xvYmFscy5tYXhTaXplID0gODAwMCAqIDEwMjReMikgICMgU2V0IHRvIDgwMDAgTWlCIChhYm91dCA4IEdCKQoKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFNDVHJhbnNmb3JtKEFsbF9zYW1wbGVzX01lcmdlZCwgZG8uc2NhbGU9RkFMU0UsIGRvLmNlbnRlcj1GQUxTRSkKCgojIEEgbGlzdCBvZiBjZWxsIGN5Y2xlIG1hcmtlcnMsIGZyb20gVGlyb3NoIGV0IGFsLCAyMDE1LCBpcyBsb2FkZWQgd2l0aCBTZXVyYXQuICBXZSBjYW4KIyBzZWdyZWdhdGUgdGhpcyBsaXN0IGludG8gbWFya2VycyBvZiBHMi9NIHBoYXNlIGFuZCBtYXJrZXJzIG9mIFMgcGhhc2UKcy5nZW5lcyA8LSBjYy5nZW5lcyRzLmdlbmVzCmcybS5nZW5lcyA8LSBjYy5nZW5lcyRnMm0uZ2VuZXMKCgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gQ2VsbEN5Y2xlU2NvcmluZyhBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmZlYXR1cmVzID0gcy5nZW5lcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcybS5mZWF0dXJlcyA9IGcybS5nZW5lcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5pZGVudCA9IFRSVUUpCgpEZWZhdWx0QXNzYXkoQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSAiUk5BIgpBbGxfc2FtcGxlc19NZXJnZWQkQ0MuRGlmZmVyZW5jZSA8LSBBbGxfc2FtcGxlc19NZXJnZWQkUy5TY29yZSAtIEFsbF9zYW1wbGVzX01lcmdlZCRHMk0uU2NvcmUKCmBgYAoKCiMgNC4gTm9ybWFsaXplIGRhdGEKYGBge3IgTm9ybWFsaXplLCBpbmNsdWRlPVRSVUV9CkRlZmF1bHRBc3NheShBbGxfc2FtcGxlc19NZXJnZWQpIDwtICJSTkEiCgojIEFwcGx5IFNDVHJhbnNmb3JtCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBTQ1RyYW5zZm9ybShBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycy50by5yZWdyZXNzID0gYygicGVyY2VudC5yYiIsInBlcmNlbnQubXQiLCAiQ0MuRGlmZmVyZW5jZSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvLnNjYWxlPVRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8uY2VudGVyPVRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKCiMgNS4gUGVyZm9ybSBQQ0EKYGBge3IgUENBLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KClZhcmlhYmxlc19nZW5lcyA8LSBBbGxfc2FtcGxlc19NZXJnZWRAYXNzYXlzJFNDVEB2YXIuZmVhdHVyZXMKCiMgRXhjbHVkZSBnZW5lcyBzdGFydGluZyB3aXRoICJITEEtIiBBTkQgIlhpc3QiIEFORCAiVFJCViwgVFJBViIKVmFyaWFibGVzX2dlbmVzX2FmdGVyX2V4Y2x1c2lvbiA8LSBWYXJpYWJsZXNfZ2VuZXNbIWdyZXBsKCJeSExBLXxeWElTVHxeVFJCVnxeVFJBViIsIFZhcmlhYmxlc19nZW5lcyldCgoKIyBUaGVzZSBhcmUgbm93IHN0YW5kYXJkIHN0ZXBzIGluIHRoZSBTZXVyYXQgd29ya2Zsb3cgZm9yIHZpc3VhbGl6YXRpb24gYW5kIGNsdXN0ZXJpbmcKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1blBDQShBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gVmFyaWFibGVzX2dlbmVzX2FmdGVyX2V4Y2x1c2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgZG8ucHJpbnQgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgcGNzLnByaW50ID0gMTo1LCAKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXMucHJpbnQgPSAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgbnBjcyA9IDUwKQoKIyBkZXRlcm1pbmUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIGRhdGEKRWxib3dQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgbmRpbXMgPSA1MCkKCgpgYGAKCiMgNi4gUGVyZm9ybSBQQ0EgVEVTVApgYGB7ciBQQ0EtVEVTVCwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgoKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikgIAoKIyBBc3N1bWluZyB5b3UgaGF2ZSAxMCBkaWZmZXJlbnQgY2VsbCBsaW5lcywgZ2VuZXJhdGluZyBhIGNvbG9yIHBhbGV0dGUgd2l0aCAxMCBjb2xvcnMKY2VsbF9saW5lX2NvbG9ycyA8LSBicmV3ZXIucGFsKDEwLCAiU2V0MyIpCgojIEFzc3VtaW5nIEFsbF9zYW1wbGVzX01lcmdlZCRjZWxsX2xpbmUgaXMgYSBmYWN0b3Igb3IgY2hhcmFjdGVyIHZlY3RvciBjb250YWluaW5nIGNlbGwgbGluZSBuYW1lcwpkYXRhIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkJGNlbGxfbGluZSkpCmNvbG5hbWVzKGRhdGEpIDwtIGMoImNlbGxfbGluZSIsICJuVU1JIikgICMgQ2hhbmdlIGNvbHVtbiBuYW1lIHRvIG5VTUkKCm5jZWxscyA8LSBnZ3Bsb3QoZGF0YSwgYWVzKHggPSBjZWxsX2xpbmUsIHkgPSBuVU1JLCBmaWxsID0gY2VsbF9saW5lKSkgKyAKICBnZW9tX2NvbCgpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBuVU1JKSwgCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCAKICAgICAgICAgICAgdmp1c3QgPSAtMC4yNSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNlbGxfbGluZV9jb2xvcnMpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyAgIyBBZGp1c3QgdGhlIHRpdGxlIHBvc2l0aW9uCiAgZ2d0aXRsZSgiRmlsdGVyZWQgY2VsbHMgcGVyIHNhbXBsZSIpICsKICB4bGFiKCJDZWxsIGxpbmVzIikgKyAgIyBBZGp1c3QgeC1heGlzIGxhYmVsCiAgeWxhYigiRnJlcXVlbmN5IikgICAgIyBBZGp1c3QgeS1heGlzIGxhYmVsCgpwcmludChuY2VsbHMpCgoKCiMgVEVTVC0xCiMgZ2l2ZW4gdGhhdCB0aGUgb3V0cHV0IG9mIFJ1blBDQSBpcyAicGNhIgojIHJlcGxhY2UgInNvIiBieSB0aGUgbmFtZSBvZiB5b3VyIHNldXJhdCBvYmplY3QKCnBjdCA8LSBBbGxfc2FtcGxlc19NZXJnZWRbWyJwY2EiXV1Ac3RkZXYgLyBzdW0oQWxsX3NhbXBsZXNfTWVyZ2VkW1sicGNhIl1dQHN0ZGV2KSAqIDEwMApjdW11IDwtIGN1bXN1bShwY3QpICMgQ2FsY3VsYXRlIGN1bXVsYXRpdmUgcGVyY2VudHMgZm9yIGVhY2ggUEMKIyBEZXRlcm1pbmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2YXJpYXRpb24gb2YgUEMgYW5kIHN1YnNlcXVlbnQgUEMKY28yIDwtIHNvcnQod2hpY2goKHBjdFstbGVuZ3RoKHBjdCldIC0gcGN0Wy0xXSkgPiAwLjEpLCBkZWNyZWFzaW5nID0gVClbMV0gKyAxCiMgbGFzdCBwb2ludCB3aGVyZSBjaGFuZ2Ugb2YgJSBvZiB2YXJpYXRpb24gaXMgbW9yZSB0aGFuIDAuMSUuIC0+IGNvMgpjbzIKCiMgVEVTVC0yCiMgZ2V0IHNpZ25pZmljYW50IFBDcwpzdGR2IDwtIEFsbF9zYW1wbGVzX01lcmdlZFtbInBjYSJdXUBzdGRldgpzdW0uc3RkdiA8LSBzdW0oQWxsX3NhbXBsZXNfTWVyZ2VkW1sicGNhIl1dQHN0ZGV2KQpwZXJjZW50LnN0ZHYgPC0gKHN0ZHYgLyBzdW0uc3RkdikgKiAxMDAKY3VtdWxhdGl2ZSA8LSBjdW1zdW0ocGVyY2VudC5zdGR2KQpjbzEgPC0gd2hpY2goY3VtdWxhdGl2ZSA+IDkwICYgcGVyY2VudC5zdGR2IDwgNSlbMV0KY28yIDwtIHNvcnQod2hpY2goKHBlcmNlbnQuc3RkdlsxOmxlbmd0aChwZXJjZW50LnN0ZHYpIC0gMV0gLSAKICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50LnN0ZHZbMjpsZW5ndGgocGVyY2VudC5zdGR2KV0pID4gMC4xKSwgCiAgICAgICAgICAgICAgZGVjcmVhc2luZyA9IFQpWzFdICsgMQptaW4ucGMgPC0gbWluKGNvMSwgY28yKQptaW4ucGMKCiMgQ3JlYXRlIGEgZGF0YWZyYW1lIHdpdGggdmFsdWVzCnBsb3RfZGYgPC0gZGF0YS5mcmFtZShwY3QgPSBwZXJjZW50LnN0ZHYsIAogICAgICAgICAgIGN1bXUgPSBjdW11bGF0aXZlLCAKICAgICAgICAgICByYW5rID0gMTpsZW5ndGgocGVyY2VudC5zdGR2KSkKCiMgRWxib3cgcGxvdCB0byB2aXN1YWxpemUgCiAgZ2dwbG90KHBsb3RfZGYsIGFlcyhjdW11bGF0aXZlLCBwZXJjZW50LnN0ZHYsIGxhYmVsID0gcmFuaywgY29sb3IgPSByYW5rID4gbWluLnBjKSkgKyAKICBnZW9tX3RleHQoKSArIAogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDkwLCBjb2xvciA9ICJncmV5IikgKyAKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtaW4ocGVyY2VudC5zdGR2W3BlcmNlbnQuc3RkdiA+IDVdKSwgY29sb3IgPSAiZ3JleSIpICsKICB0aGVtZV9idygpCgogIAoKYGBgCgojIDcuIENsdXN0ZXJpbmcKYGBge3IgQzEsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gRmluZE5laWdoYm9ycyhBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMgPSAxOjIyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlID0gRkFMU0UpCgojIHVuZGVyc3RhbmRpbmcgcmVzb2x1dGlvbgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gRmluZENsdXN0ZXJzKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24gPSBjKDAuMSwgMC4yLCAwLjMsIDAuNCwgMC41LCAwLjYsIDAuNywwLjgsIDAuOSwgMSwgMS4yLCAxLjUsMikpCgoKYGBgCgoKYGBge3IgQzIsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKIyBub24tbGluZWFyIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiAtLS0tLS0tLS0tLS0tLQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuVU1BUChBbGxfc2FtcGxlc19NZXJnZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMgPSAxOjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgYGxhYmVsID0gVFJVRWAgb3IgdXNlIHRoZSBMYWJlbCBDbHVzdGVycyBmdW5jdGlvbiB0byBoZWxwIGxhYmVsCiMgaW5kaXZpZHVhbCBjbHVzdGVycwpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCxncm91cC5ieSA9ICJjZWxsX2xpbmUiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjEiLAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsIAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC4yIiwKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULCAKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuMyIsCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwgCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuNCIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuNSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC42IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjciLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuOCIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjkiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4xLjIiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMS41IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4yIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgojIFNldCBpZGVudGl0eSBjbGFzc2VzIHRvIGFuIGV4aXN0aW5nIGNvbHVtbiBpbiBtZXRhIGRhdGEKSWRlbnRzKG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZCkgPC0gIlNDVF9zbm5fcmVzLjAuNyIKCmNsdXN0ZXJfdGFibGUgPC0gdGFibGUoSWRlbnRzKEFsbF9zYW1wbGVzX01lcmdlZCkpCgoKYmFycGxvdChjbHVzdGVyX3RhYmxlLCBtYWluID0gIk51bWJlciBvZiBDZWxscyBpbiBFYWNoIENsdXN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiQ2x1c3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgeWxhYiA9ICJOdW1iZXIgb2YgQ2VsbHMiLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKGNsdXN0ZXJfdGFibGUpKSkKCnByaW50KGNsdXN0ZXJfdGFibGUpCgp0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkcHJlZGljdGVkLmNlbGx0eXBlLmwyLCBBbGxfc2FtcGxlc19NZXJnZWQkU0NUX3Nubl9yZXMuMC43KQpgYGAKCiMgOC4gY2x1c1RyZWUKYGBge3IgY2x1c1RyZWUsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD0xMH0KY2x1c3RyZWUoQWxsX3NhbXBsZXNfTWVyZ2VkLCBwcmVmaXggPSAiU0NUX3Nubl9yZXMuIikKYGBgCgojIDkuIEF6aW11dGggQW5ub3RhdGlvbgpgYGB7ciBhemltdXRoX0Fubm90YXRpb24yLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KIyBJbnN0YWxsRGF0YSgicGJtY3JlZiIpCiMgCiMgIyBUaGUgUnVuQXppbXV0aCBmdW5jdGlvbiBjYW4gdGFrZSBhIFNldXJhdCBvYmplY3QgYXMgaW5wdXQKIyBBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuQXppbXV0aChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZmVyZW5jZSA9ICJwYm1jcmVmIikKCmBgYAoKCgojIDEwLiBBemltdXRoIFZpc3VhbGl6YXRpb24KYGBge3IgYXppbXV0aF9WaXN1YWxpemF0aW9uLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBGKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBGKQoKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCgoKdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkJHByZWRpY3RlZC5jZWxsdHlwZS5sMiwgQWxsX3NhbXBsZXNfTWVyZ2VkJFNDVF9zbm5fcmVzLjAuNykKYGBgCgoKIyAxMS5TYXZlIHRoZSBTZXVyYXQgb2JqZWN0IGFzIGFuIFJvYmogZmlsZQpgYGB7ciBzYXZlUk9CSiwgZWNobz1UUlVFfQoKc2F2ZShBbGxfc2FtcGxlc19NZXJnZWQsIGZpbGUgPSAiL2hvbWUvbmFiYmFzaS9pc2lsb24vMC1JTVAtT0JKRUNUUy9BbGxfU2FtcGxlc19NZXJnZWRfd2l0aF8xMHhfUnNlcnZlci5yb2JqIikKCgpgYGAKCgoKCgoKCg==