Skip to content
Snippets Groups Projects
xv6.ps 529 KiB
Newer Older
% Produced by xpdf/pdftops 3.02
Russ Cox's avatar
Russ Cox committed
%%Creator: mpage 2.5.5 November 2006
%%Title: <stdin> (mpage)
%%LanguageLevel: 2
%%DocumentSuppliedResources: (atend)
%%DocumentMedia: plain 612 792 0 () ()
%%BoundingBox: 0 0 612 792
kolya's avatar
kolya committed
%%Pages: 80
%%EndComments
%%BeginDefaults
%%PageMedia: plain
%%EndDefaults
%%BeginProlog
%%BeginResource: procset xpdf 3.02 0
%%Copyright: Copyright 1996-2007 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
  3 1 roll 2 array astore
  /setpagedevice where {
    pop 3 dict begin
      /PageSize exch def
      /ImagingBBox null def
      /Policies 1 dict dup begin /PageSize 3 def end def
      { /Duplex true def } if
    currentdict end setpagedevice
  } {
    pop pop
  } ifelse
} def
/pdfStartPage {
  pdfDictSize dict begin
rsc's avatar
rsc committed
  /pdfFillCS [] def
  /pdfFillXform {} def
  /pdfStrokeCS [] def
  /pdfStrokeXform {} def
  /pdfFill [0] def
  /pdfStroke [0] def
rsc's avatar
rsc committed
  /pdfFillOP false def
  /pdfStrokeOP false def
  /pdfLastFill false def
  /pdfLastStroke false def
  /pdfTextMat [1 0 0 1 0 0] def
  /pdfFontSize 0 def
  /pdfCharSpacing 0 def
  /pdfTextRender 0 def
  /pdfTextRise 0 def
  /pdfWordSpacing 0 def
  /pdfHorizScaling 1 def
  /pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
rsc's avatar
rsc committed
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
      setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
      setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
      dup /pdfFill exch def aload pop pdfFillXform setcolor
     /pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
     /pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
      pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
      pdfLastStroke { pdfStrokeOP setoverprint } if } def
rsc's avatar
rsc committed
    pdfFillCS setcolorspace
    pdfFill aload pop pdfFillXform setcolor
    pdfFillOP setoverprint
    /pdfLastFill true def /pdfLastStroke false def
  } if
} def
rsc's avatar
rsc committed
/sCol {
  pdfLastStroke not {
    pdfStrokeCS setcolorspace
    pdfStroke aload pop pdfStrokeXform setcolor
    pdfStrokeOP setoverprint
    /pdfLastStroke true def /pdfLastFill false def
  } if
} def
% build a font
/pdfMakeFont {
  4 3 roll findfont
  4 2 roll matrix scale makefont
  dup length dict begin
    { 1 index /FID ne { def } { pop pop } ifelse } forall
    /Encoding exch def
    currentdict
  end
  definefont pop
} def
/pdfMakeFont16 {
  exch findfont
  dup length dict begin
    { 1 index /FID ne { def } { pop pop } ifelse } forall
    /WMode exch def
    currentdict
  end
  definefont pop
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
rsc's avatar
rsc committed
/Q {
  end grestore
  /pdfLastFill where {
    pop
    pdfLastFill {
      pdfFillOP setoverprint
    } {
      pdfStrokeOP setoverprint
    } ifelse
  } if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
      neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
kolya's avatar
kolya committed
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
      dup pdfHorizScaling mul exch matrix scale
      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
      exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/cshow where {
  pop
  /cshow2 {
    dup {
      pop pop
      1 string dup 0 3 index put 3 index exec
    } exch cshow
    pop pop
  } def
}{
  /cshow2 {
    currentfont /FontType get 0 eq {
      0 2 2 index length 1 sub {
        2 copy get exch 1 add 2 index exch get
        2 copy exch 256 mul add
        2 string dup 0 6 5 roll put dup 1 5 4 roll put
        3 index exec
      } for
    } {
      dup {
        1 string dup 0 3 index put 3 index exec
      } forall
    } ifelse
    pop pop
  } def
} ifelse
/awcp {
  exch {
    false charpath
    5 index 5 index rmoveto
    6 index eq { 7 index 7 index rmoveto } if
  } exch cshow2
  6 {pop} repeat
} def
/Tj {
  fCol
  1 index stringwidth pdfTextMat idtransform pop
  sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse
  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
  pdfTextMat dtransform
  6 5 roll Tj1
} def
/Tj16 {
  fCol
  2 index stringwidth pdfTextMat idtransform pop
  sub exch div
  pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
  4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
  pdfTextMat dtransform
  6 5 roll Tj1
} def
/Tj16V {
  fCol
  2 index stringwidth pdfTextMat idtransform exch pop
  sub exch div
  0 pdfWordSpacing pdfTextMat dtransform 32
  4 3 roll pdfCharSpacing add 0 exch
  pdfTextMat dtransform
  6 5 roll Tj1
} def
/Tj1 {
  0 pdfTextRise pdfTextMat dtransform rmoveto
  currentpoint 8 2 roll
  pdfTextRender 1 and 0 eq {
    6 copy awidthshow
  } if
  pdfTextRender 3 and dup 1 eq exch 2 eq or {
    7 index 7 index moveto
    6 copy
    currentfont /FontType get 3 eq { fCol } { sCol } ifelse
    false awcp currentpoint stroke moveto
  } if
  pdfTextRender 4 and 0 ne {
    8 6 roll moveto
    false awcp
    /pdfTextClipPath [ pdfTextClipPath aload pop
      {/moveto cvx}
      {/lineto cvx}
      {/curveto cvx}
      {/closepath cvx}
    pathforall ] def
    currentpoint newpath moveto
  } {
    8 {pop} repeat
  } ifelse
  0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { pdfFontSize 0.001 mul mul neg 0
       pdfTextMat dtransform rmoveto } def
/TJmV { pdfFontSize 0.001 mul mul neg 0 exch
        pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
         /pdfTextClipPath [] def } def
% Level 2 image operators
/pdfImBuf 100 string def
/pdfIm {
  image
  { currentfile pdfImBuf readline
    not { pop exit } if
    (%-EOD-) eq { exit } if } loop
} def
/pdfImM {
  fCol imagemask
  { currentfile pdfImBuf readline
    not { pop exit } if
    (%-EOD-) eq { exit } if } loop
} def
kolya's avatar
kolya committed
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
rsc's avatar
rsc committed
/pdfImClip {
  gsave
  0 2 4 index length 1 sub {
    dup 4 index exch 2 copy
    get 5 index div put
    1 add 3 index exch 2 copy
    get 3 index div put
  } for
  pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
  false 0 1 3 index length 1 sub {
    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
      pop true
    } if
  } for
  exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
  dup 0 eq {
    true
  } {
    dup 6 eq {
      false
    } {
      4 index 4 index funcCol dup
      6 index 4 index funcCol dup
      3 1 roll colordelta 3 1 roll
      5 index 5 index funcCol dup
      3 1 roll colordelta 3 1 roll
      6 index 8 index funcCol dup
      3 1 roll colordelta 3 1 roll
      colordelta or or or
    } ifelse
  } ifelse
  {
    1 add
    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
    6 index 6 index 4 index 4 index 4 index funcSH
    2 index 6 index 6 index 4 index 4 index funcSH
    6 index 2 index 4 index 6 index 4 index funcSH
    5 3 roll 3 2 roll funcSH pop pop
  } {
    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul
    funcCol sc
    dup 4 index exch mat transform m
    3 index 3 index mat transform l
    1 index 3 index mat transform l
    mat transform l pop pop h f*
  } ifelse
} def
/axialCol {
  dup 0 lt {
    pop t0
  } {
    dup 1 gt {
      pop t1
    } {
      dt mul t0 add
    } ifelse
  } ifelse
  func n array astore
} def
/axialSH {
  dup 0 eq {
    true
  } {
    dup 8 eq {
      false
    } {
      2 index axialCol 2 index axialCol colordelta
    } ifelse
  } ifelse
  {
    1 add 3 1 roll 2 copy add 0.5 mul
    dup 4 3 roll exch 4 index axialSH
    exch 3 2 roll axialSH
  } {
kolya's avatar
kolya committed
    pop 2 copy add 0.5 mul
    axialCol sc
rsc's avatar
rsc committed
    exch dup dx mul x0 add exch dy mul y0 add
    3 2 roll dup dx mul x0 add exch dy mul y0 add
    dx abs dy abs ge {
      2 copy yMin sub dy mul dx div add yMin m
      yMax sub dy mul dx div add yMax l
      2 copy yMax sub dy mul dx div add yMax l
      yMin sub dy mul dx div add yMin l
      h f*
    } {
      exch 2 copy xMin sub dx mul dy div add xMin exch m
      xMax sub dx mul dy div add xMax exch l
      exch 2 copy xMax sub dx mul dy div add xMax exch l
      xMin sub dx mul dy div add xMin exch l
      h f*
    } ifelse
  } ifelse
} def
/radialCol {
  dup t0 lt {
    pop t0
  } {
    dup t1 gt {
      pop t1
    } if
  } ifelse
  func n array astore
rsc's avatar
rsc committed
/radialSH {
  dup 0 eq {
    true
  } {
    dup 8 eq {
      false
    } {
      2 index dt mul t0 add radialCol
      2 index dt mul t0 add radialCol colordelta
    } ifelse
  } ifelse
  {
    1 add 3 1 roll 2 copy add 0.5 mul
    dup 4 3 roll exch 4 index radialSH
    exch 3 2 roll radialSH
  } {
kolya's avatar
kolya committed
    pop 2 copy add 0.5 mul dt mul t0 add
    radialCol sc
    encl {
      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      0 360 arc h
      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      360 0 arcn h f
    } {
      2 copy
      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      a1 a2 arcn
      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      a2 a1 arcn h
      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      a1 a2 arc
      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
      a2 a1 arc h f
    } ifelse
rsc's avatar
rsc committed
  } ifelse
} def
end
%%EndResource
%%EndProlog
%%BeginSetup
xpdf begin
Russ Cox's avatar
Russ Cox committed
%%BeginResource: font APYGPQ+LucidaSans-Typewriter83
%!FontType1-1.0: APYGPQ+LucidaSans-Typewriter83
12 dict begin
/FontInfo 10 dict dup begin
/Notice (Copyright (c) 1991 Bigelow & Holmes Inc. and Y&Y, Inc. (508) 371-3286. All Rights Reserved.) readonly def
/FullName (Lucida Sans Typewriter 83) readonly def
/FamilyName (LucidaSansTypewriter83) readonly def
rsc's avatar
rsc committed
/isFixedPitch true def
rsc's avatar
rsc committed
/UnderlinePosition 0 def
/UnderlineThickness 0 def
Russ Cox's avatar
Russ Cox committed
/FontName /APYGPQ+LucidaSans-Typewriter83 def
/PaintType 0 def
/FontType 1 def
kolya's avatar
kolya committed
/FontMatrix [0.00083333 0 0 0.00083333 0 0] readonly def
Russ Cox's avatar
Russ Cox committed
/FontBBox [0 -170 501 652] readonly def
/StrokeWidth 0 def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 32 /space put
dup 33 /exclam put
dup 34 /quotedbl put
dup 35 /numbersign put
dup 36 /dollar put
dup 37 /percent put
dup 38 /ampersand put
dup 39 /quoteright put
dup 40 /parenleft put
dup 41 /parenright put
dup 42 /asterisk put
dup 43 /plus put
dup 44 /comma put
Russ Cox's avatar
Russ Cox committed
dup 45 /hyphen put
dup 46 /period put
dup 47 /slash put
dup 48 /zero put
dup 49 /one put
dup 50 /two put
dup 51 /three put
dup 52 /four put
dup 53 /five put
dup 54 /six put
dup 55 /seven put
dup 56 /eight put
dup 57 /nine put
dup 58 /colon put
dup 59 /semicolon put
dup 60 /less put
dup 61 /equal put
dup 62 /greater put
dup 63 /question put
dup 64 /at put
dup 65 /A put
dup 66 /B put
dup 67 /C put
dup 68 /D put
dup 69 /E put
dup 70 /F put
dup 71 /G put
dup 72 /H put
dup 73 /I put
dup 74 /J put
dup 75 /K put
dup 76 /L put
dup 77 /M put
dup 78 /N put
dup 79 /O put
dup 80 /P put
dup 81 /Q put
dup 82 /R put
dup 83 /S put
dup 84 /T put
dup 85 /U put
dup 86 /V put
dup 87 /W put
dup 88 /X put
dup 89 /Y put
dup 90 /Z put
dup 91 /bracketleft put
dup 92 /backslash put
dup 93 /bracketright put
dup 94 /asciicircum put
dup 95 /underscore put
dup 96 /quoteleft put
dup 97 /a put
dup 98 /b put
dup 99 /c put
dup 100 /d put
dup 101 /e put
dup 102 /f put
dup 103 /g put
dup 104 /h put
dup 105 /i put
dup 106 /j put
dup 107 /k put
dup 108 /l put
dup 109 /m put
dup 110 /n put
dup 111 /o put
dup 112 /p put
dup 113 /q put
dup 114 /r put
dup 115 /s put
dup 116 /t put
dup 117 /u put
dup 118 /v put
dup 119 /w put
dup 120 /x put
dup 121 /y put
dup 122 /z put
dup 123 /braceleft put
dup 124 /bar put
dup 125 /braceright put
dup 126 /asciitilde put
readonly def
currentdict end
currentfile eexec
5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62
BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68
368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79
BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97
1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B
1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE
7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF5
C2A9054AD59AE4D5522D8745045620C9C40EAB675A6FE53511D83C04968F37DE
389C3A7A551DC79580FF1B382205C5951A9F8E7B6CEF33E027D608C14A394033
kolya's avatar
kolya committed
1E603A09B3061B66BB71AC1D2A232B5F2BC9481D7D44F334ACCBBF6537EF8BC7
075D89E6422C4E0A415BF3A1B001A284566A4DF8C6877CB0C70D67F5E7FA25E1
90435DC2AFD452D1184CEA4CBF9F81F8CD7BE3B6EBA8395A40925FDDEB186DE2
AB0372CF67C17BEE733C73CA29E00C3909E960A0417FCACC7211EBF3DD7225F0
6F4FB7DBA35BF59A21014E1066BF090958F991C2BFD22CCA4189376B0BBFE928
8CE7E8D06A551258E5938EB0F85097E557F3C3BA2177A88670054C2473FD9D0F
D9E6EE78BE4DE7D3B32C0A4890438F857B2B893F8CA4A75001BA5A42D90EC4F2
B0D3E24CE17100E1A20EADBD615C9B006D73287E8A5580ED034E01BB6AFBB7A0
C1A5D5BE8ED4D234E62C1E772182E6F6963800F7A410EE3FBBC30A5FFB47BBA3
62C0896EF2CC54DC4ED804FFB912F5407AB4542A2E55201ABBBCED278812B35E
9703C069C38BF54D0E32CD1C0F7873115DFA318F164F6E50342252E9EFE643D5
E9C5F46AE46E7E21C3DBA8384CD35EE082D11FE17BF955D48E02736A05C23160
7592275355E00E6967AC691913925629C1F41E0F49804C413205EF4DD853CD4A
AFEFEEB55FAA06A85289F680D6670531DF5F087ABFA6D1B9A2C381186F70CB3C
CE3FC0A3BCABEE4281A7C3DAC0B396BA8CF66077B079929DEFBE76C413ABC1B9
E14159DE9583E6E10894C743E1C9D3CE4C3676B5A85ACA7E16E3A19B674051C5
465EC644D5F2AA776BBEC2DA4B1977A85FA5C08E9E4286DD9BD6116B110B7724
6AD93C41A70B08EE2FA8E1FCCBC5091B57F55D942459893BE6CC261B726BF304
78E3F84A7C65A1ADB01906F84FEE55EA3E57A3AF2DA474592C95726288B797BF
F751385F38BA7F09673B57BF2ADD79F0A4A6069CD3C238EEB149D77528B84CDD
E31D788A4A5476B55DE425A4A120EEF60DEDE1F42FFE488A01D1ED003AEBE51F
082784D7A5892C9F5806C2914FCB8CA5C4CCDFEF5D4E14DEA1777FEAE33C139B
355BE39D995C9449B3E55807C695200EF55EA2F7EA676A6770164CB127DA7C07
260FAEC3E976FFF9A350B8641A4D7B8EB2AF8ADBD241670C96F33EF95252FA03
F0F65E148FA2466B74557628163CCF600D8C8858D515F09312E45FF4938FFDC6
2BE334D3D9BDF1293532963B6EE923E356E17762BEF9E43461CFCF403CF9307F
AC186610ACF18D27F662455921F450FD6B210EDC50F0C450BA94577C18EABFB0
A4F21370E1E3194DB8B48668BF3342A5B33D10631C2CC5FC0F2495302A7EDDE9
B46C85BA080BF1BF5AE4E492ACFBEBC7A358D213D0325ADB982E378B621963DD
E8B0326C8E8162D878D685D25409F83A57577F1C3A0D46D9B6805C68AFEDBC48
09E4883C54C678FECB4F587F41EBBD6F7B1F656FA528BA27273B92EA24AEA34C
D31FAB98A48968B19BFBC34DCC9CBC40F4EA35783B607966EEBD88E0752F06EB
BF3FE55F88183F5A21AB5B3CC322E5C56CCDD19E40EBE24617D02E4AB3E15CDE
E92DA46DE2357F366ECA16119EA107853FDFE570B7CBEF695FFBCF049E902B4E
CCC477AF9B9875B6D079FF00A302DAD67363BF90E38CD58C46961F7A53CE0C23
06B0125C2DFF62A9879D24D9A524BDD035375F95790071CB9ABC08D5FF89A3D5
583C4C33D9F20AEF1B7A12CE819A6194F7116BC7B171C1BF0454763D10EDCE92
DBB45261F97E88977722DF2C624DBEAF95D18E5CEFCF466C58958C36A48D4190
01E72651FD55FC8684C19C3183B306D3A061F16CFA7086C3F51CCBA865D88C9A
589F25A52DB95453BBD66E89CB1E6C8059858A4898772A5307A3592889AF708B
EC8CA855D6DD899181CF8DC664EFDF9A8DC9286918B7CD63490660C033471AA8
2910D2ADF17271D6A680EB97891D247EAFF2A4EC3BF4FF395BCC292402ACBA77
F7CE635F25EA8D29CCF6DF4121DE62533AD46D3A84E68AD70991E5FEF9EA2EBE
19C2071821C214700AC9D23586F03E97D71ADC38BC97A4CBE534D318853DD3E1
968978C85F9EDC6ADE6F0BB3E97A1F3ED7BB9936365D0D15DE805EF048E26BBD
9A671078FCED2DBFF6A2FA1361EF137091FFD933EB556768D1B33A4E05048FBC
0E7C672B080578E8F478BB66DAAA9EC09C4F779553D34C0A6A2D9A685A4C040C
99AAE40D8DB6529065539BFA4681AFDFCC4BE7405875F78865D70BE1815B9E3A
D243E623E80332D958019217B70E799BD5AF9779DE42F7291E824AF4F8D0E26D
E76420BD441F4F7516A667BBDD083B40C5FF9476D707B1C10EA2F8C80BE8C9DE
4DA48BD4AE3E661841CBB3AC4EEE0BEAEC612C7C9C748D0697819680D70F91B6
F58FE67C3B4F8E64587CAC7BDB08C3A2E594B1AC8E97E77E427A8FEC289B5533
60CDEA1957D4527DAC116E46169D1B70D742494A567425D0417F3134E623A56C
CE14F537A4A8163C335D2FB084AAC9B5440BD23BFF9F708B1C7CB2DF361B639A
B2796CA3BD382D8F26E991C83F1D7449E3C9869B23494A02606E7DA6528797EF
85ACD89D7553701C04F77C5886CD5EC47AE302F3785944090BFC60818B486514
1322587334EA1DCA899E1B6FB0653BBB16A15781C25B258028CEB1AAAC52016E
A8F2F36A157759A3232654C0576C51F06A370BA928CEB3B6481D57745A5CCAC4
63B5E306C676DE356BD593692C80026EC4F5DD0B89785A2D8650289F2FEDF380
23F066B6C104EA6789AD199F36300032371B0AE9BCC92AE9E94280AB95E7BE99
E69EEE109E5A34D8D192181AD22D814F49DFED9B87149C8C3FA247710B996F6B
52DF6C1ACB344F56878C706E0B4EA2C33274FC47A03E549CCB29D26C1CC50450
C4F1178015B818357F327FC4098FB65247ACA89F7852A8C5BEF8A61D928D3E29
792F36AF218C14E22095213B9BF70F4A2AB9F8D41ABAE3F70BFD3E64434ECC5B
8AF293E0657F662F071403F7B2BB2DC191361860DDC9761CF201A9E5DD64D0F1
EDC9592D92EB02933A4E063E224301316A22F1676DE180193B1063733D5FBF31
85C98ED0D8C1C459F41A6DF1A614740EF25462C7748AC4615A4C983E88089255
ECBF5A92B7DDAC6E9BC0C1AC135977F1536CE490985B364118E7753B1B5D40B0
40DE97B0EFB6A1E09894B24A32B1B2E2ABC02C64D2ECCCB43B8D2CE9BC9ACCC8
F570F3AA2252EB95EE46B9452DF2EC804879265A0AB41B42BE6BE78777EF9487
74F81B1B5D92DC44926F3C8421A432589B8C4B6D98BA9602EDB7CF5BDD7DFBDE
B6C37D3FD4112313F2D404AD0770C84E9E9BC3AE4E0A12348B096EE17F95BCBC
874F5F024D3B1E4515FA9457AD089F1C14A6ED93B0A1520C3C8435D8B9CC4FC3
39DF5D18913CECA2F9FD3DFA46424594315D1400DAC9F2A09299F4C9D7D41E34
661E0D305E9F62FC4E36BD2FB79021D8CDAABCFAE932E23F74CDA3600121BC33
517A1F8CF50CFF67224D8F919290534C8CFDF8EA8C688E409BF3E831FBA6B2AC
0BCB08B086D6B8F6243182E8BEF410B7551E32AB6CF2AC674A3A3A926EDEE757
F19BFCA5BBAABB1523917BCCFA765E1360DEF6269CDB2F18A55AFA721C9C78E5
27EB85923D08AC830462E485F9A73F4B092703DF336CDCFD15031619597C731A
37E3D119025984C85D76C493BDD17187D760AD92E22CFCFE8145D07CD8400522
0777845D8746C9A6D111E5F1EF2419276113092AA4F5D41526D6F40C40CD93C4
4896F797DE2387E2382D8F5A068EE0290C64154C77B0D79399D85E81BB3B028F
96E0CE1AF4021CAAAD279F78B18B54977BE8B5046ADAACC7464AD41B0C0D4E68
FA2E980EF83C094CB09BFE4FAB84C02C70B88B9D071684DE404BDD0FA567FB66
EF04E703C9F8580B0A095FF6076E4935A125265C35A49D263E4D3226C1BEE986
8DEEA8F6ED7541C2EE75BC8FB8330223ACDB932803B4007435B0F36940C86510
AEED548FD5B9E056EBF6F2484FF612D7681E04D1E87D708D95C64E58385045AC
2A87E7F6AABA9DAC680524CE99C5E7A4DA70A14873FE4A9E4F58CA6BEB0D109E
627947411DE2130D783D43CC6D3D6725F79E5BC46E14385EF63D569BFEDDBFC5
CE454F9B754EBC68A1DE413063FF6005E027DB80750003B112C93CBEABAA04FC
E07F75A62E7BC5B34E802BAD054E3DD77A436B6A5FCC5B006E38D628F69E0409
BA8E2D97754CE7C8B00DB026D10E4FDDC3369316BB4E0B944EEC0BF4A5544EF5
1FA02D9B429267F2C9E852125E556A0D1116D04C2A97BD27C518ED07E952EB11
2C0B1960FBB05CB5BEBF5C91D1703A671AFF159DF7BA512726FC058213635BA4
11D64072880D65AEA08C585BE4BBA690528242774855410872E61DA5279908E4
ABE0948928C1E2E47C61FCB67C9A83E489454F29E18A4E646A6BC5E367D6D84C
4B70D67CDCAA9B729085EB85582265C17E56FD97C71EB9F3472EF2422269D69F
AA40ECB9062D232AAF45AAE6EA95223C95F48F435666C06EA821A00F4F614D6D
457A3CD5AA85614D60B54BC13ABB3264EC1D822FA53ADDC1E7551A9C3CED3A60
840A2A924BBF48CC951ED9ACBB4B7759CA3A75345DFEA4BD12543421C6E65FC3
8007DB5EA10F40B4E0797E171F42A0A70486132291040C587F79549AE2A98FA4
DC43764E8ED321DC920EDF6A79C34839E3C5BB11E7F3CC939AFF71AE82D8BB2B
2C4CDEE000FAC57BD089D8D5C2D6317F85546F65828A62D32C3D43A2A21EAD07
7338893F0FC2B7C2C2F0D7F8C066549174C6C411D066AD5CBEC6892C2B092866
3117CE0F58AFA7A2B061DA228B8CB96E533415F9D9E5F80A3E49529418775E22
59AC479B3BC8A9A1F01CAEE5D95897730BB50C0CAA2D8974EC9B90339D08A840
DA8E831BC7D2544A636AC9693861A4A37C8EF436896C65398718B4903598FB0A
60DA2F1C172D2362FD0CBC94197EA355ABFEBD7E8E6B95ADC8C219FAAC322876
312B362C88BC3422379422D3DD17841A2C9D1F32FC15EEE6E780745CAD5A61D4
FA61A2C3394585C89B5D78165009CA3620F333A6F360E06118C4B7BF69E6675B
57BB57D837E05E1F1F11A3C1276901B507B967BA69B7DE18A17BA10E0DC02828
811E45FFD3A83CD75E69CB8F8B50F820F7AC6F1DF9776584E7778D683BC6CD2D
A9D611470E6E7AA289576EBEF0202221847E2A46286DAA4366188B425AC2D3D3
D883B9412725017F3B6C2F35316AA01EAFDEADE1806C48AF7E82EFDDF2A00245
DA561354F1761D126C030ED21705D89E255931B47EDB1A52C57183DDD4D33F99
BAB362278939C80F739554D6BFC7119D941A68F33ECC2901AD2B34C0306C47EE
2372E7FE3DEEC8B02789420272BB7CC2FF4DF6D23569A118046033C811232A1D
5BCA1D629A4FF3A2C2492C0243B70C8D090778A766474FBEA9DAB50C3D29B7C5
66FBB2D444B3C06B7C9241DF74C77DB5ADF648822014C49F9141CA9323594675
E9640F26D24BF6B9E540034F1ACE1AD766E450865F9DA29B2F8BDF66B4FF8025
BA11D57A064CCA9B211DAF756A18621F877942D8A30ED103C6186884D68153DD
BBAF399F3D0DF5169B0E94A214B7D18F672A48B937A13133ABC5E9033734B0A2
12A7B4DD72BE1886ADE94B968D11D29CCDA8251C2A284287037543A6E240CF67
0EAB7EF796BD4DBD313FD3DC6D3535674184EABDAD1DA7B0A3AAD4B78CF82241
E378FBF975403D8FAC2AA692686545D1550E8B9F457A396B3F68493A342D1982
3E6E24DDA7D014EA1A297C38078A3404F0D87CD299DF9BF3C93FB8F236BBCA14
F71300C5710A43605ABA308D54DBC954C66F03123393A7379C4F20DBBB03DDD5
C273C234E8EBE27F93347F1E5B3EC0FFCE0440A205DBA5CAC312245AF05BFCC3
734795D36BE536F56BBE0E6A42E9E9DD7EFC0B6A032E250BE71996B41B743D7D
B2C6DF05A46CAB1FE425D0AEE07284E7A556AADB19B9DB7F4FDE477C87DF72D8
EEC435D249CC2D564C57F2379E9912A0AAF33661D0CCD213BD1A38EAE0D4535C
08BB493031B1FFD9C030B98C455C9B04304B1E628CB95FFC7FA6AAA12C2D2C83
9166660FDD6DFC6C0CD04FB951C6BE616A258EDFAAEE4AD926608A4A36B1CD55
9023D8647CABD029C539163705156A854D36D83EC488258C38C9B1126555D7AC
68B4B770A5800B06D374230A78C9107963B637E39D6DC7497883032EC3055DE6
CA392F3B2ABA182FC0C468549655B8392E94DB4D85AA14DA0E3B2D3B3DFCAEE3
F5CF755FF7A7CE0CD930DE5AF138A6262898C2316902934912FAE3924A9833BD
8D5B85F35EA4558E1FB9FFAF597F802F89AFFB5B289884A9F9BAED04084DD7E3
A985178519BD80E3224F8533AA2D954F75096E490ECB780E6CCFF07D91E02D2C
67AF4A699F81E84134E3EA69467F5514E5F3A73A9936839729E9347BC77B709F
19137F238C2ADAE3858F31034BBEEEE79079F4B2EBE3081701B1B2FB0F114899
C59DB78F99ED4B980DA4F04251CEE1F478A470C3954E5E83212726EC6673273F
A2285C9AD2BCE145C5EBBB946EA0D58449BE7C77332D1F222EC6C5DF2D559BAD
6E0A3122812688D9D2807F09FC09285FC0B2D3FA570E49A776B00DE85965843A
B9C936AB2C2D8960EE0FABE64C7C983C546795A4C258E4E73AADF310673C9A2D
534055FFC79B03C3E455643AFB8629AC355BAA755FB8DD4AACCBB21F2CCF8FB1
E51E0B5C608EA149C6E6CFE107113C36FC9C85AED43723B11AED08B1B8661C0D
EB0C7DD1EC047371DE2A4C24A789CA5B186A1AEC4258814A37FE30706D29ED48
7639345B0CDB29BF192345D5AD372BA3E696964D91CF03748F3950BD649FC102
A1E09A59AB246350BE4A7831D126472D627758741C8F38B6A01C0DF4C2F27C68
6ABA6364D88DF009855B73630A4C3FAC44D2F0E2488EB71808D003C12632EE18
039732BAC01B13E1A4D8C80C8BEF266CD168CB79462C44D0F891B60E0B15CCD8
81949F998147933D377B10CF3AC3845FC2AA53ACA02AD96DCE8314416D09F2C1
050AD9AA80448527A9947CC7B9B365C23E950A02FF730D1C3C91CBF14A746E6B
7A2B87FD9561A4FD6254E9A2A3004B0C9A0C2E59CB914178FB114BECC02CD370
2DAFA039EAD3D35D6CEDB468C1C42404B88BFB70C275D8636293D1A71CB48CAA
D971DDB3252B324A5499E419CCE408BC03B688F0D8774D28D7E5D740110DC5CB
22B3CD013F61BAE5983B56D23143BC45C94CE85769C1846B1E2BFC36DF7BD587
37919D573819EC3EFAF1EB66E2A07469CE0CE596546EBAB2EEEA5F73645429AC
551E5C8F16966BC0D32D6E1C9C3EF288EF36F977EF3751931BC881935DFC6C40
E547AD3A923DC51D1072B085F1B23CA0E191BF3D010EA0A01C83C973B835ED74
7DFB263E2848A83AB9E06F5071F6D252A1FF14ED1A6AA8BC3DA3996207675678
CFCFB1E134A18D1CC3ABC395CF287E139C4338CBFFAB27345A1541073127C242
1DA55018AB81A6B3738BF659347D8D70D86B8F4C40B8A9E991DF788399B5F13B
50ED46EEE43CADED29594102E07602154608111060499F7C1C03E5372B415F33
5A741E8EA5E3F41AF934063C94641F1129204EC1019488EA4FF89D7B003CD643
7D2314441404815203F7FBC2DD130A5E1C5610457E583363D8B439B75C41C3B2
05E2348A4A826D4DE429E1B61FABE14FD4ECA2C3DB124E738FF3662840AA03B8
EF40A8D5C60E86C341D1755EF63F1D82DCA856402B949945265283420BB2B4A4
FBF7023F2C0B36348145F92EF66D292BE48545C5555E670B5EFB973B29FFE465
92247869BF8E3F0644CD5754A3D35FA3A1DE5BCCC43F0BE41BA782892DCAE8E5
5EB501686B68B9C2CDDEA53787D795F59E9C827321CF42062C503F4D4B591BD4
0F2F661B5487F7ECA6694169D335ED8EC725E53AB0CEB25CAEB9F832E93715D8
8C8BB6F6742B14CD5F3E837A636DB41DD9C109E9771A2F8C7D7A7D12BBCF650A
BB131F547A894CC90508A936EA97154E81443C052AD474592314BE31FBAB4A79
4C1992A35BAAE07F6816D542463726930BF25F75AD69AA44E90F55EC8A1AB06B
Russ Cox's avatar
Russ Cox committed
232EE37734835402F80EBD4E69C375D3E704A38A6DCC903119A7E23217250899
FA9F1F37773894E24C7054D4B736742FBB054CA11BA2D3F4C3BADC74A84C904D
6A83ED9B0BEA6694C35AE8CCB0D36B92DDFC9962D2C110D99C53CD82B57C855A
B7DB749998FF87F09C6DE41CC2302131B0876A2559E4C24FB292BB477839BD18
05028C9D217AEFF5FA65147FE25C45E9AB9503C0C90DE3F6FB98284B41192882
21572BD89F5E970D9ECFAC501145CD0FD0ABC38DA574C0E634B14149F3A80995
2F6CEBA40F796D7765E629C7020A5F2E5F50ECA761629A52507344F027284E93
97F9361949AE79D2F7D911AB1F4BA65168A682D09BBDB02979B71223175EC6DD
3FFD963B5D061B59181FCFA92434BA11A578CB8442AFCBA65580C69849A6EADD
8F1D2613362869F8E16D26770C001C1F55B93EA982B6C5CAC6BA6E92A95C03B3
A8276A01E6FBDCADF623A538CEA34178B6690DF25563B350C18B816A724E2F7D
EB84ECDABF1C2D8AA75437368AA7041E02BFA94446AFD657B423AC4DAD19B2A1
BDEE4F3A4BBCCE651986FC707BD35922488EC1F354A05EF6497B51277E75FCEE
92177CF4CEC6FCDAF8F899B9B9A71719493D537B7DC78B384487F6D4B898D2EF
99B796B4BED49575CBE63FE809B385FC6CC84AF3AA9F87121CF7D8BEA3C6E986
A0781F7C920943F43C3F01981C13688F7904CA925A57C527149975371BE9AB45
FBDB098AA2C62BDA5F44BB282D022DD64CB3FE1568AB770058E372A132456331
71FDE3E5EA752F47931DD50BD2DC54E52C69EB63E21095DC53C056CBCC05A162
B4950FFD705C1CE37BFB3E7426260469A80204CE9B68D1C127433ACE8C3FDB27
FD6F9C6AD71662DA823259BC1B073F829750CB8C2A50E69799F1D58DA0CCBAA8
EC92AF28104003E13AAEEA0BEEE540696613808D91319FB12E7812FBB2CAAEB3
A2D3EC0E6D78E720176FD3938D4C62AE1678681E98B6F82F2772356DA8FB9D82
EB298D383F7D0C3BE5D219DD0AC897B8A2E705F15B2F9AC9306BF39AB6F50BB1
DADA17AB813BA25513DCA43E685D04D0B44CFC212366D3A1AFC58B4B18D3D4A9
ECD8D864890F8C03A37E4BEA20866DEF9877065A2C3F666C2862922DC4A021AD
A75DB963BF97B8AFF3D63B89707C86B4E0E5B93BFCA9407021848444ED229F16
0B2E8889AE97BD4AC2194546FF3555245087A98FEE7B2A38401C8BE18E9D7224
5437ED0E4E2A8876E0C8633323A2E9A7CD8C704C858FD25311262EFC6534D7A8
9E0857B5C6282E98938B5D8E216923B0A0A75D84B1807CDFEF19D33A15C47D2A
6DF303E5A179C1752489A9A5FBAF7F00077047551702CD0C08C30E79BAB4BBCA
10AD85AA96D1EC193E05C68B9D46E44B844CA8216A9F535B737606703F07EDEE
B3825E3473244C3F2C5EA13AFD2927C769E48B6A90B41A77D57ED5D1DE504461
C6D373489B465F0F70F107EE46D5DCABDA14BEFDAA37CE0AF78D5F416AA1456E
3DA7E189860395CFF6236CEDBBC2E0189D3BB92FC5C958A63A641CBD415D2EAF
BC219AD89CA3A17DD335495FF452FBAF85BE0293D9E5E9927196192FE3CD25C2
C461C62B001A3723A322AF77250B8AB1D83C16858E3FC30EFE7E338663AD9F84
EC41DCC80171C45D187E8D5C2E7E431E899C4E0644E66958EBADA5F0F6E64D21
B2539F89570D2C1F17CDBCF5F6CB16A9787C9A4834B2F2A516D909A141F2C614
B4B7698315DEA7CF292A85578A127BD7E0CFC5D92C57B7EBB10111BA4165E32D
162A740EE2D921BD28B8A7300B198297A58C947919A8A64722764632D9390804
EB5CB88B984E29A580AB26B544965E3143BCDD2EF47C2738364B3F896E76C1A9
010B624DCB2EF607984D7657ACB93E87A4E5A280745975644ED00326C559570F
C5CF308F470074A121BDCF2CFB73E0B2A872EDDD0CE746B9DA409DEFC535EB20
5EB9D59C076EBF6F94D31EBA64ED9BF53B69ECEF4AC19B4F9CFC0BC991581179
94C3190C95E4F261468E0AB12BFC9C20E7B1C522959E7E761F6C5229EBCF3A86
FCE964B1371DA44FD114FBF539608B82C6B40AF191818F8B9270530914021CCF
A9F233CF6431C7D23AED734BA58A3C5959E5A2F14FCBAEED5866BB194D8CE6CA
39ABC81C4961FAF1F6C8D66998A2861F0C42B5F95D21DE751130274176C6D363
E832D3F711916611F6F409AA859A323183B4444EA38E79062F77F30C723A3FD9
EC9D4D27C8C25555769B2226B66601F7DA8A94A02463E541D8352FCBDDBF1297
BB482169E9C831640C7BA586DCF00125BC2A7448C384BA5EA898F91152FE0848
70C084B63689E76B656231CE960D4CA628E1C070AD9A1CE3467DC83453D92E34
2123676178D378B7D234A7280E83DBA97551467C9457BABEE8835FBB594D03F3
0C7FF2FA6E308FE763C7C894259FA5D3C66814F6A4C3EFA30A7A4C3E081373EE
3C2EA9F831EA2A7BDDB473401CEFE0DF0EA110ECB4DDC952C05F74461BD3D9C6
80E3BB0E6E1B6D0AAFBD5A524A3732940CB4854CDEFEC572FEEE79120D436E84
4186D94ED3B9854450097DB09C514BFBF558BCE425003F6CEF7A5417C8960126
BC49E6FE3CE87834CC68D540D8E12F502BD63972C802D9715ED49C7B52DE87DA
AA4710B679718F9A71C0A39085D972BE32596C509D27CE809F02960FA7560D66
678BA0AF4D0A19CA679033B1217D852DB0B6768A6821C72321FA7194E5A62D99
AF7AE2958947C9965A1838DB932444D886247EE953A1C8A7ED765BF1DE6CD137
7C749F346437471DD0F0DCCE249D368608BDE06D1FBC1C0236AE40135687A8EC
6D084CDC52FB99D2963FCEF40DC6E0D23AD138F38813DB0AE9B7F731312B7831
D84A6BA2AA09637C743F686AC572B97D8D72F825E522AD2E3B943476F664A8E9
63313AE3DAF935EC8CA6B4FC9D396270D24D5705AD16564CBF21A9AA234B6C01
C5B6C8CDAFF4E3462B74369FB0A63B1EB1DF9696EC7860B3F6E573E34D5E953A
0B25044729B9B19854EF5A3CABAA30D2A62F60588D7171A7732171EAF9EED5D5
B9DB771F1AEEA1F8F658BBF35E31D88FE3511B9860154DC2A96C1C3FB233A716
516F36767EBF1D6FECE4DDE153B4E538004E0B66FF827D52A72DDF4699D4EEED
960F974C6ED54F50D9608DEA1785164C73D0B25CA313B3630171177B8EA6A2DC
3D5704DF7A0CD5098BEE074480E862F18D47FBE0F6964125DF29C23D087D0F9A
25292369A7335F33210A4660F425EFD0FD0C3F6534A12ED913697ED4444FC93B
51CF9FFFC2AB8256303E690A71E9EA8B7766E282847681497B52C297F25E60A3
79B1D70FE503F87E9EBB5FCF1FED71321A2D21B3BFAC5A17F66A2A5CC5BD6D0F
E968A013C33EFC735A161F340F56237CAC1B347F88A4D62249023F6763111497
4A6F068F4A49B55791D039667EC08BEEECF3E919C4F29FAE5DECE224856FD035
999318F9B69125586FE6972508505DDE0F129687AB056E5322C1D967FE606151
71DC9FF6098CE976C0F7BEBD4A5B16E18C1E085894C43C4A1E311B1FA34B75AC
1F444AD9912718855B50CA02AE362D66643EBFF19EA6BE2C8EA4D4339D59C52B
BCBAC2375DF2219D9D56BAA08C4577FB159143886605FC91A09885F9C2E44064
943BC2B9040E0031BC0744B89782BCDB129A4DDAE418A03FE6EE8705089CD7B3
C87B18939CCE4361A4C1FFD24072E620D121EBEE435489E8907DF63FF2BD505B
FF50E33DD3B3258F32D96823BCFE4519C7B77C20D2AFE9D00036EFFCE8E586E9
667891E4D513C3BDC4615AE8369FADF56829F68139416A40C65D736601E47B0C
793C8A7493FC11C9461685966FC974DE827E81ABBC881EAE43712C3DBA1AE5CE
BB1E7FDB696C3221681D75DD419972E6AAA0AF20F8B3826AACBD3B808BEBA198
D90A5B27CB07C2F753AF493D1863BE77EC132A394F3DAF1F9E3DD07B6BC23765
6A392A8611D16434BDA4CE27DE4BAA3DBF95BAA05C873CA0A36177F502F87E94
75662F5368EC605F1E00A98F6B50FB7F522A26C1C9E73D025C3A6428DB735344
64F704E272CC268798D13D0D93B619E550F1B80562A440E7F2462D9907AEC25F
F3A6E0A4D95B253E3144404DE918C1C40D79B578D8A2C85F943DDC9DB69727CB
957ACF72D67F50D228219C582C434B24C6E3AA6BF2A8194A85D775086929A82B
F0528989A483CE5C7723A2570529C1BDF292FDD988F59D80187A25C47501C2E3
84C702FE7F4D6C4C6B41F778367897EC91D5A4F8A3FCF300FFA584127C3BC171
730BCCBB51AD8A85A3810F846797476EA45C4E7A250215A79CD055BBF8B97BAE
DBEB87DA404BAE058875D793264C15010DDC6F6DBD9C45BC5307F6DB4AF867DF
236EBE6CECAA1CFD3CE15FE3EB91ACBDF5433AD03CB971E78823FABF2B3C3BA7
8ADA62C7B4FB2E65F0D7D4411634645764E198861B589F8529DC2CB6B180889A
E35B5B1BAC735866A4C49A386C1A98A59343060D7995E7C86C3380E65670E94E
4B7C2D2FB94EBDE96773547CFA5053B3B31188BAA0B57A12A2FF6EE7945D5A17
ED1FE90E30859D3E14EA58A9FD90D5514A115EF7B11C94ADEC8608F60F06D2B0
46DC9861614ADBD91032A92543BDDF359DA8073FD08E64F9B4D0A7B1DFD6F52A
168E09CD5E2BF9EDA46E77AEA46C25BAC9E0D8220E30D92892426B964E894015
2F0240EFB5D931EB16EE2423B659D360433A7DCEBA96C031FDA734F0C6E89ED3
B00946763285821FD3A63D5E0153A4B02E5CC633F6979385C908E73DB718E004
92105D0F71028D2CD5C0A3E3F06614716B2D48B4A51E9E9D77B058F38B0F7855
EEC100CF05536D9AC7433A3BF58D4B068E923D4B471B9A0FDA85EECEC3ED9158
389A10E55F4DE52D2EB5B3CB5D9CC1C24B51F1A19C2F629122B05C03FC8B2A57
18B06EBDE41C4871BFB1E6A24A85535DF5E088B94EAD6222E07DE110F1B51DB0
8C1586F7C9711317DF20336D6DE4A2C04A4A1B121F09A2C340B22CA9F26AE7A8
616DDE1A2D87F9729F82E20BA099D1EAC7F726CCA9D5FA93092DC3886D2529A9
41B75B58FF112B5F97BD4301627CB3DEE6DEFC44E0392874FB86C51CE77C1969
2A66E623BF9A64265EF5A68C3B86EFEFEB04C920D16D9F9E037E9FCC621726D5
69449BBCB0330CAC67F0597509316FE77395FD3ACA40FFDE9CF1976DDF047674
93683ADF1B1EF9977B03DBF04B2D213C5A67FBA1F99F752C217D672117B9087A
6A5DDA70150BF9988514E786D28336B903B3C96A746E911D7155E49470DC2F37
41D47249C723DC2E1846A35A67820DEFCCC9462B67B26201EA4D5625CE2DE401
D186126A214ADCB090CA7D8DAED3A1D8FABCDD8DFE1F0837CCC087A486622C2C
281CC8260608D0896A49019EDF7FDF57D5CE0279E7F491E8370B4954779B4B53
C6D7B6E2F349283AA0467D9BB06FDDD321BA05F988C5518DA8E48D66D24136BC
271123C27D43408927F0DCBC5DB8D8CAD7E61C46BEEE70F137B087A6899EB040
145D9AD63C840BC5D030ACDBE4B87A23AF641A64E796336FB31B00B0674AA9CD
B19BDFF46C93DDBA27ED0D8BBF5E6DD642736D594B616C3B26A59C463FB4253A
136DDD4592D6223940C98E4BCE603CCD05D30B3A26B1A4B2C8BEEC799E61907B
855B2CE81549AF2EA116F9DD3A35446CD662EFF77C49DB0BF7B3BBF496D750B6
E2025B2F041092F322ECF8CD037C5829568CCDE9823BF7F37756DFB7F6D05CC0
E5B6B6F95A839DF60F9CA9E03AE4E9944ECC2957141606326763789EE4B4D7FC
154A7C3C509362E80D9D2E84967E60B2A14940B08805625EA09988A68BE7AACB
6770F8C05B472FF649514CB7DADE001B7B85E5A849ABC018F34E59292A527A99
1E2734A3D8D3EF87CDD665814A7CFCB663ACEE51E9E61BF232FFD8F917A5AE70
57ACF846460F772202A834BE3DB233E117DCFC0A039E04AE30EB0AA3C773CE6A
9EA4E2686283660E068FF095BC780A6F1D4857D7C0789D599798AAF9C71AB082
6555100BC97C54577AD82D5E063017207922DBE0BF744D51E31A921B27954B60
95B3695098C47CD0996438CC0F89198ABCA22FEEC261BD0C0B617DC02F553837
4DD1EC502C935A8DDAF7C73791D7DA2764AA3863D43A5E3EF39AB099CA249A7C
D4CAE2FB83851EFE6863256E432D5F0DC898029C3A069C6EFB8C342B8507182A
44292E6F4E75397621A3DF4F94557AA746C9049B5B86ECE49BFA031F30B3D505
D42215F78BD2D50E86142B28C2B06A2FD427E5F1C569E58587BB3B531AD4E8AD
10065410A4B3BFEF97070CC87FCAB12C9F0FCB5F1716E00975B2EBE522586123
A7C33B060079D22EF11DD55A719819AF9CA90B587A11C56F8F9A846BCDB3C930
AD1E3A490DA0643CB34758E109DD6C91B22C2AD4859101DB53723D3C9C48CC41
7FF3D9FE1FE57922335D28EC50F0CEE33DCF55A87A0FD383EBDC3D33C8FFFBC7
05D658873D655635A841C5D8A52294A060DA01A586F63E3EACF1AC7941CDAA7A
1A4DDF5DC5018186B40713A69B759150B3BC3561CA963516783A7BF2D182CFD6
2529AC360ABDD6863B33C84B3DE527E64E5F1C0B72BAF23B1FF7276773FC2951
523ACE4D620FC9A1FC5966ABC74D421DAA156B9955B579C781AD87124687BBA2
DD1116F80D7F6980E10CC387AFF901B19F6CD0667C82932D9123287301A5FD9E
660D5F9E5ABB4A42936BC6DDAE92198CF969FB3D397BA6B1DFE1233752272225
2B8F0BF0765ED694D50D0BE4F8C09F85713E37E85A3BFD559DAF869E3B6ECF7E
080D71A25B2FF6E38D966C75233D12E3C15A8B4002A985DE92DACB4AD2F6D9C9
69B09914EC2719A160CDF0BD16E56898B0BD07C1B7747D1C6E591FD66DE00A64
C5ACDE5D0488D9AAC392DAD684B5F681A554CD6EA6159B6807D861E2FAB69482
DDB29C8D046AD8A6707BC19DD9494B8E44
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndResource
Russ Cox's avatar
Russ Cox committed
/F8_0 /APYGPQ+LucidaSans-Typewriter83 1 1
[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
Russ Cox's avatar
Russ Cox committed
  /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
  /zero/one/two/three/four/five/six/seven
  /eight/nine/colon/semicolon/less/equal/greater/question
  /at/A/B/C/D/E/F/G
  /H/I/J/K/L/M/N/O
  /P/Q/R/S/T/U/V/W
  /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
  /quoteleft/a/b/c/d/e/f/g
  /h/i/j/k/l/m/n/o
  /p/q/r/s/t/u/v/w
rsc's avatar
rsc committed
  /x/y/z/braceleft/bar/braceright/asciitilde/bullet
  /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
  /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet
  /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
  /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis
  /space/exclamdown/cent/sterling/currency/yen/brokenbar/section
  /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
  /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
  /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
  /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
  /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
  /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
  /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
  /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
  /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
  /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
  /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
pdfMakeFont
612 792 false pdfSetup
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageOrientation: Landscape
pdfStartPage
rsc's avatar
rsc committed
180 rotate
-612 -792 translate
0 0 612 792 re W
rsc's avatar
rsc committed
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
kolya's avatar
kolya committed
{} settransfer
0 0 612 792 re
W
q
q
[0.1 0 0 0.1 0 0] cm
q
180 3960 5760 3460 re
W
rsc's avatar
rsc committed
/DeviceGray {} CS
[0] SC
/DeviceGray {} cs
[0] sc
q
[10 0 0 10 0 0] cm
[1 0 0 1 0 0] Tm
0 0 Td
kolya's avatar
kolya committed
[0 -0.9679 1 0 564.72 738.865] Tm
rsc's avatar
rsc committed
0 0 Td
kolya's avatar
kolya committed
/F8_0 8.7022 Tf
Russ Cox's avatar
Russ Cox committed
(Sep  3 00:44 2009  README  Page 1) 144.161 Tj
rsc's avatar
rsc committed
0 -28.4801 Td
(xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson\
's Unix) 305.796 Tj
0 -37.9735 Td
(Version 6 \(v6\).  xv6 loosely follows the structure and style \
kolya's avatar
kolya committed
of v6,) 292.6905 Tj
rsc's avatar
rsc committed
0 -47.4668 Td
(but is implemented for a modern x86-based multiprocessor using \
ANSI C.) 305.796 Tj
0 -66.4535 Td
(ACKNOWLEDGMENTS) 65.5277 Tj
0 -85.4402 Td
(xv6 is inspired by John Lions's Commentary on UNIX 6th Edition \
\(Peer) 297.059 Tj
0 -94.9336 Td
(to Peer Communications; ISBN: 1-57398-013-7; 1st edition \(June\
 14,) 288.322 Tj
kolya's avatar
kolya committed
0 -104.4269 Td
rsc's avatar
rsc committed
(2000\)\). See also http://pdos.csail.mit.edu/6.828/2007/v6.html\
, which) 297.059 Tj
kolya's avatar
kolya committed
0 -113.9203 Td
(provides pointers to on-line resources for v6.) 200.9517 Tj
rsc's avatar
rsc committed
0 -132.907 Td
kolya's avatar
kolya committed
(xv6 borrows code from the following sources:) 192.2146 Tj
17.4613 -142.4004 Td
rsc's avatar
rsc committed
(JOS \(asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and oth\
ers\)) 288.322 Tj
kolya's avatar
kolya committed
17.4613 -151.8937 Td
(Plan 9 \(bootother.S, mp.h, mp.c, lapic.c\)) 179.1091 Tj
17.4613 -161.3871 Td
rsc's avatar
rsc committed
(FreeBSD \(ioapic.c\)) 78.6333 Tj
kolya's avatar
kolya committed
17.4613 -170.8804 Td
rsc's avatar
rsc committed
(NetBSD \(console.c\)) 78.6333 Tj
kolya's avatar
kolya committed
0 -189.8667 Td
(The following people made contributions:) 174.7406 Tj
17.4613 -199.3601 Td
rsc's avatar
rsc committed
(Russ Cox \(context switching, locking\)) 161.635 Tj
kolya's avatar
kolya committed
17.4613 -208.8535 Td
rsc's avatar
rsc committed
(Cliff Frey \(MP\)) 65.5277 Tj
kolya's avatar
kolya committed
17.4613 -218.3468 Td
rsc's avatar
rsc committed
(Xiao Yu \(MP\)) 52.4222 Tj
kolya's avatar
kolya committed
0 -237.3335 Td