From 253d9f09974cf0c37a05b043cc788ca6780043ca Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Wed, 23 Mar 2016 10:10:54 +1000 Subject: [PATCH] Some files don't need to be in build/alt --- build/alt/a.lst | 5376 -------------------------------------------- build/alt/a.rim | 1 - build/alt/image.fs | Bin 4096000 -> 0 bytes 3 files changed, 5377 deletions(-) delete mode 100644 build/alt/a.lst delete mode 100644 build/alt/a.rim delete mode 100644 build/alt/image.fs diff --git a/build/alt/a.lst b/build/alt/a.lst deleted file mode 100644 index adb4508..0000000 --- a/build/alt/a.lst +++ /dev/null @@ -1,5376 +0,0 @@ - "** 01-s1.pdf page 62 - " sop - dac = 0040000 " MEM: deposit AC - 040000 - jms = 0100000 " MEM: jump to subroutine - 100000 - dzm = 0140000 " MEM: deposit zero to memory - 140000 - lac = 0200000 " MEM: load AC - 200000 - xor = 0240000 " MEM: XOR with AC - 240000 - add = 0300000 " MEM: one's complement add - 300000 - tad = 0340000 " MEM: two's complement add - 340000 - xct = 0400000 " MEM: execute - 400000 - isz = 0440000 " MEM: increment and skip if zero - 440000 - and = 0500000 " MEM: AND - 500000 - sad = 0540000 " MEM: skip if AC different - 540000 - jmp = 0600000 " MEM: jump - 600000 - nop = 0740000 " OPR: no-op - 740000 - i = 020000 " indirect - 020000 - law = 0760000 " OPR: load accumulator with (instr) - 760000 - cma = 0740001 " OPR: complement AC - 740001 - las = 0750004 " OPR: load AC from switches - 750004 - ral = 0740010 " OPR: rotate AC left - 740010 - rar = 0740020 " OPR: rotate AC right - 740020 - hlt = 0740040 " OPR: halt - 740040 - sma = 0740100 " OPR: skip on minus AC - 740100 - sza = 0740200 " OPR: skip on zero AC - 740200 - snl = 0740400 " OPR: skip on non-zero link - 740400 - skp = 0741000 " OPR: skip unconditionally - 741000 - spa = 0741100 " OPR: skip on positive AC - 741100 - sna = 0741200 " OPR: skip on non-zero AC - 741200 - szl = 0741400 " OPR: skip on zero link - 741400 - rtl = 0742010 " OPR: rotate two left - 742010 - rtr = 0742020 " OPR: rotate two right - 742020 - cll = 0744000 " OPR: clear link - 744000 - rcl = 0744010 " OPR: clear link, rotate left - 744010 - rcr = 0744020 " OPR: clear link, rotate right - 744020 - cla = 0750000 " OPR: clear AC - 750000 - lrs = 0640500 " EAE: long right shift - 640500 - lrss = 0660500 " EAE: long right shift, signed - 660500 - lls = 0640600 " EAE: long left shift - 640600 - llss = 0660600 " EAE: long left shift, signed - 660600 - als = 0640700 " EAE: AC left shift - 640700 - alss = 0660700 " EAE: AC left shift, signed - 660700 - mul = 0653122 " EAE: multiply - 653122 - idiv = 0653323 " EAE: integer divide - 653323 - lacq = 0641002 " EAE: load AC with MQ - 641002 - clq = 0650000 " EAE: clear MQ - 650000 - omq = 0640002 " EAE: OR MQ into AC - 640002 - cmq = 0650004 " EAE: complement MQ - 650004 - lmq = 0652000 " EAE: load MQ from AC - 652000 - dscs = 0707141 " DSK: clear status register - 707141 - dslw = 0707124 " DSK: clear and load WC from AC - 707124 - dslm = 0707142 " DSK: clear and load MAC from AC - 707142 - dsld = 0707104 " DSK: clear and load TA and SA from AC - 707104 - dsls = 0707144 " DSK: load status - 707144 - dssf = 0707121 " DSK: skip on flags - 707121 - dsrs = 0707132 " DSK: read status register - 707132 - iof = 0700002 " PIC: interrupts off - 700002 - ion = 0700042 " PIC: interrupts on - 700042 - caf = 0703302 " CPU: clear all flags - 703302 - clon = 0700044 " CLK: clear flag, enable - 700044 - clsf = 0700001 " CLK: skip if overflow - 700001 - "** 01-s1.pdf page 63 - clof = 0700004 " CLK: clear flag, disable - 700004 - ksf = 0700301 " KBD: skip if flag set - 700301 - krb = 0700312 " KBD: read buffer - 700312 - tsf = 0700401 " TTY: skip if flag set - 700401 - tcf = 0700402 " TTY: clear flag - 700402 - tls = 0700406 " TTY: load buffer, select - 700406 - sck = 0704301 " G-2: skip on console keyboard - 704301 - cck = 0704304 " G-2: clear console keyboard - 704304 - lck = 0704312 " G-2: load console keyboard - 704312 - rsf = 0700101 " PTR: skip if flag set - 700101 - rsa = 0700104 " PTR: select alphanumeric mode - 700104 - rrb = 0700112 " PTR: clear flag, or read buffer - 700112 - psf = 0700201 " PTP: skip if flag set - 700201 - pcf = 0700202 " PTP: clear flag - 700202 - psa = 0700204 " PTP: alphanumeric mode - 700204 - cdf = 0700501 " G-2: clear display flags - 700501 - lds = 0701052 " G-2: load display status - 701052 - lda = 0701012 " G-2: load display address - 701012 - wcga = 0704206 " G-2: ??? - 704206 - raef = 0700742 " G-2: resume after edges flag - 700742 - rlpd = 0700723 " G-2: resume after light pen stop, disabled - 700723 - beg = 0700547 " G-2: begin - 700547 - spb = 0704401 " G-2: skip on push button flag - 704401 - cpb = 0704404 " G-2: clear push button flag - 704404 - lpb = 0704412 " G-2: load push buttons - 704412 - wbl = 0704424 " G-2: write button lights - 704424 - dprs = 0704752 " dataphone: read status - 704752 - dpsf = 0704741 " dataphone: skip on flag - 704741 - dpcf = 0704761 " dataphone: clear flag - 704761 - dprc = 0704712 " dataphone: read character - 704712 - crsf = 0706701 " CDR: skip if ready - 706701 - crrb = 0706712 " CDR: read buffer - 706712 - " S1 - .. = 0 - 000000 - t = 0 - 000000 - orig: - hlt " overwritten with interrupt return addr -000000: 740040 - jmp pibreak " dispatch to interrupt processing -000001: 603407 - . = orig+7 - 1000007 - -1 " only ever set (to -1): never read?! -000007: 777777 - . = orig+020 " syscall (CAL) and user "interrupt" processing - 1000020 - 1f " addr for "CAL I": store return here on "CAL" -000020: 000032 - iof " interrupts off -000021: 700002 - dac u.ac " save user AC -000022: 045631 - lac 020 " save user return addr -000023: 200020 - dac 1f " save as if "CAL I" -000024: 040032 - lac 1f-1 -000025: 200031 - dac 020 " restore location 20 -000026: 040020 - lac u.ac " restore user AC -000027: 205631 - jmp 1f+1 " join "CAL I" processing -000030: 600033 - 1f " literal to restore location 20 -000031: 000032 - 1: 0 " "CAL I" PC stored here -000032: 000000 - iof " interrupts off -000033: 700002 - dac u.ac " save user AC -000034: 045631 - lacq -000035: 641002 - dac u.mq " save user MQ -000036: 045632 - lac 8 -000037: 200010 - dac u.rq " save user auto-index location 8 -000040: 045633 - lac 9 -000041: 200011 - dac u.rq+1 " save user auto-index location 9 -000042: 045634 - jms copy; 10; u.rq+2; 6 " save user auto-index locations 10-15 -000043: 101667 -000044: 000012 -000045: 005635 -000046: 000006 - lac 1b " load user PC after system call -000047: 200032 - dac u.rq+8 " save user PC -000050: 045643 - -1 " load -1 -000051: 777777 - dac .savblk " set "save" flag (cleared by disk I/O?) -000052: 044072 - dac .insys " set "in system" flag -000053: 044066 - lac uquant " load user quantum count -000054: 205474 - jms betwen; d0; maxquant " check if between 0 & maxquant?? -000055: 101643 -000056: 004116 -000057: 004100 - jms swap " no: swap processes -000060: 100136 - ion " interrupts on -000061: 700042 - -1 -000062: 777777 - tad u.rq+8 " get address of system call -000063: 345643 - jms laci " load AC indirect?? -000064: 101635 - jms betwen; o20001; swn " range check -000065: 101643 -000066: 004161 -000067: 000256 - jmp badcal " bad system call -000070: 601146 - tad swp " add system call table base -000071: 340220 - dac .+1 " save as next instruction -000072: 040073 - jmp .. i " dispatch system call -000073: 620000 - . = orig+0100 - 1000100 - jmp coldentry " here to start kernel -000100: 604507 - jms halt -000101: 102254 - okexit: - dzm u.ac " 'OK' system call exit: clear user AC -000102: 145631 - sysexit: " common system call exit code - ion " enable interrupts -000103: 700042 - lac .savblk " load "save" flag -000104: 204072 - sza " is zero (cleared by disk I/O)? -000105: 740200 - jmp 1f " no: no disk I/O done? -000106: 600116 - jms copy; sysdata; dskbuf; 64 " copy system data to disk buffer -000107: 101667 -000110: 005542 -000111: 007700 -000112: 000100 - cla -000113: 750000 - jms dskio; 07000 " save to disk? -000114: 102162 -000115: 007000 - 1: - dzm .insys " clear "in system call" flag -000116: 144066 - jms chkint " pending user interrupt? -000117: 100320 - skp " no -000120: 741000 - jmp .save " yes: dump core -000121: 601151 - jms copy; u.rq+2; 10; 6 " restore auto-index locations 10-15 -000122: 101667 -000123: 005635 -000124: 000012 -000125: 000006 - lac u.rq+1 " restore auto-index location 9 -000126: 205634 - dac 9 -000127: 040011 - lac u.rq " restore auto-index location 8 -000130: 205633 - dac 8 -000131: 040010 - lac u.mq " restore MQ register -000132: 205632 - lmq -000133: 652000 - lac u.ac " restore AC register -000134: 205631 - jmp u.rq+8 i " return to user -000135: 625643 - " scheduler / idle loop - swap: 0 -000136: 000000 - ion -000137: 700042 - 1: - jms lookfor; 3 " out/ready -000140: 101066 -000141: 000003 - jmp 1f -000142: 600151 - jms lookfor; 1 " in/ready -000143: 101066 -000144: 000001 - skp -000145: 741000 - jmp 1b " loop until a process becomes ready -000146: 600140 - dzm maxquant " in/ready (self?): come back next tick! -000147: 144100 - jmp 3f -000150: 600215 - 1: " here with out/ready process - dac 9f+t " save process pointer (swapped out) in t0 -000151: 044205 - jms lookfor; 2 " in/notready " find a swapped in process to swap out? -000152: 101066 -000153: 000002 - jmp 1f -000154: 600161 - jms lookfor; 1 " in/ready -000155: 101066 -000156: 000001 - jmp 1f -000157: 600161 - jmp 2f -000160: 600177 - 1: - lac swap -000161: 200136 - dac u.swapret " return to caller when swapped back -000162: 045650 - iof -000163: 700002 - lac o200000 " change status to swapped out -000164: 204170 - tad u.ulistp i -000165: 365647 - dac u.ulistp i -000166: 065647 - ion -000167: 700042 - jms dskswap; 07000 " swap process out -000170: 102267 -000171: 007000 - lac u.dspbuf -000172: 205712 - sna " process using display?? -000173: 741200 - jmp 2f " no -000174: 600177 - law dspbuf " reset to default display buffer -000175: 764446 - jms movdsp -000176: 102615 - 2: - iof " disable interrupts -000177: 700002 - lac o600000 " change status (1->7???] -000200: 204176 - tad 9f+t i -000201: 364205 - dac 9f+t i -000202: 064205 - ion " enable interrupts -000203: 700042 - jms dskswap; 06000 " read process in? -000204: 102267 -000205: 006000 - lac u.swapret " set our return addr -000206: 205650 - dac swap " to saved return addr -000207: 040136 - lac o20 " reset maxquant to 16 ticks -000210: 204134 - dac maxquant -000211: 044100 - lac u.dspbuf -000212: 205712 - sza " using display? -000213: 740200 - "** 01-s1.pdf page 4 - jms movdsp " yes. switch to user display bufferx -000214: 102615 - 3: - dzm uquant " no. reset process tick count -000215: 145474 - iof -000216: 700002 - jmp swap i " return -000217: 620136 - t = t+1 - 000001 - swp: " system call dispatch table - jmp . " base instruction -000220: 600220 - .save; .getuid; .open; .read; .write; .creat; .seek; .tell -000221: 001151 -000222: 000426 -000223: 000626 -000224: 000724 -000225: 000773 -000226: 000660 -000227: 000431 -000230: 000461 - .close; .link; .unlink; .setuid; .rename; .exit; .time; .intrp -000231: 000720 -000232: 000467 -000233: 000542 -000234: 000561 -000235: 000567 -000236: 001163 -000237: 000610 -000240: 000257 - .chdir; .chmod; .chown; badcal; .sysloc; badcal; .capt; .rele -000241: 000615 -000242: 000407 -000243: 000421 -000244: 001146 -000245: 000262 -000246: 001146 -000247: 000377 -000250: 000403 - .status; badcal; .smes; .rmes; .fork -000251: 000352 -000252: 001146 -000253: 001225 -000254: 001177 -000255: 001111 - swn: - .-swp-1 i " count of system calls, plus indirect! -000256: 020035 - " AC/ new value for intflg (non-zero to ignore interrupt char) - " sys intrp - .intrp: - lac u.ac -000257: 205631 - dac u.intflg -000260: 045713 - jmp okexit -000261: 600102 - " syscall to retrieve system addresses (data & routines!!) - " AC/ index (1..17) - " sys sysloc - " AC/ address (or -1 on bad index) - .sysloc: - lac u.ac -000262: 205631 - and o17777 -000263: 504160 - jms betwen; d1; locn -000264: 101643 -000265: 004117 -000266: 000317 - jms error -000267: 101531 - tad locsw -000270: 340275 - dac .+1 -000271: 040272 - lac .. -000272: 200000 - dac u.ac -000273: 045631 - jmp sysexit -000274: 600103 - locsw: " table of system addresses for sysloc - lac . -000275: 200275 - iget; inode; userdata; sysdata; copy; copyz; betwen; dskrd -000276: 003017 -000277: 005732 -000300: 005631 -000301: 005542 -000302: 001667 -000303: 001712 -000304: 001643 -000305: 002116 - dskwr; dskbuf; dpdata; namei; pbsflgs; alloc; free; dspdata -000306: 002146 -000307: 007700 -000310: 005532 -000311: 002737 -000312: 005476 -000313: 001545 -000314: 001604 -000315: 005536 - crdata -000316: 005540 - locn: - .-locsw-1 -000317: 000021 - " check if "interrupt" for current process - " checks .int1 and .int2 (contain i-number of interrupt source) - " compared against process stdin - " - " call: - " .insys/ 0 - " jms chkint - " no: no interrupt, or intflg set (discards interrupt) - " yes: PI off, .insys set - chkint: 0 -000320: 000000 - lac .insys -000321: 204066 - sza " in system? -000322: 740200 - jmp chkint i " yes: return -000323: 620320 - lac .int1 " get inumber of interrupt1 source? -000324: 204067 - sna " zero? -000325: 741200 - jmp 1f " yes: skip stdin check -000326: 600331 - sad u.ofiles+2 " non-zero: compare to stdin inumber -000327: 545656 - jmp 2f " same -000330: 600341 - 1: - lac .int2 " get inum of interrupt 2 source? -000331: 204070 - sna " zero? -000332: 741200 - jmp chkint i " yes: return -000333: 620320 - sad u.ofiles+2 " non-zero: compare to stdin inumber -000334: 545656 - skp " match! -000335: 741000 - jmp chkint i " no match: return -000336: 620320 - dzm .int2 " clear int2 source -000337: 144070 - jmp 1f -000340: 600342 - 2: - dzm .int1 " clear int1 source -000341: 144067 - 1: - "** 01-s1.pdf page 5 - lac u.intflg " get user intflg -000342: 205713 - sza " zero? -000343: 740200 - jmp chkint i " no: ignore -000344: 620320 - -1 -000345: 777777 - dac .insys " set "in system" flag -000346: 044066 - ion " enable interrupts -000347: 700042 - isz chkint " give skip return -000350: 440320 - jmp chkint i -000351: 620320 - "** 01-s1.pdf page 7 - " s2 - " file status (stat) system call - " AC/ pointer to status (inode) buffer + i-num (13 words) - " sys status; dir_name_ptr; file_name_ptr - " NO_DD version: sys status; file_name_ptr - .status: - jms arg " fetch file name pointer -000352: 102625 - dac .+3 -000353: 040356 - lac u.cdir " get current working directory -000354: 205646 - jms namei; .. " look up file -000355: 102737 -000356: 000000 - jms error " not found: return error -000357: 101531 - jms iget " read file inode -000360: 103017 - lac u.ac " get user buffer pointer -000361: 205631 - and o17777 " truncate to 13 bits -000362: 504160 - jms betwen; o10000; o17762 " is user memory (but not last 14 wds)? -000363: 101643 -000364: 004156 -000365: 004157 - jms error " no: error -000366: 101531 - dac .+3 " save as copy destination -000367: 040372 - jms copy; inode; ..; 12 " copy inode to user buffer -000370: 101667 -000371: 005732 -000372: 000000 -000373: 000014 - lac d.i " copy i-num from last dnode read ?? -000374: 205747 - dac 9 i " save thru index 9 (pre-increment) ?? -000375: 060011 - jmp okexit -000376: 600102 - " capture display? - .capt: - lac u.ac " get user AC -000377: 205631 - dac u.dspbuf " save as user display buffer -000400: 045712 - jms movdsp " switch to user display buffer -000401: 102615 - jmp sysexit -000402: 600103 - " release display? - .rele: - dzm u.dspbuf " clear user display buffer pointer -000403: 145712 - law dspbuf " get default display buffer -000404: 764446 - jms movdsp " change to it -000405: 102615 - jmp sysexit -000406: 600103 - .chmod: - jms isown " check if user owns file arg -000407: 102664 - lac u.ac " get new permissions -000410: 205631 - and o17 " mask to read/write bits -000411: 504133 - lmq " save in MQ -000412: 652000 - lac i.flags " get file flags -000413: 205732 - and o777760 " clear permissions -000414: 504202 - omq " or in new permissions from MQ -000415: 640002 - dac i.flags " save in inode -000416: 045732 - jms iput " write inode back -000417: 103046 - jmp okexit -000420: 600102 - .chown: - jms isown " check if user owns file arg -000421: 102664 - lac u.ac " get new owner -000422: 205631 - dac i.uid " save in inode -000423: 045742 - jms iput " write inode back -000424: 103046 - jmp okexit -000425: 600102 - .getuid: " getuid system call - lac u.uid -000426: 205644 - dac u.ac " return u.uid in user AC -000427: 045631 - jmp sysexit -000430: 600103 - .seek: - jms seektell -000431: 102645 - tad u.base -000432: 345651 - "** 01-s1.pdf page 8 - spa -000433: 741100 - jms error -000434: 101531 - lmq -000435: 652000 - lac f.flags -000436: 205757 - and d1 -000437: 504117 - sna -000440: 741200 - jms 1f -000441: 100450 - lacq -000442: 641002 - jms betwen; d0; i.size -000443: 101643 -000444: 004116 -000445: 005744 - jms dacisize -000446: 103402 - jmp 2f -000447: 600455 - 1: - lacq -000450: 641002 - jms betwen; d0; i.size -000451: 101643 -000452: 004116 -000453: 005744 - lac i.size -000454: 205744 - 2: - dac f.badd -000455: 045760 - dac u.ac -000456: 045631 - jms fput -000457: 102402 - jmp sysexit -000460: 600103 - .tell: - jms seektell -000461: 102645 - cma -000462: 740001 - tad d1 -000463: 344117 - tad u.base -000464: 345651 - dac u.ac -000465: 045631 - jmp sysexit -000466: 600103 - .link: - jms arg " Save the argument pointers in -000467: 102625 - dac 0f "0f, 1f and 2f -000470: 040477 - jms arg -000471: 102625 - dac 1f -000472: 040502 - jms arg -000473: 102625 - dac 2f -000474: 040506 - lac u.cdir " Search the current directory -000475: 205646 - jms namei; 0:0 " for the first argument -000476: 102737 -000477: 000000 - jms error " Didn't find it -000500: 101531 - jms namei; 1:0 " In the i-num found by 1st namei, -000501: 102737 -000502: 000000 - jms error " search for 2nd argument, err not found -000503: 101531 - dac u.base " save in user data -000504: 045651 - jms copy; 2:0; name; 4 -000505: 101667 -000506: 000000 -000507: 005504 -000510: 000004 - lac u.cdir " Search the process' current directory -000511: 205646 - jms namei; name " for the third argument -000512: 102737 -000513: 005504 - skp -000514: 741000 - jms error " Error if it already exists -000515: 101531 - lac d1 -000516: 204117 - dac mode " Save mode bits for access -000517: 045500 - jms access " check access (or return error to user) -000520: 102312 - jms dslot " allocate directory slot -000521: 102463 - lac u.base " get source file i-number -000522: 205651 - jms iget " read inode in -000523: 103017 - lac ii " get the i-num -000524: 205731 - dac d.i " Save the i-num in the directory entry -000525: 045747 - jms copy; name; d.name; 4 " Copy the new link name into the directory entry -000526: 101667 -000527: 005504 -000530: 005750 -000531: 000004 - lac i.uniq " Copy the i-node unique number into -000532: 205745 - dac d.uniq " the directory entry -000533: 045754 - -1 -000534: 777777 - tad i.nlks " Decrement link count, i.e. one more link -000535: 345743 - dac i.nlks -000536: 045743 - "** 01-s1.pdf page 9 - jms iput " Save the i-node and directory entry for -000537: 103046 - jms dput " the new link -000540: 103136 - jmp okexit " and return OK -000541: 600102 - .unlink: - jms argname " fetch filename, inode -000542: 102631 - dac u.base " save i-number -000543: 045651 - lac d1 " write mode bit -000544: 204117 - dac mode " save for access call -000545: 045500 - jms access " check access or return error (reads inode) -000546: 102312 - dzm d.i " clear directory i-num -000547: 145747 - jms dput " write directory entry back -000550: 103136 - lac u.base " get i-number back -000551: 205651 - jms iget " read inode back -000552: 103017 - isz i.nlks " increment link count (kept as negative count) -000553: 445743 - jmp 1f " not zero -000554: 600557 - jms itrunc " zero links: free blocks -000555: 102675 - dzm i.flags " clear status (free inode) -000556: 145732 - 1: - jms iput " write inode back to disk -000557: 103046 - jmp sysexit -000560: 600103 - .setuid: " setuid system call - lac u.uid " load current user id -000561: 205644 - sma " negative (super user) -000562: 740100 - jms error " no: error!! -000563: 101531 - lac u.ac " load user AC -000564: 205631 - dac u.uid " save as new uid -000565: 045644 - jmp sysexit -000566: 600103 - " rename system call: - " sys rename; old_name_ptr; new_name_ptr - " Questions: - " when is directory entry read?? - " is access check on directory or src file?? - " check for existing file with new name?? - " when is directory entry written back?? - .rename: - jms arg " fetch first arg (old name pointer) -000567: 102625 - dac 0f " save for namei -000570: 040575 - jms arg " fetch second arg (new name pointer) -000571: 102625 - dac 1f " save for copy -000572: 040603 - lac u.cdir " get CWD -000573: 205646 - jms namei; 0:0 " search for (old) name -000574: 102737 -000575: 000000 - jms error " not found: return error -000576: 101531 - lac d1 " get write mode bit -000577: 204117 - dac mode " save for access call -000600: 045500 - jms access " access OK? (or return error to user) -000601: 102312 - jms copy; 1:0; d.name; 4 " copy new name into directory entry -000602: 101667 -000603: 000000 -000604: 005750 -000605: 000004 - jms dput " and write it to disk -000606: 103136 - jmp okexit -000607: 600102 - " time system call returns line (mains) frequency ticks - " high order bits returned in AC, low order in MQ - " s.tim is located in "system" block (written to disk) - " so this is a running count of uptime since first boot! - " at 60Hz, 36 bits would last 36+ years! - .time: - lac s.tim " load high order bits -000610: 205557 - dac u.ac " return in AC -000611: 045631 - lac s.tim+1 " load low order bits -000612: 205560 - dac u.mq " return in MQ -000613: 045632 - jmp sysexit -000614: 600103 - .chdir: - jms argname " fetch argument as filename -000615: 102631 - jms iget " (re)read inode(?] -000616: 103017 - lac i.flags " get flags -000617: 205732 - and o20 " get directory bit -000620: 504134 - sna " is a directory? -000621: 741200 - jms error " no: return error to user -000622: 101531 - lac ii " yes: get i-number -000623: 205731 - dac u.cdir " save as current working directory -000624: 045646 - "** 01-s1.pdf page 10 - jmp okexit -000625: 600102 - " open system call - " sys open; filename_ptr; flags (0 for read, 1 for write) - " returns w/ "fd" in AC (or -1 if not found) - .open: - jms arg " get filename -000626: 102625 - dac 0f " save for namei -000627: 040640 - jms arg " get flags -000630: 102625 - sza " zero (read) -000631: 740200 - lac d1 " no: get write mode bit -000632: 204117 - sna " non-zero (write)? -000633: 741200 - lac d2 " no: get read mode bot -000634: 204120 - dac mode " save for access call -000635: 045500 - lac u.cdir " get current working directory -000636: 205646 - jms namei; 0:0 " search for file -000637: 102737 -000640: 000000 - jms error " error: return -1 -000641: 101531 - jms iget " load inode -000642: 103017 - jms access " check access (may return w/ error to user) -000643: 102312 - lac i.flags " get file flags -000644: 205732 - and o20 " get directory bit -000645: 504134 - sna " is directory? -000646: 741200 - jmp open1 " no, join common code -000647: 600715 - lac mode " get access mode -000650: 205500 - and d1 " get write bit -000651: 504117 - sna " write access? -000652: 741200 - jmp open1 " no, continue -000653: 600715 - lac u.uid " yes: get uid? -000654: 205644 - sma " negative? (-1 is superuser) -000655: 740100 - jms error " no: return error -000656: 101531 - jmp open1 " yes: join common code -000657: 600715 - .creat: - lac d1 " mode bit 1 (write) -000660: 204117 - dac mode " save for access call -000661: 045500 - jms arg " get name pointer -000662: 102625 - dac .+2 " save for copy -000663: 040665 - jms copy; ..; name; 4 " copy filename to "name" -000664: 101667 -000665: 000000 -000666: 005504 -000667: 000004 - lac u.cdir -000670: 205646 - jms namei; name " look up in current working directory -000671: 102737 -000672: 005504 - jmp 1f " not found -000673: 600711 - jms iget " file exists: read inode -000674: 103017 - jms access " check access (or return error to user) -000675: 102312 - lac i.flags " get flags -000676: 205732 - and o20 " get directory bit -000677: 504134 - sna " is a directory? -000700: 741200 - jmp .+4 " no: skip to truncate -000701: 600705 - lac u.uid " get user -000702: 205644 - sma " is super user? -000703: 740100 - jms error " no: error -000704: 101531 - jms itrunc " yes: truncate -000705: 102675 - cla -000706: 750000 - jms dacisize " clear i.size -000707: 103402 - jmp open1 -000710: 600715 - 1: - jms access " here if not found -000711: 102312 - lac u.ac " get access bits from user AC (zero for lock!) -000712: 205631 - and o17 " mask to permissions -000713: 504133 - jms icreat -000714: 102475 - open1: " common exit for open/creat - jms fassign " assign fd slot -000715: 102327 - jms error " none free, return -1 -000716: 101531 - jmp sysexit -000717: 600103 - "** 01-s1.pdf page 11 - .close: - jms finac " get fnode (open file) for fd in user AC -000720: 103370 - dzm f.flags " clear flags -000721: 145757 - jms fput " write fnode back to u.ofiles -000722: 102402 - jmp sysexit -000723: 600103 - .read: - jms arg " get argument -000724: 102625 - and o17777 " mask to address -000725: 504160 - dac u.base " save as I/O base -000726: 045651 - jms arg " get second argument -000727: 102625 - dac u.count " save as count -000730: 045652 - lac u.base " get base -000731: 205651 - jms betwen; o10000; o17777 " end inside user memory? -000732: 101643 -000733: 004156 -000734: 004160 - jms error " no: error -000735: 101531 - tad u.count " get end of buffer -000736: 345652 - jms betwen; u.base; o17777 " inside buffer/user memory? -000737: 101643 -000740: 005651 -000741: 004160 - jms error " no: error -000742: 101531 - dac u.limit " yes: save as I/O limit -000743: 045653 - 1: - jms finac " get fnode for fd in user AC -000744: 103370 - lac f.flags " get open file flags -000745: 205757 - and d1 " get write bit -000746: 504117 - sza " open for write? -000747: 740200 - jms error " yes: error -000750: 101531 - lac i.flags " get inode flags -000751: 205732 - and o40 " get special file bit -000752: 504136 - sna " special? -000753: 741200 - jmp 1f " no -000754: 600762 - iof " yes: disable interrupts -000755: 700002 - lac ii " get i number -000756: 205731 - tad swr " add to base instruction -000757: 341324 - dac .+1 -000760: 040761 - jmp .. i " dispatch to read routine -000761: 620000 - 1: - lac u.base " get user base -000762: 205651 - dac 1f+1 " save as iread base -000763: 040770 - lac u.count " get user count -000764: 205652 - dac 1f+2 " save as iread count -000765: 040771 - lac f.badd " get file offset -000766: 205760 - 1: - jms iread; ..; .. -000767: 103266 -000770: 000000 -000771: 000000 - jmp exitrw -000772: 601034 - " write system call: - " AC/ fd - " sys write; buffer; count - " AC/ count or -1 on error - .write: - jms arg " pick up buffer -000773: 102625 - and o17777 " mask to addr -000774: 504160 - dac u.base " save as I/O base -000775: 045651 - jms arg " pick up count -000776: 102625 - dac u.count " save as count -000777: 045652 - tad u.base " add base (get limit) -001000: 345651 - jms betwen; u.base; o17777 " check between base and end of memory -001001: 101643 -001002: 005651 -001003: 004160 - jms error " no: error -001004: 101531 - dac u.limit " yes: save as limit -001005: 045653 - jms finac " get fnode with fd from user AC -001006: 103370 - lac f.flags " get open file table flags -001007: 205757 - and d1 " open for write? -001010: 504117 - sna " if yes, skip -001011: 741200 - jms error " no: error -001012: 101531 - lac i.flags " get inode flags -001013: 205732 - and o40 " get device bit -001014: 504136 - "** 01-s1.pdf page 12 - sna " special? -001015: 741200 - jmp 1f " no -001016: 601024 - iof " yes, special: turn interrupts off -001017: 700002 - lac ii " get i number -001020: 205731 - tad sww " get write routine entry addr -001021: 341324 - dac .+1 -001022: 041023 - jmp .. i " dispatch to write routine -001023: 620000 - 1: " here with regular file - lac u.base " get base -001024: 205651 - dac 1f+1 " save as iwrite arg 1 -001025: 041032 - lac u.count " get count -001026: 205652 - dac 1f+2 " save as iwrite 2 -001027: 041033 - lac f.badd " get fd offset -001030: 205760 - 1: - jms iwrite; ..; .. " write to file -001031: 103257 -001032: 000000 -001033: 000000 - exitrw: " common exit for read/write system calls - dac u.ac " save return in user AC -001034: 045631 - tad f.badd -001035: 345760 - dac f.badd " update file offset -001036: 045760 - jms iput " release inode -001037: 103046 - jms fput " release fnode -001040: 102402 - jmp sysexit " return to user -001041: 600103 - "** 01-s1.pdf page 14 - " s3 - " search for user (process) table entry - " call: - " jms searchu; worker_routine_addr - " worker called with copy of a process table entry in "lu" - " can return directly (from caller of searchu) - " index location 8 points to next process table entry - searchu: 0 -001042: 000000 - lac searchu i " fetch argument -001043: 221042 - dac 9f+t+1 " in t1 -001044: 044207 - -mnproc " loop counter -001045: 777766 - dac 9f+t " in t0 -001046: 044206 - law ulist-1 " ulist ptr -001047: 765560 - dac 8 " in index 8 -001050: 040010 - 1: - lac 8 i " copy ulist entry to lu -001051: 220010 - dac lu -001052: 045514 - lac 8 i -001053: 220010 - dac lu+1 -001054: 045515 - lac 8 i -001055: 220010 - dac lu+2 -001056: 045516 - lac 8 i -001057: 220010 - dac lu+3 -001060: 045517 - jms 9f+t+1 i " call argument as subroutine -001061: 124207 - isz 9f+t " returned: loop done? -001062: 444206 - jmp 1b " no, do it again -001063: 601051 - isz searchu " skip argument -001064: 441042 - jmp searchu i -001065: 621042 - t = t+2 - 000003 - " look for a process with matching status - " jms lookfor; status - " found: ulist ptr in AC - " not found - lookfor: 0 -001066: 000000 - jms searchu; 1f -001067: 101042 -001070: 001074 - isz lookfor " skip argument -001071: 441066 - isz lookfor " give skip return -001072: 441066 - jmp lookfor i -001073: 621066 - 1: 0 " worker called by searchu -001074: 000000 - lac lu -001075: 205514 - rtl; rtl; and o7 " bits 0:2 of lu -001076: 742010 -001077: 742010 -001100: 504125 - sad lookfor i " match argument? -001101: 561066 - skp " yes -001102: 741000 - jmp 1b i " no, return, keep going -001103: 621074 - -3 -001104: 777775 - tad 8 " roll index 8 back to this entry -001105: 340010 - and o17777 -001106: 504160 - isz lookfor " skip lookfor argument -001107: 441066 - jmp lookfor i " non-skip return -001110: 621066 - " fork system call: - " sys fork - " return at +1 in parent, child pid in AC - " return at +2 in child, parent pid in AC - .fork: - jms lookfor; 0 " not-used " find an unused process slot -001111: 101066 -001112: 000000 - skp -001113: 741000 - jms error " none found- return error -001114: 101531 - dac 9f+t " save ulist ptr in t0 -001115: 044210 - isz uniqpid " generate new pid -001116: 445513 - lac uniqpid -001117: 205513 - dac u.ac " return in child pid in AC -001120: 045631 - law sysexit -001121: 760103 - dac u.swapret " return from system call when swapped back in -001122: 045650 - lac o200000 " change process status to out/ready (1->3) -001123: 204170 - tad u.ulistp i -001124: 365647 - dac u.ulistp i -001125: 065647 - jms dskswap; 07000 " swap parent out -001126: 102267 -001127: 007000 - lac 9f+t " get unused ulist slot back -001130: 204210 - dac u.ulistp " set ulist pointer -001131: 045647 - lac o100000 " mark child in/notready? (3->2) -001132: 204166 - xor u.ulistp i -001133: 265647 - dac u.ulistp i -001134: 065647 - lac u.pid " get old (parent) pid -001135: 205645 - "** 01-s1.pdf page 15 - dac u.ac " return parent pid in AC -001136: 045631 - lac uniqpid -001137: 205513 - dac u.pid " set child pid -001140: 045645 - isz 9f+t " advance to second word in process table -001141: 444210 - dac 9f+t i " set pid in process table -001142: 064210 - isz u.rq+8 " give skip return -001143: 445643 - dzm u.intflg " clear int flag -001144: 145713 - jmp sysexit " return in child process -001145: 600103 - t= t+1 - 000004 - badcal: " bad (unimplemented) system call - clon " clear any pending clock interrupt? -001146: 700044 - -1 -001147: 777777 - dac 7 " set location 7 to -1?! -001150: 040007 - " fall into "save" system call - " Ken says save files could be resumed, and used for checkpointing! - .save: " "sys save" system call - lac d1 " get inode 1 (core file?) -001151: 204117 - jms iget -001152: 103017 - cla -001153: 750000 - jms iwrite; 4096; 4096 " dump core -001154: 103257 -001155: 010000 -001156: 010000 - jms iwrite; userdata; 64 " and user area -001157: 103257 -001160: 005631 -001161: 000100 - jms iput -001162: 103046 - .exit: - lac u.dspbuf -001163: 205712 - sna " process using display? -001164: 741200 - jmp .+3 " no -001165: 601170 - law dspbuf " yes: get default display buffer -001166: 764446 - jms movdsp " move display -001167: 102615 - jms awake -001170: 101304 - lac u.ulistp i -001171: 225647 - and o77777 " mark process table entry free -001172: 504165 - dac u.ulistp i -001173: 065647 - isz u.ulistp -001174: 445647 - dzm u.ulistp i " clear pid in process table -001175: 165647 - jms swap " find a new process to run -001176: 100136 - " exit falls into "rmes" !!! - " rmes system call - " sys smes - " returns with message delivered, or error if process does not exit - " AC/ sending pid - " MQ/ message - .rmes: - jms awake -001177: 101304 - lac o100000 " mark this process "not ready" -001200: 204166 - tad u.ulistp i " by incrementing status -001201: 365647 - dac u.ulistp i -001202: 065647 - law 2 -001203: 760002 - tad u.ulistp -001204: 345647 - dac 9f+t " pointer to msg status in proc table -001205: 044211 - -1 -001206: 777777 - dac 9f+t i " set to -1 (waiting for message) -001207: 064211 - jms swap " switch processes -001210: 100136 - law 2 -001211: 760002 - tad u.ulistp -001212: 345647 - dac 9f+t -001213: 044211 - lac 9f+t i " get msg status word -001214: 224211 - cma " complement (get sender pid) -001215: 740001 - dac u.ac " return in user AC -001216: 045631 - dzm 9f+t i " clear status word -001217: 164211 - isz 9f+t -001220: 444211 - lac 9f+t i " get message -001221: 224211 - dac u.mq " return in user MQ -001222: 045632 - dzm 9f+t i " clear message -001223: 164211 - jmp sysexit -001224: 600103 - t = t+1 - 000005 - "** 01-s1.pdf page 16 - " smes system call - " AC/ pid - " MQ/ message - " sys smes - " returns with message delivered, or error if process does not exit - .smes: - lac u.ac " get pid from user AC -001225: 205631 - sna spa " >0? -001226: 741300 - jms error " no: error -001227: 101531 - jms searchu; 1f " search for process -001230: 101042 -001231: 001237 - law 2 -001232: 760002 - tad u.ulistp -001233: 345647 - dac 9f+t -001234: 044212 - dzm 9f+t i -001235: 164212 - jms error -001236: 101531 - 1: 0 " worker for searchu -001237: 000000 - lac lu+1 " get pid -001240: 205515 - sad u.ac " match? -001241: 545631 - skp " yes -001242: 741000 - jmp 1b i " no -001243: 621237 - lac lu+2 " get mailbox status -001244: 205516 - sad dm1 " -1? -001245: 544204 - jmp 1f " yes -001246: 601265 - lac o100000 " no: bump our process status (to notready?) -001247: 204166 - tad u.ulistp i -001250: 365647 - dac u.ulistp i -001251: 065647 - law 2 -001252: 760002 - tad u.ulistp -001253: 345647 - dac 9f+t -001254: 044212 - lac u.ac -001255: 205631 - dac 9f+t i -001256: 064212 - jms swap -001257: 100136 - law 2 -001260: 760002 - tad u.ulistp -001261: 345647 - dac 9f+t -001262: 044212 - dzm 9f+t i -001263: 164212 - jmp .smes -001264: 601225 - 1: - -3 -001265: 777775 - tad 8 -001266: 340010 - dac 9f+t " pointer to dest process ulist entry -001267: 044212 - lac o700000 " complement process status? marks ready?? -001270: 204200 - tad 9f+t i -001271: 364212 - dac 9f+t i -001272: 064212 - isz 9f+t -001273: 444212 - isz 9f+t " point to mailbox word? -001274: 444212 - lac u.pid " get our pid -001275: 205645 - cma " complement -001276: 740001 - dac 9f+t i " store in mailbox?? -001277: 064212 - isz 9f+t " advance to next word -001300: 444212 - lac u.mq " get user MQ -001301: 205632 - dac 9f+t i " save as message -001302: 064212 - jmp okexit -001303: 600102 - t = t+1 - 000006 - " wake up process hanging on rmes for current process?? - awake: 0 -001304: 000000 - jms searchu; 1f -001305: 101042 -001306: 001310 - jmp awake i -001307: 621304 - 1: 0 " searchu worker -001310: 000000 - lac u.pid " get caller pid -001311: 205645 - sad lu+2 " match mailbox status? -001312: 545516 - skp " yes -001313: 741000 - jmp 1b i " no, return -001314: 621310 - -3 -001315: 777775 - tad 8 " get pointer to process table entry -001316: 340010 - dac 9f+t " save in t0 -001317: 044213 - "** 01-s1.pdf page 17 - lac o700000 -001320: 204200 - tad 9f+t i " complement process status (mark ready)?? -001321: 364213 - dac 9f+t i -001322: 064213 - jmp 1b i " return from worker -001323: 621310 - t = t+1 - 000007 - swr: - sww: - jmp .-4 i -001324: 621320 - .halt; rttyi; rkbdi; rppti; .halt -001325: 001336 -001326: 001337 -001327: 001410 -001330: 001461 -001331: 001336 - .halt; wttyo; wdspo; wppto -001332: 001336 -001333: 001357 -001334: 001451 -001335: 001475 - .halt: jms halt -001336: 102254 - " read routine for ttyin special file - rttyi: - jms chkint1 -001337: 101535 - lac d1 " ** written d3 ttyin2 -001340: 204117 - jms getchar -001341: 101745 - jmp 1f -001342: 601353 - and o177 -001343: 504147 - jms betwen; o101; o132 " upper case? -001344: 101643 -001345: 004141 -001346: 004143 - skp " no -001347: 741000 - tad o40 " yes: convert to lower -001350: 344136 - alss 9 -001351: 660711 - jmp passone -001352: 601523 - 1: - jms sleep; sfiles+0 -001353: 102434 -001354: 005520 - jms swap -001355: 100136 - jmp rttyi -001356: 601337 - " write routine for ttyout special file - wttyo: - jms chkint1 -001357: 101535 - jms forall -001360: 102412 - sna -001361: 741200 - jmp fallr -001362: 602425 - lmq -001363: 652000 - lac sfiles+1 -001364: 205521 - spa -001365: 741100 - jmp 1f -001366: 601376 - xor o400000 -001367: 244173 - dac sfiles+1 -001370: 045521 - lacq -001371: 641002 - tls " load output buffer -001372: 700406 - sad o12 " newline? -001373: 544130 - jms putcr " yes, put CR as well -001374: 104014 - jmp fallr -001375: 602425 - 1: - lacq -001376: 641002 - dac char -001377: 045511 - lac d2 "** written: d6 ttyout -001400: 204120 - jms putchar -001401: 101730 - skp -001402: 741000 - jmp fallr -001403: 602425 - jms sleep; sfiles+1 -001404: 102434 -001405: 005521 - jms swap -001406: 100136 - jmp wttyo -001407: 601357 - " read routine for (display) "keyboard" special file - rkbdi: - jms chkint1 -001410: 101535 - lac d3 -001411: 204121 - jms getchar -001412: 101745 - "** 01-s1.pdf page 18 - jmp 3f -001413: 601445 - lmq -001414: 652000 - and o155 -001415: 504146 - sad o55 -001416: 544137 - jmp 1f " -/=? map to =?-/ ??? -001417: 601425 - lacq -001420: 641002 - and o137 -001421: 504145 - sad o134 -001422: 544144 - skp " \| map to Ll ??? -001423: 741000 - jmp 2f -001424: 601430 - 1: - lacq -001425: 641002 - xor o20 -001426: 244134 - lmq -001427: 652000 - 2: - lacq -001430: 641002 - dac u.limit -001431: 045653 - 1: - jms chkint1 -001432: 101535 - lac u.limit -001433: 205653 - jms dspput -001434: 102540 - jmp 1f -001435: 601442 - jms sleep; sfiles+6 -001436: 102434 -001437: 005526 - jms swap -001440: 100136 - jmp 1b -001441: 601432 - 1: - lac u.limit -001442: 205653 - alss 9 -001443: 660711 - jmp passone -001444: 601523 - 3: - jms sleep; sfiles+2 -001445: 102434 -001446: 005522 - jms swap -001447: 100136 - jmp rkbdi -001450: 601410 - " write routine for (graphic) "display" special file - wdspo: - jms chkint1 -001451: 101535 - jms forall -001452: 102412 - jms dspput " put char (fallr "returns" here) -001453: 102540 - jmp fallr " go back for next (continuation!) -001454: 602425 - jms sleep; sfiles+6 -001455: 102434 -001456: 005526 - jms swap -001457: 100136 - jmp wdspo -001460: 601451 - " read routine for paper tape reader special file - rppti: - lac d4 -001461: 204122 - jms getchar -001462: 101745 - jmp .+3 -001463: 601466 - alss 9 -001464: 660711 - jmp passone -001465: 601523 - lac sfiles+3 -001466: 205523 - sma -001467: 740100 - rsa -001470: 700104 - 1: - jms sleep; sfiles+3 -001471: 102434 -001472: 005523 - jms swap -001473: 100136 - jmp rppti -001474: 601461 - "** 01-s1.pdf page 19 - " write routine for paper tape punch special file - wppto: - jms forall -001475: 102412 - sna -001476: 741200 - jmp fallr -001477: 602425 - lmq -001500: 652000 - lac sfiles+4 -001501: 205524 - spa -001502: 741100 - jmp 1f -001503: 601511 - xor o400000 -001504: 244173 - dac sfiles+4 -001505: 045524 - lacq -001506: 641002 - psa -001507: 700204 - jmp fallr -001510: 602425 - 1: - lacq -001511: 641002 - dac char -001512: 045511 - lac d5 -001513: 204123 - jms putchar -001514: 101730 - skp -001515: 741000 - jmp fallr -001516: 602425 - jms sleep; sfiles+4 -001517: 102434 -001520: 005524 - jms swap -001521: 100136 - jmp wppto -001522: 601475 - " common exit for special file input - passone: - sad o4000 " CTRL/D? -001523: 544154 - jmp okexit " yes: return zero -001524: 600102 - dac u.base i " no: save for user -001525: 065651 - lac d1 " return 1 -001526: 204117 - dac u.ac -001527: 045631 - jmp sysexit -001530: 600103 - error: 0 -001531: 000000 - -1 -001532: 777777 - dac u.ac -001533: 045631 - jmp sysexit -001534: 600103 - chkint1: 0 -001535: 000000 - dzm .insys -001536: 144066 - jms chkint -001537: 100320 - skp -001540: 741000 - jmp .save -001541: 601151 - -1 -001542: 777777 - dac .insys -001543: 044066 - jmp chkint1 i -001544: 621535 - "** 01-s1.pdf page 21 - " s4 - " allocate a free disk block for a file (data or indirect) - alloc: 0 -001545: 000000 - -1 " Decrement the # free block numbers in the cache -001546: 777777 - tad s.nfblks " kept at s.fblks. Jump to 1f if no free blocks left. -001547: 345543 - spa -001550: 741100 - jmp 1f -001551: 601566 - dac s.nfblks " Update the count of free block numbers -001552: 045543 - tad fblksp -001553: 344106 - jms laci -001554: 101635 - dac 9f+t -001555: 044214 - jms copyz; dskbuf; 64 -001556: 101712 -001557: 007700 -001560: 000100 - lac 9f+t -001561: 204214 - jms dskwr -001562: 102146 - dzm .savblk -001563: 144072 - lac 9f+t -001564: 204214 - jmp alloc i " Return from routine -001565: 621545 - 1: - lac s.nxfblk -001566: 205542 - sna -001567: 741200 - jms halt " OUT OF DISK -001570: 102254 - dac s.fblks -001571: 045544 - jms dskrd -001572: 102116 - lac dskbuf -001573: 207700 - dac s.nxfblk -001574: 045542 - jms copy; dskbuf+1; s.fblks+1; 9 -001575: 101667 -001576: 007701 -001577: 005545 -001600: 000011 - lac d10 -001601: 204130 - dac s.nfblks -001602: 045543 - jmp alloc+1 -001603: 601546 - " free the disk block whose number is in AC - free: 0 -001604: 000000 - lmq -001605: 652000 - lac s.nfblks -001606: 205543 - sad d10 -001607: 544130 - jmp 1f -001610: 601620 - tad fblksp -001611: 344106 - dac 9f+t -001612: 044214 - lacq -001613: 641002 - dac 9f+t i -001614: 064214 - dzm .savblk -001615: 144072 - isz s.nfblks -001616: 445543 - jmp free i -001617: 621604 - 1: - lac s.nxfblk -001620: 205542 - dac dskbuf -001621: 047700 - jms copy; s.fblks+1; dskbuf+1; 9 -001622: 101667 -001623: 005545 -001624: 007701 -001625: 000011 - lacq -001626: 641002 - dac s.nxfblk -001627: 045542 - jms dskwr -001630: 102146 - dzm .savblk -001631: 144072 - lac d1 -001632: 204117 - dac s.nfblks -001633: 045543 - jmp free i " Return from the routine -001634: 621604 - t = t+1 - 000010 - " load AC indirect (without using indirect!) - " AC/ address - " jms laci - " AC/ contents of address - laci: 0 -001635: 000000 - and o17777 " clear everything but addr -001636: 504160 - tad o200000 " make into "lac addr" -001637: 344170 - dac .+1 -001640: 041641 - lac .. " fetch -001641: 200000 - jmp laci i " return -001642: 621635 - "** 01-s1.pdf page 22 - " skip if AC between two values (inclusive) - " jms betwen; low_ptr; high_ptr - " - " - " listing has an alternate written in - " (which would require 'lac ptr' instead of 'ptr' args?) - betwen: 0 -001643: 000000 - lmq cmq " get ~AC in MQ -001644: 652004 - lac betwen i " get low_ptr -001645: 221643 - dac 9f+t -001646: 044215 - isz betwen " skip low_ptr -001647: 441643 - lacq " get ~AC (-AC-1) from MQ -001650: 641002 - tad 9f+t i " get low-AC-1 -001651: 364215 - sma " negative (AC >= low)? -001652: 740100 - jmp 1f " no, return w/o skip -001653: 601663 - lac betwen i " fetch high_ptr -001654: 221643 - dac 9f+t -001655: 044215 - isz betwen " skip high_ptr -001656: 441643 - lacq " get -AC-1 -001657: 641002 - tad 9f+t i " add to high value (high-AC-1) -001660: 364215 - cma " complement (AC-high) -001661: 740001 - spa sna " AC-high <= 0? -001662: 741300 - 1: - isz betwen " no: give happy (skip) return -001663: 441643 - lacq " restore ~AC -001664: 641002 - cma " restore AC -001665: 740001 - jmp betwen i " return w/o skip -001666: 621643 - " copy memory - " call: - " jms copy; src; dest; count - copy: 0 -001667: 000000 - -1 -001670: 777777 - tad copy i -001671: 361667 - dac 8 -001672: 040010 - isz copy -001673: 441667 - -1 -001674: 777777 - tad copy i -001675: 361667 - dac 9 -001676: 040011 - isz copy -001677: 441667 - -1 -001700: 777777 - tad copy i -001701: 361667 - cma -001702: 740001 - dac 9f+t -001703: 044215 - isz copy -001704: 441667 - 1: - lac 8 i -001705: 220010 - dac 9 i -001706: 060011 - isz 9f+t -001707: 444215 - jmp 1b -001710: 601705 - jmp copy i -001711: 621667 - " copy zeroes (clear memory) - " call: - " jms copyz; pointer; count - copyz: 0 -001712: 000000 - -1 -001713: 777777 - tad copyz i " get call PC -001714: 361712 - dac 8 " save in index (pre-increments) -001715: 040010 - isz copyz " skip pointer -001716: 441712 - -1 -001717: 777777 - tad copyz i " get count-1 -001720: 361712 - cma " get negative count -001721: 740001 - dac 9f+t " save in t0 -001722: 044215 - isz copyz " skip count -001723: 441712 - 1: - dzm 8 i " zero word -001724: 160010 - isz 9f+t " done? -001725: 444215 - jmp 1b " no: loop -001726: 601724 - jmp copyz i " return -001727: 621712 - t = t+1 - 000011 - " put queued character - " CALLED FROM PI: AVOIDS INDIRECT!! - " queue number in AC - putchar: 0 -001730: 000000 - "** 01-s1.pdf page 23 - dac 9f+t -001731: 044216 - cla -001732: 750000 - jms takeq -001733: 101757 - jmp putchar i -001734: 621730 - tad o40001 -001735: 344163 - dac .+4 -001736: 041742 - lac 9f+t -001737: 204216 - jms putq -001740: 102011 - lac char -001741: 205511 - dac q2+1 .. -001742: 044301 - isz putchar -001743: 441730 - jmp putchar i -001744: 621730 - t = t+1 - 000012 - " get queued character - " CALLED FROM PI: AVOIDS INDIRECT!! - " queue number in AC: - " 1: tty input - " 2: tty output - " 3: display keyboard - " 4: paper tape reader - " 5: paper tape punch - getchar: 0 -001745: 000000 - jms takeq -001746: 101757 - jmp i getchar -001747: 621745 - tad o200001 -001750: 344171 - dac .+3 -001751: 041754 - cla -001752: 750000 - jms putq -001753: 102011 - lac q2+1 .. -001754: 204301 - isz getchar -001755: 441745 - jmp i getchar -001756: 621745 - " CALLED FROM PI: AVOIDS INDIRECT!! - takeq: 0 -001757: 000000 - rcl -001760: 744010 - tad lacq1 -001761: 344110 - dac .+7 -001762: 041771 - tad o640000 -001763: 344177 - dac .+17 -001764: 042005 - tad d1 -001765: 344117 - dac .+14 -001766: 042004 - tad o500000 -001767: 344174 - dac .+5 -001770: 041775 - lac q1 .. -001771: 204260 - sna -001772: 741200 - jmp takeq i -001773: 621757 - dac lnkaddr -001774: 045510 - sad q1+1 .. -001775: 544261 - jmp .+5 -001776: 602003 - tad o200000 -001777: 344170 - dac .+1 -002000: 042001 - lac q2 .. -002001: 204300 - jmp .+3 -002002: 602005 - cla -002003: 750000 - dac q1+1 .. -002004: 044261 - dac q1 .. -002005: 044260 - isz takeq -002006: 441757 - lac lnkaddr -002007: 205510 - jmp i takeq -002010: 621757 - putq: 0 -002011: 000000 - rcl -002012: 744010 - tad dacq1 -002013: 344107 - dac .+14 -002014: 042032 - tad d1 -002015: 344117 - dac .+13 -002016: 042033 - tad o140000 -002017: 344167 - dac .+1 -002020: 042021 - lac q1-1 .. -002021: 204257 - "** 01-s1.pdf page 24 - sna -002022: 741200 - jmp .+6 -002023: 602031 - tad o40000 -002024: 344162 - dac .+2 -002025: 042027 - lac lnkaddr -002026: 205510 - dac q2 .. -002027: 044300 - jmp .+3 -002030: 602033 - lac lnkaddr -002031: 205510 - dac q1 .. -002032: 044260 - dac q1+1 .. -002033: 044261 - jmp putq i -002034: 622011 - srcdbs: 0 -002035: 000000 - dac 9f+t+2 "* lmq -002036: 044221 - -ndskbs -002037: 777774 - dac 9f+t -002040: 044217 - law dskbs "* -1 dac 8 written -002041: 765067 - dac 9f+t+1 "* lacq -002042: 044220 - 1: - lac 9f+t+2 "** crossed out -002043: 204221 - sad 9f+t+1 "** isz 8 written -002044: 544220 - jmp srcdbs i -002045: 622035 - law 65 "** ??? crossed out -002046: 760101 - tad 9f+t+1 "** crossed out isz 8 written -002047: 344220 - isz 9f+t+1 -002050: 444220 - isz 9f+t -002051: 444217 - jmp 1b -002052: 602043 - isz srcdbs -002053: 442035 - jmp srcdbs i -002054: 622035 - collapse: 0 -002055: 000000 - cla -002056: 750000 - jms srcdbs -002057: 102035 - jmp 1f -002060: 602063 - law dskbs -002061: 765067 - dac 9f+t+1 "** 9f+t+1 crossed out: 8 written in -002062: 044220 - 1: - lac 9f+t+1 "** 9f+t+1 crossed out: 8 written in -002063: 204220 - dac 0f+1 -002064: 042100 - tad d65 "** crossed out: d2-- original obscured -002065: 344141 - dac 0f -002066: 042077 - cma -002067: 740001 - tad d1 -002070: 344117 - tad edskbsp -002071: 345473 - and o17777 -002072: 504160 - sna -002073: 741200 - jmp 0f+3 -002074: 602102 - dac 0f+2 -002075: 042101 - jms copy; 0:..; ..; .. -002076: 101667 -002077: 000000 -002100: 000000 -002101: 000000 - -65 -002102: 777677 - tad edskbsp -002103: 345473 - dac 9f+t -002104: 044217 - tad d1 -002105: 344117 - dac 0f -002106: 042113 - lac dskaddr -002107: 205512 - dac 9f+t i -002110: 064217 - jms copy; dskbuf; 0:..; 64 -002111: 101667 -002112: 007700 -002113: 000000 -002114: 000100 - jmp collapse i -002115: 622055 - dskrd: 0 -002116: 000000 - jms betwen; d2; d7999 -002117: 101643 -002120: 004120 -002121: 004155 - "** 01-s1.pdf page 25 - jms halt -002122: 102254 - sad dskaddr -002123: 545512 - jmp dskrd i -002124: 622116 - dac dskaddr -002125: 045512 - jms srcdbs -002126: 102035 - jmp 1f -002127: 602134 - lac dskaddr -002130: 205512 - jms dskio; 06000 -002131: 102162 -002132: 006000 - jmp 2f -002133: 602144 - 1: - dzm 9f+t+1 i -002134: 164220 - law 1 -002135: 760001 - tad 9f+t+1 -002136: 344220 - dac .+2 -002137: 042141 - jms copy; ..; dskbuf; 64 -002140: 101667 -002141: 000000 -002142: 007700 -002143: 000100 - 2: - jms collapse -002144: 102055 - jmp dskrd i -002145: 622116 - " write a file block (data, inode or indirect) - " AC/ block - dskwr: 0 -002146: 000000 - jms betwen; d2; d7999 -002147: 101643 -002150: 004120 -002151: 004155 - jms halt -002152: 102254 - jms dskio; 07000 -002153: 102162 -002154: 007000 - lac dskaddr -002155: 205512 - jms srcdbs -002156: 102035 - dzm 9f+t+1 i -002157: 164220 - jms collapse -002160: 102055 - jmp dskwr i -002161: 622146 - t = t+3 - 000015 - " AC/ block - " jms dskio; dsld_bits - dskio: 0 -002162: 000000 - dac dskaddr -002163: 045512 - cll; idiv; 80 -002164: 744000 -002165: 653323 -002166: 000120 - dac 9f+t -002167: 044222 - lacq -002170: 641002 - idiv; 10 -002171: 653323 -002172: 000012 - dac 9f+t+1 -002173: 044223 - lls 22 -002174: 640626 - xor 9f+t+1 -002175: 244223 - als 8 -002176: 640710 - dac 9f+t+1 -002177: 044223 - lac 9f+t -002200: 204222 - idiv; 10 -002201: 653323 -002202: 000012 - dac 9f+t -002203: 044222 - lls 22 -002204: 640626 - xor 9f+t -002205: 244222 - xor 9f+t+1 -002206: 244223 - xor o200000 -002207: 244170 - dac 9f+t -002210: 044222 - jms dsktrans; -64; dskbuf; 9f+t; dskio -002211: 102220 -002212: 777700 -002213: 007700 -002214: 004222 -002215: 002162 - isz dskio -002216: 442162 - jmp dskio i -002217: 622162 - t = t+1 - 000016 - " called with: - " jms dsktrans; -WC; MAC; addr_ptr?; dsld_ptr - dsktrans: 0 -002220: 000000 - -10 -002221: 777766 - dac 9f+t -002222: 044223 - 1: - -1 -002223: 777777 - tad dsktrans -002224: 342220 - dac 12 -002225: 040014 - "** 01-s1.pdf page 26 - dscs " clear status register -002226: 707141 - lac 12 i -002227: 220014 - dslw " load WC -002230: 707124 - lac 12 i -002231: 220014 - dslm " load MAC -002232: 707142 - lac 12 i -002233: 220014 - jms laci -002234: 101635 - dsld " load TA & SA -002235: 707104 - dzm .dskb -002236: 144074 - lac 12 i -002237: 220014 - jms laci -002240: 101635 - jms laci -002241: 101635 - dsls " load status -002242: 707144 - lac .dskb " check for interrupt -002243: 204074 - sna -002244: 741200 - jmp .-2 -002245: 602243 - lac .dske " get status from interrupt -002246: 204075 - sma -002247: 740100 - jmp 12 i " return -002250: 620014 - isz 9f+t -002251: 444223 - jmp 1b -002252: 602223 - jms halt " 10 disk errors -002253: 102254 - t = t+1 - 000017 - halt: 0 -002254: 000000 - isz 9f+t " spin for a while (process interrupts) -002255: 444224 - jmp .-1 -002256: 602255 - iof " disable interrupts -002257: 700002 - hlt " halt -002260: 740040 - jms copy; law; 4096; 4096 " continued: copy system up to user memory? -002261: 101667 -002262: 760000 -002263: 010000 -002264: 010000 - hlt; jmp .-1 " halt for good -002265: 740040 -002266: 602265 - t = t+1 - 000020 - "** 01-s1.pdf page 28 - " s5 - " read/write a process from/to swap space - " call: - " AC/ first word of process table - " jms dskswap; DSLD bits - dskswap: 0 -002267: 000000 - cll; als 3 " get process disk address -002270: 744000 -002271: 640703 - dac 9f+t " save in t0 -002272: 044225 - jms dsktrans; -64; userdata; 9f+t; dskswap " read/write user area -002273: 102220 -002274: 777700 -002275: 005631 -002276: 004225 -002277: 002267 - lac 9f+t " get swap addr back -002300: 204225 - tad o20 " advance by 16?? -002301: 344134 - dac 9f+t " save -002302: 044225 - jms dsktrans; -4096; 4096; 9f+t; dskswap " read/write user memory -002303: 102220 -002304: 770000 -002305: 010000 -002306: 004225 -002307: 002267 - isz dskswap " skip bits -002310: 442267 - jmp dskswap i " return -002311: 622267 - t = t+1 - 000021 - access: 0 -002312: 000000 - lac i.flags " get inode flags -002313: 205732 - lmq " save in MQ -002314: 652000 - lac u.uid " get user id -002315: 205644 - spa " negative? -002316: 741100 - jmp access i " yes: super user, return -002317: 622312 - sad i.uid " compare to file owner -002320: 545742 - lrs 2 " same: shift flags down two -002321: 640502 - lacq " get inode flags back -002322: 641002 - and mode " AND with mode from system call -002323: 505500 - sza " access allowed? -002324: 740200 - jmp access i " yes: return -002325: 622312 - jms error " no: return error from system call -002326: 101531 - fassign: 0 -002327: 000000 - -10 " loop count -002330: 777766 - dac 9f+t " in t0 -002331: 044226 - 1: - lac 9f+t " get count -002332: 204226 - tad d10 " turn into fd -002333: 344130 - jms fget " fetch open file into "fnode" -002334: 102360 - jms halt " will not happen -002335: 102254 - lac f.flags " get fnode flags -002336: 205757 - sma " sign bit set (active)? -002337: 740100 - jmp 1f " no: free -002340: 602344 - isz 9f+t " increment loop count & loop until zero -002341: 444226 - jmp 1b -002342: 602332 - jmp fassign i -002343: 622327 - 1: - lac mode " get mode from system call -002344: 205500 - xor o400000 " set sign bit -002345: 244173 - dac f.flags " save in fnode -002346: 045757 - lac ii " get i-number -002347: 205731 - dac f.i " save in fnode -002350: 045761 - lac 9f+t -002351: 204226 - tad d10 " get fd -002352: 344130 - dac u.ac " return in user AC -002353: 045631 - dzm f.badd " clear file offset in fnode -002354: 145760 - jms fput " copy fnode back into u.ofiles -002355: 102402 - isz fassign " give skip return -002356: 442327 - jmp fassign i -002357: 622327 - t = t+1 - 000022 - " load fnode (open file entry) from u.ofiles - " AC/ user fd - " jms fget - " bad fd - " return with fnode set - fget: 0 -002360: 000000 - jms betwen; d0; d9 " fd 0..9? -002361: 101643 -002362: 004116 -002363: 004127 - jmp fget i " no, return -002364: 622360 - cll; mul; 3 " multiply by three -002365: 744000 -002366: 653122 -002367: 000003 - lacq -002370: 641002 - "** 01-s1.pdf page 29 - tad ofilesp " get pointer into u.ofiles -002371: 344101 - dac 9f+t " save in t0 -002372: 044227 - dac .+2 " save as copy source -002373: 042375 - jms copy; ..; fnode; 3 " copy to "fnode" -002374: 101667 -002375: 000000 -002376: 005757 -002377: 000003 - isz fget " give skip return -002400: 442360 - jmp fget i -002401: 622360 - " copy fnode back to u.ofiles - " uses temp value set by "fget" - " (fget and fput calls must be paired) - fput: 0 -002402: 000000 - lac 9f+t -002403: 204227 - dac .+3 -002404: 042407 - jms copy; fnode; ..; 3 -002405: 101667 -002406: 005757 -002407: 000000 -002410: 000003 - jmp fput i -002411: 622402 - t = t+1 - 000023 - " helper for special device write routines - " return to caller with next character to write: - " when done return character count to user. - forall: 0 -002412: 000000 - lac u.base -002413: 205651 - sad u.limit -002414: 545653 - jmp 1f " done -002415: 602431 - lac u.base " get base pointer (again?) -002416: 205651 - ral " rotate MSB into LINK -002417: 740010 - lac u.base i " fetch word via base pointer -002420: 225651 - snl " link set? -002421: 740400 - lrs 9 " no: get low 9 bits -002422: 640511 - and o777 " mask to 9 bits -002423: 504152 - jmp forall i " return char -002424: 622412 - fallr: " jump here for subsequent characters - lac u.base " get base -002425: 205651 - add o400000 " advance pointer -002426: 304173 - dac u.base " start from top -002427: 045651 - jmp forall+1 -002430: 602413 - 1: - lac u.count -002431: 205652 - dac u.ac -002432: 045631 - jmp sysexit -002433: 600103 - " wait for a condition variable - " call: - " jmr sleep; sfiles+N - sleep: 0 -002434: 000000 - law ulist-1 " pointer to process table -002435: 765560 - dac 8 " in index register -002436: 040010 - lac o200000 -002437: 204170 - lmq " get 200000 in MQ -002440: 652000 - 1: - lac u.ulistp i " get current process status word -002441: 225647 - sad 8 i " compare to next process table entry -002442: 560010 - jmp 1f " match -002443: 602452 - isz 8 " no match: skip other 3 words of process table -002444: 440010 - isz 8 -002445: 440010 - isz 8 -002446: 440010 - cla; lrs 1 " shift MQ down one -002447: 750000 -002450: 640501 - jmp 1b " loop -002451: 602441 - 1: - tad o100000 " mark process not ready -002452: 344166 - dac u.ulistp i -002453: 065647 - lac sleep i " get sleep variable pointer -002454: 222434 - dac 9f+t -002455: 044230 - lac 9f+t i " get sleep variable contents -002456: 224230 - omq " or in MQ (bit vector of processes waiting) -002457: 640002 - dac 9f+t i " save -002460: 064230 - isz sleep " skip sleep variable pointer -002461: 442434 - jmp sleep i -002462: 622434 - t = t+1 - 000024 - "** 01-s1.pdf page 30 - " look for a free directory entry?? - dslot: 0 -002463: 000000 - dzm di -002464: 145746 - skp -002465: 741000 - 1: - isz di -002466: 445746 - lac di -002467: 205746 - jms dget " get directory entry -002470: 103104 - lac d.i " get i number -002471: 205747 - sza " zero (free)? -002472: 740200 - jmp 1b " no keep looking -002473: 602466 - jmp dslot i " yes: return index -002474: 622463 - " called with: - " AC/ mode - " name/ file name - icreat: 0 -002475: 000000 - dac 9f+t " save mode in t0 -002476: 044231 - jms dslot -002477: 102463 - lac o20 " look for a free inode starting at 17 -002500: 204134 - dac ii -002501: 045731 - 1: - isz ii -002502: 445731 - lac ii -002503: 205731 - jms iget -002504: 103017 - lac i.flags -002505: 205732 - spa " "in use" bit bit clear? -002506: 741100 - jmp 1b " no, guess again -002507: 602502 - lac ii -002510: 205731 - dac d.i -002511: 045747 - jms copy; name; d.name; 4 -002512: 101667 -002513: 005504 -002514: 005750 -002515: 000004 - isz s.uniq " get a new unique number -002516: 445556 - lac s.uniq -002517: 205556 - dac d.uniq " save in directory entry -002520: 045754 - dac i.uniq " and inode -002521: 045745 - lac 9f+t " get mode -002522: 204231 - xor o400000 " set "in use" -002523: 244173 - dac i.flags -002524: 045732 - lac u.uid " get user -002525: 205644 - dac i.uid " set owner -002526: 045742 - -1 -002527: 777777 - dac i.nlks " -1 links?! -002530: 045743 - dzm i.size " empty -002531: 145744 - jms copyz; i.dskps; 7 " clear disk block numbers -002532: 101712 -002533: 005733 -002534: 000007 - jms iput " write inode -002535: 103046 - jms dput " write directory entry -002536: 103136 - jmp icreat i -002537: 622475 - t = t+1 - 000025 - " output character to display - dspput: 0 -002540: 000000 - and o177 " mask to 7 bits -002541: 504147 - sna -002542: 741200 - jmp i dspput " discard NUL -002543: 622540 - sad o14 " Form Feed? -002544: 544131 - jmp 1f " yes -002545: 602560 - lmq " save char in MQ -002546: 652000 - sad o12 " newline? -002547: 544130 - jms dspnl " yes -002550: 102574 - lac dsploc i " get display word -002551: 224444 - sad o400000 " TRAP? -002552: 544173 - jmp dspleft " yes (first character) -002553: 602562 - omq " no: or in second character -002554: 640002 - dac dsploc i " save both characters -002555: 064444 - isz dsploc " advance display pointer -002556: 444444 - jmp i dspput -002557: 622540 - "** 01-s1.pdf page 31 - 1: " here on form feed - jms dspinit " clear display -002560: 102606 - jmp dspput i -002561: 622540 - dspleft: - lac dsploc " get display pointer -002562: 204444 - sad edspbuf " end of the buffer? -002563: 544104 - jmp 1f " yes: light up a button!? -002564: 602602 - dac 8 " no: store in index -002565: 040010 - lac o400000 " get TRAP instruction -002566: 204173 - dac 8 i " store as next -002567: 060010 - cla; llss 18+7 " shift MQ upto "char1" position -002570: 750000 -002571: 660631 - dac dsploc i " store word with char1 -002572: 064444 - jmp dspput i -002573: 622540 - dspnl: 0 " only called once! -002574: 000000 - lac dsplno " get display line number -002575: 204445 - sad d33 " 33? -002576: 544142 - jmp 1f " yes: light a button! -002577: 602602 - isz dsplno " no: increment line number -002600: 444445 - jmp dspnl i -002601: 622574 - 1: - lac o2000 " get bit for push button 7 -002602: 204153 - wbl " write button lights -002603: 704424 - isz dspput -002604: 442540 - jmp dspput i -002605: 622540 - dspinit: 0 -002606: 000000 - lac dspbufp3 " get pointer to dspbuf+3 -002607: 204105 - dac dsploc " store location -002610: 044444 - lac o400000 " display "TRAP" instruction (end of list) -002611: 204173 - dac dspbuf+3 " save in buffer -002612: 044451 - dzm dsplno " clear display line number -002613: 144445 - jmp dspinit i -002614: 622606 - " "move display" (change display buffer pointer) - " called with new buffer pointer in AC?? - movdsp: 0 -002615: 000000 - iof -002616: 700002 - cdf -002617: 700501 - dac dspbufp -002620: 045475 - -1 -002621: 777777 - dac .dspb -002622: 045536 - ion -002623: 700042 - jmp movdsp i -002624: 622615 - " fetch user argument from word after "sys" call, return in AC - arg: 0 -002625: 000000 - lac u.rq+8 i " fetch word after return PC -002626: 225643 - isz u.rq+8 " bump PC -002627: 445643 - jmp arg i -002630: 622625 - " fetch user pathname argument from pointer word after "sys" call - " into "name" and look it up (in current working directory) - " if lookup fails: returns error to user (not caller) - " if lookup OK: returns with file i-inode read (into "inode") - " and i-number in AC - argname: 0 -002631: 000000 - jms arg " fetch name pointer -002632: 102625 - dac .+2 " save as copy source -002633: 042635 - jms copy; ..; name; 4 " copy to "name" -002634: 101667 -002635: 000000 -002636: 005504 -002637: 000004 - lac u.cdir " get CWD -002640: 205646 - jms namei; name " look up file -002641: 102737 -002642: 005504 - jms error " failed: return error directly to user -002643: 101531 - jmp argname i -002644: 622631 - seektell: 0 -002645: 000000 - jms arg -002646: 102625 - dac u.base -002647: 045651 - "** 01-s1.pdf page 32 - jms arg -002650: 102625 - dac u.limit -002651: 045653 - jms finac -002652: 103370 - lac u.limit -002653: 205653 - sna -002654: 741200 - jmp seektell i -002655: 622645 - sad d1 -002656: 544117 - jmp .+3 -002657: 602662 - lac i.size -002660: 205744 - jmp seektell i -002661: 622645 - lac f.badd -002662: 205760 - jmp seektell i -002663: 622645 - " system call helper - " fetch system call argument name pointer from after "sys" call - " read inode; if current user is not owner, return error to user - isown: 0 -002664: 000000 - jms argname -002665: 102631 - jms iget -002666: 103017 - lac u.uid " get user id -002667: 205644 - sma " super user? -002670: 740100 - sad i.uid " no: does user own file? -002671: 545742 - skp " yes, or super user -002672: 741000 - jms error " not super user, not owner: return error -002673: 101531 - jmp isown i -002674: 622664 - "** 01-s1.pdf page 34 - " s6 - itrunc: 0 -002675: 000000 - -7 " loop 7 times -002676: 777771 - dac 9f+t " in t0 -002677: 044232 - lac idskpp " pointer to inode block numbers -002700: 204102 - dac 9f+t+1 " save in t1 -002701: 044233 - 1: " top of loop for inode blocks - lac 9f+t+1 i " fetch next block number -002702: 224233 - sna " allocated? -002703: 741200 - jmp 4f " no -002704: 602730 - lac i.flags " check flags -002705: 205732 - and o200000 -002706: 504170 - sna " large file? -002707: 741200 - jmp 3f " no -002710: 602725 - -64 " loop 64 times -002711: 777700 - dac 9f+t+2 " save count in t2 -002712: 044234 - lac dskbufp " get pointer to dskbuf -002713: 204103 - dac 9f+t+3 " in t3 -002714: 044235 - 2: " inner loop for indirect blocks - lac 9f+t+1 i " get indirect block number -002715: 224233 - jms dskrd " read it -002716: 102116 - lac 9f+t+3 i " read block number from indirect -002717: 224235 - sza " free? -002720: 740200 - jms free " no: free it -002721: 101604 - isz 9f+t+3 " increment pointer into indirect block -002722: 444235 - isz 9f+t+2 " increment loop counter, skip if done -002723: 444234 - jmp 2b " not done: loop -002724: 602715 - 3: " here with small file - lac 9f+t+1 i " load block number -002725: 224233 - jms free " free it -002726: 101604 - dzm 9f+t+1 i " clear block number -002727: 164233 - 4: " bottom of loop for inode block ptrs - isz 9f+t+1 " increment block pointer -002730: 444233 - isz 9f+t " increment count, skip if done -002731: 444232 - jmp 1b " not done -002732: 602702 - lac i.flags -002733: 205732 - and o577777 " clear large file flag -002734: 504175 - dac i.flags -002735: 045732 - jmp itrunc i -002736: 622675 - t = t+4 - 000031 - " Given a pointer to a 4-word filename after - " the jms to namei, and with AC holding the - " i-num of the directory it is in, return the - " i-number of the filename (and skip) - " return zero in AC if not found (no skip) - namei: 0 -002737: 000000 - jms iget " Get the inode from the i-num in the AC -002740: 103017 - -1 -002741: 777777 - tad namei i " get argptr-1 -002742: 362737 - dac 9f+t+1 " save in t1 -002743: 044237 - isz namei " skip over argument -002744: 442737 - lac i.flags -002745: 205732 - and o20 " get directory bit -002746: 504134 - sna " Is this a directory? -002747: 741200 - jmp namei i " no: return without skip -002750: 622737 - -8 -002751: 777770 - tad i.size " Subtract 8 from the file's size -002752: 345744 - cma -002753: 740001 - lrss 3 -002754: 660503 - dac 9f+t " negative count of directory entries in t0 -002755: 044236 - sna " any? -002756: 741200 - jmp namei i " no: return without skip -002757: 622737 - dzm di " Store zero in di -002760: 145746 - 1: - lac di -002761: 205746 - "** 01-s1.pdf page 35 - jms dget " Get a directory entry from the dirblock -002762: 103104 - lac d.i " get i-num -002763: 205747 - sna " in use? -002764: 741200 - jmp 2f " no -002765: 603013 - lac 9f+t+1 " get argptr-1 -002766: 204237 - dac 8 -002767: 040010 - lac d.name " Compare the four words of the filename in the -002770: 205750 - sad 8 i " directory entry with the argument to namei -002771: 560010 - skp -002772: 741000 - jmp 2f " No match -002773: 603013 - lac d.name+1 -002774: 205751 - sad 8 i -002775: 560010 - skp -002776: 741000 - jmp 2f " No match -002777: 603013 - lac d.name+2 -003000: 205752 - sad 8 i -003001: 560010 - skp -003002: 741000 - jmp 2f " No match -003003: 603013 - lac d.name+3 -003004: 205753 - sad 8 i -003005: 560010 - skp -003006: 741000 - jmp 2f " No match -003007: 603013 - lac d.i " A match. Get the i-number into AC -003010: 205747 - isz namei " give skip return -003011: 442737 - jmp namei i -003012: 622737 - 2: - isz di " No match, move up to the next direntry -003013: 445746 - isz 9f+t " any left? -003014: 444236 - jmp 1b " yes: keep going -003015: 602761 - jmp namei i " Didn't find it, return zero in AC (without skip) -003016: 622737 - t = t+2 - 000033 - " Given an i-number in AC, fetch that i-node - " from disk and store it in the inode buffer - iget: 0 -003017: 000000 - dac ii " Store the i-number in ii -003020: 045731 - cll; idiv; 5 " Divide by 5: 5 inodes in a block -003021: 744000 -003022: 653323 -003023: 000005 - dac 9f+t " Store the remainder in 9f+t: the i-node -003024: 044240 - lacq " number within the block -003025: 641002 - tad d2 " Add 2 to the quotient to get the block number -003026: 344120 - dac 9f+t+1 " and store in 9f+t+1 -003027: 044241 - jms dskrd " Get the block -003030: 102116 - lac 9f+t -003031: 204240 - cll; mul; 12 " Multiply the i-num within the block by 12 -003032: 744000 -003033: 653122 -003034: 000014 - lacq " to get the offset into the block -003035: 641002 - tad dskbufp " Add on the base of the disk buffer -003036: 344103 - dac 9f+t -003037: 044240 - dac .+2 -003040: 043042 - jms copy; ..; inode; 12 " Copy 12 words from buffer to inode -003041: 101667 -003042: 000000 -003043: 005732 -003044: 000014 - jmp iget i " and return -003045: 623017 - iput: 0 -003046: 000000 - lac 9f+t+1 -003047: 204241 - jms dskrd -003050: 102116 - law inode-1 -003051: 765731 - dac 8 -003052: 040010 - -1 -003053: 777777 - tad 9f+t -003054: 344240 - dac 9 -003055: 040011 - -12 -003056: 777764 - dac 9f+t+2 -003057: 044242 - 1: - lac 8 i -003060: 220010 - "** 01-s1.pdf page 36 - sad 9 i -003061: 560011 - skp -003062: 741000 - jmp 2f -003063: 603067 - isz 9f+t+2 -003064: 444242 - jmp 1b -003065: 603060 - jmp iput i -003066: 623046 - 2: - -1 -003067: 777777 - tad 8 -003070: 340010 - dac 8 -003071: 040010 - -1 -003072: 777777 - tad 9 -003073: 340011 - dac 9 -003074: 040011 - 1: - lac 8 i -003075: 220010 - dac 9 i -003076: 060011 - isz 9f+t+2 -003077: 444242 - jmp 1b -003100: 603075 - lac 9f+t+1 -003101: 204241 - jms dskwr -003102: 102146 - jmp iput i -003103: 623046 - t = t+3 - 000036 - " allocate directory entry - " AC/ entry number - dget: 0 -003104: 000000 - dac di " save entry number -003105: 045746 - alss 3 " get word number -003106: 660703 - dac 9f+t " save in t0 -003107: 044243 - jms pget " get free disk block -003110: 103152 - dac 9f+t+1 " save in t1 -003111: 044244 - jms dskrd -003112: 102116 - lac 9f+t -003113: 204243 - and o77 -003114: 504140 - tad dskbufp -003115: 344103 - dac 9f+t+2 -003116: 044245 - dac .+2 -003117: 043121 - jms copy; ..; dnode; 8 -003120: 101667 -003121: 000000 -003122: 005747 -003123: 000010 - lac 9f+t -003124: 204243 - tad d8 -003125: 344126 - jms betwen; d0; i.size -003126: 101643 -003127: 004116 -003130: 005744 - skp -003131: 741000 - jmp dget i -003132: 623104 - jms dacisize -003133: 103402 - dzm d.i -003134: 145747 - jmp dget i -003135: 623104 - dput: 0 -003136: 000000 - lac 9f+t+1 -003137: 204244 - jms dskrd -003140: 102116 - lac 9f+t+2 -003141: 204245 - dac .+3 -003142: 043145 - jms copy; dnode; ..; 8 -003143: 101667 -003144: 005747 -003145: 000000 -003146: 000010 - lac 9f+t+1 -003147: 204244 - jms dskwr -003150: 102146 - jmp dput i -003151: 623136 - t = t+3 - 000041 - " get a block number for a file, returns disk block number - " allocates block if not allocated - " AC/ file offset - " jms pget - " AC/ disk block number - pget: 0 -003152: 000000 - lrss 6 " convert offset to block -003153: 660506 - dac 9f+t " save as t0 -003154: 044246 - lac i.flags -003155: 205732 - "** 01-s1.pdf page 37 - and o200000 -003156: 504170 - sza " large file bit set? -003157: 740200 - jmp 2f " yes -003160: 603220 - lac 9f+t " no: small file -003161: 204246 - jms betwen; d0; d6 " block 0..6? -003162: 101643 -003163: 004116 -003164: 004124 - jmp 1f " no -003165: 603175 - tad idskpp " make into block number pointer -003166: 344102 - dac 9f+t " save in t0 -003167: 044246 - lac 9f+t i " get disk block number -003170: 224246 - sna " allocated? -003171: 741200 - jms alloc " no: allocate now -003172: 101545 - dac 9f+t i " save (new) disk block number -003173: 064246 - jmp pget i " return disk block number -003174: 623152 - 1: " here when file block>=7, not "large" - jms alloc " allocate indirect block -003175: 101545 - dac 9f+t+1 " save as t1 -003176: 044247 - jms copy; i.dskps; dskbuf; 7 " copy all the disk block numbers -003177: 101667 -003200: 005733 -003201: 007700 -003202: 000007 - jms copyz; dskbuf+7; 64-7 " zero rest of indirect block -003203: 101712 -003204: 007707 -003205: 000071 - lac 9f+t+1 " get indirect block number back -003206: 204247 - jms dskwr " write indirect block to disk -003207: 102146 - lac 9f+t+1 -003210: 204247 - dac i.dskps " save indirect as new first block -003211: 045733 - jms copyz; i.dskps+1; 6 " zero rest of block pointers -003212: 101712 -003213: 005734 -003214: 000006 - lac i.flags -003215: 205732 - xor o200000 " set "large file" -003216: 244170 - dac i.flags -003217: 045732 - 2: " here with "large file" - lac 9f+t " get file block number -003220: 204246 - lrss 6 " divide by 64 (indirects/block) -003221: 660506 - jms betwen; d0; d6 " ok now? -003222: 101643 -003223: 004116 -003224: 004124 - jms halt " file too big " no, you lose! -003225: 102254 - tad idskpp " yes: get indirect block pointer -003226: 344102 - dac 9f+t+1 " save in t1 -003227: 044247 - lac 9f+t+1 i " get indirect block number -003230: 224247 - sna " allocated? -003231: 741200 - jms alloc " no, get it now -003232: 101545 - dac 9f+t+1 i " save (new) indirect block -003233: 064247 - dac 9f+t+2 " save as t2 -003234: 044250 - jms dskrd " read indirect block -003235: 102116 - lac 9f+t " get original block number -003236: 204246 - and o77 " mod by 64 -003237: 504140 - tad dskbufp " get pointer to disk block number -003240: 344103 - dac 9f+t+1 " save as t1 -003241: 044247 - lac 9f+t+1 i " fetch disk block number -003242: 224247 - sza " allocated? -003243: 740200 - jmp pget i " yes: return -003244: 623152 - jms alloc " no: allocate data block -003245: 101545 - dac 9f+t " save as t0 -003246: 044246 - lac 9f+t+2 " get indirect block number -003247: 204250 - jms dskrd " read it in -003250: 102116 - lac 9f+t " get data block number -003251: 204246 - dac 9f+t+1 i " save data block number -003252: 064247 - lac 9f+t+2 -003253: 204250 - jms dskwr " write indirect block back -003254: 102146 - lac 9f+t " get data block back -003255: 204246 - jmp pget i " return it -003256: 623152 - t = t+3 - 000044 - iwrite: 0 -003257: 000000 - dac 9f+t " save arg in t0 -003260: 044251 - lac iwrite " load return address -003261: 203257 - "** 01-s1.pdf page 38 - dac iread " save as iread return addr -003262: 043266 - lac cskp " load skip instruction -003263: 203335 - dac iwrite " save as iwrite instruction -003264: 043257 - jmp 1f -003265: 603272 - " iread from file referenced by loaded inode - " AC/ file offset - " jms iread; addr; count - iread: 0 -003266: 000000 - dac 9f+t " save offset in t0 -003267: 044251 - lac cnop " get nop -003270: 203442 - dac iwrite " save as iwrite instruction -003271: 043257 - 1: - -1 -003272: 777777 - tad iread i " get word before return addr -003273: 363266 - dac 10 " store in index 10 & 11 -003274: 040012 - dac 11 -003275: 040013 - isz iread " increment return addr -003276: 443266 - lac iread i " load addr -003277: 223266 - dac 9f+t+1 " save in t1 -003300: 044252 - isz iread " increment return addr -003301: 443266 - lac o70000 -003302: 204164 - xct iwrite " skip if write -003303: 403257 - lac i.size " read: get file size -003304: 205744 - cma -003305: 740001 - tad 9f+t " add offset -003306: 344251 - cma -003307: 740001 - jms betwen; d0; 9f+t+1 -003310: 101643 -003311: 004116 -003312: 004252 - lac 9f+t+1 -003313: 204252 - dac 9f+t+2 -003314: 044253 - cma -003315: 740001 - tad d1 -003316: 344117 - sna -003317: 741200 - jmp iread i -003320: 623266 - dac 9f+t+1 -003321: 044252 - 1: - lac 9f+t -003322: 204251 - jms pget -003323: 103152 - dac 9f+t+3 -003324: 044254 - jms dskrd -003325: 102116 - lac 9f+t -003326: 204251 - and o77 -003327: 504140 - tad dskbufp -003330: 344103 - tad dm1 -003331: 344204 - xct iwrite -003332: 403257 - jmp .+3 -003333: 603336 - dac 10 -003334: 040012 - cskp: - skp -003335: 741000 - dac 11 -003336: 040013 - 2: - lac 11 i -003337: 220013 - dac 10 i -003340: 060012 - isz 9f+t -003341: 444251 - isz 9f+t+1 -003342: 444252 - jmp 3f -003343: 603357 - xct iwrite -003344: 403257 - jmp 4f -003345: 603355 - lac 9f+t -003346: 204251 - jms betwen; d0; i.size -003347: 101643 -003350: 004116 -003351: 005744 - dac i.size -003352: 045744 - lac 9f+t+3 -003353: 204254 - jms dskwr -003354: 102146 - 4: - "** 01-s1.pdf page 38 - lac 9f+t+2 -003355: 204253 - jmp iread i -003356: 623266 - 3: - lac 9f+t -003357: 204251 - and o77 -003360: 504140 - sza -003361: 740200 - jmp 2b -003362: 603337 - xct iwrite -003363: 403257 - jmp 1b -003364: 603322 - lac 9f+t+3 -003365: 204254 - jms dskwr -003366: 102146 - jmp 1b -003367: 603322 - t = t+4 - 000050 - " system call helper - " AC/ fd - " jms finac - " return with: fnode and inode loaded - " or makes error return to user - finac: 0 -003370: 000000 - lac u.ac -003371: 205631 - jms fget -003372: 102360 - jms error -003373: 101531 - lac f.flags -003374: 205757 - sma -003375: 740100 - jms error -003376: 101531 - lac f.i -003377: 205761 - jms iget -003400: 103017 - jmp finac i -003401: 623370 - " update inode file size with value in AC - dacisize: 0 -003402: 000000 - dac i.size -003403: 045744 - jms iput -003404: 103046 - lac i.size -003405: 205744 - jmp dacisize i -003406: 623402 - "** 01-s1.pdf page 41 - " s7 - pibreak: " priority interrupt break processing "chain" - dac .ac " save interrupt AC -003407: 044071 - "** CROSSED OUT.... - dpsf -003410: 704741 - jmp 1f " disable the Graphics-2 I/O -003411: 603432 - dpcf -003412: 704761 - dprs -003413: 704752 - dac dpstat -003414: 045532 - sma ral -003415: 740110 - jmp 2f -003416: 603425 - dprc -003417: 704712 - dac dpchar -003420: 045535 - -1 -003421: 777777 - dac dpread -003422: 045533 - lac dpstat -003423: 205532 - ral -003424: 740010 - 2: - sma -003425: 740100 - jmp piret -003426: 603755 - -1 -003427: 777777 - dac dpwrite -003430: 045534 - jmp piret "** END OF CROSSOUT -003431: 603755 - 1: clsf " clock overflow (line frequency ticks)? -003432: 700001 - jmp 1f " no -003433: 603466 - lpb " load display push buttons -003434: 704412 - dac pbsflgs " save -003435: 045476 - isz s.tim+1 " increment low order tick count -003436: 445560 - skp " no overflow, skip second increment -003437: 741000 - isz s.tim " low order overflowed, increment high order count -003440: 445557 - isz uquant " increment user quantum counter -003441: 445474 - "** written: ttydelay -> ttyd1 - "** written: ttyrestart -> ttyres1 - cnop: " fetched as constant in iread - nop -003442: 740000 - -1 -003443: 777777 - dac 7 " set location 7 to -1 (nothing ever clears it) -003444: 040007 - clon " enable clock interrupts, reset flag -003445: 700044 - lac ttydelay " tty delay positive? -003446: 205503 - spa " yes: skip to skp -003447: 741100 - isz ttydelay " no: done delaying? -003450: 445503 - skp " not done -003451: 741000 - jms ttyrestart " yes: start output -003452: 103572 - "** START CROSSED OUT: written: lac tty - lac .dspb -003453: 205536 - sna -003454: 741200 - jmp piret -003455: 603755 - isz .dsptm -003456: 444073 - skp -003457: 741000 - jmp dsprestart -003460: 603512 - sad d3 -003461: 544121 - jmp piret -003462: 603755 - isz .dspb -003463: 445536 - jmp piret -003464: 603755 - jmp dsprestart "** END CROSSED OUT -003465: 603512 - 1: dssf " disk flag set? -003466: 707121 - jmp 1f " no -003467: 603476 - -1 " set .dskb = -1 -003470: 777777 - dac .dskb -003471: 044074 - "** 01-s1.pdf page 42 - dsrs " get disk status in .dske -003472: 707132 - dac .dske -003473: 044075 - dscs " clear status register -003474: 707141 - jmp piret -003475: 603755 - "** BEGIN CROSSED OUT - 1: lds " load display status (see 03-scope.pdf pg 25) -003476: 701052 - sma ral " display trap set? (and rotate left) -003477: 740110 - jmp 1f " not set -003500: 603521 - cdf " display done executing; clear display flags -003501: 700501 - lac .dspb -003502: 205536 - sna -003503: 741200 - jmp piret " return now if .dspb == 0 -003504: 603755 - tad dm3 -003505: 344203 - sna -003506: 741200 - jmp dsprestart " start display if .dspb == 3 -003507: 603512 - dac .dspb " otherwise, .dspb -= 3 and return -003510: 045536 - jmp piret -003511: 603755 - dsprestart: - lac d1 -003512: 204117 - dac .dspb " set .dspb = 1 -003513: 045536 - lac dspbufp " load display buf pointer -003514: 205475 - beg " start display processor -003515: 700547 - -10 -003516: 777766 - dac .dsptm " set .dsptm = -10 (10 ticks) -003517: 044073 - jmp piret -003520: 603755 - 1: sma ral " edges flag set?? (and rotate) -003521: 740110 - jmp .+3 " no -003522: 603525 - raef " "resume after edges flag" -003523: 700742 - jmp piret " return -003524: 603755 - sma " light pen flag? -003525: 740100 - jmp 1f " no -003526: 603533 - lda " G-2: load display address -003527: 701012 - dac .lpba " save -003530: 045537 - rlpd " G-2: resume after light pen stop -003531: 700723 - jmp piret -003532: 603755 - 1: ksf " (TTY) keyboard flag set? -003533: 700301 - jmp 1f " no -003534: 603565 - lac ttydelay " get TTY delay -003535: 205503 - sma " minus (waiting for output)? -003536: 740100 - isz ttydelay " no: increment??? (make more positive) -003537: 445503 - krb " read keyboard buffer -003540: 700312 - dac char " save in char -003541: 045511 - sad o375 " interrupt char (TTY ALT MODE?) -003542: 544151 - jmp intrp1 " yes -003543: 604021 - lac d1 -003544: 204117 - jms putchar -003545: 101730 - dzm char -003546: 145511 - lac sfiles+0 " get sleep word for ttyin -003547: 205520 - jms wakeup " wake processes -003550: 103762 - dac sfiles+0 " clear sleep word -003551: 045520 - lac char " get character -003552: 205511 - sad o212 " new line (with parity)?? -003553: 544150 - skp " yes -003554: 741000 - jmp piret " no: done -003555: 603755 - lac sfiles+1 " get ttyout sleep word -003556: 205521 - sma " highest bit set? -003557: 740100 - xor o400000 " no, make it so (why?] -003560: 244173 - dac sfiles+1 " save back -003561: 045521 - "** 01-s1.pdf page 43 - jms putcr " output CR next -003562: 104014 - jms ttyrestart " start output -003563: 103572 - jmp piret -003564: 603755 - 1: tsf " TTY output flag set? -003565: 700401 - jmp 1f " no -003566: 603626 - tcf " yes: clear flag -003567: 700402 - jms ttyrestart " transmit next character -003570: 103572 - jmp piret -003571: 603755 - ttyrestart: 0 -003572: 000000 - lac ttydelay " get tty delay -003573: 205503 - spa " positive? -003574: 741100 - jmp ttyrestart i " no: keep waiting -003575: 623572 - lac nttychar " get pending CR, if any -003576: 205501 - dzm nttychar " clear it -003577: 145501 - sza " need to send CR? -003600: 740200 - jmp 3f " yes -003601: 603606 - isz ttydelay " increment ttydelay (make more positive) -003602: 445503 - lac d2 -003603: 204120 - jms getchar " get a character -003604: 101745 - jmp 2f " none found?? -003605: 603622 - 3: - tls " start output -003606: 700406 - sad o12 " newline? -003607: 544130 - jms putcr " yes: put CR next -003610: 104014 - sad o15 " CR? -003611: 544132 - skp " yes -003612: 741000 - jmp ttyrestart i " no: return -003613: 623572 - lac ttydelay " get current tty delay -003614: 205503 - tad o20 " bump by 16 -003615: 344134 - rcr " divide by two -003616: 744020 - cma " complement -003617: 740001 - dac ttydelay " save -003620: 045503 - jmp ttyrestart i -003621: 623572 - 2: - lac sfiles+1 " run out of characters to send: wake user(s) -003622: 205521 - jms wakeup -003623: 103762 - dac sfiles+1 -003624: 045521 - jmp ttyrestart i "** written arrow up 2 copies -003625: 623572 - "** BEGIN CROSSED OUT - 1: sck " Graphic-2 keyboard flag set? -003626: 704301 - jmp 1f " no. -003627: 603644 - cck " yes: clear flag -003630: 704304 - lck " read character -003631: 704312 - dac char -003632: 045511 - sad o33 " code 33 (ESCAPE?) -003633: 544135 - jmp intrp2 " yes: mark interrupt -003634: 604044 - lac d3 -003635: 204121 - jms putchar -003636: 101730 - nop -003637: 740000 - lac sfiles+2 -003640: 205522 - jms wakeup -003641: 103762 - dac sfiles+2 -003642: 045522 - jmp piret -003643: 603755 - 1: rsf " paper tape ready? -003644: 700101 - jmp 1f " no -003645: 603712 - "** 01-s1.pdf page 44 - lac npptchar -003646: 205502 - sna -003647: 741200 - jmp .+5 -003650: 603655 - dac char -003651: 045511 - rrb -003652: 700112 - dac npptchar -003653: 045502 - jmp .+3 -003654: 603657 - rrb -003655: 700112 - dac char -003656: 045511 - 3: - lac char -003657: 205511 - sna -003660: 741200 - jmp 2f -003661: 603670 - lac d4 -003662: 204122 - jms putchar -003663: 101730 - jmp 3f -003664: 603704 - lac char -003665: 205511 - sad d4 -003666: 544122 - jmp 4f -003667: 603706 - 2: - lac npptchar -003670: 205502 - sna -003671: 741200 - jmp .+4 -003672: 603676 - dac char -003673: 045511 - dzm npptchar -003674: 145502 - jmp 3b -003675: 603657 - rsa -003676: 700104 - lac sfiles+3 -003677: 205523 - jms wakeup -003700: 103762 - xor o400000 -003701: 244173 - dac sfiles+3 -003702: 045523 - jmp piret -003703: 603755 - 3: - lac char -003704: 205511 - dac npptchar -003705: 045502 - 4: - lac sfiles+3 -003706: 205523 - jms wakeup -003707: 103762 - dac sfiles+3 -003710: 045523 - jmp piret -003711: 603755 - 1: psf " paper tape ready? -003712: 700201 - jmp 1f " no -003713: 603726 - pcf " clear ptp flag -003714: 700202 - lac d5 -003715: 204123 - jms getchar " get next char -003716: 101745 - jmp .+3 -003717: 603722 - psa -003720: 700204 - jmp piret -003721: 603755 - lac sfiles+4 -003722: 205524 - jms wakeup -003723: 103762 - dac sfiles+4 -003724: 045524 - jmp piret -003725: 603755 - "** BEGIN CROSSED OUT - 1: spb " any graphic-2 push button? -003726: 704401 - jmp 1f " no -003727: 603745 - cpb " clear push button flag -003730: 704404 - lpb " load push button value -003731: 704412 - dac pbsflgs+1 -003732: 045477 - "** 01-s1.pdf page 45 - and o2000 " get push button 7 -003733: 504153 - sna " set? -003734: 741200 - jmp piret " no: done -003735: 603755 - jms dspinit " yes: reset display buffer -003736: 102606 - lac sfiles+6 " wake up anyone sleeping on display -003737: 205526 - jms wakeup -003740: 103762 - dac sfiles+6 -003741: 045526 - cla " clear button lights -003742: 750000 - wbl -003743: 704424 - jmp piret "** END CROSSED OUT -003744: 603755 - 1: crsf " card reader flag set? -003745: 706701 - jmp 1f " no -003746: 603754 - crrb -003747: 706712 - dac crchar -003750: 045541 - -1 -003751: 777777 - dac crread -003752: 045540 - jmp piret -003753: 603755 - 1: crrb " read card reader buffer?? -003754: 706712 - piret: " return from priority interrupt - lac 0 " get LINK/PC -003755: 200000 - ral " restore LINK -003756: 740010 - lac .ac " restore AC -003757: 204071 - ion " reenable interrupts -003760: 700042 - jmp 0 i " return from interrupt -003761: 620000 - " wake sleeping processes - " NOTE!! Called from interrupt service, so avoids indirect!!! - " call: - " AC/ sfiles word (bit vector of processes to wake) - " jms wakeup - " AC/ 0 (to store in sfiles word) - wakeup: 0 -003762: 000000 - dac 9f+t " save vector in t0 -003763: 044255 - -mnproc -003764: 777766 - dac 9f+t+1 " loop count in t1 -003765: 044256 - lac tadu " get "tad ulist" -003766: 204076 - dac 2f -003767: 044000 - lac dacu " get "dac ulist" -003770: 204077 - dac 2f+1 -003771: 044001 - 1: - lac 9f+t -003772: 204255 - ral " rotate vector up one -003773: 740010 - dac 9f+t -003774: 044255 - sma " high bit set? -003775: 740100 - jmp 2f+2 " no: skip the fun -003776: 604002 - lac o700000 " yes: decrement process status (wake) -003777: 204200 - 2: tad .. " (avoiding indirect) -004000: 340000 - dac .. -004001: 040000 - lac 2b " advance tad operand by 4 words -004002: 204000 - tad d4 -004003: 344122 - dac 2b -004004: 044000 - lac 2b+1 " advance tad operand by 4 words -004005: 204001 - tad d4 -004006: 344122 - dac 2b+1 -004007: 044001 - isz 9f+t+1 " done? -004010: 444256 - jmp 1b " no, keep going -004011: 603772 - cla " return zero in AC -004012: 750000 - jmp wakeup i -004013: 623762 - t = t+2 - 000052 - " call to output CR after LF (NL) - putcr: 0 -004014: 000000 - lac o15 -004015: 204132 - dac nttychar -004016: 045501 - "** 01-s1.pdf page 46 - cla -004017: 750000 - jmp putcr i -004020: 624014 - intrp1: " here with TTY interrupt character - lac d6 " get keyboard special device number -004021: 204124 - dac .int1 " save as interrupt source -004022: 044067 - lac d1 " drain tty input buffer? -004023: 204117 - jms getchar -004024: 101745 - skp -004025: 741000 - jmp .-3 -004026: 604023 - lac d2 " drain tty output buffer? -004027: 204120 - jms getchar -004030: 101745 - skp -004031: 741000 - jmp .-3 -004032: 604027 - lac sfiles+0 " wake ttyin sleepers -004033: 205520 - jms wakeup -004034: 103762 - dac sfiles+0 -004035: 045520 - lac sfiles+1 " wake ttyout sleepers -004036: 205521 - jms wakeup -004037: 103762 - dac sfiles+1 -004040: 045521 - jms chkint " check if user interrupted -004041: 100320 - jmp piret " no, return from PI -004042: 603755 - jmp 1f " yes: return thru system call code (dump core) -004043: 604062 - intrp2: " here with display interrupt character - lac d7 " get keyboard special device number -004044: 204125 - dac .int2 " save as interrupt source -004045: 044070 - lac d3 " drain keyboard buffer? -004046: 204121 - jms getchar -004047: 101745 - skp -004050: 741000 - jmp .-3 -004051: 604046 - lac sfiles+2 " wake up any "keyboard" sleepers -004052: 205522 - jms wakeup -004053: 103762 - dac sfiles+2 -004054: 045522 - lac sfiles+6 " wake up any "display" sleepers -004055: 205526 - jms wakeup -004056: 103762 - dac sfiles+6 -004057: 045526 - jms chkint " check if user interrupted -004060: 100320 - jmp piret " no, return from PI -004061: 603755 - 1: - lac 0 " get interrupt PC -004062: 200000 - dac 020 " save as system call return PC -004063: 040020 - lac .ac " restore AC from interrupt -004064: 204071 - jmp 021 " join system call processing (dump core?) -004065: 600021 - "** 01-s1.pdf page 48 - " s8 - " manifests - mnproc = 10 - 000012 - dspbsz = 270 - 000416 - ndskbs = 4 - 000004 - " flags - .insys: 0 " "in system" -004066: 000000 - .int1: 0 " inode for user interrupt 1 -004067: 000000 - .int2: 0 " inode for user interrupt 2 -004070: 000000 - .ac: 0 " saved AC from Priotity Interrupt -004071: 000000 - .savblk: 0 " set by system call, cleared by disk i/o -004072: 000000 - .dsptm: 0 " display restart countdown (10 ticks) -004073: 000000 - .dskb: 0 " set on disk interrupt -004074: 000000 - .dske: 0 " status from disk interrupt -004075: 000000 - " pointers - tadu: tad ulist -004076: 345561 - dacu: dac ulist -004077: 045561 - maxquant: 30 -004100: 000036 - ofilesp: u.ofiles -004101: 005654 - idskpp: i.dskps -004102: 005733 - dskbufp: dskbuf -004103: 007700 - edspbuf: dspbuf+dspbsz -004104: 005064 - dspbufp3: dspbuf+3 -004105: 004451 - fblksp: s.fblks -004106: 005544 - dacq1: dac q1 -004107: 044260 - lacq1: lac q1 -004110: 204260 - q2p: q2 -004111: 004300 - " strings - initf: - n;t;< > ;< > " -004112: 151156 -004113: 151164 -004114: 040040 -004115: 040040 - " constants - d0: 0 -004116: 000000 - d1: 1 -004117: 000001 - d2: 2 -004120: 000002 - d3: 3 -004121: 000003 - d4: 4 -004122: 000004 - d5: 5 -004123: 000005 - d6: 6 -004124: 000006 - d7: o7: 07 -004125: 000007 - d8: 8 -004126: 000010 - d9: 9 -004127: 000011 - o12: d10: 10 -004130: 000012 - o14: 014 -004131: 000014 - o15: 015 -004132: 000015 - o17: 017 -004133: 000017 - o20: 020 -004134: 000020 - o33: 033 -004135: 000033 - o40: 040 -004136: 000040 - o55: 055 -004137: 000055 - o77: 077 -004140: 000077 - d65:o101: 0101 -004141: 000101 - d33: 33 -004142: 000041 - o132: 0132 -004143: 000132 - o134: 0134 -004144: 000134 - o137: 0137 -004145: 000137 - o155: 0155 -004146: 000155 - o177: 0177 -004147: 000177 - "** 01-s1.pdf page 49 - o212: 0212 -004150: 000212 - o375: 0375 -004151: 000375 - o777: 0777 -004152: 000777 - o2000: 02000 -004153: 002000 - o4000: 04000 -004154: 004000 - d7999: 7999 -004155: 017477 - o10000: 010000 -004156: 010000 - o17762: 017762 -004157: 017762 - o17777: 017777 -004160: 017777 - o20001: 020001 -004161: 020001 - o40000: 040000 -004162: 040000 - o40001: 040001 -004163: 040001 - o70000: 070000 -004164: 070000 - o77777: 077777 -004165: 077777 - o100000: 0100000 -004166: 100000 - o140000: 0140000 -004167: 140000 - o200000: 0200000 -004170: 200000 - o200001: 0200001 -004171: 200001 - o300000: 0300000 -004172: 300000 - o400000: 0400000 -004173: 400000 - o500000: 0500000 -004174: 500000 - o577777: 0577777 -004175: 577777 - o600000: 0600000 -004176: 600000 - o640000: 0640000 -004177: 640000 - o700000: 0700000 -004200: 700000 - o777700: 0777700 -004201: 777700 - o777760: 0777760 -004202: 777760 - dm3: -3 -004203: 777775 - dm1: -1 -004204: 777777 - 9: .=.+t " per-routine temp variables - 1004257 - c1: .=.+1 " not used? - 1004260 - q1: q2;q2+98 " ** 90? 96?? " queue element free list? -004260: 004300 -004261: 004442 - .=.+14 - 1004300 - " queues (two words each, head and tail pointers?) - " 1: tty input - " 2: tty output - " 3: display keyboard - " 4: paper tape reader - " 5: paper tape punch - q2: - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004300: 004302 -004301: 000000 -004302: 004304 -004303: 000000 -004304: 004306 -004305: 000000 -004306: 004310 -004307: 000000 -004310: 004312 -004311: 000000 -004312: 004314 -004313: 000000 -004314: 004316 -004315: 000000 -004316: 004320 -004317: 000000 -004320: 004322 -004321: 000000 -004322: 004324 -004323: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004324: 004326 -004325: 000000 -004326: 004330 -004327: 000000 -004330: 004332 -004331: 000000 -004332: 004334 -004333: 000000 -004334: 004336 -004335: 000000 -004336: 004340 -004337: 000000 -004340: 004342 -004341: 000000 -004342: 004344 -004343: 000000 -004344: 004346 -004345: 000000 -004346: 004350 -004347: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004350: 004352 -004351: 000000 -004352: 004354 -004353: 000000 -004354: 004356 -004355: 000000 -004356: 004360 -004357: 000000 -004360: 004362 -004361: 000000 -004362: 004364 -004363: 000000 -004364: 004366 -004365: 000000 -004366: 004370 -004367: 000000 -004370: 004372 -004371: 000000 -004372: 004374 -004373: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004374: 004376 -004375: 000000 -004376: 004400 -004377: 000000 -004400: 004402 -004401: 000000 -004402: 004404 -004403: 000000 -004404: 004406 -004405: 000000 -004406: 004410 -004407: 000000 -004410: 004412 -004411: 000000 -004412: 004414 -004413: 000000 -004414: 004416 -004415: 000000 -004416: 004420 -004417: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;0;0 -004420: 004422 -004421: 000000 -004422: 004424 -004423: 000000 -004424: 004426 -004425: 000000 -004426: 004430 -004427: 000000 -004430: 004432 -004431: 000000 -004432: 004434 -004433: 000000 -004434: 004436 -004435: 000000 -004436: 004440 -004437: 000000 -004440: 004442 -004441: 000000 -004442: 000000 -004443: 000000 - dsploc: .=.+1 - 1004445 - dsplno: .=.+1 - 1004446 - dspbuf: - 0065057;0147740;0160000 " display commands: see 03-scope.pdf pg 20 -004446: 065057 -004447: 147740 -004450: 160000 - " PARAM: clear blink, clear light pen, scale=1, intensity=3 - " X-Y: invisible, no delay, Y=01740 (992) - " X-Y: invisible, settling delay, X=0 - .=.+30 - 1004507 - coldentry: - dzm 0100 " not re-entrant -004507: 140100 - caf " clear all flags -004510: 703302 - ion " enable interrupts -004511: 700042 - clon " clear clock flag -004512: 700044 - law 3072 " initialize display.... -004513: 766000 - wcga -004514: 704206 - jms dspinit -004515: 102606 - law dspbuf " set display buffer to default -004516: 764446 - jms movdsp -004517: 102615 - cla " read system block from disk -004520: 750000 - jms dskio; 06000 -004521: 102162 -004522: 006000 - jms copy; dskbuf; sysdata; ulist-sysdata " copy to system data -004523: 101667 -004524: 007700 -004525: 005542 -004526: 000017 - lac d3 " look for "init" in default directory -004527: 204121 - jms namei; initf -004530: 102737 -004531: 004112 - jms halt -004532: 102254 - "** 01-s1.pdf page 50 - jms iget -004533: 103017 - cla -004534: 750000 - jms iread; 4096; 4096 " read in "init" -004535: 103266 -004536: 010000 -004537: 010000 - jmp 4096 " start process 1 -004540: 610000 - . = dspbuf+dspbsz+3 - 1005067 - dskbuf = 07700 - 007700 - dskbs: .=.+65+65+65+65 - 1005473 - edskbsp: . -005473: 005473 - uquant: .=.+1 " number of ticks user has been running - 1005475 - dspbufp: .=.+1 " pointer to display buffer - 1005476 - pbsflgs: .=.+2 " buttons on last tick, last button interrupt - 1005500 - mode: .=.+1 - 1005501 - nttychar: .=.+1 " CR to send next, or zero - 1005502 - npptchar: .=.+1 - 1005503 - ttydelay: .=.+1 " delay count for TTY output - 1005504 - name: .=.+4 - 1005510 - lnkaddr: .=.+1 - 1005511 - char: .=.+1 - 1005512 - dskaddr: .=.+1 - 1005513 - uniqpid: 1 " pid generator -005513: 000001 - lu: .=.+4 " user (process) table entry copy - 1005520 - sfiles: .=.+10 " wait addresses for special files - 1005532 - " (bit vector of waiting processes?) - " offsets: 0: ttyin, 1: ttyout, 2: keyboard, - " 3: ptr, 4: ptp, 6: display - dpdata: - dpstat: .=.+1 - 1005533 - dpread: .=.+1 - 1005534 - dpwrite: .=.+1 - 1005535 - dpchar: .=.+1 - 1005536 - dspdata: - .dspb: .=.+1 - 1005537 - .lpba: .=.+1 "** 4 written on listing - 1005540 - crdata: - crread: .=.+1 - 1005541 - crchar: .=.+1 - 1005542 - sysdata: " system data 64 words saved to disk - s.nxfblk: .=.+1 " pointer to next free block?? - 1005543 - s.nfblks: .=.+1 " number of free blocks (in fblks?) - 1005544 - s.fblks: .=.+10 " cached free block numbers - 1005556 - s.uniq: .=.+1 " next unique value - 1005557 - s.tim: .=.+2 " (up?)time in 60Hz ticks (low, high) - 1005561 - " process table - " first word - " bits 0:2 -- status - " 0: free slot - " 1: in/ready - " 2: in/notready - " 3: out/ready - " 4: out/notready?? - " bits 3:17 -- disk swap address/8 - " second word: process pid - " third word: smes/rmes status: - " 0: not waiting - " -1: this process waiting (rmes) - " other: complement of sender pid - " fourth word: smes message - ulist: - 0131000;1;0;0 -005561: 131000 -005562: 000001 -005563: 000000 -005564: 000000 - 0031040;0;0;0 -005565: 031040 -005566: 000000 -005567: 000000 -005570: 000000 - 0031100;0;0;0 -005571: 031100 -005572: 000000 -005573: 000000 -005574: 000000 - 0031140;0;0;0 -005575: 031140 -005576: 000000 -005577: 000000 -005600: 000000 - 0031200;0;0;0 -005601: 031200 -005602: 000000 -005603: 000000 -005604: 000000 - 0031240;0;0;0 -005605: 031240 -005606: 000000 -005607: 000000 -005610: 000000 - 0031300;0;0;0 -005611: 031300 -005612: 000000 -005613: 000000 -005614: 000000 - 0031340;0;0;0 -005615: 031340 -005616: 000000 -005617: 000000 -005620: 000000 - 0031400;0;0;0 -005621: 031400 -005622: 000000 -005623: 000000 -005624: 000000 - 0031440;0;0;0 -005625: 031440 -005626: 000000 -005627: 000000 -005630: 000000 - userdata: " "ustruct" (swappable) - u.ac: 0 " user AC -005631: 000000 - u.mq: 0 " user MQ -005632: 000000 - u.rq: .=.+9 " user 010-017, user PC - 1005644 - u.uid: -1 " user id -005644: 777777 - u.pid: 1 " process id -005645: 000001 - u.cdir: 3 " connected directory (inode number?) -005646: 000003 - u.ulistp: ulist " pointer to process table entry -005647: 005561 - u.swapret: 0 " kernel routine to resume at after swap in -005650: 000000 - u.base: 0 " start of user buffer -005651: 000000 - u.count: 0 " size of user buffer -005652: 000000 - "** 01-s1.pdf page 51 - u.limit: 0 " end of user buffer -005653: 000000 - u.ofiles: .=.+30 " open files (10 "fnode" entries) - 1005712 - u.dspbuf: 0 -005712: 000000 - u.intflg: 1 -005713: 000001 - .=userdata+64 - 1005731 - ii: .=.+1 " The current i-node number stored in inode - 1005732 - inode: " disk inode in memory: - i.flags: .=.+1 " inode flags - 1005733 - " 400000 in use - " 200000 large file - " 000040 special device (indicated by inum) - " 000020 directory - " 000010 owner read - " 000004 owner write - " 000002 world read - " 000001 world write - i.dskps: .=.+7 " disk block numbers (indirect if "large file") - 1005742 - i.uid: .=.+1 " owner - 1005743 - i.nlks: .=.+1 " link count (negative) - 1005744 - i.size: .=.+1 " size (in words) - 1005745 - i.uniq: .=.+1 " unique number - 1005746 - .= inode+12 - 1005746 - di: .=.+1 " directory index - 1005747 - dnode: " directory entry: - d.i: .=.+1 " inode number - 1005750 - d.name: .=.+4 " name (space padded) - 1005754 - d.uniq: .=.+1 " unique number from directory inode - 1005755 - . = dnode+8 - 1005757 - fnode: " open file entry - f.flags: .=.+1 " see below - 1005760 - f.badd: .=.+1 " offset - 1005761 - f.i: 0 " file i-number -005761: 000000 - " f.flags: - " 400000 in use - " 000002 read - " 000001 write - -Labels: -.ac 004071 r -.capt 000377 r -.chdir 000615 r -.chmod 000407 r -.chown 000421 r -.close 000720 r -.creat 000660 r -.dskb 004074 r -.dske 004075 r -.dspb 005536 r -.dsptm 004073 r -.exit 001163 r -.fork 001111 r -.getuid 000426 r -.halt 001336 r -.insys 004066 r -.int1 004067 r -.int2 004070 r -.intrp 000257 r -.link 000467 r -.lpba 005537 r -.open 000626 r -.read 000724 r -.rele 000403 r -.rename 000567 r -.rmes 001177 r -.savblk 004072 r -.save 001151 r -.seek 000431 r -.setuid 000561 r -.smes 001225 r -.status 000352 r -.sysloc 000262 r -.tell 000461 r -.time 000610 r -.unlink 000542 r -.write 000773 r -access 002312 r -alloc 001545 r -arg 002625 r -argname 002631 r -awake 001304 r -badcal 001146 r -betwen 001643 r -c1 004257 r -char 005511 r -chkint 000320 r -chkint1 001535 r -cnop 003442 r -coldentr 004507 r -collapse 002055 r -copy 001667 r -copyz 001712 r -crchar 005541 r -crdata 005540 r -crread 005540 r -cskp 003335 r -d.i 005747 r -d.name 005750 r -d.uniq 005754 r -d0 004116 r -d1 004117 r -d10 004130 r -d2 004120 r -d3 004121 r -d33 004142 r -d4 004122 r -d5 004123 r -d6 004124 r -d65 004141 r -d7 004125 r -d7999 004155 r -d8 004126 r -d9 004127 r -dacisize 003402 r -dacq1 004107 r -dacu 004077 r -dget 003104 r -di 005746 r -dm1 004204 r -dm3 004203 r -dnode 005747 r -dpchar 005535 r -dpdata 005532 r -dpread 005533 r -dpstat 005532 r -dput 003136 r -dpwrite 005534 r -dskaddr 005512 r -dskbs 005067 r -dskbufp 004103 r -dskio 002162 r -dskrd 002116 r -dskswap 002267 r -dsktrans 002220 r -dskwr 002146 r -dslot 002463 r -dspbuf 004446 r -dspbufp 005475 r -dspbufp3 004105 r -dspdata 005536 r -dspinit 002606 r -dspleft 002562 r -dsplno 004445 r -dsploc 004444 r -dspnl 002574 r -dspput 002540 r -dspresta 003512 r -edskbsp 005473 r -edspbuf 004104 r -error 001531 r -exitrw 001034 r -f.badd 005760 r -f.flags 005757 r -f.i 005761 r -fallr 002425 r -fassign 002327 r -fblksp 004106 r -fget 002360 r -finac 003370 r -fnode 005757 r -forall 002412 r -fput 002402 r -free 001604 r -getchar 001745 r -halt 002254 r -i.dskps 005733 r -i.flags 005732 r -i.nlks 005743 r -i.size 005744 r -i.uid 005742 r -i.uniq 005745 r -icreat 002475 r -idskpp 004102 r -iget 003017 r -ii 005731 r -initf 004112 r -inode 005732 r -intrp1 004021 r -intrp2 004044 r -iput 003046 r -iread 003266 r -isown 002664 r -itrunc 002675 r -iwrite 003257 r -laci 001635 r -lacq1 004110 r -lnkaddr 005510 r -locn 000317 r -locsw 000275 r -lookfor 001066 r -lu 005514 r -maxquant 004100 r -mode 005500 r -movdsp 002615 r -name 005504 r -namei 002737 r -npptchar 005502 r -nttychar 005501 r -o10000 004156 r -o100000 004166 r -o101 004141 r -o12 004130 r -o132 004143 r -o134 004144 r -o137 004145 r -o14 004131 r -o140000 004167 r -o15 004132 r -o155 004146 r -o17 004133 r -o177 004147 r -o17762 004157 r -o17777 004160 r -o20 004134 r -o2000 004153 r -o200000 004170 r -o200001 004171 r -o20001 004161 r -o212 004150 r -o300000 004172 r -o33 004135 r -o375 004151 r -o40 004136 r -o4000 004154 r -o40000 004162 r -o400000 004173 r -o40001 004163 r -o500000 004174 r -o55 004137 r -o577777 004175 r -o600000 004176 r -o640000 004177 r -o7 004125 r -o70000 004164 r -o700000 004200 r -o77 004140 r -o777 004152 r -o777700 004201 r -o777760 004202 r -o77777 004165 r -ofilesp 004101 r -okexit 000102 r -open1 000715 r -orig 000000 r -passone 001523 r -pbsflgs 005476 r -pget 003152 r -pibreak 003407 r -piret 003755 r -putchar 001730 r -putcr 004014 r -putq 002011 r -q1 004260 r -q2 004300 r -q2p 004111 r -rkbdi 001410 r -rppti 001461 r -rttyi 001337 r -s.fblks 005544 r -s.nfblks 005543 r -s.nxfblk 005542 r -s.tim 005557 r -s.uniq 005556 r -searchu 001042 r -seektell 002645 r -sfiles 005520 r -sleep 002434 r -srcdbs 002035 r -swap 000136 r -swn 000256 r -swp 000220 r -swr 001324 r -sww 001324 r -sysdata 005542 r -sysexit 000103 r -tadu 004076 r -takeq 001757 r -ttydelay 005503 r -ttyresta 003572 r -u.ac 005631 r -u.base 005651 r -u.cdir 005646 r -u.count 005652 r -u.dspbuf 005712 r -u.intflg 005713 r -u.limit 005653 r -u.mq 005632 r -u.ofiles 005654 r -u.pid 005645 r -u.rq 005633 r -u.swapre 005650 r -u.uid 005644 r -u.ulistp 005647 r -ulist 005561 r -uniqpid 005513 r -uquant 005474 r -userdata 005631 r -wakeup 003762 r -wdspo 001451 r -wppto 001475 r -wttyo 001357 r diff --git a/build/alt/a.rim b/build/alt/a.rim deleted file mode 100644 index 3ad059c..0000000 --- a/build/alt/a.rim +++ /dev/null @@ -1 +0,0 @@ -„€€ผ€ „€ฐœ‡„€‡ฟฟฟ„€€€š„€‘ธ€‚„€’„ฎ™„€“€„€”„€š„€•€™„€–„€„€—ฎ™„€˜ฐ€›„€™€€š„€š€€€„€›ธ€‚„€œ„ฎ™„€ดˆ‚„€ž„ฎš„€Ÿ€ˆ„€ „ฎ›„€ก€‰„€ข„ฎœ„€ฃˆŽท„€ค€€Š„€ฅ€ฎ„€ฆ€€†„€ง€š„€จ„ฎฃ„€ฉฟฟฟ„€ช„ บ„€ซ„ ถ„€ฌฌผ„€ญˆŽฃ„€ฎ€กŽ„€ฏ€ก€„€ฐˆž„€ฑธ€ข„€ฒฟฟฟ„€ณœฎฃ„€ดˆŽ„€ตˆŽฃ„€ถ€กฑ„€ท€‚ฎ„€ธฐ‰ฆ„€นœ‚„€บ„€ป„€ปฒ€€„€ฐฅ‡„ˆ’ฌ„‚Œฎ™„ƒธ€ข„„ บ„…ผ‚€„†ฐŽ„‡ˆŽท„ˆ€ญข„‰€ฟ€„Š€€„‹ฝ€€„Œˆ‘ฒ„€ธ€„ŽŒ ถ„ˆƒ„ผˆ€„‘ฐ‰ฉ„’ˆŽท„“€ฎ„”€€Š„•€€†„–ฎœ„—„€‰„˜ฎ›„™„€ˆ„šฎš„›ต€„œฎ™„ฒฎฃ„ž€€€„Ÿธ€ข„ ˆˆถ„ก€€ƒ„ขฐฉ„ฃˆˆถ„ค€€„ฅผˆ€„ฆฐ „งŒก€„จฐ‚„ฉ„ข…„ชˆˆถ„ซ€€‚„ฌฐฑ„ญˆˆถ„ฎ€€„ฏฐฑ„ฐฐฟ„ฑž„ฒ„ฎจ„ณธ€‚„ดกธ„ตžฎง„ถ†ฎง„ทธ€ข„ธˆ’ท„น€ธ€„บฏŠ„ปผŠ€„ผฐฟ„ฝพคฆ„พˆ–„ฟธ€‚„‚€กพ„‚žข…„‚‚†ข…„‚ƒธ€ข„‚„ˆ’ท„‚…€ฐ€„‚†ฎจ„‚‡„ž„‚ˆกœ„‚‰„ก€„‚АฏŠ„‚‹ผ‚€„‚Œˆ–„‚Œฌผ„‚Žธ€‚„‚ฒž„‚ฐ‚„‚‘€‰ฉ„‚’€„–„‚“€†–„‚”€‡”„‚•€‡ป„‚–€†ฐ„‚—€„™„‚˜€„ฑ„‚™€‡„‚š€„ท„‚›€…ข„‚œ€…ฑ„‚€…ท„‚ž€‰ณ„‚Ÿ€†ˆ„‚ €‚ฏ„‚ก€†„‚ข€„‡„‚ฃ€„‘„‚ค€‰ฆ„‚ฅ€‚ฒ„‚ฆ€‰ฆ„‚ง€ƒฟ„‚จ€„ƒ„‚ฉ€ƒช„‚ช€‰ฆ„‚ซ€Š•„‚ฌ€‰ฟ„‚ญ€‰‰„‚ฎ‚€„‚ฏฎ™„‚ฐ„ฏ‹„‚ฑฐ‚„‚ฒฎ™„‚ณจกฐ„‚ดˆŽฃ„‚ต€ก„‚ถ€ƒ„‚ทˆ™„‚ธœ‚ฝ„‚น„‚บ„‚บ€€„‚ป„ฎ™„‚ผฐƒ„‚ฝ‚ฝ„‚พ€˜„‚ฟ€ฏš„ƒ€€ฎ™„ƒ€ญข„ƒ‚€Žท„ƒƒ€Š„ƒ„€Žฃ„ƒ…€‘Ž„ƒ†€‘ฆ„ƒ‡€ฟ€„ƒˆ€ญš„ƒ‰€—Ÿ„ƒŠ€ฌพ„ƒ‹€ฅ„ƒŒ€Ž„„ƒ€ญž„ƒŽ€ญ „ƒ€€‘„ƒ€€€„ƒ‘ ถ„ƒ’ผ‚€„ƒ“ฒƒ„ƒ” ท„ƒ•ผŠ€„ƒ–ฐƒ™„ƒ—ฌฎฎ„ƒ˜ฐƒก„ƒ™ ธ„ƒšผŠ€„ƒ›ฒƒ„ƒœฌฎฎ„ƒผˆ€„ƒžฒƒ„ƒŸŒ ธ„ƒ ฐƒข„ƒกŒ ท„ƒขฏ‹„ƒฃผ‚€„ƒคฒƒ„ƒฅฟฟฟ„ƒฆ„ ถ„ƒงธ€ข„ƒจคƒ„ƒฉฒƒ„ƒชˆ–•„ƒซ„ƒฎ„ƒฌฎฆ„ƒญˆ—Ÿ„ƒฎ€€€„ƒฏˆ™„ƒฐˆ˜„ƒฑฎ™„ƒฒจกฐ„ƒณˆŽฃ„ƒด€กฎ„ƒต€กฏ„ƒถˆ™„ƒท„ƒบ„ƒธˆŽท„ƒน€ฏš„ƒบ€€€„ƒป€€Œ„ƒผฏง„ƒฝ†€‰„ƒพฐ‚„ƒฟฎ™„„€„ฏŠ„„ˆ–„„‚ฐƒ„„ƒŒฏŠ„„„พคฆ„„…ˆ–„„†ฐƒ„„‡ˆ–ด„„ˆฎ™„„‰จก›„„Šต€„„‹ฏš„„Œจข‚„„ด€‚„„Ž„ฏš„„ˆ˜ฆ„„ฐ‚„„‘ˆ–ด„„’ฎ™„„“„ฏข„„”ˆ˜ฆ„„•ฐ‚„„–ฎค„„—„ฎ™„„˜ฐƒ„„™ˆ–ฅ„„šœฎฉ„„›ผ‰€„„œˆ™„„ต€„„žฏฏ„„Ÿจก„„ ผŠ€„„กˆ„จ„„ขดˆ‚„„ฃˆŽฃ„„ค€กŽ„„ฅ€ฏค„„ฆˆœ‚„„งฐ„ญ„„จดˆ‚„„ฉˆŽฃ„„ช€กŽ„„ซ€ฏค„„ฌฏค„„ญ„ฏฐ„„ฎ„ฎ™„„ฏˆ”‚„„ฐฐƒ„„ฑˆ–ฅ„„ฒผ€„„ณœก„„ดœฎฉ„„ต„ฎ™„„ถฐƒ„„ทˆ–•„„ธ„„ฟ„„นˆ–•„„บ„…‚„„ปˆ–•„„ผ„…†„„ฝฎฆ„„พˆ—Ÿ„„ฟ€€€„…€ˆ™„…ˆ—Ÿ„…‚€€€„…ƒˆ™„…„„ฎฉ„……ˆŽท„…†€€€„…‡€ญ„„…ˆ€€„„…‰ฎฆ„…Šˆ—Ÿ„…‹€ญ„„…Œผˆ€„…ˆ™„…ސก„…„ญ€„…ˆ“Š„…‘ˆ”ณ„…’ฎฉ„…“ˆ˜„…”ฏ™„…•„ฏง„…–ˆŽท„…—€ญ„„…˜€ฏจ„…™€€„„…šฏฅ„…›„ฏฌ„…œฟฟฟ„…œฏฃ„…ž„ฏฃ„…Ÿˆ˜ฆ„… ˆ™ž„…กฐ‚„…ขˆ–™„…ฃ„ฎฉ„…คก„…ฅ„ญ€„…ฆˆ“Š„…งŒฏง„…จˆ™ž„…ฉฎฉ„…ชˆ˜„…ซคฏฃ„…ฌฐ…ฏ„…ญˆ–ฝ„…ฎŒฏš„…ฏˆ˜ฆ„…ฐฐƒ„…ฑฎค„…ฒผ€„…ณˆ™„…ดฎ™„…ต„ฎค„…ถฐƒ„…ทˆ–•„…ธ„…ฝ„…นˆ–•„…บ„†ƒ„…ปฎฆ„…ผˆ—Ÿ„…ฝ€€€„…พˆ™„…ฟก„†€„ญ€„†ˆ“Š„†‚ˆŽท„†ƒ€€€„†„€ฏจ„†…€€„„††ˆ™ž„†‡ฐ‚„†ˆญฏ„†‰„ฎ™„†Šญฐ„†‹„ฎš„†Œฐƒ„†ˆ–™„†Žˆ˜„†ฏš„†จกœ„†‘ผŠ€„†’ˆ™„†“ฏ™„†”„ฎฆ„†•ฐ‚„†–ˆ–•„†—„† „†˜ˆ–•„†™ผ‚€„†šก„†›ผŠ€„†œก„†„ญ€„†žฎฆ„†Ÿˆ—Ÿ„† €€€„†กˆ™„†ขˆ˜„†ฃˆ“Š„†คฏš„†ฅจกœ„†ฆผŠ€„†งฐ‡„†จญ€„†ฉจก„†ชผŠ€„†ซฐ‡„†ฌฎค„†ญผ€„†ฎˆ™„†ฏฐ‡„†ฐก„†ฑ„ญ€„†ฒˆ–•„†ณ„†ต„†ดˆŽท„†ต€€€„†ถ€ญ„„†ท€€„„†ธฎฆ„†นˆ—Ÿ„†บ€ญ„„†ปฐ‡‰„†ผˆ˜„†ฝˆ“Š„†พฏš„†ฟจกœ„‡€ผŠ€„‡ฐ‡…„‡‚ฎค„‡ƒผ€„‡„ˆ™„‡…ˆ–ฝ„‡†ฝ€€„‡‡ˆœ‚„‡ˆฐ‡„‡‰ˆ“Š„‡Šฎ™„‡‹จก›„‡Œˆ”ฝ„‡ˆ“—„‡Žˆ™„‡ฐƒ„‡ˆ›ธ„‡‘Œฏฏ„‡’ˆ”‚„‡“ฐƒ„‡”ˆ–•„‡•จกฐ„‡–„ฎฉ„‡—ˆ–•„‡˜„ฎช„‡™ฎฉ„‡šˆŽฃ„‡›€กฎ„‡œ€กฐ„‡ˆ™„‡žœฎช„‡ŸˆŽฃ„‡ €ฎฉ„‡ก€กฐ„‡ขˆ™„‡ฃ„ฎซ„‡คˆ›ธ„‡ฅฏฏ„‡ฆจก„‡งผ‚€„‡จˆ™„‡ฉฏš„‡ชจกž„‡ซผŠ€„‡ฌฐ‡ฒ„‡ญธ€‚„‡ฎฏ™„‡ฏœ‹”„‡ฐ„‡ฑ„‡ฑฒ€€„‡ฒฎฉ„‡ณ„‡ธ„‡ดฎช„‡ต„‡น„‡ถฏฐ„‡ทˆšถ„‡ธ€€€„‡น€€€„‡บฐˆœ„‡ปˆ–•„‡ผจกฐ„‡ฝ„ฎฉ„‡พˆ–•„‡ฟ„ฎช„ˆ€œฎฉ„ˆˆŽฃ„ˆ‚€ฎฉ„ˆƒ€กฐ„ˆ„ˆ™„ˆ…„ฎซ„ˆ†ˆ›ธ„ˆ‡ฏฏ„ˆˆจก„ˆ‰ผŠ€„ˆŠˆ™„ˆ‹ฏš„ˆŒจกž„ˆผŠ€„ˆŽฐˆ”„ˆธ€‚„ˆฏ™„ˆ‘œ‹”„ˆ’„ˆ“„ˆ“ฒ€€„ˆ”ฎฉ„ˆ•„ˆš„ˆ–ฎช„ˆ—„ˆ›„ˆ˜ฏฐ„ˆ™ˆšฏ„ˆš€€€„ˆ›€€€„ˆœ„ฎ™„ˆœฏฐ„ˆž„ฏฐ„ˆŸˆ˜ฆ„ˆ ˆ”‚„ˆกฐƒ„ˆข€€€„ˆฃ’ˆข„ˆค„ข‡„ˆฅฟฟถ„ˆฆ„ข†„ˆงพญฐ„ˆจ„€ˆ„ˆฉ’€ˆ„ˆช„ญŒ„ˆซ’€ˆ„ˆฌ„ญ„ˆญ’€ˆ„ˆฎ„ญŽ„ˆฏ’€ˆ„ˆฐ„ญ„ˆฑŠข‡„ˆฒคข†„ˆณฐˆฉ„ˆดคˆข„ˆตฒˆข„ˆถ€€€„ˆทˆˆข„ˆธ€ˆผ„ˆนคˆถ„ˆบคˆถ„ˆปฒˆถ„ˆผ€€€„ˆฝญŒ„ˆพผˆ„ˆฟผˆ„‰€จก•„‰ฎˆถ„‰‚ผˆ€„‰ƒฒˆผ„‰„ฟฟฝ„‰…œ€ˆ„‰†จกฐ„‰‡คˆถ„‰ˆฒˆถ„‰‰ˆˆถ„‰Š€€€„‰‹ผˆ€„‰Œˆ™„‰„ขˆ„‰Žคญ‹„‰ญ‹„‰„ฎ™„‰‘พƒ„‰’„ฎจ„‰“กธ„‰”žฎง„‰•†ฎง„‰–ˆ’ท„‰—€ธ€„‰˜ขˆ„‰™„ฎง„‰šกถ„‰›–ฎง„‰œ†ฎง„‰ฎฅ„‰ž„ฎ™„‰Ÿญ‹„‰ „ฎฅ„‰กคขˆ„‰ข†ขˆ„‰ฃคฎฃ„‰คŒฏ‹„‰ฅฐƒ„‰ฆธ€ค„‰งฟฟฟ„‰จ„€‡„‰ฉก„‰ชˆ˜„‰ซฝ€€„‰ฌˆšฏ„‰ญ€€„‰ฎ€€„‰ฏˆšฏ„‰ฐ€ฎ™„‰ฑ€€„‰ฒˆ˜ฆ„‰ณฏŠ„‰ดผŠ€„‰ตฐ‰ธ„‰ถพคฆ„‰ทˆ–„‰ธˆ‹„„‰น’ฎง„‰บจกต„‰ป†ฎง„‰ผคฎง„‰ฝŽฎง„‰พˆž„‰ฟˆ‹„„Š€กถ„Ёžฎง„Š‚†ฎง„Šƒพ€‚„Š„œฎง„Š…„ข‰„Іฟฟฟ„Ї†ข‰„Šˆˆž„Љพ€‚„ŠŠœฎง„Š‹„ข‰„ŠŒ’ข‰„Šผ€„ŠŽ„ฎ™„ŠŽข‰„Аคข‰„Š‘’ข‰„Š’„ฎš„Š“Žข‰„Š”ฐƒ„Š•ฎ™„Š–ผ‹€„Š—ˆ™„Š˜ˆˆข„Š™€ŠŸ„Ššพ€‚„Š›œฎง„Šœ„ขŠ„ŠŽขŠ„Šžˆ™„ŠŸ€€€„Š ญ„Šกฌฎ™„Šขผˆ€„ŠฃฒŠŸ„ŠคญŽ„Šฅฌข„„ŠฆฐŠต„Šงกถ„Šจžฎง„Šฉ†ฎง„Šชพ€‚„Šซœฎง„Šฌ„ขŠ„Šญฎ™„Šฎ†ขŠ„Šฏˆž„Šฐพ€‚„Šฑœฎง„Šฒ„ขŠ„ŠณŽขŠ„ŠดฐŠ•„Šตฟฟฝ„Šถœ€ˆ„Šท„ขŠ„Šธข€„ŠนžขŠ„Šบ†ขŠ„ŠปคขŠ„ŠผคขŠ„Šฝฎฅ„Šพผ€„Šฟ†ขŠ„‹€คขŠ„‹ฎš„‹‚†ขŠ„‹ƒฐ‚„‹„€€€„‹…ˆˆข„‹†€‹ˆ„‹‡ฒ‹„„‹ˆ€€€„‹‰ฎฅ„‹ŠฌญŽ„‹‹ผˆ€„‹Œฒ‹ˆ„‹ฟฟฝ„‹Žœ€ˆ„‹„ข‹„‹ข€„‹‘žข‹„‹’†ข‹„‹“ฒ‹ˆ„‹”ฒ‹„‹•€‹ž„‹–€‹Ÿ„‹—€Œˆ„‹˜€Œฑ„‹™€‹ž„‹š€‹ž„‹›€‹ฏ„‹œ€Œฉ„‹€Œฝ„‹žˆ’ฌ„‹Ÿˆ„‹ ก„‹กˆฅ„‹ขฐ‹ซ„‹ฃจกง„‹คˆŽฃ„‹ฅ€กก„‹ฆ€กฃ„‹งผˆ€„‹จœกž„‹ฉถ‡‰„‹ชฐ“„‹ซˆ”œ„‹ฌ€ญ„‹ญˆž„‹ฎฐ‹Ÿ„‹ฏˆ„‹ฐˆ”Š„‹ฑผŠ€„‹ฒฐ”•„‹ณต€„‹ดญ‘„‹ตผ‰€„‹ถฐ‹พ„‹ท”กป„‹ธ„ญ‘„‹นดˆ‚„‹บธ„†„‹ปฌก˜„‹ผˆ Œ„‹ฝฐ”•„‹พดˆ‚„‹ฟ„ญ‰„Œ€ก„Œˆ˜„Œ‚ผˆ€„Œƒฐ”•„Œ„ˆ”œ„Œ…€ญ‘„Œ†ˆž„Œ‡ฐ‹ฏ„Œˆˆ„Œ‰ก‘„ŒŠˆฅ„Œ‹ฐŒฅ„ŒŒต€„Œจกฆ„ŒŽฌกŸ„ŒฐŒ•„Œดˆ‚„Œ‘จกฅ„Œ’ฌกค„Œ“ผˆ€„Œ”ฐŒ˜„Œ•ดˆ‚„Œ–”กœ„Œ—ต€„Œ˜ดˆ‚„Œ™„ฎซ„Œšˆ„Œ›ฎซ„Œœˆ• „ŒฐŒข„Œžˆ”œ„ŒŸ€ญ–„Œ ˆž„ŒกฐŒš„Œขฎซ„Œฃถ‡‰„Œคฐ“„Œฅˆ”œ„Œฆ€ญ’„Œงˆž„ŒจฐŒˆ„Œฉˆ„Œชˆ”Š„Œซˆ• „Œฌฐ”•„Œญˆ”œ„Œฎ€ญ–„Œฏˆž„ŒฐฐŒฉ„Œฑก’„Œฒˆฅ„ŒณฐŒถ„Œดถ‡‰„Œตฐ“„Œถญ“„Œทผ€„Œธธ„„Œนˆ”œ„Œบ€ญ“„Œปˆž„ŒผฐŒฑ„Œฝˆ”Š„ŒพผŠ€„Œฟฐ”•„€ต€„ญ”„‚ผ‰€„ƒฐ‰„„”กป„…„ญ”„†ดˆ‚„‡ธ‚„„ˆฐ”•„‰ดˆ‚„Š„ญ‰„‹ก“„Œˆ˜„ผˆ€„Žฐ”•„ˆ”œ„€ญ”„‘ˆž„’ฐŒฝ„“ฌกฌ„”ฐ‚„•†ฎฉ„–ก„—„ฎ™„˜ฐƒ„™€€€„šฟฟฟ„›„ฎ™„œฐƒ„€€€„žŒ ถ„Ÿˆƒ„ ผˆ€„กฐ‰ฉ„ขฟฟฟ„ฃ„ ถ„คฒ„ฅ€€€„ฆฟฟฟ„งœญฃ„จผ‰€„ฉฐถ„ช„ญฃ„ซœก†„ฌˆŽ„ญ„ขŒ„ฎˆŠ„ฏ€ฟ€„ฐ€€„ฑขŒ„ฒˆ‘ฆ„ณŒ บ„ดขŒ„ตฒฅ„ถญข„ทผŠ€„ธˆ’ฌ„น„ญค„บˆ‘Ž„ปฟ€„ผ„ญข„ฝˆŽท„พ€ฟ„ฟ€ญฅ„Ž€€€‰„ށก˜„Ž‚„ญฃ„Žƒฐฆ„Ž„€€€„Ž…ต€„ކญฃ„އฌก˜„Žˆฐސ„މœก†„ŽŠ„ขŒ„Ž‹ดˆ‚„ŽŒ†ขŒ„ŽŒ บ„ŽŽคญฃ„ŽฒŽ„„ސญข„Ž‘„ฟ€„Ž’ˆŽท„Ž“€ญฅ„Ž”€ฟ„Ž•€€‰„Ž–ดˆ‚„Ž—„ญข„Ž˜ˆ‘ฆ„Ž™Œ บ„Žšก„Ž›„ญฃ„ŽœฒŽ„„Ž€€€„Žžจกฐ„ŽŸœกธ„Ž „Žก„Žก€€„ŽขฒŽ„Žฃ€€€„Žคต„„Žฅ’Žฃ„Žฆ„ข„ŽงคŽฃ„Žจดˆ‚„Žฉžข„Žชผ€„ŽซฐŽณ„Žฌ’Žฃ„Žญ„ข„ŽฎคŽฃ„Žฏดˆ‚„Žฐžข„Žฑผ€„Žฒผ‹€„ŽณคŽฃ„Žดดˆ‚„Žตผ€„ŽถฒŽฃ„Žท€€€„Žธฟฟฟ„ŽนžŽท„Žบ„€ˆ„ŽปคŽท„Žผฟฟฟ„ŽฝžŽท„Žพ„€‰„ŽฟคŽท„€ฟฟฟ„žŽท„‚ผ€„ƒ„ข„„คŽท„…’€ˆ„††€‰„‡คข„ˆฐ…„‰ฒŽท„Š€€€„‹ฟฟฟ„ŒžŠ„„€ˆ„ŽคŠ„ฟฟฟ„žŠ„‘ผ€„’„ข„“คŠ„”Ž€ˆ„•คข„–ฐ”„—ฒŠ„˜€€€„™„ขŽ„šฝ€€„›ˆฏ„œฒ˜„œกณ„ž„ข„ŸขŽ„ ˆ‰„กญ‰„ข„ฃ„ฃค˜„คฒ˜„ฅ€€€„ฆˆฏ„งฒฅ„จœกน„ฉ„ฌ„ชฝ€€„ซˆ‰„ฌฃ„ญคฅ„ฎฒฅ„ฏ€€€„ฐผ ˆ„ฑœกˆ„ฒ„น„ณœกฟ„ด„…„ตœก„ถ„„„ทœกผ„ธ„ฝ„นขฐ„บผŠ€„ปฒฏ„ผ„ญˆ„ฝฌขฑ„พฐƒ„ฟœกธ„€„„ฃ€„‚ฐ…„ƒฝ€€„„„ขฑ„…„ขฐ„†คฏ„‡ญˆ„ˆฒฏ„‰€€€„Šผ ˆ„‹œก‡„Œ„š„œก„Ž„›„œกท„„‘„‘ขฏ„’ผŠ€„“ฐ™„”œกฒ„•„—„–ญˆ„—„ฃ€„˜ฐ›„™ญˆ„š„ขฐ„›„ขฑ„œฒ‰„€€€„ž„ข‘„Ÿฟฟผ„ „ข„กพจท„ข„ข„ฃข‘„คฌข„ฅฒ„ฆพ„งœข„จคข„ฉคข„ชฐฃ„ซค„ฌฒ„ญ€€€„ฎฝ€€„ฏˆ„ฐฐณ„ฑพจท„ฒ„ข„ณข„ด„‘€„ตœกก„ถ„ฟ„ทผ€„ธœก„นœฌป„บจกฐ„ปผŠ€„ผฐ‘‚„ฝ„‘„พˆŽท„ฟ€€€„‘€€€€„‘€€€„‘‚ฟพฟ„‘ƒœฌป„‘„„ข„‘…œก„‘†„‘‹„‘‡ญŠ„‘ˆ†ข„‘‰ˆŽท„‘Š€ฟ€„‘‹€€€„‘Œ€€„‘ฒญ„‘Ž€€€„‘ˆŽฃ„‘€ก„‘‘€กญ„‘’ˆ’ฌ„‘“ฌญŠ„‘”ฒ‘Ž„‘•„ญŠ„‘–ˆ„‘—ฐ‘œ„‘˜ญŠ„‘™ˆ‘ฒ„‘š€ฐ€„‘›ฐ‘ค„‘œŽข„‘พ€„‘žœข„‘Ÿ„‘ก„‘ ˆŽท„‘ก€€€„‘ข€ฟ€„‘ฃ€€„‘คˆญ„‘ฅฒ‘Ž„‘ฆ€€€„‘งˆŽฃ„‘จ€ก„‘ฉ€กญ„‘ชˆ’ฌ„‘ซˆ‘ฒ„‘ฌ€ธ€„‘ญญŠ„‘ฎˆ„‘ฏŽข„‘ฐˆญ„‘ฑฒ‘ฆ„‘ฒ€€€„‘ณ„ญŠ„‘ดผ €„‘ตต›“„‘ถ€„‘ท„ข’„‘ธดˆ‚„‘นต›“„‘บ€€Š„‘ป„ข“„‘ผด†–„‘ฝ”ข“„‘พด‡ˆ„‘ฟ„ข“„’€ข’„’ต›“„’‚€€Š„’ƒ„ข’„’„ด†–„’…”ข’„’†”ข“„’‡”กธ„’ˆ„ข’„’‰ˆ’„’Šฟฟ€„’‹€ฟ€„’Œ€ข’„’€‘ฒ„’Žค‘ฒ„’ฒ‘ฒ„’€€€„’‘ฟฟถ„’’„ข“„’“ฟฟฟ„’”œ’„’•„€Œ„’–ธนก„’—’€Œ„’˜ธน”„’™’€Œ„’šธนข„’›’€Œ„’œˆŽ„’ธน„„’žŒ ผ„’Ÿ’€Œ„’ ˆŽ„’กˆŽ„’ขธนค„’ฃ ผ„’คผŠ€„’ฅฐ’ฃ„’ฆ ฝ„’งผ€„’จฒ€Œ„’ฉคข“„’ชฐ’“„’ซˆ’ฌ„’ฌ€€€„’ญคข”„’ฎฐ’ญ„’ฏธ€‚„’ฐผ€ „’ฑˆŽท„’ฒพ€€„’ณ€€„’ด€€„’ตผ€ „’ถฐ’ต„’ท€€€„’ธผ €„’นด‡ƒ„’บ„ข•„’ปˆ’„’ผฟฟ€„’ฝ€ฎ™„’พ€ข•„’ฟ€’ท„“€ข•„“œกœ„“‚„ข•„“ƒˆ’„“„ฟ€€„“…€€„“†€ข•„“‡€’ท„“ˆค’ท„“‰ฒ’ท„“Š€€€„“‹ฏš„“Œต€„“ฎค„“Žผ‰€„“ฒ“Š„“ฌฏข„“‘ด…‚„“’ดˆ‚„““จญ€„“”ผ‚€„“•ฒ“Š„“–ˆ™„“—€€€„“˜ฟฟถ„“™„ข–„“šข–„“›œก˜„“œˆ“ฐ„“ˆ’ฌ„“žฏฏ„“Ÿผ€„“ ฐ“ค„“กคข–„“ขฐ“š„“ฃฒ“—„“คญ€„“ฅ”กป„“ฆ„ฏฏ„“งฏ™„“จ„ฏฑ„“ฉข–„“ชœก˜„“ซ„ฎ™„“ฌŒฏฐ„“ญˆ”‚„“ฎค“—„“ฏฒ“—„“ฐ€€€„“ฑˆŽฃ„“ฒ€กŽ„“ณ€ก—„“ดฒ“ฐ„“ตผ €„“ถต™’„“ท€€ƒ„“ธดˆ‚„“นœก„“บ„ข—„“ป„“ฝ„“ผˆŽท„“ฝ€€€„“พ€ฏฏ„“ฟ€€ƒ„”€ค“ฐ„”ฒ“ฐ„”‚€€€„”ƒข—„”„„”‡„”…ˆŽท„”†€ฏฏ„”‡€€€„”ˆ€€ƒ„”‰ฒ”‚„”Š€€€„”‹ฎฉ„”Œฌฎซ„”ฐ”™„”ސฎฉ„”ผ€ˆ„”’ฎฉ„”‘ผ„€„”’ด…‰„”“จกช„””ฒ”Š„”•ฎฉ„”–˜กป„”—„ฎฉ„”˜ฐ”‹„”™ฎช„”š„ฎ™„”›ฐƒ„”œ€€€„”พญฐ„”ž„€ˆ„”Ÿกธ„” ต€„”ก’ฎง„”ขฎ€ˆ„”ฃฐ”ช„”คค€ˆ„”ฅค€ˆ„”ฆค€ˆ„”งฝ€€„”จด…„”ฉฐ”ก„”ชœกถ„”ซ†ฎง„”ฌ’”œ„”ญ„ข˜„”ฎ’ข˜„”ฏด€‚„”ฐ†ข˜„”ฑค”œ„”ฒฒ”œ„”ณ€€€„”ดŒฏฆ„”ตผˆ€„”ถคฏฆ„”ทฏฆ„”ธˆ™„„”นฏง„”บผ‚€„”ปฐ”ถ„”ผฒ”ณ„”ฝ€€€„”พ„ข™„”ฟˆ”ณ„•€กœ„•„ฏ™„•‚คฏ™„•ƒฏ™„•„ˆ˜„•…ฏš„•†ผ‰€„•‡ฐ•‚„•ˆฏ™„•‰„ฏง„•ŠˆŽท„•‹€ญ„„•Œ€ฏจ„•€€„„•Žคญฎ„•ญฎ„•„ฏฌ„•‘„ฏฅ„•’ข™„•“”กป„•”„ฏš„••ฎค„•–„ฏข„•—ฟฟฟ„•˜„ฏฃ„•™Œฏค„•šˆŠ„•›€ฏ›„•œ€€‡„•ˆ˜ฆ„•žˆ™ž„•Ÿฒ”ฝ„• €€€„•กจกง„•ขผŠ€„•ฃฒ• „•คฌก™„•ฅฐ•ฐ„•ฆต€„•งฌก˜„•จˆ•ผ„•ฉ’คค„•ชฌกป„•ซฐ•ฒ„•ฌด€‚„•ญ†คค„•ฎคคค„•ฏฒ• „•ฐˆ–†„•ฑฒ• „•ฒคค„•ณฌก„„•ดฐ–‚„•ต„€ˆ„•ถกป„•ท†€ˆ„•ธฝ€€„•นถ†™„•บ†คค„•ปฒ• „•ผ€€€„•ฝคฅ„•พฌกข„•ฟฐ–‚„–€คคฅ„–ฒ•ผ„–‚กซ„–ƒธค”„–„ค• „–…ฒ• „–†€€€„–‡ก…„–ˆ„คค„–‰กป„–Š„คฉ„–‹Œคฅ„–Œฒ–†„–€€€„–Žธ€‚„–ธ…„–„ฌฝ„–‘ฟฟฟ„–’„ญž„–“ธ€ข„–”ฒ–„–•€€€„––’ฎฃ„–—คฎฃ„–˜ฒ–•„–™€€€„–šˆ–•„–›„–„–œˆŽท„–€€€„–ž€ญ„„–Ÿ€€„„– ฎฆ„–กˆ—Ÿ„–ข€ญ„„–ฃˆ™„–คฒ–™„–ฅ€€€„–ฆˆ–•„–ง„ฎฉ„–จˆ–•„–ฉ„ฎซ„–ชˆ›ธ„–ซฎซ„–ฌผŠ€„–ญฒ–ฅ„–ฎฌก„–ฏฐ–ฒ„–ฐฏค„–ฑฒ–ฅ„–ฒฏฐ„–ณฒ–ฅ„–ด€€€„–ตˆ–™„–ถˆ˜„–ทฎค„–ธผ€„–นฌฏข„–บผˆ€„–ปˆ™„–ผฒ–ด„–ฝ€€€„–พฟฟน„–ฟ„ขš„—€ก‚„—„ข›„—‚’ข›„—ƒผŠ€„—„ฐ—˜„—…ฏš„—†จกธ„—‡ผŠ€„—ˆฐ—•„—‰ฟฟ€„—Š„ขœ„—‹กƒ„—Œ„ข„—’ข›„—Žˆ‘Ž„—’ข„—ผ‚€„—‘ˆŽ„„—’คข„—“คขœ„—”ฐ—„—•’ข›„—–ˆŽ„„——Žข›„—˜คข›„—™คขš„—šฐ—‚„—›ฏš„—œจกฝ„—„ฏš„—žฒ–ฝ„—Ÿ€€€„— ˆ˜„—กฟฟฟ„—ขž—Ÿ„—ฃ„ขŸ„—คค—Ÿ„—ฅฏš„—ฆจกœ„—งผŠ€„—จฒ—Ÿ„—ฉฟฟธ„—ชœฏค„—ซผ€„—ฌถ…ƒ„—ญ„ขž„—ฎผŠ€„—ฏฒ—Ÿ„—ฐŒฏฆ„—ฑฏฆ„—ฒˆ™„„—ณฏง„—ดผŠ€„—ตฐ˜‹„—ถขŸ„—ท„€ˆ„—ธฏจ„—นฎ€ˆ„—บผˆ€„—ปฐ˜‹„—ผฏฉ„—ฝฎ€ˆ„—พผˆ€„—ฟฐ˜‹„˜€ฏช„˜ฎ€ˆ„˜‚ผˆ€„˜ƒฐ˜‹„˜„ฏซ„˜…ฎ€ˆ„˜†ผˆ€„˜‡ฐ˜‹„˜ˆฏง„˜‰ค—Ÿ„˜Šฒ—Ÿ„˜‹คฏฆ„˜Œคขž„˜ฐ—ฑ„˜Žฒ—Ÿ„˜€€€„˜„ฏ™„˜‘ผ €„˜’ต›“„˜“€€…„˜”„ข „˜•ดˆ‚„˜–œก„˜—„ขก„˜˜ˆ‘Ž„˜™ข „˜šผ €„˜›ต™’„˜œ€€Œ„˜ดˆ‚„˜žœกƒ„˜Ÿ„ข „˜ „˜ข„˜กˆŽท„˜ข€€€„˜ฃ€ฏš„˜ค€€Œ„˜ฅฒ˜„˜ฆ€€€„˜งขก„˜จˆ‘Ž„˜ฉพฏ™„˜ช„€ˆ„˜ซฟฟฟ„˜ฌœข „˜ญ„€‰„˜ฎฟฟด„˜ฏ„ขข„˜ฐ’€ˆ„˜ฑฎ€‰„˜ฒผˆ€„˜ณฐ˜ท„˜ดคขข„˜ตฐ˜ฐ„˜ถฒ˜ฆ„˜ทฟฟฟ„˜ธœ€ˆ„˜น„€ˆ„˜บฟฟฟ„˜ปœ€‰„˜ผ„€‰„˜ฝ’€ˆ„˜พ†€‰„˜ฟคขข„™€ฐ˜ฝ„™ขก„™‚ˆ‘ฆ„™ƒฒ˜ฆ„™„€€€„™…„ฏฆ„™†ถ‡ƒ„™‡„ขฃ„™ˆˆ™ช„™‰„ขค„™Šˆ‘Ž„™‹ขฃ„™Œจก „™œกƒ„™Ž„ขฅ„™„™‘„™ˆŽท„™‘€€€„™’€ฏง„™“€€ˆ„™”ขฃ„™•œก–„™–ˆŽฃ„™—€กŽ„™˜€ฏค„™™ผˆ€„™šฒ™„„™›ˆœ‚„™œŒฏง„™ฒ™„„™ž€€€„™Ÿขค„™ ˆ‘Ž„™กขฅ„™ข„™ฅ„™ฃˆŽท„™ค€ฏง„™ฅ€€€„™ฆ€€ˆ„™งขค„™จˆ‘ฆ„™ฉฒ™ž„™ช€€€„™ซถ…†„™ฌ„ขฆ„™ญฏš„™ฎจกธ„™ฏผ‚€„™ฐฐ𐄙ฑขฆ„™ฒˆŽฃ„™ณ€กŽ„™ด€ก”„™ตฐ™ฝ„™ถœก‚„™ท„ขฆ„™ธ’ขฆ„™นผŠ€„™บˆฅ„™ป†ขฆ„™ผฒ™ช„™ฝˆฅ„™พ„ขง„™ฟˆŽท„š€€ฏ›„š€ฟ€„š‚€€‡„šƒˆŠ„š„€ฟ‡„š…€€น„š†ขง„š‡ˆ‘ฆ„šˆขง„š‰„ฏ›„šŠˆŠ„š‹€ฏœ„šŒ€€†„šฏš„šŽ”กธ„š„ฏš„šขฆ„š‘ถ…†„š’ˆŽฃ„š“€กŽ„š”€ก”„š•ˆ’ฌ„š–œก‚„š—„ขง„š˜’ขง„š™ผŠ€„ššˆฅ„š›†ขง„šœ„ขจ„šˆ‘Ž„šžขฆ„šŸจก „š œกƒ„šก„ขง„šข’ขง„šฃผ‚€„šคฒ™ช„šฅˆฅ„šฆ„ขฆ„šงขจ„šจˆ‘Ž„šฉขฆ„šช†ขง„šซขจ„šฌˆ‘ฆ„šญขฆ„šฎฒ™ช„šฏ€€€„šฐ„ขฉ„šฑšฏ„šฒ„šถ„šณ›„šด„šฏ„šตฐšบ„šถ€€€„šท„ขฉ„šธœข„šน„šฏ„šบฟฟฟ„šปžšถ„šผ„€Š„šฝ„€‹„šพคšถ„šฟ’šถ„›€„ขช„›คšถ„›‚กด„›ƒ šฏ„›„ฏค„›…ผ€„›†œขฉ„›‡ผ€„›ˆˆŽฃ„›‰€กŽ„›Š€ขช„›‹ขช„›Œ„ขซ„›ผ€„›Žœก„›ผŠ€„›ฒšถ„›‘„ขช„›’ขฉ„›“ˆ™ช„›”„ขฌ„›•ˆ‘Ž„›–ขฉ„›—จก „›˜œกƒ„›™œข„„›š šฏ„››ฐ›ž„›œ„€Š„›ผˆ€„›ž„€‹„›Ÿ’€‹„› †€Š„›กคขฉ„›ขคขช„›ฃฐ›ฏ„›ค šฏ„›ฅฐ›ญ„›ฆขฉ„›งˆŽฃ„›จ€กŽ„›ฉ€ฏค„›ช„ฏค„›ซขฌ„›ฌˆ‘ฆ„›ญขซ„›ฎฒšถ„›ฏขฉ„›ฐจก „›ฑผ‚€„›ฒฐ›Ÿ„›ณ šฏ„›ดฐ›’„›ตขฌ„›ถˆ‘ฆ„›ทฐ›’„›ธ€€€„›นฎ™„›บˆ“ฐ„›ปˆ™„›ผฏฏ„›ฝผ€„›พˆ™„›ฟฏฑ„œ€ˆ˜„œฒ›ธ„œ‚€€€„œƒ„ฏค„œ„ˆ˜ฆ„œ…ฏค„œ†ฒœ‚„œ‡„ น„œˆธงก„œ‰ฐœš„œŠธงฑ„œ‹ธงช„œŒ„ญš„œผˆ„œŽฐœ•„œธงŠ„œ„ญ„œ‘ฟฟฟ„œ’„ญ›„œ“ญš„œ”ผ€ˆ„œ•ผ€„œ–ฐŸญ„œ—ฟฟฟ„œ˜„ญœ„œ™ฐŸญ„œšธ€„œ›ฐœถ„œœธคŠ„œ„ฌพ„œžคญฐ„œŸผˆ€„œ คญฏ„œกคฌผ„œขผ€€„œฃฟฟฟ„œค„€‡„œฅธ€ค„œฆญƒ„œงผ‰€„œจคญƒ„œฉผˆ€„œชˆบ„œซญž„œฌผŠ€„œญฐŸญ„œฎค ป„œฏผˆ€„œฐฐŠ„œฑฌก‘„œฒฐŸญ„œณคญž„œดฐŸญ„œตฐŠ„œถธน‘„œทฐœพ„œธฟฟฟ„œน„ ผ„œบธนš„œป„ ฝ„œผธนก„œฝฐŸญ„œพธˆช„œฟผˆ„€ฐ‘„ธ…„‚ญž„ƒผŠ€„„ฐŸญ„…œขƒ„†ผŠ€„‡ฐŠ„ˆ„ญž„‰ฐŸญ„Šก„‹„ญž„Œฌฝ„ธ…ง„Žฟฟถ„„ ป„ฐŸญ„‘ผˆ„’ฐ•„“ธ‡ข„”ฐŸญ„•ผ€„–ฐ›„—ธˆŠ„˜„ญŸ„™ธ‡“„šฐŸญ„›ธƒ„œฐต„ญƒ„žผ€„Ÿคญƒ„ ธƒŠ„ก„ญ‰„ขฌกฉ„ฃฐ ‘„คก„ฅˆ˜„ฆŒญ‰„งญ„จˆŸฒ„ฉ„ญ„ชญ‰„ซฌกจ„ฌผˆ€„ญฐŸญ„ฎญ‘„ฏผ€„ฐ”กป„ฑ„ญ‘„ฒˆ Œ„ณˆบ„ดฐŸญ„ตธ„„ถฐž–„ทธ„‚„ธˆบ„นฐŸญ„บ€€€„ปญƒ„ผผ‰€„ฝฒบ„พญ„ฟŒญ„ž€ผ‚€„žฐž†„ž‚คญƒ„žƒก„ž„ˆฅ„ž…ฐž’„ž†ธ„†„ž‡ฌก˜„žˆˆ Œ„ž‰ฌกš„žŠผˆ€„ž‹ฒบ„žŒญƒ„žœกœ„žŽผ „žผ€„ž„ญƒ„ž‘ฒบ„ž’ญ‘„ž“ˆŸฒ„ž”„ญ‘„ž•ฒบ„ž–ธฃ„ž—ฐžค„ž˜ธฃ„„ž™ธฃŠ„žš„ญ‰„ž›ฌก„žœฐ ค„žก‘„žžˆ˜„žŸผ€€„ž ญ’„žกˆŸฒ„žข„ญ’„žฃฐŸญ„žคธ„žฅฐŸŠ„žฆญ‚„žงผŠ€„žจฐžญ„žฉ„ญ‰„žชธŠ„žซ„ญ‚„žฌฐžฏ„žญธŠ„žฎ„ญ‰„žฏญ‰„žฐผŠ€„žฑฐžธ„žฒก’„žณˆ˜„žดฐŸ„„žตญ‰„žถฌก’„žทฐŸ†„žธญ‚„žนผŠ€„žบฐžพ„žป„ญ‰„žผŒญ‚„žฝฐžฏ„žพธ„„žฟญ“„Ÿ€ˆŸฒ„Ÿ”กป„Ÿ‚„ญ“„ŸƒฐŸญ„Ÿ„ญ‰„Ÿ…„ญ‚„Ÿ†ญ“„Ÿ‡ˆŸฒ„Ÿˆ„ญ“„Ÿ‰ฐŸญ„ŸŠธ‚„Ÿ‹ฐŸ–„ŸŒธ‚‚„Ÿก“„ŸŽˆฅ„ŸฐŸ’„Ÿธ‚„„Ÿ‘ฐŸญ„Ÿ’ญ”„Ÿ“ˆŸฒ„Ÿ”„ญ”„Ÿ•ฐŸญ„Ÿ–ธค„Ÿ—ฐŸฅ„Ÿ˜ธค„„Ÿ™ธคŠ„Ÿš„ฌฟ„Ÿ›จกซ„ŸœผŠ€„ŸฐŸญ„Ÿžˆ–†„ŸŸญ–„Ÿ ˆŸฒ„Ÿก„ญ–„Ÿขฝ€€„Ÿฃธค”„ŸคฐŸญ„Ÿฅธท„ŸฆฐŸฌ„ŸงธทŠ„Ÿจ„ญก„Ÿฉฟฟฟ„Ÿช„ญ „ŸซฐŸญ„ŸฌธทŠ„Ÿญ€€„Ÿฎผ€ˆ„Ÿฏ น„Ÿฐธ€ข„Ÿฑฒ€€„Ÿฒ€€€„Ÿณ„ขญ„Ÿดฟฟถ„Ÿต„ขฎ„Ÿถ พ„Ÿท„ €„Ÿธ ฟ„Ÿน„ „Ÿบขญ„Ÿปผ€ˆ„Ÿผ„ขญ„Ÿฝผ€„Ÿพฐ ‚„Ÿฟข€„ €œ€€„ „€€„ ‚ €„ ƒœก’„ „„ €„ … „ †œก’„ ‡„ „ ˆคขฎ„ ‰ฐŸบ„ Šฝ€€„ ‹ฒŸฒ„ Œ€€€„ กš„ Ž„ญ„ ฝ€€„ ฒ Œ„ ‘ก”„ ’„ ท„ “ก„ ”ˆฅ„ •ผˆ€„ –ฐ “„ —ก„ ˜ˆฅ„ ™ผˆ€„ šฐ —„ ›ญ„ œˆŸฒ„ „ญ„ žญ‘„ ŸˆŸฒ„  „ญ‘„ กˆƒ„ ขฐŸญ„ ฃฐ ฒ„ คก•„ ฅ„ ธ„ ฆก‘„ งˆฅ„ จผˆ€„ ฉฐ ฆ„ ชญ’„ ซˆŸฒ„ ฌ„ญ’„ ญญ–„ ฎˆŸฒ„ ฏ„ญ–„ ฐˆƒ„ ฑฐŸญ„ ฒ€€„ ณ„€„ ด น„ ตฐ€‘„ ถ€€€„ ท€€€„ ธ€€€„ น€€€„ บ€€€„ ป€€€„ ผ€€€„ ฝ€€€„ พœญฑ„ ฟ„ญฑ„ก€€€ž„ก€ฎฌ„ก‚€ฏ›„กƒ€ฟ€„ก„€จด„ก…€คฉ„ก†€ญค„ก‡„ขฐ„กˆขฐ„ก‰€ฃ€„กŠ‰ฎ„ก‹‰ด„กŒ„€ „ก„€ „กŽ€€€„ก€€„ก€€‚„ก‘€€ƒ„ก’€€„„ก“€€…„ก”€€†„ก•€€‡„ก–€€ˆ„ก—€€‰„ก˜€€Š„ก™€€Œ„กš€€„ก›€€„กœ€€„ก€€›„กž€€ „กŸ€€ญ„ก €€ฟ„กก€„กข€€ก„กฃ€š„กค€œ„กฅ€Ÿ„กฆ€ญ„กง€ฟ„กจ€‚Š„กฉ€ƒฝ„กช€‡ฟ„กซ€€„กฌ€ €„กญผฟ„กฎ€€„กฏฟฒ„กฐฟฟ„กฑ‚€„กฒ„€€„กณ„€„กด‡€€„กต‡ฟฟ„กถˆ€€„กทŒ€€„กธ€€„กน€„กบ˜€€„กป €€„กผจ€€„กฝฏฟฟ„กพฐ€€„กฟด€€„ข€ธ€€„ขฟฟ€„ข‚ฟฟฐ„ขƒฟฟฝ„ข„ฟฟฟ„ขฐ€ฃ€„ขฑ€คข„ฃ€€ฃ‚„ฃ€€€„ฃ‚€ฃ„„ฃƒ€€€„ฃ„€ฃ†„ฃ…€€€„ฃ†€ฃˆ„ฃ‡€€€„ฃˆ€ฃŠ„ฃ‰€€€„ฃŠ€ฃŒ„ฃ‹€€€„ฃŒ€ฃŽ„ฃ€€€„ฃŽ€ฃ„ฃ€€€„ฃ€ฃ’„ฃ‘€€€„ฃ’€ฃ”„ฃ“€€€„ฃ”€ฃ–„ฃ•€€€„ฃ–€ฃ˜„ฃ—€€€„ฃ˜€ฃš„ฃ™€€€„ฃš€ฃœ„ฃ›€€€„ฃœ€ฃž„ฃ€€€„ฃž€ฃ „ฃŸ€€€„ฃ €ฃข„ฃก€€€„ฃข€ฃค„ฃฃ€€€„ฃค€ฃฆ„ฃฅ€€€„ฃฆ€ฃจ„ฃง€€€„ฃจ€ฃช„ฃฉ€€€„ฃช€ฃฌ„ฃซ€€€„ฃฌ€ฃฎ„ฃญ€€€„ฃฎ€ฃฐ„ฃฏ€€€„ฃฐ€ฃฒ„ฃฑ€€€„ฃฒ€ฃด„ฃณ€€€„ฃด€ฃถ„ฃต€€€„ฃถ€ฃธ„ฃท€€€„ฃธ€ฃบ„ฃน€€€„ฃบ€ฃผ„ฃป€€€„ฃผ€ฃพ„ฃฝ€€€„ฃพ€ค€„ฃฟ€€€„ค€€ค‚„ค€€€„ค‚€ค„„คƒ€€€„ค„€ค†„ค…€€€„ค†€คˆ„ค‡€€€„คˆ€คŠ„ค‰€€€„คŠ€คŒ„ค‹€€€„คŒ€คŽ„ค€€€„คŽ€ค„ค€€€„ค€ค’„ค‘€€€„ค’€ค”„ค“€€€„ค”€ค–„ค•€€€„ค–€ค˜„ค—€€€„ค˜€คš„ค™€€€„คš€คœ„ค›€€€„คœ€คž„ค€€€„คž€ค „คŸ€€€„ค €คข„คก€€€„คข€€€„คฃ€€€„คฆ†จฏ„คงŒฟ „คจŽ€€„ฅ‡Œ€„ฅˆธ›‚„ฅ‰ธ€ข„ฅŠธ€ค„ฅ‹พฐ€„ฅŒธข†„ฅˆ–†„ฅŽพคฆ„ฅˆ–„ฅฝ€€„ฅ‘ˆ‘ฒ„ฅ’€ฐ€„ฅ“ˆŽท„ฅ”€ฟ€„ฅ•€ญข„ฅ–€€„ฅ—ก‘„ฅ˜ˆ—Ÿ„ฅ™€กŠ„ฅšˆ’ฌ„ฅ›ˆ˜„ฅœฝ€€„ฅˆšถ„ฅž€€„ฅŸ€€„ฅ ฑ€€„ฌป€ฌป„ญ‹€€„ญฑ‹ˆ€„ญฒ€€„ญณ€€€„ญด€€€„ญตƒˆ „ญถ€€€„ญท€€€„ญธ€€€„ญนƒ‰€„ญบ€€€„ญป€€€„ญผ€€€„ญฝƒ‰ „ญพ€€€„ญฟ€€€„ฎ€€€€„ฎƒŠ€„ฎ‚€€€„ฎƒ€€€„ฎ„€€€„ฎ…ƒŠ „ฎ†€€€„ฎ‡€€€„ฎˆ€€€„ฎ‰ƒ‹€„ฎŠ€€€„ฎ‹€€€„ฎŒ€€€„ฎƒ‹ „ฎŽ€€€„ฎ€€€„ฎ€€€„ฎ‘ƒŒ€„ฎ’€€€„ฎ“€€€„ฎ”€€€„ฎ•ƒŒ „ฎ–€€€„ฎ—€€€„ฎ˜€€€„ฎ™€€€„ฎš€€€„ฎคฟฟฟ„ฎฅ€€„ฎฆ€€ƒ„ฎง€ญฑ„ฎจ€€€„ฎฉ€€€„ฎช€€€„ฎซ€€€„ฏŠ€€€„ฏ‹€€„ฏฑ€€€ผ€  \ No newline at end of file diff --git a/build/alt/image.fs b/build/alt/image.fs deleted file mode 100644 index d37e6413ca9530670c6d50a311cbfefbe4fb3261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096000 zcmeF(37lSKc{lzuGXb&zNr)6T7(kGngdIc~kVRYx(6TH0qU?knB!Z#{DiLa}*5!4p zTWhUYYuy4UB7#lAfQSmwQmeKqt1H6)cg=GSd7K8S@2B+rcl@3Y7xy{$cJA{%`|~`L zrZEv9K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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