summaryrefslogtreecommitdiff
path: root/2020/04.raku
blob: 901bad847a2deab73540bee797112a1717a310c2 (plain)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
#!/usr/bin/env raku

use v6.d;

#| Run with --one or --two to get the solution to a particular part.
proto sub MAIN (
	*%params
) { * }

multi sub MAIN (
	#| Show the solution of part one.
	Bool:D :$one!,
) {
	data()
		.split("\n\n")
		.map(*.words)
		.map({ passport-to-hash($_) })
		.map({ check-passport-values($_) })
		.grep({ is-all-valid($_) })
		.elems
		.say
}

multi sub MAIN (
	#| Show the solution of part one.
	Bool:D :$two!,
) {
	data()
		.split("\n\n")
		.map(*.words)
		.map({ passport-to-hash($_) })
		.map({ check-passport-values($_, :strict) })
		.grep({ is-all-valid($_) })
		.elems
		.say
}

#| Combine a number of passport elements into a single passport Hash.
sub passport-to-hash (
	#| All the elements contained in a single passport data string.
	@elements,

	--> Associative
) {
	my %passport;

	for @elements {
		my ($key, $value) = $_.split(':');
		%passport{$key} = $value;
	}

	%passport;
}

#| Check wether all fields in the passport entry are valid.
sub is-all-valid (
	#| A hash representing the passport data.
	%passport,

	--> Bool
) {
	for < byr iyr eyr hgt hcl ecl pid > {
		return False unless %passport{$_};
	}

	True;
}

#| Check each field of the passport for validity. Turns the value of the field
#| into a Bool, with True representing the field's value was indeed valid.
sub check-passport-values (
	%passport is copy,

	Bool:D :$strict = False,

	--> Associative
) {
	for < byr iyr eyr hgt hcl ecl pid > {
		%passport{$_} = is-valid($_, %passport{$_}, :$strict);
	}

	# CID is ignored.
	%passport<cid> = True;

	%passport;
}

multi sub is-valid (
	'byr',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless 1920$value2002;

	True;
}

multi sub is-valid (
	'iyr',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless 2010$value2020;

	True;
}

multi sub is-valid (
	'eyr',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless 2020$value2030;

	True;
}

multi sub is-valid (
	'hgt',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	my $match = ($value ~~ / (\d+) ([ 'cm' || 'in' ]) /);

	return False unless $match;

	given ($match[1].Str) {
		when 'cm' { return False unless 150$match[0] ≤ 193 }
		when 'in' { return False unless 59$match[0] ≤ 76 }
	}

	True;
}

multi sub is-valid (
	'hcl',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless $value ~~ / '#' <[ \d a..f ]> ** 6 /;

	True;
}

multi sub is-valid (
	'ecl',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless $value ∈ < amb blu brn gry grn hzl oth >;

	True;
}

multi sub is-valid (
	'pid',
	$value,
	Bool:D :$strict = False,
	--> Bool
) {
	return False unless $value;
	return True unless $strict;

	return False unless $value ~~ / ^ \d ** 9 $ /;

	True;
}

sub data {
	q:to/EOF/;
		byr:1937
		eyr:2030 pid:154364481
		hgt:158cm iyr:2015 ecl:brn hcl:#c0946f cid:155

		cid:279
		eyr:2029
		pid:675014709 ecl:amb
		byr:1985 hgt:179in hcl:z iyr:2025

		iyr:2011 hgt:181cm hcl:#341e13 pid:282499883 byr:1953
		eyr:2023
		ecl:brn

		eyr:2040 iyr:1984 pid:2371396209 byr:1951 cid:283 hgt:164cm
		hcl:#623a2f

		iyr:2014 byr:1966 hgt:153cm pid:900693718 eyr:2020 ecl:gry hcl:#866857

		eyr:2020 hgt:162cm
		byr:1939 pid:900852891 iyr:2020
		ecl:oth hcl:#b6652a

		iyr:1956
		hcl:2385ac
		hgt:167in
		ecl:#9b82e8
		eyr:2003
		cid:214 byr:2012 pid:483285062

		cid:146 byr:1938 hcl:#c0946f pid:136823471
		hgt:180cm iyr:2011
		eyr:2020 ecl:gry

		cid:100 hgt:187cm
		byr:1973 ecl:blu
		iyr:2020
		hcl:#888785 eyr:2030
		pid:386799181

		ecl:#dbba4f
		hcl:z iyr:2028 pid:193cm
		byr:2029
		eyr:1962 hgt:113

		cid:269 byr:1928 pid:604152679
		iyr:2017 eyr:2027
		hcl:#c0946f
		hgt:189cm
		ecl:blu

		pid:653548437 hcl:z cid:166 iyr:2011 eyr:1967
		hgt:162 ecl:xry byr:2019

		byr:1979 ecl:hzl iyr:2018 hcl:#7d3b0c
		eyr:2026
		pid:981366150 hgt:151cm

		pid:055334062 cid:272 eyr:2025 ecl:grn iyr:2016 hgt:159cm hcl:#a97842 byr:1989

		eyr:2033
		hgt:170cm ecl:brn pid:#299cf2 hcl:#602927 byr:2004 iyr:2023

		iyr:2020 cid:273
		pid:038972962
		hcl:#c0946f hgt:152cm
		eyr:2021 ecl:blu byr:1986

		pid:015622106 hgt:154cm iyr:2012 byr:1922
		eyr:2028 hcl:#9dc667 ecl:blu

		iyr:2017 eyr:2025 hgt:179cm cid:324
		pid:579870519 byr:1934

		hcl:#6b5442 eyr:2021
		pid:104071480 ecl:brn
		hgt:162cm cid:89 byr:1949
		iyr:2017

		pid:388871409 cid:163 hgt:190cm ecl:amb eyr:2022 iyr:2019 byr:1963 hcl:#fffffd

		cid:190 byr:1968 iyr:2018
		hgt:155cm hcl:#6b5442 ecl:grn
		pid:891458997 eyr:2030

		hcl:z
		cid:103 iyr:2026 hgt:171 byr:1979
		pid:076174078
		eyr:2031 ecl:#fc4638

		hcl:#f8063e pid:684921958 ecl:gry eyr:2020 iyr:2011
		byr:1958 hgt:189cm
		cid:131

		ecl:gry cid:90 iyr:2010 hgt:165cm
		pid:683095019 byr:1953
		hcl:#341e13
		eyr:2030

		pid:000303662
		ecl:amb iyr:2014 hcl:#733820 byr:1964 hgt:184cm cid:149
		eyr:2027

		hcl:#341e13 hgt:150cm byr:1999 eyr:2022 pid:950260967 cid:72
		ecl:grn iyr:2012

		cid:159 byr:1987
		hcl:#623a2f pid:144877169 eyr:2021 ecl:brn hgt:164cm

		pid:759578668
		cid:235 ecl:amb hgt:154cm
		eyr:2023 byr:1941 hcl:#fffffd
		iyr:2023

		pid:18101245 hcl:z hgt:172in iyr:1947 byr:1956 ecl:grn eyr:1964

		eyr:1980 pid:#8d62b1 ecl:#3e8868 cid:235
		iyr:1978 hcl:#efcc98
		byr:2025 hgt:181in

		hgt:64cm hcl:3bc533 iyr:2019 byr:2015 pid:158cm eyr:2027 ecl:#1abbd7

		eyr:2020 iyr:2011
		pid:739854643 byr:1941 hgt:179cm hcl:#602927 ecl:gry cid:330

		hcl:#a97842 iyr:2011 hgt:167cm pid:527353688 byr:1927 cid:256 eyr:2026 ecl:grn

		iyr:2011 pid:350783151 hgt:168cm
		byr:1961 ecl:amb hcl:#341e13
		cid:181

		eyr:2025 hgt:160cm
		ecl:brn hcl:#cfa07d pid:136929481
		iyr:2017

		ecl:oth byr:1994 iyr:2020 hgt:162cm pid:578918570 eyr:2027 hcl:#fffffd
		cid:325

		hgt:63in byr:1925
		ecl:amb iyr:2014 cid:224
		hcl:#341e13 pid:208286938

		ecl:#76434f hgt:97
		hcl:z eyr:1968 pid:#871dc8 iyr:1955
		byr:2007

		byr:2011
		eyr:1962 hcl:9ac7b8 pid:6836105558
		ecl:#d7084f
		iyr:2023 hgt:76cm

		eyr:2016 iyr:2030 hgt:107 pid:948192703 byr:2013
		hcl:b80af7 ecl:#d47439

		eyr:2027 iyr:2017
		pid:#27d2a6 byr:1921 ecl:brn hcl:#c0946f hgt:59in

		byr:1982 hcl:#ceb3a1 ecl:brn eyr:2020 hgt:63in
		iyr:2017

		ecl:brn hgt:152cm byr:1962
		iyr:2013
		pid:381950515 hcl:#2afabd eyr:2020

		hgt:158cm ecl:gry pid:252068098
		cid:281 eyr:2023 byr:1950 iyr:2016
		hcl:#ceb3a1

		byr:1922
		hgt:187cm cid:74
		hcl:#a97842
		ecl:amb
		pid:045338811
		eyr:2025 iyr:2019

		hgt:176cm eyr:2022 iyr:2019 byr:1938 ecl:blu pid:610286298
		hcl:#a97842

		iyr:2028 byr:2025
		eyr:2039 pid:72530856 ecl:#a819ad hgt:69 hcl:z

		iyr:2018 eyr:2030
		hcl:#8b1e1f ecl:hzl byr:1971
		pid:189005628

		pid:531154383 eyr:2020 hcl:#733820 ecl:oth
		hgt:72in
		iyr:2016
		byr:1983

		hgt:178cm hcl:#623a2f pid:562756202
		eyr:2020
		byr:1929 ecl:oth
		iyr:2013

		iyr:2013 byr:1983 pid:510998389 ecl:gry
		cid:99 hcl:#a97842

		ecl:gry eyr:2026
		cid:202 hgt:191cm byr:1981
		pid:414853225
		hcl:#7d3b0c

		hcl:#866857 byr:1951 eyr:2020 hgt:169cm pid:844496997
		iyr:2016 ecl:brn

		pid:083641628 iyr:2019 eyr:2030
		byr:1938 ecl:hzl hcl:#b6652a hgt:68in

		hcl:#18171d
		byr:1981
		pid:425911593 cid:309 eyr:2026 ecl:brn hgt:168cm

		hcl:c84fda pid:#80d5e6 byr:1925 hgt:162cm iyr:2026
		eyr:2036 ecl:#62c166

		pid:461660733 eyr:2028
		hgt:167cm ecl:hzl hcl:#cfa07d iyr:2010
		cid:183

		eyr:1930 byr:2021 iyr:2016 pid:163cm
		hcl:79428f cid:136
		ecl:amb

		hcl:#efcc98 hgt:176cm eyr:2022 ecl:brn iyr:2013 pid:541033681 byr:1952

		hgt:59cm
		ecl:#d9b0bc pid:#3ab4b4 hcl:7aa29f
		eyr:2034
		byr:2011 cid:266 iyr:2004

		byr:1991 hcl:#cfa07d cid:259 hgt:67cm eyr:2024 pid:631601343 ecl:brn iyr:2011

		byr:2020
		ecl:gry iyr:1944
		pid:421649652 hgt:107
		hcl:6d8593 eyr:2026

		ecl:blu
		byr:1953 hgt:66in hcl:#888785 eyr:2021 pid:174284708

		ecl:#8f2c20
		pid:27713962 iyr:2010 cid:149 byr:1952 hcl:#866857 eyr:2030
		hgt:186cm

		eyr:2023 byr:1989 ecl:blu
		hcl:#18171d pid:480641 iyr:2020
		hgt:74in

		hcl:#efcc98
		eyr:2023 hgt:157cm byr:1968
		iyr:2013
		ecl:amb pid:436599087

		eyr:2021
		hgt:175cm hcl:#efcc98 ecl:hzl pid:701245439
		byr:1943 iyr:2015

		hgt:164cm pid:310546869
		eyr:2021 hcl:#b6652a ecl:oth iyr:2011 cid:181
		byr:2001

		byr:2016 hcl:94f4b9 eyr:1922 hgt:155cm ecl:hzl iyr:2009 pid:83440078

		iyr:2014 hgt:60in
		eyr:2031
		hcl:#c0946f
		byr:1948 ecl:grt pid:117909137

		byr:1965 hgt:186cm iyr:2010 cid:117 hcl:#602927 pid:806868279
		eyr:2029
		ecl:grn

		ecl:amb hgt:187cm hcl:#c0946f byr:1935
		cid:139 iyr:2019 eyr:2023

		pid:925865182
		byr:1952 hgt:158cm hcl:#619e03 ecl:gry eyr:2026
		iyr:2016

		iyr:2012 hgt:73in
		cid:199
		byr:1959
		ecl:hzl hcl:#fcd2f7 pid:268810283

		eyr:2025
		pid:317239854 ecl:brn byr:1955 hcl:#fffffd cid:220 hgt:175cm
		iyr:2015

		ecl:blu
		byr:1939 hcl:#3332c0
		iyr:2019 pid:832588457 eyr:2030 hgt:192cm

		hgt:64cm cid:326 ecl:oth byr:2025 eyr:2025 hcl:z iyr:2012 pid:0394683801

		ecl:amb byr:1966
		pid:734257450 hgt:65in hcl:#fffffd iyr:2018 eyr:2025
		cid:287

		cid:249
		eyr:2034 ecl:#7b7bf5 byr:2009 pid:171cm hcl:709fe4

		hcl:d7c488 ecl:#b9bbb2
		pid:55277333
		cid:90 byr:2022 iyr:1978
		hgt:69cm eyr:1981

		hcl:z
		byr:1949 pid:057966198 eyr:1941
		iyr:2025

		hgt:168cm ecl:hzl hcl:#866857 iyr:2011 pid:052204052 eyr:2030
		byr:1970

		pid:318707043 eyr:2029 ecl:hzl hcl:#888785
		byr:1932 iyr:2010
		hgt:166cm

		hcl:z iyr:2010 ecl:oth byr:2006 cid:120 pid:#15d5ef eyr:2039 hgt:73cm

		hcl:96c534 hgt:193in eyr:2036 byr:2008 ecl:#090691 cid:109 pid:603339169 iyr:2027

		iyr:2029
		ecl:utc
		pid:5845500732 hcl:2a32b8
		byr:2009 eyr:2040
		cid:305 hgt:71cm

		byr:1994 iyr:2015
		eyr:2026
		hcl:#623a2f pid:678627790
		hgt:176cm ecl:blu

		byr:2005 hcl:z
		ecl:zzz pid:#47729a eyr:2039 hgt:62cm iyr:1983

		hcl:#cfa07d ecl:blu
		iyr:2014 eyr:2025 pid:824483836 hgt:174cm byr:1933

		hgt:70in
		iyr:2010 cid:53 eyr:2023 pid:093704222 ecl:amb hcl:#a97842 byr:1945

		ecl:brn hcl:#602927 byr:1986 eyr:2029
		pid:422160398
		cid:134
		hgt:156cm
		iyr:2020

		iyr:2014 hgt:187cm byr:1921 eyr:2022 ecl:amb

		pid:765750572 eyr:2021
		ecl:hzl
		iyr:1997 hgt:66

		iyr:2016
		ecl:blu
		cid:335
		hgt:175cm pid:297297703 hcl:#b6652a
		eyr:2030

		hgt:64in hcl:#866857 pid:159cm byr:1972
		cid:321 eyr:2021 ecl:brn
		iyr:2017

		pid:884038003
		iyr:2016 hgt:188cm ecl:grn
		byr:1928 eyr:2027 hcl:#341e13

		pid:020315021 hgt:60in ecl:amb iyr:2018
		hcl:#602927
		eyr:2028
		byr:1935

		byr:1946 eyr:2021 hcl:#efcc98 iyr:2015
		cid:52
		hgt:177cm
		pid:841348804

		ecl:gry eyr:2027
		byr:1959 pid:482204272
		hcl:#888785
		iyr:2013

		hcl:#623a2f
		eyr:2027 iyr:2011 hgt:189cm pid:767923916 ecl:hzl
		byr:1987

		hgt:152in hcl:#efcc98 ecl:hzl eyr:2030 byr:1971 iyr:1978 pid:499148724
		cid:194

		pid:#87513f hcl:e2a5de byr:2015 iyr:2016 hgt:155cm eyr:2024
		ecl:gry cid:123

		byr:1977
		iyr:2028
		hcl:#888785 pid:69801913 eyr:2026 hgt:165in ecl:brn

		byr:1938 hcl:#efcc98 hgt:154cm pid:621714851 eyr:1972 ecl:gry iyr:2014 cid:161

		hcl:#a97842
		hgt:184cm ecl:oth pid:009682326
		cid:233 eyr:2023 iyr:2019 byr:1982

		hcl:#ceb3a1 pid:700761574 eyr:2020 byr:1940 iyr:2017
		ecl:gry hgt:76in

		iyr:2017 cid:73
		ecl:hzl
		hcl:#efcc98 pid:363441284
		hgt:177cm byr:1924 eyr:2028

		hcl:#a97842 eyr:2023 byr:1989 pid:589573553
		ecl:oth
		iyr:2017 hgt:162cm

		ecl:oth
		byr:2001 hgt:167cm hcl:#18171d eyr:2028 iyr:2015 pid:253666913

		byr:1943 ecl:amb
		hcl:#888785 pid:163cm iyr:2025 hgt:76 eyr:2026

		byr:1963 eyr:2030
		hgt:158in iyr:2023 pid:399153486 hcl:#733820

		pid:43290252 hgt:167cm cid:302 iyr:2016 hcl:f81436
		byr:1992 ecl:gry
		eyr:1922

		pid:487300118 hgt:167cm hcl:#888785
		iyr:2018 ecl:oth cid:286 byr:1971 eyr:2021

		eyr:2036
		hgt:94
		byr:2013
		cid:162 hcl:37408d pid:527721797 ecl:dne
		iyr:2022

		hcl:5e67df byr:1973 pid:48217944 hgt:65in eyr:2023
		iyr:2001 ecl:gry

		hcl:717ef8 eyr:1996 pid:154cm ecl:#e2c90e
		iyr:2028
		byr:2009 hgt:184cm

		iyr:2015 pid:549968053 hcl:#efcc98
		hgt:151cm eyr:2025
		byr:1993
		ecl:gry

		hgt:165cm ecl:gry
		iyr:2020
		byr:1927 hcl:#602927 pid:278946330
		eyr:2027

		eyr:2031
		ecl:#b01aae pid:151cm
		cid:188 iyr:2025
		hgt:60cm byr:2015

		eyr:2028 pid:928740840
		byr:1931
		hgt:191cm iyr:2014 cid:305
		hcl:#6b5442
		ecl:oth

		hcl:#7d3b0c cid:283 byr:1923 ecl:amb
		pid:781290431 iyr:2019
		eyr:2021
		hgt:191cm

		byr:2027
		pid:51702036
		iyr:2028 hgt:165in ecl:gry hcl:z
		eyr:2036

		byr:1971
		ecl:blu iyr:2012 pid:986042111
		eyr:2021 hcl:#888785
		hgt:68in

		hgt:183cm byr:2030
		iyr:2013
		cid:209 pid:989002507
		ecl:hzl eyr:2028 hcl:59c2ce

		ecl:gry iyr:2020 pid:895856989 hcl:#888785
		hgt:185cm byr:1964 eyr:2025

		ecl:gry
		hgt:183cm cid:97 hcl:#93be9b eyr:2021
		byr:1995 pid:668647173

		hcl:#733820 eyr:2027
		byr:1977 pid:242773849 hgt:184cm iyr:2017
		cid:76 ecl:brn

		hgt:167 hcl:z byr:2012 eyr:2027
		pid:590438786 ecl:hzl
		cid:101 iyr:1994

		iyr:2015
		hcl:#888785 eyr:2024
		ecl:blu pid:279218875 cid:178 byr:1944 hgt:74in

		ecl:oth cid:334 pid:169599381
		hcl:#7d3b0c eyr:2028 hgt:172cm iyr:2010

		eyr:2033 byr:1973 cid:333 iyr:2019 hcl:z ecl:utc
		hgt:178cm pid:#e7abc0

		eyr:2026 ecl:blu cid:264 byr:1998 hgt:177cm hcl:#602927
		pid:770052780
		iyr:2019

		ecl:blu
		iyr:2016 cid:232 eyr:2023
		pid:643597545 hgt:167cm byr:1986 hcl:#cfa07d

		pid:017818204
		iyr:2017 eyr:2028 hgt:168cm hcl:#602927 byr:1931 ecl:oth

		byr:1984 ecl:grn hgt:191cm hcl:#efcc98 pid:408382086
		iyr:2010 eyr:2025

		hgt:158cm ecl:#25e195 byr:1929 pid:0367744553 eyr:1957 iyr:2017
		hcl:z

		hgt:168cm byr:1977 pid:006609828
		eyr:2024
		iyr:2015
		ecl:amb hcl:#b6652a

		pid:635167847 iyr:2010 hcl:#18171d hgt:163cm ecl:grn
		eyr:2026

		pid:423029177 byr:1995
		iyr:2014 ecl:hzl
		hgt:185cm hcl:#c0946f eyr:2024 cid:230

		pid:#3e3109 ecl:#a8a0aa iyr:2020 hcl:#733820 eyr:2021 byr:2010 hgt:179in

		iyr:2017 byr:1938 eyr:2022 hcl:#733820 ecl:amb hgt:157cm pid:162425330

		hgt:160cm
		cid:339 byr:1938
		hcl:#341e13
		eyr:2025 iyr:2015
		pid:562755634

		cid:283 byr:1954 ecl:blu hcl:#ceb3a1 hgt:169cm iyr:2013 pid:616439723

		pid:830940520 eyr:2022
		byr:1981 hgt:193cm hcl:#18171d iyr:2013
		cid:117

		hcl:#866857 iyr:2019 ecl:hzl byr:1962 hgt:72in eyr:2020

		byr:2015 pid:4530685490 ecl:#c7604e hcl:z
		hgt:151 eyr:1972 iyr:1948

		pid:0800674852 hcl:z
		ecl:#2a275e hgt:61cm
		iyr:1950 eyr:1938

		iyr:2028
		eyr:1998
		pid:#c604ca
		hgt:122 hcl:z
		ecl:dne cid:160 byr:2018

		hcl:z
		cid:67 iyr:2029
		byr:1973
		ecl:amb eyr:2030
		hgt:66

		ecl:hzl
		pid:483557353 eyr:2021
		hgt:172cm iyr:2011
		hcl:#888785
		byr:1963

		eyr:2030 ecl:brn hcl:#fffffd byr:1969
		hgt:161cm pid:632930895
		iyr:2017

		iyr:2015 byr:2000
		pid:525557240 hgt:156cm eyr:2029
		ecl:brn hcl:#64bf85

		byr:2007
		iyr:2012 eyr:2029 ecl:#7c1d6f pid:612320497 hgt:165in

		eyr:2026 ecl:grn cid:93
		hcl:#888785 hgt:134 pid:745552484 iyr:2019 byr:1999

		byr:2001 pid:984678649 hgt:173cm ecl:oth iyr:2012 cid:345 hcl:#fffffd
		eyr:2028

		hcl:#341e13 pid:308853935
		byr:1972 hgt:160cm iyr:2012 eyr:2026
		ecl:amb cid:97

		hcl:z hgt:151
		ecl:grn pid:132866718
		iyr:2021 byr:1932
		eyr:2024

		eyr:2027 byr:1923
		ecl:oth hgt:174cm hcl:#733820
		pid:099185839
		iyr:2017

		iyr:2017 ecl:gry byr:1941
		hgt:74in
		pid:540930352
		hcl:#888785 eyr:2023

		hgt:161cm cid:277
		hcl:#866857
		byr:1928
		eyr:2030 ecl:blu
		iyr:2020 pid:358953579

		hgt:155cm eyr:1930
		iyr:2015 ecl:utc
		pid:163cm
		byr:2008 hcl:#733820 cid:156

		byr:1946 hgt:164cm
		cid:234 iyr:2015
		pid:168804387 eyr:2025
		ecl:hzl hcl:#a97842

		hgt:184cm
		hcl:#7d3b0c byr:1996 cid:193 iyr:2011 ecl:amb eyr:2030 pid:940497049

		hcl:#733820 iyr:2016 hgt:168
		eyr:2020
		cid:118 pid:9871436 ecl:gry

		pid:416683862
		hgt:162in
		hcl:#602927 byr:2027
		eyr:2027 ecl:gmt

		ecl:#771e11
		iyr:2024
		cid:81 pid:741843390
		hcl:#866857 byr:2012 eyr:1964
		hgt:157in

		pid:720946735
		byr:2002 hcl:#18171d iyr:2026 hgt:70cm
		ecl:brn eyr:2025

		byr:1987 hcl:#623a2f
		hgt:165cm pid:087526326 ecl:grn
		iyr:2017 eyr:2021

		byr:2014 hgt:193cm
		iyr:2018 hcl:z
		eyr:2027 pid:792398819

		cid:233
		hcl:z ecl:#18002d hgt:174cm iyr:2027 eyr:1944

		pid:142615460 ecl:blu eyr:2021
		hcl:#c88693 iyr:2017 cid:182 hgt:152cm byr:1966

		hcl:z hgt:65cm
		eyr:1944 ecl:dne byr:2029 pid:1066768764
		iyr:2015
		cid:149

		hcl:z pid:25144284 hgt:152in
		byr:2009
		cid:276 eyr:2037
		iyr:2010 ecl:gmt

		cid:88 hcl:ed6b8a ecl:xry hgt:178in pid:36832491 byr:2020 iyr:2012 eyr:1993

		byr:1972 iyr:2009 pid:324213657 hgt:160 hcl:z cid:259 eyr:2021 ecl:grn

		hcl:#7d3b0c pid:164496070 eyr:2024 ecl:brn hgt:165cm

		pid:955035528
		byr:1967 eyr:2021 iyr:2015 hcl:#fffffd hgt:156cm
		cid:237
		ecl:blu

		hcl:z
		eyr:2038 iyr:1973 ecl:grt hgt:193in
		pid:41385449 byr:2011
		cid:119

		byr:1934 pid:713339056 hgt:157cm cid:250 iyr:2016 ecl:blu hcl:#866857 eyr:2026

		hgt:186cm byr:2012
		eyr:2022
		iyr:2013 hcl:#733820 pid:226693031 ecl:hzl

		cid:118 pid:56750275 hcl:#cfa07d iyr:2028 eyr:2033 byr:1933 hgt:166cm

		byr:1973
		ecl:hzl hgt:167 hcl:z
		iyr:2015 pid:70648423

		byr:1929
		iyr:2012 pid:083005744 ecl:brn hgt:162cm
		eyr:2024
		hcl:#cfa07d

		hcl:#623a2f hgt:174cm
		eyr:2026 iyr:2020
		ecl:grn
		byr:1981

		cid:236 byr:1979 iyr:2013 ecl:amb eyr:2030 hcl:#6b5442 pid:768869830

		hcl:#341e13 byr:1998 iyr:2020
		pid:857980686
		ecl:hzl hgt:175cm eyr:2028

		hgt:169in
		cid:305 eyr:2023
		ecl:gry pid:833031763 hcl:#ceb3a1 iyr:2015 byr:1974

		pid:370671195 hgt:162cm
		iyr:2018 ecl:oth byr:2001 hcl:#7d3b0c
		eyr:2021

		eyr:2026
		ecl:brn
		cid:288
		hcl:#866857 iyr:2010 byr:1922
		pid:309109383

		byr:1949 iyr:2015 pid:832774982 eyr:2029
		hgt:182cm
		hcl:#b7144c ecl:amb

		eyr:2029 iyr:2020
		hcl:#c0946f
		pid:953788134
		byr:1954 hgt:167cm

		pid:981508704 eyr:2023 iyr:2013 hgt:66in cid:68 hcl:#fffffd byr:1996 ecl:oth

		iyr:2011 byr:1932 cid:232 eyr:2030
		hcl:#c0946f
		hgt:169cm pid:994763987
		ecl:hzl

		ecl:gmt eyr:2031 hcl:z
		byr:2006 cid:86 hgt:59cm iyr:1998 pid:#349a7f

		hcl:#7d3b0c iyr:2013 pid:549500594 eyr:2024 byr:1971 ecl:oth
		hgt:153cm

		iyr:2015
		byr:1940 pid:798926275 eyr:2027
		hcl:#cfa07d
		hgt:158cm ecl:amb

		ecl:brn pid:077141823
		eyr:1945 iyr:2023 hcl:#602927 byr:1956
		hgt:152

		iyr:2022
		byr:2007
		hcl:f87f81 pid:8404831740 eyr:2033 hgt:170cm
		ecl:gmt

		iyr:1958
		ecl:dne hcl:840fbe
		cid:55 eyr:2032 pid:19403738 hgt:170cm
		byr:2029

		ecl:brn pid:864743117
		eyr:2025
		hgt:188cm byr:1934 hcl:#623a2f
		iyr:2011

		iyr:2010 pid:877675472 hcl:#7d3b0c eyr:2027 byr:1954 hgt:182cm
		ecl:oth

		iyr:2015 hcl:#a97842 pid:719192774 ecl:brn
		byr:1993
		hgt:186cm

		eyr:2021 hgt:176cm pid:395161956 hcl:#602927
		ecl:grn iyr:2020 byr:1972

		hcl:#fffffd hgt:167cm byr:1945 ecl:grn iyr:2017 eyr:2026

		hcl:#6b5442 ecl:gry cid:208 hgt:155cm iyr:2010 byr:1933 pid:040244553
		eyr:2029

		iyr:1960 cid:281 ecl:#8f7c45 hcl:z pid:11609858 eyr:1955 hgt:150in
		byr:1985

		hgt:150cm byr:2002 hcl:#fffffd
		pid:337375886 iyr:2011 ecl:amb
		eyr:2037

		iyr:2014 ecl:oth hgt:155cm hcl:#866857 eyr:2025 pid:614859979 cid:338
		byr:1952

		hcl:#623a2f hgt:156cm
		iyr:2010 ecl:amb byr:1997
		cid:285
		pid:225568504 eyr:2020

		iyr:2021 hcl:#ceb3a1 ecl:#d6db5a pid:185cm eyr:2020 cid:130 byr:2009

		byr:1956
		cid:245 iyr:1954 ecl:dne hcl:#341e13 eyr:2040 hgt:71cm pid:838134394

		eyr:2027
		byr:1994 ecl:amb iyr:2014 hgt:168cm
		cid:278
		hcl:#602927 pid:758176176

		hcl:#941519 ecl:gry eyr:2030 byr:1921
		pid:9477831046
		iyr:2018 hgt:189cm

		cid:339 hcl:#6b5442
		byr:1972
		ecl:oth
		iyr:2014 hgt:183cm eyr:2020

		cid:165
		eyr:1926 hcl:#6b5442 iyr:1956 hgt:65cm byr:2029
		pid:9240052093 ecl:xry

		ecl:grn
		eyr:2027
		hcl:#fffffd byr:1975 iyr:2011 hgt:177cm pid:825090410 cid:121

		byr:1934
		hcl:#733820 pid:133141914 eyr:2027
		hgt:66in
		ecl:amb
		iyr:2010 cid:262

		iyr:1951
		ecl:#bb9733 hcl:89fcbf
		byr:2018 pid:#13265f hgt:85
		eyr:1977

		hcl:#324bed ecl:hzl hgt:155cm
		iyr:2013 byr:1942 eyr:2021
		pid:758516520

		ecl:gry
		pid:#567782 iyr:2015 hcl:276a6d eyr:2028
		hgt:60cm
		byr:2005

		hcl:#18171d hgt:191cm eyr:2030
		ecl:grn pid:748729106 byr:1922 iyr:2017

		byr:1984 hcl:#733820 eyr:2020 iyr:2013 hgt:64in pid:444446114
		ecl:hzl

		byr:2006 ecl:dne iyr:2029 hcl:z
		eyr:2023 hgt:68cm
		pid:131910019

		iyr:1976 hcl:45191a eyr:2017 hgt:68cm
		ecl:oth pid:153cm byr:1968

		ecl:gry byr:1959 eyr:2023 pid:781945569
		iyr:2015 hcl:#ceb3a1 hgt:167cm

		hgt:151cm
		byr:1959 hcl:#7d3b0c
		cid:76 pid:069205247 ecl:gry eyr:2029
		iyr:2013

		pid:055193304
		hcl:#fffffd
		hgt:67in ecl:grn iyr:2011

		eyr:2026
		byr:1975
		pid:681437369
		hgt:173cm hcl:#a97842
		iyr:2017 ecl:brn

		pid:298214774 hgt:158cm ecl:hzl
		hcl:#866857 byr:1993 iyr:2013
		eyr:2028

		hcl:#b6652a eyr:2023 pid:879418046 hgt:193cm
		iyr:2014
		ecl:brn

		hgt:164cm
		eyr:2028 hcl:fbd462 ecl:gry
		iyr:2011 byr:1938 pid:029003659

		byr:1999 hgt:171cm eyr:2024 cid:195 pid:041799326 ecl:gry iyr:2012 hcl:#a97842

		byr:1963 pid:7471206322 iyr:2015 ecl:brn hcl:#623a2f hgt:72cm
		cid:63

		byr:1961
		ecl:hzl hcl:#efcc98
		pid:617022365
		eyr:2020 hgt:155cm iyr:2018

		pid:385763432 byr:1977 cid:228 hcl:#733820 eyr:2020
		hgt:163cm ecl:grt
		iyr:2015

		byr:1979 hgt:186in eyr:2037
		ecl:dne
		iyr:2025 hcl:d93e3e
		pid:187cm

		iyr:2018
		cid:158 eyr:2020
		byr:1929
		pid:334374178 hgt:181cm hcl:z ecl:grn

		cid:135 ecl:oth hcl:#623a2f
		iyr:2017
		eyr:2024 byr:1940
		hgt:66in

		cid:92 eyr:2026 hcl:#888785 pid:827526879 byr:1990
		hgt:186cm ecl:amb iyr:2014

		pid:575519103
		iyr:2016 byr:1964 hcl:#7d3b0c cid:252 hgt:172cm

		hcl:#c0946f
		ecl:grn hgt:75in
		eyr:2021 pid:426544544

		cid:171 byr:2004
		hcl:z
		hgt:191cm eyr:2028 pid:#292b3b ecl:brn

		iyr:2016 ecl:hzl
		byr:2007
		hgt:167cm hcl:#653b4c cid:124 eyr:2022
		pid:#27024c

		hgt:177cm byr:2025
		hcl:z cid:303 iyr:2016 eyr:2000 ecl:dne
		pid:345555418

		eyr:2040
		hcl:70fbf6 cid:318
		byr:2027 iyr:2022
		ecl:#3a037c pid:644624005
		hgt:62cm

		ecl:brn iyr:2016 hgt:150cm pid:680594195 cid:324 hcl:#602927
		byr:1944

		hcl:z eyr:2022 byr:2020 cid:112 ecl:dne iyr:2029
		pid:#3a3560 hgt:153in

		cid:86
		ecl:gry byr:1972 hcl:#866857 pid:758976621 hgt:188cm

		pid:#850e8b eyr:2025 hgt:163in
		ecl:#71e9e2
		hcl:#623a2f

		ecl:amb byr:1958 hgt:193cm
		pid:343803154 iyr:2010 eyr:2029 cid:86 hcl:#602927

		hgt:178cm byr:1987 ecl:blu hcl:#866857 iyr:2017
		pid:222443921 eyr:2027

		byr:1964 iyr:2001
		hgt:180cm eyr:1945
		hcl:#fffffd pid:305189916 ecl:#ac3c49
		cid:142

		byr:1979 hgt:166cm ecl:brn
		cid:202 hcl:#5311ca eyr:2028 pid:874418818 iyr:2014

		hgt:161cm byr:1987 ecl:grn hcl:#6b5442 pid:986096798
		cid:74
		eyr:2027 iyr:2019

		byr:1964 iyr:1979 eyr:2022 ecl:#77ada3
		hcl:#733820
		cid:56

		hgt:185cm iyr:2010 pid:214991920 eyr:2023 cid:236 hcl:#866857 ecl:brn byr:1965

		pid:885169578 iyr:2010 byr:1948 ecl:hzl hcl:#18171d
		eyr:2025 hgt:175cm

		ecl:oth pid:34655368
		hgt:186
		byr:1968
		hcl:2653c9
		eyr:2030 iyr:2024

		eyr:2022 iyr:2015 ecl:gry hgt:65in byr:1994
		pid:766704860

		hcl:#c0946f cid:104 iyr:2015
		pid:739274357
		ecl:#ef45c8
		byr:1960 hgt:61in eyr:2026

		pid:849044092 eyr:2020 hgt:186cm iyr:2014
		byr:1991 hcl:#866857

		hgt:159cm iyr:1950
		eyr:2021 pid:325442644 hcl:#888785
		ecl:gry byr:1986

		eyr:2023 hgt:188cm
		iyr:2014
		pid:945115479 byr:1979 ecl:blu hcl:#b6652a

		eyr:2024
		cid:274 pid:390115952 byr:1934 hgt:161cm iyr:2017 hcl:#b95b0d

		ecl:#a16ec8 pid:187cm hcl:z iyr:2029 hgt:170
		byr:2008
	EOF
}