In this document we compute several 3d stats with the package spatstat https://www.rdocumentation.org/packages/spatstat/versions/1.49-0 including the Pair Correlation Function of a Three-Dimensional Point Pattern https://www.rdocumentation.org/packages/spatstat/versions/1.49-0/topics/pcf3est function, the K-function of a Three-Dimensional Point Pattern https://www.rdocumentation.org/packages/spatstat/versions/1.49-0/topics/K3est, the Empty Space Function of a Three-Dimensional Point Pattern https://www.rdocumentation.org/packages/spatstat/versions/1.49-0/topics/F3est and the Nearest Neighbour Distance Distribution Function of a Three-Dimensional Point Pattern https://www.rdocumentation.org/packages/spatstat/versions/1.49-0/topics/G3est.

First we load the required libraries

require(spatstat)

We’re ready to load the files with coordinates

sh1<-read.csv("suelo_h1.csv",header=FALSE)
sh2<-read.csv("suelo_h2.csv",header=FALSE)
sh3<-read.csv("suelo_h3.csv",header=FALSE)
sh4<-read.csv("suelo_h4.csv",header=FALSE)

Once libraries are files are in place, we can subset the files.

We begin with the faunal remains and LAYER H1

suh<-rbind(sh1,sh2,sh3,sh4)
par(mfrow=c(2,2))
tit<-c("Faunal remains","Pottery","Lithics","Gasteropods")
for (i in 1:4){
fauh<-subset(suh,suh[,6]==i)
fauh3d<-pp3(fauh[,2],fauh[,3],fauh[,4],box3(c(999,1004),c(995,999),c(407,408)))
plot.pp3(fauh3d, main=tit[i])
}

suh<-rbind(sh1,sh2,sh3,sh4)
par(mfrow=c(2,2))
tit<-c("Faunal remains","Pottery","Lithics","Gasteropods")
for (i in 1:4){
fauh<-subset(suh,suh[,6]==i)
fauh3d<-pp3(fauh[,2],fauh[,3],fauh[,4],box3(c(999,1004),c(995,999),c(407,408)))
p3<-pcf3est(fauh3d)
plot(p3,main="3D Pair Correlation")
k3<-K3est(fauh3d)
plot(k3,main="K-function")
g3<-G3est(fauh3d)
plot(g3,main="Nearest Neighbour Distribution")
f3<-F3est(fauh3d)
plot(f3,main="Empty space")
print(toupper(tit[i]))
}
[1] "FAUNAL REMAINS"

[1] "POTTERY"

[1] "LITHICS"

[1] "GASTEROPODS"

suh<-rbind(sh1,sh2,sh3,sh4)
par(mfrow=c(2,2))
tit<-c("Faunal remains","Pottery","Lithics","Gasteropods")
for (i in 1:4){
  
fauh<-subset(suh,suh[,6]==i)
fauh3d<-pp3(fauh[,2],fauh[,3],fauh[,4],box3(c(999,1004),c(995,999),c(407,408)))
invisible(plot(envelope(fauh3d, fun=pcf3est,nsim=99),main="3D Pair Correlation"))
invisible(plot(envelope(fauh3d, nsim=99),main="K-function"))
invisible(plot(envelope(fauh3d, fun=G3est,nsim=99),main="Nearest Neighbour Distribution"))
invisible(plot(envelope(fauh3d, fun=F3est,nsim=99),main="Empty space"))
print(toupper(tit[i]))
}
Generating 99 simulations of CSR  ...
1, 2,  [etd 10:30] 3,  [etd 10:46] 4,
 [etd 11:00] 5,  [etd 10:45] 6,  [etd 10:34] 7,  [etd 10:21] 8,
 [etd 10:09] 9,  [etd 9:59] 10,  [etd 9:55] 11,  [etd 9:47] 12,
 [etd 9:40] 13,  [etd 9:32] 14,  [etd 9:26] 15,  [etd 9:18] 16,
 [etd 9:10] 17,  [etd 9:02] 18,  [etd 9:00] 19,  [etd 9:00] 20,
 [etd 8:52] 21,  [etd 8:44] 22,  [etd 8:38] 23,  [etd 8:31] 24,
 [etd 8:24] 25,  [etd 8:18] 26,  [etd 8:09] 27,  [etd 8:02] 28,
 [etd 7:54] 29,  [etd 7:48] 30,  [etd 7:41] 31,  [etd 7:35] 32,
 [etd 7:28] 33,  [etd 7:21] 34,  [etd 7:14] 35,  [etd 7:06] 36,
 [etd 6:59] 37,  [etd 6:52] 38,  [etd 6:45] 39,  [etd 6:39] 40,
 [etd 6:32] 41,  [etd 6:26] 42,  [etd 6:19] 43,  [etd 6:12] 44,
 [etd 6:06] 45,  [etd 5:59] 46,  [etd 5:52] 47,  [etd 5:46] 48,
 [etd 5:39] 49,  [etd 5:33] 50,  [etd 5:26] 51,  [etd 5:19] 52,
 [etd 5:12] 53,  [etd 5:05] 54,  [etd 4:59] 55,  [etd 4:52] 56,
 [etd 4:46] 57,  [etd 4:39] 58,  [etd 4:33] 59,  [etd 4:26] 60,
 [etd 4:19] 61,  [etd 4:13] 62,  [etd 4:06] 63,  [etd 4:00] 64,
 [etd 3:53] 65,  [etd 3:46] 66,  [etd 3:40] 67,  [etd 3:33] 68,
 [etd 3:27] 69,  [etd 3:20] 70,  [etd 3:13] 71,  [etd 3:07] 72,
 [etd 3:00] 73,  [etd 2:53] 74,  [etd 2:47] 75,  [etd 2:40] 76,
 [etd 2:33] 77,  [etd 2:26] 78,  [etd 2:20] 79,  [etd 2:13] 80,
 [etd 2:06] 81,  [etd 2:00] 82,  [etd 1:53] 83,  [etd 1:46] 84,
 [etd 1:40] 85,  [etd 1:33] 86,  [etd 1:26] 87,  [etd 1:20] 88,
 [etd 1:13] 89,  [etd 1:06] 90,  [etd 1:00] 91,  [etd 53 sec] 92,
 [etd 46 sec] 93,  [etd 40 sec] 94,  [etd 33 sec] 95,  [etd 26 sec] 96,
 [etd 20 sec] 97,  [etd 13 sec] 98,  [etd 7 sec]  99.

Done.
Generating 99 simulations of CSR  ...
1, 2,  [etd 17:58] 3,  [etd 18:04] 4,
 [etd 17:19] 5,  [etd 16:58] 6,  [etd 16:49] 7,  [etd 16:42] 8,
 [etd 16:14] 9,  [etd 16:00] 10,  [etd 15:41] 11,  [etd 15:39] 12,
 [etd 15:25] 13,  [etd 15:11] 14,  [etd 15:01] 15,  [etd 14:52] 16,
 [etd 14:39] 17,  [etd 14:28] 18,  [etd 14:18] 19,  [etd 14:08] 20,
 [etd 13:57] 21,  [etd 13:48] 22,  [etd 13:39] 23,  [etd 13:28] 24,
 [etd 13:19] 25,  [etd 13:08] 26,  [etd 12:58] 27,  [etd 12:47] 28,
 [etd 12:37] 29,  [etd 12:25] 30,  [etd 12:12] 31,  [etd 12:02] 32,
 [etd 11:53] 33,  [etd 11:42] 34,  [etd 11:30] 35,  [etd 11:20] 36,
 [etd 11:08] 37,  [etd 10:58] 38,  [etd 10:46] 39,  [etd 10:36] 40,
 [etd 10:26] 41,  [etd 10:16] 42,  [etd 10:07] 43,  [etd 9:57] 44,
 [etd 9:46] 45,  [etd 9:36] 46,  [etd 9:25] 47,  [etd 9:15] 48,
 [etd 9:04] 49,  [etd 8:54] 50,  [etd 8:43] 51,  [etd 8:33] 52,
 [etd 8:22] 53,  [etd 8:12] 54,  [etd 8:01] 55,  [etd 7:50] 56,
 [etd 7:39] 57,  [etd 7:29] 58,  [etd 7:18] 59,  [etd 7:08] 60,
 [etd 6:57] 61,  [etd 6:46] 62,  [etd 6:36] 63,  [etd 6:25] 64,
 [etd 6:15] 65,  [etd 6:04] 66,  [etd 5:53] 67,  [etd 5:43] 68,
 [etd 5:32] 69,  [etd 5:21] 70,  [etd 5:10] 71,  [etd 5:00] 72,
 [etd 4:49] 73,  [etd 4:38] 74,  [etd 4:28] 75,  [etd 4:17] 76,
 [etd 4:06] 77,  [etd 3:55] 78,  [etd 3:45] 79,  [etd 3:34] 80,
 [etd 3:23] 81,  [etd 3:12] 82,  [etd 3:02] 83,  [etd 2:51] 84,
 [etd 2:40] 85,  [etd 2:30] 86,  [etd 2:19] 87,  [etd 2:08] 88,
 [etd 1:58] 89,  [etd 1:47] 90,  [etd 1:36] 91,  [etd 1:26] 92,
 [etd 1:15] 93,  [etd 1:04] 94,  [etd 53 sec] 95,  [etd 43 sec] 96,
 [etd 32 sec] 97,  [etd 21 sec] 98,  [etd 11 sec]  99.

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

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

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

Done.

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

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

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

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

Done.

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

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

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

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

Done.

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

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

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

Done.
[1] "GASTEROPODS"

THAT’S ALL FOLKS

LS0tCnRpdGxlOiAiM0QgU3RhdHMgRm9ydGVhJ3MgTGF5ZXIgSCIKYXV0aG9yOiAiQWd1c3TDrW4gRGlleiBDYXN0aWxsbyBhZ3VzdGluLmRpZXpAdXYuZXMiCmRhdGU6ICI5TWF5LCAyMDE3IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCkluIHRoaXMgZG9jdW1lbnQgd2UgY29tcHV0ZSBzZXZlcmFsIDNkIHN0YXRzIHdpdGggdGhlIHBhY2thZ2Ugc3BhdHN0YXQKaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3NwYXRzdGF0L3ZlcnNpb25zLzEuNDktMAppbmNsdWRpbmcgdGhlIFBhaXIgQ29ycmVsYXRpb24gRnVuY3Rpb24gb2YgYSBUaHJlZS1EaW1lbnNpb25hbCBQb2ludCBQYXR0ZXJuICBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvc3BhdHN0YXQvdmVyc2lvbnMvMS40OS0wL3RvcGljcy9wY2YzZXN0ICBmdW5jdGlvbiwgdGhlIEstZnVuY3Rpb24gb2YgYSBUaHJlZS1EaW1lbnNpb25hbCBQb2ludCBQYXR0ZXJuIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9zcGF0c3RhdC92ZXJzaW9ucy8xLjQ5LTAvdG9waWNzL0szZXN0LCB0aGUgRW1wdHkgU3BhY2UgRnVuY3Rpb24gb2YgYSBUaHJlZS1EaW1lbnNpb25hbCBQb2ludCBQYXR0ZXJuIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9zcGF0c3RhdC92ZXJzaW9ucy8xLjQ5LTAvdG9waWNzL0YzZXN0IGFuZCB0aGUgTmVhcmVzdCBOZWlnaGJvdXIgRGlzdGFuY2UgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uIG9mIGEgVGhyZWUtRGltZW5zaW9uYWwgUG9pbnQgUGF0dGVybiBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvc3BhdHN0YXQvdmVyc2lvbnMvMS40OS0wL3RvcGljcy9HM2VzdC4KCkZpcnN0IHdlIGxvYWQgdGhlIHJlcXVpcmVkIGxpYnJhcmllcwpgYGB7cn0KcmVxdWlyZShzcGF0c3RhdCkKYGBgCgpXZSdyZSByZWFkeSB0byBsb2FkIHRoZSBmaWxlcyB3aXRoIGNvb3JkaW5hdGVzCmBgYHtyfQpzaDE8LXJlYWQuY3N2KCJzdWVsb19oMS5jc3YiLGhlYWRlcj1GQUxTRSkKc2gyPC1yZWFkLmNzdigic3VlbG9faDIuY3N2IixoZWFkZXI9RkFMU0UpCnNoMzwtcmVhZC5jc3YoInN1ZWxvX2gzLmNzdiIsaGVhZGVyPUZBTFNFKQpzaDQ8LXJlYWQuY3N2KCJzdWVsb19oNC5jc3YiLGhlYWRlcj1GQUxTRSkKYGBgCk9uY2UgbGlicmFyaWVzIGFyZSBmaWxlcyBhcmUgaW4gcGxhY2UsIHdlIGNhbiBzdWJzZXQgdGhlIGZpbGVzLgoKV2UgYmVnaW4gd2l0aCB0aGUgZmF1bmFsIHJlbWFpbnMgYW5kIExBWUVSIEgxCgpgYGB7cn0Kc3VoPC1yYmluZChzaDEsc2gyLHNoMyxzaDQpCnBhcihtZnJvdz1jKDIsMikpCnRpdDwtYygiRmF1bmFsIHJlbWFpbnMiLCJQb3R0ZXJ5IiwiTGl0aGljcyIsIkdhc3Rlcm9wb2RzIikKZm9yIChpIGluIDE6NCl7CmZhdWg8LXN1YnNldChzdWgsc3VoWyw2XT09aSkKZmF1aDNkPC1wcDMoZmF1aFssMl0sZmF1aFssM10sZmF1aFssNF0sYm94MyhjKDk5OSwxMDA0KSxjKDk5NSw5OTkpLGMoNDA3LDQwOCkpKQpwbG90LnBwMyhmYXVoM2QsIG1haW49dGl0W2ldKQp9CmBgYApgYGB7ciwgZmlnLndpZHRoID0gMTB9CnN1aDwtcmJpbmQoc2gxLHNoMixzaDMsc2g0KQpwYXIobWZyb3c9YygyLDIpKQp0aXQ8LWMoIkZhdW5hbCByZW1haW5zIiwiUG90dGVyeSIsIkxpdGhpY3MiLCJHYXN0ZXJvcG9kcyIpCmZvciAoaSBpbiAxOjQpewpmYXVoPC1zdWJzZXQoc3VoLHN1aFssNl09PWkpCmZhdWgzZDwtcHAzKGZhdWhbLDJdLGZhdWhbLDNdLGZhdWhbLDRdLGJveDMoYyg5OTksMTAwNCksYyg5OTUsOTk5KSxjKDQwNyw0MDgpKSkKcDM8LXBjZjNlc3QoZmF1aDNkKQpwbG90KHAzLG1haW49IjNEIFBhaXIgQ29ycmVsYXRpb24iKQprMzwtSzNlc3QoZmF1aDNkKQpwbG90KGszLG1haW49IkstZnVuY3Rpb24iKQpnMzwtRzNlc3QoZmF1aDNkKQpwbG90KGczLG1haW49Ik5lYXJlc3QgTmVpZ2hib3VyIERpc3RyaWJ1dGlvbiIpCmYzPC1GM2VzdChmYXVoM2QpCnBsb3QoZjMsbWFpbj0iRW1wdHkgc3BhY2UiKQpwcmludCh0b3VwcGVyKHRpdFtpXSkpCn0KYGBgCmBgYHtyLCBmaWcud2lkdGggPSAxMH0Kc3VoPC1yYmluZChzaDEsc2gyLHNoMyxzaDQpCnBhcihtZnJvdz1jKDIsMikpCnRpdDwtYygiRmF1bmFsIHJlbWFpbnMiLCJQb3R0ZXJ5IiwiTGl0aGljcyIsIkdhc3Rlcm9wb2RzIikKZm9yIChpIGluIDE6NCl7CiAgCmZhdWg8LXN1YnNldChzdWgsc3VoWyw2XT09aSkKZmF1aDNkPC1wcDMoZmF1aFssMl0sZmF1aFssM10sZmF1aFssNF0sYm94MyhjKDk5OSwxMDA0KSxjKDk5NSw5OTkpLGMoNDA3LDQwOCkpKQppbnZpc2libGUocGxvdChlbnZlbG9wZShmYXVoM2QsIGZ1bj1wY2YzZXN0LG5zaW09OTkpLG1haW49IjNEIFBhaXIgQ29ycmVsYXRpb24iKSkKaW52aXNpYmxlKHBsb3QoZW52ZWxvcGUoZmF1aDNkLCBuc2ltPTk5KSxtYWluPSJLLWZ1bmN0aW9uIikpCmludmlzaWJsZShwbG90KGVudmVsb3BlKGZhdWgzZCwgZnVuPUczZXN0LG5zaW09OTkpLG1haW49Ik5lYXJlc3QgTmVpZ2hib3VyIERpc3RyaWJ1dGlvbiIpKQppbnZpc2libGUocGxvdChlbnZlbG9wZShmYXVoM2QsIGZ1bj1GM2VzdCxuc2ltPTk5KSxtYWluPSJFbXB0eSBzcGFjZSIpKQpwcmludCh0b3VwcGVyKHRpdFtpXSkpCn0KYGBgClRIQVQnUyBBTEwgRk9MS1MKCg==