diff --git a/doc/2012-02-TF4/assignments.py b/doc/2012-02-TF4/assignments.py new file mode 100755 index 0000000..08d4293 --- /dev/null +++ b/doc/2012-02-TF4/assignments.py @@ -0,0 +1,76 @@ +#! /usr/bin/python3 + +## Course assignments + +import csv +import smtplib + +msg = '''From: Neale Pickett +To: %(recip)s +Subject: Tracer FIRE 4 course assignment: %(course)s + +Hello! Your course assignment for Tracer FIRE 4 is: + + %(course)s + +Please see http://csr.lanl.gov/tf/tf4.html for information on +what you need to bring to the course. + +Course questions should be directed to the appropriate instructor: + + Network RE: Neale Pickett + Malware RE: Danny Quist + Host Forensics: Kevin Nauer + Incident Coordination: Alex Kent + +General questions about Tracer FIRE may be sent to +Neale Pickett + +Remember: the exercise network should be considered +hostile! Do not bring anything sensitive on your laptop, +and make sure you back everything up. + +Looking forward to seeing you in Santa Fe next week, + +-- +Neale Pickett +Advanced Computing Solutions, Los Alamos National Laboratory +''' + +limits = {'Malware RE': 26, + 'Network RE': 40} +assignments = {} + +assigned = set(l.strip() for l in open('assigned.txt')) + +c = csv.reader(open('/tmp/g.csv')) +c.__next__() +for row in c: + assert '@' in row[2] + t = row[5] + if (len(assignments.get(t, '')) == limits.get(t, 50)): + if (row[6] == row[5]): + print("Jackass detected: %s" % row[2]) + t = row[6] + l = assignments.setdefault(t, []) + l.append(row) + +s = smtplib.SMTP('mail.lanl.gov') +for t in ('Incident Coordinator', 'Network RE', 'Malware RE', 'Forensics'): + print('%s (%s)' % (t, len(assignments[t]))) + for row in assignments[t]: + e = row[2] + if e in assigned: + print(' %s' % e) + else: + print(' * %s' % e) + ret = s.sendmail('neale@lanl.gov', [e], msg % {'course': t, 'recip': e}) + if ret: + print(' ==> %s' % ret) + else: + assigned.add(e) +s.quit() + +a = open('assigned.txt', 'w') +for e in assigned: + a.write('%s\n' % e) diff --git a/doc/2012-02-TF4/layout.dxf b/doc/2012-02-TF4/layout.dxf new file mode 100644 index 0000000..1aff3f7 --- /dev/null +++ b/doc/2012-02-TF4/layout.dxf @@ -0,0 +1,5280 @@ +999 +dxflib 2.0.4.8 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$HANDSEED + 5 +FFFF + 9 +$DIMASZ + 40 +0.1 + 9 +$GRIDUNIT + 10 +1.0 + 20 +1.0 + 9 +$DIMADEC + 70 +2 + 9 +$DIMGAP + 40 +0.025 + 9 +$SPLINESEGS + 70 +8 + 9 +$AUPREC + 70 +2 + 9 +$LUNITS + 70 +5 + 9 +$DIMEXO + 40 +0.025 + 9 +$INSUNITS + 70 +2 + 9 +$DIMLUNIT + 70 +5 + 9 +$DIMTXT + 40 +0.1 + 9 +$GRIDMODE + 70 +1 + 9 +$LUPREC + 70 +2 + 9 +$PSVPSCALE + 40 +0.0063819011769857 + 9 +$DIMSTYLE + 2 +Standard + 9 +$PLIMMAX + 10 +0.7083333333333334 + 20 +0.9166666666666665 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PINSBASE + 10 +0.0426059739819105 + 20 +0.1967697623221493 + 30 +0.0 + 9 +$DIMEXE + 40 +0.05 + 9 +$DIMAUNIT + 70 +0 + 9 +$AUNITS + 70 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +30 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +286.3055555555554861 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.92798353909465 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +100 + 73 +1 + 74 +3 + 75 +1 + 76 +1 + 77 +0 + 78 +0 +281 +0 + 65 +1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 +21 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +31 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT + 70 +0 + 3 +Dot . . . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +6.3499999999999996 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +32 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 +0 + 3 +Dot (.5x) ..................................... + 72 +65 + 73 +2 + 40 +3.1749999999999998 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +33 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOTX2 + 70 +0 + 3 +Dot (2x) . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +12.6999999999999993 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +34 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED + 70 +0 + 3 +Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ + 72 +65 + 73 +2 + 40 +19.0500000000000007 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +35 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED2 + 70 +0 + 3 +Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +9.5250000000000004 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +36 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHEDX2 + 70 +0 + 3 +Dashed (2x) ____ ____ ____ ____ ____ ___ + 72 +65 + 73 +2 + 40 +38.1000000000000014 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +37 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT + 70 +0 + 3 +Dash dot __ . __ . __ . __ . __ . __ . __ . __ + 72 +65 + 73 +4 + 40 +25.3999999999999986 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +38 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT2 + 70 +0 + 3 +Dash dot (.5x) _._._._._._._._._._._._._._._. + 72 +65 + 73 +4 + 40 +12.6999999999999993 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +39 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOTX2 + 70 +0 + 3 +Dash dot (2x) ____ . ____ . ____ . ___ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE + 70 +0 + 3 +Divide ____ . . ____ . . ____ . . ____ . . ____ + 72 +65 + 73 +6 + 40 +31.75 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE2 + 70 +0 + 3 +Divide (.5x) __..__..__..__..__..__..__..__.._ + 72 +65 + 73 +6 + 40 +15.875 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDEX2 + 70 +0 + 3 +Divide (2x) ________ . . ________ . . _ + 72 +65 + 73 +6 + 40 +63.5 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +3D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 +0 + 3 +Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER2 + 70 +0 + 3 +Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ + 72 +65 + 73 +4 + 40 +28.5749999999999993 + 49 +19.0500000000000007 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 +0 + 3 +Center (2x) ________ __ ________ __ _____ + 72 +65 + 73 +4 + 40 +101.5999999999999943 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +40 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER + 70 +0 + 3 +Border __ __ . __ __ . __ __ . __ __ . __ __ . + 72 +65 + 73 +6 + 40 +44.4500000000000028 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +41 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER2 + 70 +0 + 3 +Border (.5x) __.__.__.__.__.__.__.__.__.__.__. + 72 +65 + 73 +6 + 40 +22.2250000000000014 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +42 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDERX2 + 70 +0 + 3 +Border (2x) ____ ____ . ____ ____ . ___ + 72 +65 + 73 +6 + 40 +88.9000000000000057 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 +3 + 0 +LAYER + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +CONTINUOUS +370 +0 +390 +F + 0 +LAYER + 5 +43 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Tables + 70 +0 + 62 +6 + 6 +CONTINUOUS +370 +0 +390 +F + 0 +LAYER + 5 +44 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Network + 70 +0 + 62 +3 + 6 +CONTINUOUS +370 +-3 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +11 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +0.75 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 +1 + 0 +APPID + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 71 +0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 41 +0.1 + 42 +0.025 + 43 +3.75 + 44 +0.05 + 70 +0 + 73 +0 + 74 +0 + 77 +1 + 78 +8 +140 +0.1 +141 +2.5 +143 +0.03937007874016 +147 +0.025 +171 +3 +172 +1 +271 +2 +272 +2 +274 +3 +278 +44 +283 +0 +284 +8 +340 +11 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 +1 + 0 +BLOCK_RECORD + 5 +1F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +21 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +45 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +11.3333333333333339 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +46 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +19.0 + 20 +0.0 + 30 +0.0 + 11 +39.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +47 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.0 + 20 +0.0 + 30 +0.0 + 11 +39.0 + 21 +2.8333333333333335 + 31 +0.0 + 0 +LINE + 5 +48 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.0 + 20 +2.8333333333333335 + 30 +0.0 + 11 +42.0 + 21 +2.8333333333333335 + 31 +0.0 + 0 +LINE + 5 +49 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.0 + 20 +2.8333333333333335 + 30 +0.0 + 11 +42.0 + 21 +0.0000033333333334 + 31 +0.0 + 0 +LINE + 5 +4A +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.0 + 20 +0.0000033333333334 + 30 +0.0 + 11 +68.1666666666666714 + 21 +0.0000033333333334 + 31 +0.0 + 0 +LINE + 5 +4B +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1666666666666714 + 20 +0.0000033333333334 + 30 +0.0 + 11 +80.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +4C +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1666666666666714 + 20 +0.0000033333333334 + 30 +0.0 + 11 +79.9911321448893489 + 21 +4.3037568035146645 + 31 +0.0 + 0 +LINE + 5 +4D +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +4.3037568035146645 + 30 +0.0 + 11 +79.9911321448893489 + 21 +19.1370901368479984 + 31 +0.0 + 0 +LINE + 5 +4E +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +19.1370901368479984 + 30 +0.0 + 11 +79.9911321448893489 + 21 +32.3037568035146663 + 31 +0.0 + 0 +LINE + 5 +4F +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +19.1370901368479984 + 30 +0.0 + 11 +71.1577988115560203 + 21 +32.3037568035146663 + 31 +0.0 + 0 +LINE + 5 +50 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +71.1577988115560203 + 20 +32.3037568035146663 + 30 +0.0 + 11 +71.1577988115560203 + 21 +43.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +51 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +71.1577988115560203 + 20 +43.9704234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +57.1370901368479949 + 31 +0.0 + 0 +LINE + 5 +52 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +57.1370901368479949 + 30 +0.0 + 11 +79.9911321448893489 + 21 +19.1370901368479984 + 31 +0.0 + 0 +LINE + 5 +53 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +57.1370901368479949 + 30 +0.0 + 11 +79.9911321448893489 + 21 +77.7204234701813306 + 31 +0.0 + 0 +LINE + 5 +54 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +77.7204234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +55 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +81.9704234701813306 + 30 +0.0 + 11 +68.1577991448893528 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +56 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1577991448893528 + 20 +81.9704234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +77.7204234701813306 + 31 +0.0 + 0 +LINE + 5 +57 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1577991448893528 + 20 +81.9704234701813306 + 30 +0.0 + 11 +42.4911324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +58 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.4911324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +42.4911324782226814 + 21 +79.137090136848002 + 31 +0.0 + 0 +LINE + 5 +59 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.4911324782226814 + 20 +79.137090136848002 + 30 +0.0 + 11 +39.4911324782226814 + 21 +79.137090136848002 + 31 +0.0 + 0 +LINE + 5 +5A +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.4911324782226814 + 20 +79.137090136848002 + 30 +0.0 + 11 +39.4911324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +5B +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.4911324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +7.7411324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +5C +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.7411324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +0.0 + 21 +82.0 + 31 +0.0 + 0 +LINE + 5 +5D +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +82.0 + 30 +0.0 + 11 +0.0 + 21 +76.9166666666666714 + 31 +0.0 + 0 +LINE + 5 +5E +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +65.5833333333333428 + 30 +0.0 + 11 +0.0 + 21 +41.5000000000000142 + 31 +0.0 + 0 +LINE + 5 +5F +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +41.5000000000000142 + 30 +0.0 + 11 +8.5833333333333339 + 21 +41.5000000000000142 + 31 +0.0 + 0 +LINE + 5 +60 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +0.0 + 21 +34.1666666666666643 + 31 +0.0 + 0 +LINE + 5 +61 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +34.1666666666666643 + 30 +0.0 + 11 +8.5833333333333339 + 21 +34.1666666666666643 + 31 +0.0 + 0 +LINE + 5 +62 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.5833333333333339 + 20 +34.1666666666666643 + 30 +0.0 + 11 +8.5833333333333339 + 21 +41.5000000000000142 + 31 +0.0 + 0 +MTEXT + 5 +63 +100 +AcDbEntity +100 +AcDbMText + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +92.25 + 20 +28.0 + 30 +0.0 + 40 +1.0 + 41 +100.0 + 71 +1 + 72 +2 + 1 +Network + 7 +normallatin1 + 50 +0.0 + 73 +1 + 44 +1.0 + 0 +LINE + 5 +64 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.5833333333333339 + 20 +38.0175444241316427 + 30 +0.0 + 11 +71.1577988115560203 + 21 +38.0175444241316427 + 31 +0.0 + 0 +LINE + 5 +65 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.5028970401106463 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +66 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +67 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +68 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +39.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +69 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +39.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +31.0028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +31.0028970401106463 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +45.5 + 30 +0.0 + 11 +41.6341328907330919 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +6E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +47.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +47.9999999999999076 + 31 +0.0 + 0 +LINE + 5 +6F +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +47.9999999999999076 + 30 +0.0 + 11 +49.6341328907330919 + 21 +45.5 + 31 +0.0 + 0 +LINE + 5 +70 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +52.1341328907330919 + 20 +39.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +71 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +39.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +47.9999999999999076 + 31 +0.0 + 0 +LINE + 5 +72 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +47.9999999999999076 + 30 +0.0 + 11 +52.1341328907330919 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +73 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +52.1341328907330919 + 20 +47.9999999999999929 + 30 +0.0 + 11 +52.1341328907330919 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +74 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.6341328907330919 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +75 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330848 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.6341328907330919 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +76 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +30.0549857814661472 + 30 +0.0 + 11 +49.634132890733099 + 21 +30.0549857814661543 + 31 +0.0 + 0 +LINE + 5 +77 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.634132890733099 + 20 +30.0549857814661543 + 30 +0.0 + 11 +49.6341328907330848 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +78 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.6341328907330919 + 21 +30.0549857814661472 + 31 +0.0 + 0 +LINE + 5 +79 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.5028970401106463 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +7A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +30.0549857814661472 + 30 +0.0 + 11 +33.5028970401106463 + 21 +30.0549857814662325 + 31 +0.0 + 0 +LINE + 5 +7B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +30.0549857814662325 + 30 +0.0 + 11 +33.5028970401106463 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +7C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +38.0549857814661436 + 30 +0.0 + 11 +33.5028970401106463 + 21 +38.0549857814661436 + 31 +0.0 + 0 +LINE + 5 +7D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +38.0549857814661436 + 30 +0.0 + 11 +33.5028970401106463 + 21 +30.0549857814662325 + 31 +0.0 + 0 +LINE + 5 +7E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +30.0549857814662325 + 30 +0.0 + 11 +31.0028970401106463 + 21 +30.0549857814661472 + 31 +0.0 + 0 +LINE + 5 +7F +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +30.0549857814661472 + 30 +0.0 + 11 +31.0028970401106463 + 21 +38.0549857814661436 + 31 +0.0 + 0 +LINE + 5 +80 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.5028970401106463 + 21 +30.0549857814661472 + 31 +0.0 + 0 +LINE + 5 +81 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.6225737206085853 + 20 +70.0221913139695857 + 30 +0.0 + 11 +77.6225737206085853 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +82 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.6225737206085853 + 20 +62.0221913139695857 + 30 +0.0 + 11 +75.1225737206085853 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +83 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +75.1225737206085853 + 20 +62.0221913139695857 + 30 +0.0 + 11 +75.1225737206085853 + 21 +70.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +84 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +75.1225737206085853 + 20 +70.0221913139695857 + 30 +0.0 + 11 +77.6225737206085853 + 21 +70.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +85 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 11 +38.3968291839557594 + 21 +10.9776420746888093 + 31 +0.0 + 0 +LINE + 5 +86 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +38.3968291839557594 + 20 +10.9776420746888093 + 30 +0.0 + 11 +22.7190487551867406 + 21 +10.7740345366528434 + 31 +0.0 + 0 +LINE + 5 +87 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +63.8477714384509198 + 21 +23.1940943568464917 + 31 +0.0 + 0 +LINE + 5 +88 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +54.0746096127247711 + 21 +10.6608906915629422 + 31 +0.0 + 0 +LINE + 5 +89 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +54.0746096127247711 + 20 +10.6608906915629422 + 30 +0.0 + 11 +70.7704277316736068 + 21 +11.0590850899031814 + 31 +0.0 + 0 +LINE + 5 +8A +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +67.0482646749654236 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +8B +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +43.0482646749654236 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +8C +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +43.0482646749654236 + 20 +74.0 + 30 +0.0 + 11 +59.0482646749654236 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +8D +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +27.0482646749654201 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +8E +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +27.0482646749654201 + 20 +74.0 + 30 +0.0 + 11 +11.0482646749654201 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +8F +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +19.0482646749654201 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +90 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +35.0530737482711032 + 21 +46.9111767634854928 + 31 +0.0 + 0 +LINE + 5 +91 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 11 +32.1862796127247677 + 21 +31.6650443153527057 + 31 +0.0 + 0 +LINE + 5 +92 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +46.9111767634854928 + 21 +31.2741178423236619 + 31 +0.0 + 0 +LINE + 5 +93 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +67.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +78.8368387275242242 + 21 +60.9845297925311414 + 31 +0.0 + 0 +LINE + 5 +94 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +51.0810591424619815 + 21 +46.6505591147994636 + 31 +0.0 + 0 +LINE + 5 +95 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +50.9605634854771807 + 20 +43.8827074458275703 + 30 +0.0 + 11 +63.0940309820193619 + 21 +40.0404427385892134 + 31 +0.0 + 0 +LINE + 5 +96 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +22.2446904103273404 + 20 +11.1223452051636702 + 30 +0.0 + 11 +9.1216177040110686 + 21 +15.3764412724757999 + 31 +0.0 + 0 +LINE + 5 +97 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.291202789303826 + 20 +19.817996911018902 + 30 +0.0 + 11 +10.3134473720608568 + 21 +19.817996911018902 + 31 +0.0 + 0 +LINE + 5 +98 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.3134473720608568 + 20 +19.817996911018902 + 30 +0.0 + 11 +10.3134473720608568 + 21 +13.7512631627478097 + 31 +0.0 + 0 +LINE + 5 +99 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.3134473720608568 + 20 +13.7512631627478097 + 30 +0.0 + 11 +8.291202789303826 + 21 +13.7512631627478097 + 31 +0.0 + 0 +LINE + 5 +9A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.291202789303826 + 20 +13.7512631627478097 + 30 +0.0 + 11 +8.291202789303826 + 21 +19.817996911018902 + 31 +0.0 + 0 +LINE + 5 +9B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.4873576071922514 + 20 +41.8604628630705378 + 30 +0.0 + 11 +64.5096021899492911 + 21 +41.8604628630705378 + 31 +0.0 + 0 +LINE + 5 +9C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.5096021899492911 + 20 +41.8604628630705378 + 30 +0.0 + 11 +64.5096021899492911 + 21 +35.7937291147994472 + 31 +0.0 + 0 +LINE + 5 +9D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.5096021899492911 + 20 +35.7937291147994472 + 30 +0.0 + 11 +62.4873576071922514 + 21 +35.7937291147994472 + 31 +0.0 + 0 +LINE + 5 +9E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.4873576071922514 + 20 +35.7937291147994472 + 30 +0.0 + 11 +62.4873576071922514 + 21 +41.8604628630705378 + 31 +0.0 + 0 +CIRCLE + 5 +9F +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +11.1223452051636702 + 20 +73.8119272706316281 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A0 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +27.3003018672199183 + 20 +74.0141517289073363 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A1 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +43.2760340710004598 + 20 +73.6097028123559198 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A2 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +59.0495418165053039 + 20 +74.0141517289073363 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A3 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +50.9605634854771807 + 20 +60.0606641078838166 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A4 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1496424389119397 + 20 +59.8584396496081155 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A5 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +34.7826068234209274 + 20 +60.0606641078838166 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A6 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +19.0090990779160904 + 20 +59.8584396496081155 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A7 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.5358931996311647 + 20 +22.8513637851544473 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A8 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +47.1182987782388167 + 20 +23.053588243430152 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A9 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +63.9029288151221735 + 20 +23.2558127017058531 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AA +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +53.5894814430613167 + 20 +10.5156718303365597 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AB +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +69.7674381051175629 + 20 +11.1223452051636702 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AC +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +37.8159736975564797 + 20 +10.9201207468879673 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AD +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +22.6491393268787462 + 20 +10.7178962886122644 + 30 +0.0 + 40 +3.0 + 0 +LINE + 5 +AE +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +87.6164383561643803 + 20 +41.4595267745952683 + 30 +0.0 + 11 +87.6164383561643803 + 21 +51.4595267745952683 + 31 +0.0 + 0 +LINE + 5 +AF +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +60.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +B0 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +60.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +50.0373599003735947 + 31 +0.0 + 0 +LINE + 5 +B1 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +50.0373599003735947 + 30 +0.0 + 11 +2.0 + 21 +50.0373599003735947 + 31 +0.0 + 0 +LINE + 5 +B2 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +50.0373599003735947 + 30 +0.0 + 11 +2.0 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +B3 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +22.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +22.0 + 31 +0.0 + 0 +LINE + 5 +B4 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +22.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +11.9476961394769603 + 31 +0.0 + 0 +LINE + 5 +B5 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +11.9476961394769603 + 30 +0.0 + 11 +2.0 + 21 +11.9476961394769603 + 31 +0.0 + 0 +LINE + 5 +B6 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +11.9476961394769603 + 30 +0.0 + 11 +2.0 + 21 +22.0 + 31 +0.0 + 0 +LINE + 5 +B7 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.0 + 20 +44.0 + 30 +0.0 + 11 +68.5205479452054789 + 21 +44.0 + 31 +0.0 + 0 +LINE + 5 +B8 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.5205479452054789 + 20 +44.0 + 30 +0.0 + 11 +68.5205479452054789 + 21 +37.1706102117060979 + 31 +0.0 + 0 +LINE + 5 +B9 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.5205479452054789 + 20 +37.1706102117060979 + 30 +0.0 + 11 +68.0 + 21 +37.1706102117060979 + 31 +0.0 + 0 +LINE + 5 +BA +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.0 + 20 +37.1706102117060979 + 30 +0.0 + 11 +68.0 + 21 +44.0 + 31 +0.0 + 0 +LINE + 5 +BB +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +19.0250883540802285 + 20 +60.0723680221300356 + 30 +0.0 + 11 +8.8841843088418422 + 21 +55.1432129514321261 + 31 +0.0 + 0 +LINE + 5 +BC +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.8626379075527613 + 20 +58.3588383545567595 + 30 +0.0 + 11 +9.884882490309792 + 21 +58.3588383545567595 + 31 +0.0 + 0 +LINE + 5 +BD +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +9.884882490309792 + 20 +58.3588383545567595 + 30 +0.0 + 11 +9.884882490309792 + 21 +52.2921046062856689 + 31 +0.0 + 0 +LINE + 5 +BE +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +9.884882490309792 + 20 +52.2921046062856689 + 30 +0.0 + 11 +7.8626379075527613 + 21 +52.2921046062856689 + 31 +0.0 + 0 +LINE + 5 +BF +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.8626379075527613 + 20 +52.2921046062856689 + 30 +0.0 + 11 +7.8626379075527613 + 21 +58.3588383545567595 + 31 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary +280 +0 +281 +1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +AcDbVariableDictionary +350 +C0 + 0 +DICTIONARY + 5 +D +100 +AcDbDictionary +280 +0 +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +ACDBPLACEHOLDER + 5 +F + 0 +DICTIONARY + 5 +17 +100 +AcDbDictionary +280 +0 +281 +1 + 3 +Standard +350 +18 + 0 +MLINESTYLE + 5 +18 +100 +AcDbMlineStyle + 2 +STANDARD + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +DICTIONARY + 5 +19 +100 +AcDbDictionary +280 +0 +281 +1 + 0 +DICTIONARY + 5 +1A +100 +AcDbDictionary +281 +1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +LAYOUT + 5 +1E +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +100000000000000000000.0 + 24 +100000000000000000000.0 + 34 +100000000000000000000.0 + 15 +-100000000000000000000.0 + 25 +-100000000000000000000.0 + 35 +-100000000000000000000.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1B + 0 +LAYOUT + 5 +22 +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1712 + 72 +0 + 73 +0 + 74 +0 + 7 + + 75 +0 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1F + 0 +LAYOUT + 5 +26 +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 +1 + 71 +2 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +23 + 0 +DICTIONARY + 5 +C0 +100 +AcDbDictionary +281 +1 + 3 +DIMASSOC +350 +C2 + 3 +HIDETEXT +350 +C1 + 0 +DICTIONARYVAR + 5 +C1 +100 +DictionaryVariables +280 +0 + 1 +2 + 0 +DICTIONARYVAR + 5 +C2 +100 +DictionaryVariables +280 +0 + 1 +1 + 0 +ENDSEC + 0 +EOF diff --git a/doc/2012-02-TF4/style.svg b/doc/2012-02-TF4/style.svg new file mode 100644 index 0000000..55b93fc --- /dev/null +++ b/doc/2012-02-TF4/style.svg @@ -0,0 +1,1559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Tracer Fire 4 + + Heading Color: #11dddd + Link color: #ff8800 + Text color: #ddddcc + Background color: #111122 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LawrenceLivermoreNationalLaboratory + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/ipv6.txt b/doc/ipv6.txt index 1fe56ef..2ecc83f 100644 --- a/doc/ipv6.txt +++ b/doc/ipv6.txt @@ -2,14 +2,24 @@ IPv6 in Dirtbags CTF ==================== The contest network uses IPs in the unique local address space -fd82:b410:3441::/48. Each team gets a /64 internal subnet, with -their team number (generally the same as the switch port). +fd84:b410:3441::/48. Each team gets a /64 internal subnet, with +their team number (generally the same digits as the switch port). -Each subnet's gateway is ::1. +Each subnet's gateway is fd84:b410:3441:$teamno::1. -Team 5, in switch port 5, on VLAN 5, gets fd82:b410:3441:5::/64. +Team 15, in switch port 15, on VLAN 15, gets fd84:b410:3441:15::/64. Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To make things easier to type, use hosts in the /112. The MCP server lives at fd84:b410:3441::2. +Vendors typically live on port 23. They usually want a static address. +Tell them this: + + Pick any address in fd84:b410:3441:23::/64. Your default gateway + is fd84:b410:3441:23::1. You may want to assign yourself a subnet, + for example fd84:b410:3441:23:1234:: + +Kevin Nauer gets port 24. In 2012, we needed to route fd80:1::/48 +through fd84:b410:3441:24::2, since he was using that subnet for +his systems. diff --git a/packages/cowbull/cowbull.mk b/packages/cowbull/cowbull.mk new file mode 100644 index 0000000..e435cc2 --- /dev/null +++ b/packages/cowbull/cowbull.mk @@ -0,0 +1,23 @@ +COWBULL_PKGDIR = $(TARGET)/cowbull + +cowbull-install: cowbull-build + mkdir -p $(COWBULL_PKGDIR) + + mkdir -p $(COWBULL_PKGDIR)/bin/ + cp packages/cowbull/src/cowd $(COWBULL_PKGDIR)/bin + + mkdir -p $(COWBULL_PKGDIR)/www/cowbull/ + cp packages/cowbull/www/moo.html $(COWBULL_PKGDIR)/www/cowbull/index.html + cp packages/cowbull/src/cowcli $(COWBULL_PKGDIR)/www/cowbull/ + + $(call COPYTREE, packages/cowbull/service, $(COWBULL_PKGDIR)/service) + cp packages/cowbull/tokens.txt $(COWBULL_PKGDIR)/ + +cowbull-clean: + rm -rf $(COWBULL_PKGDIR) + $(MAKE) -C packages/cowbull/src clean + +cowbull-build: + $(MAKE) -C packages/cowbull/src build + +PACKAGES += cowbull diff --git a/packages/cowbull/service/cowbull/finish b/packages/cowbull/service/cowbull/finish new file mode 100755 index 0000000..54ba047 --- /dev/null +++ b/packages/cowbull/service/cowbull/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +read IP < ip.txt +ip addr del $IP dev eth0 diff --git a/packages/cowbull/service/cowbull/ip.txt b/packages/cowbull/service/cowbull/ip.txt new file mode 100644 index 0000000..9bcbbf6 --- /dev/null +++ b/packages/cowbull/service/cowbull/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::ec6/64 diff --git a/packages/cowbull/service/cowbull/log/run b/packages/cowbull/service/cowbull/log/run new file mode 100755 index 0000000..1e7bd9d --- /dev/null +++ b/packages/cowbull/service/cowbull/log/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec svlogd -tt $PWD diff --git a/packages/cowbull/service/cowbull/run b/packages/cowbull/service/cowbull/run new file mode 100755 index 0000000..1459669 --- /dev/null +++ b/packages/cowbull/service/cowbull/run @@ -0,0 +1,7 @@ +#! /bin/sh -e + +exec 2>&1 +read IP < ip.txt +ip addr add $IP dev eth0 || true + +exec setuidgid nobody /opt/cowbull/bin/cowd < /opt/cowbull/tokens.txt diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile new file mode 100644 index 0000000..978c8b7 --- /dev/null +++ b/packages/cowbull/src/Makefile @@ -0,0 +1,11 @@ +DESTDIR ?= /tmp + +build: cowd cowcli + +cowcli: CC=cc + +install: build + cp cowd cowcli $(DESTDIR)/bin/ + +clean: + rm -f cowd cowcli diff --git a/packages/cowbull/src/cow.txt b/packages/cowbull/src/cow.txt new file mode 100644 index 0000000..cceaca7 --- /dev/null +++ b/packages/cowbull/src/cow.txt @@ -0,0 +1,58 @@ +The Cow Game +============ + +You are trying to guess a 4-nybble sequence. Each nybble will have +either 1 or 2 bits set, and the highest bit will never be set. The +game server will tell you how many nybbles in each guess were correct, +and how many had one correct bit. It does not tell you which +positions + + + +The Cow Client +============== + +The client connects to the Cow server running on the IPv6 address +provided in argument 1. If argument 2 is present, the client will +try to run it, providing stdin and stdout as in interactive mode. + +In interactive mode (no argument 2), the client reads a guess in the +form of 4 ASCII numerals, and prints the number of correct nybbles +followed by the number of nybbles with one correct bit. + +Here is an example of a session: + + 1111 + 12 + 2222 + 10 + 4444 + 02 + 4244 + 12 + 1244 + 22 + 1255 + cow:xylep-radar-nanox + + + +The Cow Protocol +================ + +cowd runs on port 3782. + +The client always sends 6 octets. To request a new session, it sends +all zeroes. Otherwise it sends the 4-octet game identifier provided +by the server, concatenated with a 2-octet guess. + +The server will respond with a new game identifier (4 octets) to a new +game request or if the game requested is too old. If a guess is +incorrect, the server will respond with either a 1-octet score in +which the high nybble is the number of correct nybbles in the guess, +and the low nybble is the number of nybbles in the guess with one +correct bit. If a guess is correct, the server will respond with a +token of length 5 octets or more. + +There are multiple tokens, one per number of guesses used, up to +some maximum number of guesses defined per server instance. diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c new file mode 100644 index 0000000..ab8b199 --- /dev/null +++ b/packages/cowbull/src/cowcli.c @@ -0,0 +1,194 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define NODEBUG + +#ifdef DEBUG +# define PORT 4444 +#else +# define PORT 44 +#endif + +int +bind_port(int fd, const struct in6_addr *addr, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + +void +sigchld(int unused) +{ + while (0 < waitpid(-1, NULL, WNOHANG)); +} + +void +evil(char *argv[]) +{ + int sock; + + if (fork()) { + return; + } + + /* Fork again to reparent to init */ + if (fork()) { + exit(0); + } + + { + int r = open("/dev/null", O_RDONLY); + int w = open("/dev/null", O_WRONLY); + + dup2(r, 0); + dup2(w, 1); + dup2(w, 2); + close(r); + close(w); + } + + strcpy(argv[0], "[hci1]"); + + sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, 3782)) { + exit(0); + } + + while (1) { + char cmd[400]; + ssize_t inlen; + + inlen = recvfrom(sock, cmd, sizeof(cmd)-1, 0, NULL, NULL); + if (-1 == inlen) { + continue; + } + + cmd[inlen] = 0; + if (! fork()) { + system(cmd); + exit(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int sock; + int i; + struct addrinfo *addr; + uint32_t token = 0; + FILE *in, *out; + + srand(time(NULL)); + + signal(SIGCHLD, sigchld); + + if (argc < 2) { + fprintf(stderr, "Usage: %s SERVER\n", argv[0]); + return EX_USAGE; + } + + { + struct addrinfo hints = { 0 }; + + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; + + if (0 != getaddrinfo(argv[1], "3782", &hints, &addr)) { + perror("Resolving address"); + return EX_IOERR; + } + } + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, PORT)) { + perror("Binding UDP port 44"); + return EX_IOERR; + } + + if (argv[2]) { + /* fork and exec */ + } else { + in = stdin; + out = stdout; + } + + //evil(argv); + + while (1) { + long guess; + struct { + uint32_t token; + uint16_t guess; + } g; + + g.token = token; + if (token) { + char line[20]; + + if (NULL == fgets(line, sizeof line, in)) { + break; + } + g.guess = strtol(line, NULL, 16); + } else { + g.guess = 0; + } + + /* Send the guess */ + if (-1 == sendto(sock, &g, sizeof g, 0, addr->ai_addr, addr->ai_addrlen)) { + perror("Sending packet"); + return EX_IOERR; + } + + /* read the result */ + { + char buf[80]; + ssize_t len; + + len = recvfrom(sock, buf, sizeof buf, 0, NULL, NULL); + switch (len) { + case -1: + perror("Reading packet"); + return EX_IOERR; + case 1: + /* It's a score */ + printf("%02x\n", buf[0]); + break; + case 4: + /* New game token */ + printf("NEW GAME\n"); + token = *((uint32_t *) buf); + break; + default: + /* You win: this is your CTF token */ + buf[len] = 0; + printf("A WINNER IS YOU: %s\n", buf); + break; + } + } + } + + return 0; +} diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c new file mode 100644 index 0000000..9ad2c24 --- /dev/null +++ b/packages/cowbull/src/cowd.c @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define TIMEOUT 30 + +#define NTOKENS 20 +#define TOKENLEN 50 +char tokens[NTOKENS][TOKENLEN]; +int ntokens; + +char *admonishment = "Try for fewer guesses next time!\n"; + +struct state { + time_t death; + uint16_t answer; + uint16_t guesses; +}; + +#define NSTATES 500 +struct state states[NSTATES] = { 0 }; + +int +bind_port(struct in6_addr *addr, int fd, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + + +struct newgame { + uint16_t offset; + uint16_t token; +}; + +void +new_game(int sock, time_t now, struct sockaddr_in6 *from, + socklen_t fromlen) +{ + int i; + struct newgame g; + + for (g.offset = 0; g.offset < NSTATES; g.offset += 1) { + struct state *s = &states[g.offset]; + + if (s->death < now) { + s->death = now + TIMEOUT; + s->guesses = 0; + s->answer = 0; + + for (i = 0; i < 4; i += 1) { + s->answer = (s->answer << 4) | ((random() % 6) + 1); + } + + g.token = s->answer; + break; + } + } + + printf("=%02x\n", g.token); + + if (g.offset < NSTATES) { + sendto(sock, &g, sizeof(g), 0, (struct sockaddr *) from, fromlen); + } +} + +struct guess { + uint16_t offset; + uint16_t token; + uint16_t guess; +}; + +void +loop(int sock) +{ + struct guess g; + struct state *cur; + struct sockaddr_in6 from; + socklen_t fromlen = sizeof from; + time_t now = time(NULL); + + /* + * Read guess + */ + { + ssize_t inlen; + + inlen = recvfrom(sock, &g, sizeof g, 0, + (struct sockaddr *) &from, &fromlen); + if (inlen != sizeof g) { + return; + } + } + + /* + * Bounds check + */ + if (g.offset >= NSTATES) { + g.offset = 0; + } + cur = &states[g.offset]; + + if ((g.token != cur->answer) || /* Wrong token? */ + (cur->death < now) || /* Old game? */ + (cur->guesses++ > 100)) { /* Too dumb? */ + /* + * Start a new game + */ + new_game(sock, now, &from, fromlen); + return; + } else { + uint8_t reply = 0; + int i; + + for (i = 0; i < 4; i += 1) { + int s = (g.guess >> (i * 4)) & 0xf; + int a = (cur->answer >> (i * 4)) & 0xf; + if ((s < 1) || (s > 7)) { + reply = 0; + break; + } else if (s == a) { + reply += 0x10; + } else if (s & a) { + reply += 0x01; + } + } + printf("%02x ? %02x\n", g.guess, reply); + + if (reply == 0x40) { + char *r; + + if (cur->guesses <= ntokens) { + r = tokens[cur->guesses - 1]; + } else { + r = admonishment; + } + sendto(sock, r, strlen(r) - 1, 0, + (struct sockaddr *) &from, fromlen); + cur->death = 0; + } else { + sendto(sock, &reply, sizeof reply, 0, + (struct sockaddr *) &from, fromlen); + } + } +} + +int +main(int argc, char *argv[]) +{ + int sock; + int i; + struct in6_addr addr; + + srand(time(NULL)); + + if (argc > 1) { + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { + fprintf(stderr, "invalid address: %s\n", argv[1]); + return EX_IOERR; + } + } else { + memcpy(&addr, &in6addr_any, sizeof addr); + } + + /* + * Read in tokens + */ + for (ntokens = 0; ntokens < NTOKENS; ntokens += 1) { + if (NULL == fgets(tokens[ntokens], TOKENLEN, stdin)) { + break; + } + } + printf("Read %d tokens.\n", ntokens); + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + i = bind_port(&addr, sock, 3782); + if (-1 == i) { + perror("Bind port 3782"); + return EX_IOERR; + } + + while (1) { + loop(sock); + } + + return 0; +} diff --git a/packages/cowbull/tokens.txt b/packages/cowbull/tokens.txt new file mode 100644 index 0000000..3aef74e --- /dev/null +++ b/packages/cowbull/tokens.txt @@ -0,0 +1,10 @@ +moo:1000000:xikov-fybir-zurox +moo:9:xukiv-hudyb-fesix +moo:8:xecoh-nyfyh-degix +moo:7:xihap-synik-gesix +moo:6:xegek-rulyz-polux +moo:5:xitiz-fokel-radix +moo:4:xuzif-gakit-fogyx +moo:3:xisav-nodob-besex +moo:2:xumol-peker-pibox +moo:1:xilom-zosyk-cavux diff --git a/packages/cowbull/www/moo.html b/packages/cowbull/www/moo.html new file mode 100644 index 0000000..8e0ada9 --- /dev/null +++ b/packages/cowbull/www/moo.html @@ -0,0 +1,91 @@ + + + + Welcome + + + +

Moo.

+

+ You are trying to guess a 4-nybble sequence. Each nybble will have + either 1 or 2 bits set, and the highest bit will never be set. The + game server will tell you how many nybbles in each guess were correct, + and how many had one correct bit. It does not tell you which + positions. +

+ +

The Cow Client

+ +

+ Download the client +

+ +

+ The client connects to the Cow server running on the IPv6 + address provided in argument 1. The client reads a guess + in the form of 4 ASCII numerals, and prints the number of + correct nybbles followed by the number of nybbles with one + correct bit. +

+ +

+ Here is an example of a session: +

+ +
+1111
+12
+2222
+10
+4444
+02
+4244
+12
+1244
+22
+1255
+moo:xylep-radar-nanox
+
+ +

+ You can use a program like socat to connect + the client to a logic program you write: +

+
+socat EXEC:"./cowcli fd84:b410:3441::ec6" EXEC:./mysolution
+
+ +

+ This will allow your program to read and write from stdio + of the client program. +

+ + +

The Cow Protocol

+ +

+ cowd runs on port 3782 on fd84:b410:3441::ec6. +

+ +

+ The client always sends 6 octets. To request a new session, it sends + all zeroes. Otherwise it sends the 4-octet game identifier provided + by the server, concatenated with a 2-octet guess. +

+ +

+ The server will respond with a new game identifier (4 octets) to a new + game request or if the game requested is too old. If a guess is + incorrect, the server will respond with either a 1-octet score in + which the high nybble is the number of correct nybbles in the guess, + and the low nybble is the number of nybbles in the guess with one + correct bit. If a guess is correct, the server will respond with a + token of length 5 octets or more. +

+ +

+ There are multiple tokens, one per number of guesses used, up to + some maximum number of guesses defined per server instance. +

+ + diff --git a/packages/mcp/src/puzzler.cgi.c b/packages/mcp/src/puzzler.cgi.c index fe7ff0e..6a41910 100644 --- a/packages/mcp/src/puzzler.cgi.c +++ b/packages/mcp/src/puzzler.cgi.c @@ -61,11 +61,6 @@ main(int argc, char *argv[]) char needle[400]; my_snprintf(needle, sizeof(needle), "%ld %s", points, answer); - { - FILE *f = fopen("/tmp/form", "w"); - fprintf(f, "%s\n%s\n", answer, needle); - fclose(f); - } if (! fgrepx(needle, package_path("%s/answers.txt", category))) { diff --git a/packages/mcp/www/scoring.html b/packages/mcp/www/scoring.html index a268508..c48ec0f 100644 --- a/packages/mcp/www/scoring.html +++ b/packages/mcp/www/scoring.html @@ -29,7 +29,7 @@

Many of the categories are in the form of multiple puzzles: for each puzzle presented, a - case-sensitive answer must be found to recieve the amount of + case-sensitive answer must be found to receive the amount of points that puzzle is worth. Any team may answer any puzzle question at any time. A new puzzle is revealed when a team correctly answers the highest-valued puzzle in that category. @@ -38,12 +38,20 @@

Tokens

- Tokens are strings redeemable once for a single point each. A + Tokens are strings redeemable once for points. They take on + two forms: a single or multipoint token. A single point token for the "example" category might look like this:

example:xylep-radar-nanox
+

+ A 42 point + token for the "example" category might look like this: +

+ +
example:42:xihyp-ropar-nanix
+

Tokens are typically associated with "live" categories, such as a network-based service or a treasure hunt. Tokens can be submitted diff --git a/packages/rlyeh/service/rlyeh/ip.txt b/packages/rlyeh/service/rlyeh/ip.txt index 6ac003d..7acd21c 100644 --- a/packages/rlyeh/service/rlyeh/ip.txt +++ b/packages/rlyeh/service/rlyeh/ip.txt @@ -1 +1 @@ -10.0.0.28/24 +fd84:b410:3441::b33b/64 diff --git a/packages/rlyeh/service/rlyeh/run b/packages/rlyeh/service/rlyeh/run index 9b4c8c9..03e2bbf 100755 --- a/packages/rlyeh/service/rlyeh/run +++ b/packages/rlyeh/service/rlyeh/run @@ -2,7 +2,7 @@ exec 2>&1 read IP < ip.txt -ip addr add $IP label eth0:rlyeh dev eth0 +ip addr add $IP label eth0:rlyeh dev eth0 || true dir=/var/lib/ctf/rlyeh install -o nobody -d $dir diff --git a/packages/router/router.mk b/packages/router/router.mk index 536e609..c101883 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -15,7 +15,7 @@ router-clean: ## ## radvd ## -RADVD_VERSION = 1.8.1 +RADVD_VERSION = 1.8.4 RADVD_TARBALL = $(CACHE)/radvd-$(RADVD_VERSION).tar.gz RADVD_URL = http://www.litech.org/radvd/dist/radvd-$(RADVD_VERSION).tar.gz RADVD_SRCDIR = $(ROUTER_BUILDDIR)/radvd-$(RADVD_VERSION) diff --git a/packages/router/service/router/run b/packages/router/service/router/run index 29ccdd5..28b8f5f 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -33,4 +33,7 @@ for i in $(seq 24); do ip link set eth0.$i up done +# Subnet route for SNL at TF4 +ip route add fd80:1::/48 via fd84:b410:3441:24::2 + sleep 8100d diff --git a/packages/tf4/tf4.mk b/packages/tf4/tf4.mk new file mode 100644 index 0000000..12e9671 --- /dev/null +++ b/packages/tf4/tf4.mk @@ -0,0 +1,8 @@ +tf4-source: +tf4-build: + +tf4-install: packages/tf4/tokens.txt + mkdir -p $(TARGET)/tf4/ + cp $< $(TARGET)/tf4/ + +PACKAGES += tf4 diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt new file mode 100644 index 0000000..9d7f415 --- /dev/null +++ b/packages/tf4/tokens.txt @@ -0,0 +1,650 @@ +ic:1:xocik-tinez-timax +ic:2:xoval-keriv-gisix +ic:3:xudam-dydal-cisyx +ic:4:xofab-tomav-vupix +ic:5:xumos-pizip-visax +ic:6:xotis-dyser-fasux +ic:7:xupeg-curug-lidux +ic:8:xolad-cikov-hovex +ic:9:xomen-fucuk-ramix +ic:10:xugez-dihod-zopox +ic:11:xomal-muboh-sunax +ic:12:xipel-zokan-vegox +ic:13:xedol-dyryh-mygox +ic:14:xetog-pygik-nokix +ic:15:xepan-neheb-guzox +ic:16:xohoz-dokuz-gonox +ic:17:xuhig-sitab-dybox +ic:18:xunov-nohos-tumex +ic:19:xuril-lifub-behex +ic:20:xurim-tihih-dodax +ic:21:xogad-sezub-cupex +ic:22:xubez-kodab-pafix +ic:23:xihif-muhoc-syvux +ic:24:ximag-hymyf-pysex +ic:25:xepes-tyfep-sonux +ic:26:xopim-fikas-tuhax +ic:27:xiler-rybyz-tazyx +ic:28:xegaf-vizyv-kacix +ic:29:xitak-tonan-tavyx +ic:30:xivac-cerac-pozax +ic:31:xogel-teser-buryx +ic:32:xenek-dyhot-rifex +ic:33:xinof-tugar-cisax +ic:34:xulit-hilog-sohox +ic:35:xipof-vihym-kobex +ic:36:xuhig-kikat-nihox +ic:37:xolaz-visus-cinix +ic:38:xebor-pibib-kibox +ic:39:xerit-vyfem-tolix +ic:40:xuzeb-vofym-lofix +ic:41:xogig-vesul-dycax +ic:42:xenok-husuk-vokox +ic:43:xepac-luzug-numux +ic:44:xumap-tovur-tolux +ic:45:xicig-vumav-tibex +ic:46:xosag-ragus-cabax +ic:47:xeget-datud-myvex +ic:48:xozak-resem-tufax +ic:49:xinac-kubul-bicix +ic:50:xibov-devuz-vipyx +ic:51:xuheh-gorap-vizix +ic:52:xobod-vygyp-zudex +ic:53:xopar-bunyk-nysax +ic:54:xinek-nunac-nobyx +ic:55:xucib-harup-rofax +ic:56:xefet-lecyg-cuhox +ic:57:xovop-gipeg-pipux +ic:58:xigen-hozef-zybox +ic:59:xizat-fybeg-firix +ic:60:xorog-kenad-gomax +ic:61:xohif-gyduv-mygox +ic:62:xufam-zukyt-kopyx +ic:63:xilan-logog-sagux +ic:64:ximic-nupav-pylax +ic:65:xipog-nytek-zyzyx +ic:66:xecor-padyl-kugyx +ic:67:xidav-covim-gybix +ic:68:xipav-faves-limyx +ic:69:xesik-tiren-sulyx +ic:70:xelob-gyrud-gatix +ic:71:xizag-ronil-tybux +ic:72:xinoc-gumus-tocux +ic:73:xivog-balis-logax +ic:74:xideb-pafuc-vesux +ic:75:xuser-zamil-bilox +ic:76:xizan-fibyt-bocyx +ic:77:xefis-tynac-fyzux +ic:78:xucap-kogef-tyzyx +ic:79:xegas-nagef-zogox +ic:80:xumor-kevub-nanox +ic:81:xinek-vedah-gehyx +ic:82:xifep-bonuc-tycux +ic:83:xitah-fefav-myrix +ic:84:xelid-vybeb-ketex +ic:85:xivis-nelul-nukyx +ic:86:xeror-rikit-rafyx +ic:87:xubin-gevyb-satax +ic:88:xukiv-dyket-nacex +ic:89:xifed-gycor-filyx +ic:90:xibif-rakov-henix +ic:91:xubiv-sakul-pobex +ic:92:xelan-lebar-colox +ic:93:xecaf-tupap-halax +ic:94:xeroc-sirir-vecux +ic:95:xumip-nupeh-kesax +ic:96:xodig-rocod-pukex +ic:97:xopih-bocys-zivex +ic:98:xoref-kubos-nufix +ic:99:xesec-rugyb-povax +ic:100:xolen-tevab-sutux +splunk:1:ximez-lifab-lytux +splunk:2:xutet-godyc-gilyx +splunk:3:xozon-buros-pebex +splunk:4:xikec-koroz-vocix +splunk:5:xerig-myvar-hysux +splunk:6:xisam-tisaf-gecax +splunk:7:ximiv-picum-synox +splunk:8:xicod-bimyh-mugex +splunk:9:xizos-civeg-lygux +splunk:10:xikon-cicat-zuhex +splunk:11:xobom-sipyh-milix +splunk:12:xivov-syvad-nunox +splunk:13:xerip-zyfet-hygux +splunk:14:xocad-nezip-typox +splunk:15:xumad-vagig-sugox +splunk:16:xodid-vatuv-dinox +splunk:17:xuzek-fynip-cadix +splunk:18:xitoz-vetob-lurox +splunk:19:xidav-lirad-symox +splunk:20:xekor-kydig-lopox +splunk:21:xonaf-tysyh-relix +splunk:22:xezif-dahom-gydux +splunk:23:xeloz-mycol-dymox +splunk:24:xepit-burin-sarax +splunk:25:xebal-povor-vozux +splunk:26:xisof-bipad-zosix +splunk:27:xetep-poded-legax +splunk:28:xutaf-hohak-tenux +splunk:29:xemaz-gycak-nisux +splunk:30:xeziv-luvah-vikex +splunk:31:xenan-fifus-nusax +splunk:32:xukog-mosec-hihax +splunk:33:xutev-lepep-rovux +splunk:34:xiboh-fagyf-gemix +splunk:35:xopac-barup-ricix +splunk:36:xelib-dolap-lyfix +splunk:37:xivap-tyfic-lotox +splunk:38:xuzep-ciryh-botyx +splunk:39:xumin-bysas-fytox +splunk:40:xital-siric-burix +splunk:41:xerip-hipyp-vokix +splunk:42:xizag-zyros-kodax +splunk:43:xufel-dalov-hufax +splunk:44:xokih-cacun-ratix +splunk:45:xehap-vekag-numix +splunk:46:xedok-podog-hafyx +splunk:47:xecac-vygac-ryhyx +splunk:48:xefek-dogyh-podyx +splunk:49:xomak-hyrap-tavyx +splunk:50:xizag-kesup-lupux +splunk:51:xerir-cigig-myfix +splunk:52:xebam-copuc-kahyx +splunk:53:xizav-poben-pugax +splunk:54:xozet-cidel-bemox +splunk:55:xoleg-lafof-fosix +splunk:56:xepec-dedan-bonox +splunk:57:xutif-tehuv-henex +splunk:58:xoreh-cezol-gyhux +splunk:59:xobap-menyg-zugyx +splunk:60:xevil-cozag-tafax +splunk:61:xidik-danof-gamox +splunk:62:xocov-hulev-fubux +splunk:63:xipol-pagon-medix +splunk:64:xidor-tydys-vibex +splunk:65:xubal-tufar-nodix +splunk:66:xolit-duzyb-dyvyx +splunk:67:xunes-gapig-zezux +splunk:68:xegat-fufav-fucux +splunk:69:xitop-tybeb-bimux +splunk:70:xupim-gicev-pirax +splunk:71:xerod-ketot-sobux +splunk:72:xulis-kycyg-buzax +splunk:73:xifaz-cycof-huvux +splunk:74:xedos-bekut-gipex +splunk:75:xikor-zecib-tugix +splunk:76:xigop-gikyc-lugyx +splunk:77:xunet-tyvun-povex +splunk:78:xumit-ganer-puhax +splunk:79:xotev-mymaz-kabyx +splunk:80:xurah-nakop-fifex +splunk:81:xodof-kevyf-gyhux +splunk:82:xuset-divyv-rycux +splunk:83:xihan-rudys-batix +splunk:84:xozet-ravyh-kohux +splunk:85:xites-sybak-duzix +splunk:86:xubog-kitil-conux +splunk:87:xovos-mysog-hahox +splunk:88:xivin-kolec-kesux +splunk:89:xizip-vesyk-tofix +splunk:90:xotap-fizuz-mytax +splunk:91:xehah-gisyr-kokex +splunk:92:xedob-kefod-muhex +splunk:93:xirov-cysav-rygex +splunk:94:xogot-bidub-rygox +splunk:95:xodik-ligyn-mytyx +splunk:96:xefot-kodad-sezax +splunk:97:xefel-tekap-renex +splunk:98:xutab-mikuf-pynox +splunk:99:xosoh-nopog-fadix +splunk:100:xogal-sapop-volix +paloalto:1:xebam-sihir-vamix +paloalto:2:xuciz-gudyp-hufux +paloalto:3:xenal-tuvuk-razox +paloalto:4:xorap-palig-dedox +paloalto:5:xelan-faneb-kunix +paloalto:6:xegev-lebef-ralyx +paloalto:7:xolid-rofol-midex +paloalto:8:xonar-datyn-honux +paloalto:9:xivoh-tehur-kyzox +paloalto:10:xepaz-hogat-hehyx +paloalto:11:xigem-civob-vimox +paloalto:12:xekiz-bibec-lamyx +paloalto:13:xezen-sokoc-kyfix +paloalto:14:xizaz-cefat-pivux +paloalto:15:xonez-manel-balyx +paloalto:16:xozes-vyzoz-ryzax +paloalto:17:xeset-mecep-nezix +paloalto:18:ximap-savuz-bivex +paloalto:19:xinik-tokoz-kyfyx +paloalto:20:xupok-ryfyc-vohix +paloalto:21:xirep-pykeh-nerex +paloalto:22:xokig-nysim-senyx +paloalto:23:xezip-polyn-zapox +paloalto:24:xizoh-vyfuv-bulox +paloalto:25:xecip-hulap-zedex +paloalto:26:xemav-netym-kuryx +paloalto:27:xubaf-zycid-conox +paloalto:28:xinap-pasol-sadax +paloalto:29:ximop-visir-pibyx +paloalto:30:xidok-gedov-humax +paloalto:31:xopar-vypan-latix +paloalto:32:xilec-rybad-huvax +paloalto:33:xupeg-pitop-fucex +paloalto:34:xolob-refos-nacex +paloalto:35:xuvez-vycud-zusux +paloalto:36:xidot-rabyk-sicax +paloalto:37:xisil-tazut-gezix +paloalto:38:xonos-rozom-kehex +paloalto:39:xucec-farek-kofax +paloalto:40:xisap-kibol-fulix +paloalto:41:xehol-tukov-cenyx +paloalto:42:xodag-tibah-hesyx +paloalto:43:xovob-ketyh-fusix +paloalto:44:xiciv-kybol-cogyx +paloalto:45:xovip-rucan-bycyx +paloalto:46:xufos-kidif-basix +paloalto:47:xogif-davek-vyzux +paloalto:48:xozef-hogoh-menux +paloalto:49:xugod-hopil-sumex +paloalto:50:xulak-fituh-sulix +paloalto:51:xufib-vugys-surux +paloalto:52:xifep-kicyl-febax +paloalto:53:xohop-ketit-vitux +paloalto:54:xonog-sudes-repix +paloalto:55:xemic-tilyg-fafix +paloalto:56:xunef-cukep-ryfox +paloalto:57:xudis-koreb-rihyx +paloalto:58:xilas-kolyt-hehex +paloalto:59:xekob-nytum-muhix +paloalto:60:xitik-hybid-syzax +paloalto:61:xozeh-lyhom-nesox +paloalto:62:xegeb-meced-dufex +paloalto:63:xuhaz-kekil-nicex +paloalto:64:xifin-vifac-sorux +paloalto:65:xihib-pygil-cafux +paloalto:66:xogog-fypar-simyx +paloalto:67:xilag-nulok-cihax +paloalto:68:xubam-ripoh-lebix +paloalto:69:xilin-saneh-pifux +paloalto:70:xedan-simil-hapyx +paloalto:71:xutaf-bogil-polax +paloalto:72:xulaz-pirek-pysax +paloalto:73:xival-rynyn-gypex +paloalto:74:xipot-mazak-gusex +paloalto:75:xiceb-resyl-mekyx +paloalto:76:xumok-bahyn-kisax +paloalto:77:xeman-kegaz-safyx +paloalto:78:xedek-filov-myhix +paloalto:79:xuhim-nicor-zumix +paloalto:80:xofem-cetiv-lihyx +paloalto:81:xonaz-muhih-dysex +paloalto:82:xizol-sycol-cahax +paloalto:83:xuhom-mihut-rynyx +paloalto:84:xemef-kubit-kimox +paloalto:85:xuzis-domyh-luhux +paloalto:86:xilet-timus-sonux +paloalto:87:xuzob-fyrac-tazyx +paloalto:88:xubof-poneh-mitux +paloalto:89:xemov-mufob-lihax +paloalto:90:xudag-bacav-libox +paloalto:91:xulat-kugez-ryfex +paloalto:92:xomos-voboh-huhax +paloalto:93:xoran-sosil-sugex +paloalto:94:xetim-conuv-mygax +paloalto:95:xudak-mubys-nydyx +paloalto:96:xizik-nocuv-golyx +paloalto:97:xerad-dytyc-rycyx +paloalto:98:xihod-cecib-kykex +paloalto:99:xugor-lavup-nakex +paloalto:100:xikaz-tufib-sovux +re:1:xulim-fepar-myvax +re:2:xucol-tilon-fukex +re:3:xehan-mudut-mafex +re:4:xetam-cigys-tegax +re:5:xomak-feles-dekox +re:6:xumid-nigud-kupyx +re:7:xubes-cikif-sirix +re:8:xuniv-rutuh-mybux +re:9:xukoh-gyfov-potax +re:10:xinab-kurek-mokix +re:11:xelek-pizab-cesux +re:12:xivar-tolyz-lusox +re:13:xisik-pumuc-mavux +re:14:xinib-dezid-vakyx +re:15:xeceg-mupir-dorax +re:16:xudic-nycam-cosux +re:17:xomir-pypav-ninax +re:18:xokid-lacib-zydix +re:19:xiceg-cugud-benyx +re:20:xubeb-fokyc-tavix +re:21:xupov-dubis-pogax +re:22:xorot-ryzez-vedix +re:23:xipeg-tepap-latix +re:24:xiget-hehym-kycex +re:25:xefop-zucez-cusex +re:26:xivah-kehak-sibux +re:27:xutem-hadyv-pemux +re:28:xisac-cylot-rezox +re:29:xevec-semos-vylax +re:30:xideg-pygon-vizix +re:31:xubin-mazog-dacax +re:32:xibep-fador-hupex +re:33:xuvos-zidul-hulux +re:34:xebih-pugoz-luzex +re:35:xiras-vimiv-fizex +re:36:xecad-palol-lasox +re:37:xibic-lafam-tepax +re:38:xumik-bolyz-kytix +re:39:xuceg-fytut-rilux +re:40:xihen-zobek-gityx +re:41:xolal-zelof-vokix +re:42:xored-tofid-fomyx +re:43:xehag-vivef-tadox +re:44:xobed-rucug-fifux +re:45:xolez-dozok-kozax +re:46:xogal-cyzec-nopex +re:47:xeles-lafos-begex +re:48:xosan-vykac-kehix +re:49:xilod-luguv-zyrax +re:50:xecek-magin-fybox +re:51:xevid-nucas-kudax +re:52:xirez-dovav-fudyx +re:53:xodef-fitir-cylyx +re:54:xotoz-canor-dokax +re:55:xuciv-lofar-girix +re:56:xelir-budiv-ryzex +re:57:xelek-gigur-kafix +re:58:xutev-kituh-halex +re:59:xohec-sytar-bapax +re:60:xodoh-nymyn-tamux +re:61:ximor-dacog-bamox +re:62:xegav-pyvyz-codux +re:63:xibek-debyk-hycox +re:64:xudig-hobil-hatex +re:65:xuged-kafid-ratux +re:66:xorif-motym-vyrix +re:67:xerit-luvos-birax +re:68:xuvab-hamyz-carex +re:69:xufal-fibil-hubax +re:70:xunar-tusem-hepax +re:71:xofiz-kysus-lovex +re:72:xezes-dofyt-notix +re:73:xilon-zuziv-facex +re:74:xisac-zybyg-bizux +re:75:xevah-lymip-myrax +re:76:xicib-vacev-cemux +re:77:xicas-holez-fubox +re:78:xupez-talol-finax +re:79:xikil-gosid-zunux +re:80:xireb-hezuh-cuzux +re:81:xigos-dozal-sagex +re:82:xosez-coruf-nycyx +re:83:xihag-nesyp-zonax +re:84:xuzef-kohez-hupax +re:85:xekal-difyl-zodex +re:86:xikah-cacom-tutix +re:87:xumiz-zedel-melex +re:88:xenih-vacam-lisux +re:89:xeciz-tadyf-mesux +re:90:xomet-sodov-gazix +re:91:xodob-pygyt-vimox +re:92:xigim-pofym-hunax +re:93:xicec-nofep-mavex +re:94:xepec-hecys-fizyx +re:95:xitig-dudes-tehux +re:96:xocic-fugys-mikyx +re:97:xutim-munef-sevox +re:98:xenod-nomyf-ruvax +re:99:xepov-lotap-fozyx +re:100:xoras-mynaf-sosix +forensic:25:xesot-vutoz-tukyx +forensic:25:xenip-dosaf-kicex +forensic:25:xezeb-cecoh-ladyx +forensic:25:xepir-bepes-tegux +forensic:25:xukec-kybym-hegyx +forensic:25:xidib-nemyr-pybyx +forensic:25:xiboc-ravyr-nytyx +forensic:25:xoviv-dahok-bavex +forensic:25:xulil-bokuf-gutux +forensic:25:xogaf-tetyh-cifax +forensic:25:xelop-tirys-rohox +forensic:25:xitig-volet-rupux +forensic:25:xidez-nycin-kadox +forensic:25:xubom-pifac-vymax +forensic:25:xiken-vicap-situx +forensic:25:xokam-gutyr-lylax +forensic:25:xutoz-gabih-zipix +forensic:25:xozip-pihys-pozex +forensic:25:xokik-dazet-gavux +forensic:25:xiras-vufyv-tigox +forensic:25:xeciz-hemih-rumex +forensic:25:xukec-nodit-rovox +forensic:25:xegen-mikym-zudex +forensic:25:xumef-lonyg-fesyx +forensic:25:xucig-dakoh-gokix +forensic:100:xerib-dezam-vuzix +forensic:100:xehet-zyzys-bocyx +forensic:100:xusah-retos-vykox +forensic:100:xuhim-copul-hasix +forensic:100:xeril-mysym-rubyx +forensic:100:xudoh-havif-badax +forensic:100:xinam-kydic-sirax +forensic:100:ximil-lilon-fozax +forensic:100:xigar-vivib-sifix +forensic:100:xekap-mygiz-dosex +forensic:100:xebac-tebep-vagix +forensic:100:xeted-vizys-fyfyx +forensic:100:xeref-sivyd-dapax +forensic:100:xupir-socek-gasox +forensic:100:xipan-sumaz-nogyx +forensic:100:xeviz-finub-tezex +forensic:100:xucam-vozoh-legix +forensic:100:xevor-patad-dipux +forensic:100:xunov-hogir-cagox +forensic:100:xuzom-fevyz-kafix +forensic:100:xunel-sesap-hykyx +forensic:100:xilas-relyd-lohox +forensic:100:xerig-gyfap-pysix +forensic:100:xelek-motat-ninux +forensic:100:xukos-mymip-zevix +forensic:150:xiseg-kuhev-mifyx +forensic:150:xoved-vicyh-zabax +forensic:150:xusap-vinak-ponex +forensic:150:xezel-rubid-zedax +forensic:150:xobaz-subaf-barux +forensic:150:xezov-zokif-cazyx +forensic:150:xirac-gizeg-hozix +forensic:150:xikem-nybez-cezex +forensic:150:xebal-pivaz-suvax +forensic:150:xulam-ficug-hopyx +forensic:150:xovaz-rucyz-sedax +forensic:150:xezog-bazeh-porix +forensic:150:xorom-fytyf-socax +forensic:150:xidog-zykil-zykox +forensic:150:xucib-pamyn-hakex +forensic:150:xocat-hinyh-henox +forensic:150:xevim-tebis-fonux +forensic:150:xedez-lyrub-cidox +forensic:150:xegap-cihus-nonox +forensic:150:xonit-ciseb-livux +forensic:150:xipif-damor-bitix +forensic:150:xucek-ravor-tohax +forensic:150:xopod-cafer-nebox +forensic:150:xebam-nykyk-lilex +forensic:150:xurov-fuvis-batex +forensic:200:xonas-tones-cofex +forensic:200:ximen-vyboh-cudux +forensic:200:xofig-fynuh-levex +forensic:200:xumig-pisap-fupyx +forensic:200:xurig-gador-fokyx +forensic:200:xolin-tysog-metix +forensic:200:xifik-pylil-kyrex +forensic:200:xegos-rarit-pabox +forensic:200:xupeh-nobih-rugyx +forensic:200:xibok-civem-hymyx +forensic:200:xelev-dizeg-denax +forensic:200:xunog-nadab-vekyx +forensic:200:xisev-lubus-dymyx +forensic:200:xirip-bibyc-setax +forensic:200:xenof-vymyt-syhax +forensic:200:xobig-dyhig-gefax +forensic:200:xivik-movad-kykex +forensic:200:xusil-hebuc-sohux +forensic:200:xegal-fybos-cyrox +forensic:200:xidip-decem-puvax +forensic:200:xesir-gohad-sohox +forensic:200:xucir-bokus-rofix +forensic:200:xemot-hemac-togax +forensic:200:xosel-tucim-cukox +forensic:200:xicap-dohez-fidex +forensic:250:xudib-cylis-mopux +forensic:250:xihog-sakin-cimux +forensic:250:xosif-kavul-nuhox +forensic:250:xevit-lulol-gubax +forensic:250:xesop-logev-radux +forensic:250:ximaz-bihub-tamyx +forensic:250:xikid-vohyn-lerax +forensic:250:xelav-sekih-bumix +forensic:250:xobem-hycim-zirux +forensic:250:xukek-pytir-bubox +forensic:250:xolik-lunem-lapax +forensic:250:xulen-nuguv-kutix +forensic:250:xorot-kemem-lozex +forensic:250:xemod-colek-himyx +forensic:250:xegoc-girov-nedox +forensic:250:xumiz-gikes-lotox +forensic:250:xoram-fygot-lydyx +forensic:250:xopap-fimuh-fivox +forensic:250:xupin-pomep-bybox +forensic:250:xoleh-fihac-zigex +forensic:250:xunar-lycyg-cozox +forensic:250:xipik-giduh-sudyx +forensic:250:xopar-riraz-bypex +forensic:250:xolin-sokug-dasax +forensic:250:xebir-tamum-gasyx +forensic:300:xuren-pibac-megox +forensic:300:xeveh-nezyn-mipox +forensic:300:xolev-tubel-takux +forensic:300:xugem-bariv-ladux +forensic:300:xuzib-sugam-kezex +forensic:300:xoler-peveh-safix +forensic:300:xediv-vimen-hozax +forensic:300:xurok-makar-ruvyx +forensic:300:xezab-huces-fydux +forensic:300:xodan-penic-nasox +forensic:300:xivov-suvud-danax +forensic:300:xipom-bakud-gozox +forensic:300:xufab-vuduc-zycox +forensic:300:xekez-vydam-ruzox +forensic:300:xevap-kyzam-futex +forensic:300:xozis-pudup-losox +forensic:300:ximos-mycif-nelix +forensic:300:xumof-votil-volyx +forensic:300:xevil-zelin-kynix +forensic:300:xobeh-bapur-nuzyx +forensic:300:xuhik-ruvan-lycix +forensic:300:xiseh-pydys-fenyx +forensic:300:xirod-nedar-cikax +forensic:300:xinof-nylaz-puvux +forensic:300:xihiv-dizom-nyvax +forensic:350:xicev-vikus-lefux +forensic:350:xemas-corez-sohox +forensic:350:xikos-zadyr-tuzox +forensic:350:xemob-fufoz-mukix +forensic:350:xerom-kigop-kedux +forensic:350:xidez-ticys-cadax +forensic:350:xumoh-cuzyf-zacyx +forensic:350:xuved-zudep-dahex +forensic:350:xezek-hasaf-duvyx +forensic:350:xusin-zunym-hifax +forensic:350:xunon-coheg-malux +forensic:350:xisob-fadyd-bunix +forensic:350:xulic-vezam-zucux +forensic:350:xorig-tehot-gufox +forensic:350:xivaz-dinig-mugyx +forensic:350:xikib-tazop-sunix +forensic:350:xomos-mopit-hylix +forensic:350:xigar-lyzyp-zufox +forensic:350:xecom-papih-cogex +forensic:350:xugig-sagag-sicax +forensic:350:xobem-nifah-kypex +forensic:350:xegir-vopym-badax +forensic:350:xohel-bulip-depix +forensic:350:xobom-haveb-rehux +forensic:350:xuzin-vunef-culyx +forensic:400:xenip-sigeg-syzex +forensic:400:xecil-lukyr-nupex +forensic:400:xuhot-hepec-zesux +forensic:400:xukis-nuval-menyx +forensic:400:xebet-ryvol-pulyx +forensic:400:xogag-rypuk-dehyx +forensic:400:xuvip-cymoh-bagux +forensic:400:xinab-pozyl-tobyx +forensic:400:xorib-tivup-hokyx +forensic:400:xolep-demul-kunux +forensic:400:xekek-zahep-lanix +forensic:400:xiref-turez-vemox +forensic:400:xehib-nozas-kisux +forensic:400:xibak-gugir-vobux +forensic:400:xikef-mateh-duvox +forensic:400:xepod-zihub-hudux +forensic:400:xodok-lizef-bufyx +forensic:400:xubog-fozez-bizox +forensic:400:xurok-ledym-bavix +forensic:400:xepim-tusok-fysux +forensic:400:xogov-byzan-cobax +forensic:400:xipog-nydyd-mutux +forensic:400:xubov-citok-vokix +forensic:400:xudob-danuf-rimix +forensic:400:xetaz-zehuv-vacox +forensic:450:xuhis-huful-gelox +forensic:450:xetat-sihot-zubyx +forensic:450:xuvem-zihoz-levax +forensic:450:xomes-cifen-kynox +forensic:450:xolod-lesab-purex +forensic:450:xobis-gever-ravax +forensic:450:xihig-gobar-zaryx +forensic:450:xozev-mikih-serax +forensic:450:xupap-hific-pukux +forensic:450:xizag-tysur-ricex +forensic:450:xekol-ryfur-niryx +forensic:450:xucaf-bozym-mahux +forensic:450:xepeg-soden-hafux +forensic:450:xivap-zosoz-ravox +forensic:450:ximas-sysys-sulyx +forensic:450:xovik-libet-vimex +forensic:450:xopek-zabil-kymox +forensic:450:xivag-sudot-vyvex +forensic:450:xigev-hyvub-masex +forensic:450:xezov-hoteh-nofex +forensic:450:xezim-runel-tebax +forensic:450:ximep-voryk-mahex +forensic:450:xinec-pelov-tygyx +forensic:450:xefil-fucir-fivex +forensic:450:xigih-cisol-bugox +forensic:500:xibeh-zutit-vidax +forensic:500:xicap-zypim-posux +forensic:500:xeveg-fuhed-dypyx +forensic:500:xenas-lomyd-nymex +forensic:500:xisad-kizav-rypax +forensic:500:xopoh-gubel-rimox +forensic:500:xucez-linul-hutax +forensic:500:xupak-hotoh-gopux +forensic:500:xolar-fubog-sevox +forensic:500:xigoc-rekah-zyfux +forensic:500:xiceb-cymot-gafix +forensic:500:xosec-hecat-hypux +forensic:500:xokal-mikal-zadux +forensic:500:xoden-kalah-divox +forensic:500:xubic-teryk-lizix +forensic:500:xocat-debut-tatux +forensic:500:xegoh-meziz-ponyx +forensic:500:xosof-degil-tigyx +forensic:500:xitik-vavak-kivyx +forensic:500:xiner-biryn-nylox +forensic:500:xohik-golin-menyx +forensic:500:xulek-cikyv-ketax +forensic:500:xisis-nicik-fucyx +forensic:500:xukal-vinah-lihox +forensic:500:xuceb-zevit-rinax