diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2017-02-02 13:39:36 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2017-02-02 13:39:36 +0100 |
commit | abb6c717277fb7eb8635d94c32ecab5dee4dd903 (patch) | |
tree | c453407d0dbb82ef5d0b22fbaec4d1ba241d663a /docs/internals | |
download | dotty-abb6c717277fb7eb8635d94c32ecab5dee4dd903.tar.gz dotty-abb6c717277fb7eb8635d94c32ecab5dee4dd903.tar.bz2 dotty-abb6c717277fb7eb8635d94c32ecab5dee4dd903.zip |
Initial gh-pages commit
Diffstat (limited to 'docs/internals')
-rw-r--r-- | docs/internals/backend.html | 269 | ||||
-rw-r--r-- | docs/internals/benchmarks.html | 173 | ||||
-rw-r--r-- | docs/internals/classpaths.html | 205 | ||||
-rw-r--r-- | docs/internals/contexts.html | 207 | ||||
-rw-r--r-- | docs/internals/core-data-structures.html | 259 | ||||
-rw-r--r-- | docs/internals/dotc-scalac.html | 259 | ||||
-rw-r--r-- | docs/internals/higher-kinded-v2.html | 452 | ||||
-rw-r--r-- | docs/internals/overall-structure.html | 333 | ||||
-rw-r--r-- | docs/internals/periods.html | 241 | ||||
-rw-r--r-- | docs/internals/syntax.html | 497 | ||||
-rw-r--r-- | docs/internals/type-system.html | 285 |
11 files changed, 3180 insertions, 0 deletions
diff --git a/docs/internals/backend.html b/docs/internals/backend.html new file mode 100644 index 000000000..ebda1b1c7 --- /dev/null +++ b/docs/internals/backend.html @@ -0,0 +1,269 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Backend Internals</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Backend Internals</h1> +<div id="doc-page-container"> + <p>The code for the backend is split up by functionality and assembled in the +object <code>GenBCode</code>.</p> +<pre><code class="language-none">object GenBCode --- [defines] --> PlainClassBuilder GenBCode also defines class BCodePhase, the compiler phase + | | + [extends] [extends] + | | +BCodeSyncAndTry ----------------> SyncAndTryBuilder + | | +BCodeBodyBuilder ----------------> PlainBodyBuilder + | | +BCodeSkelBuilder ----------------> PlainSkelBuilder + | / | \ + BCodeHelpers ----------------> BCClassGen BCAnnotGen ... (more components) + | \ \ + | \ \-------------> helper methods + | \ \------------> JMirrorBuilder, JBeanInfoBuilder (uses some components, e.g. BCInnerClassGen) + | \ + | BytecodeWriters ---------> methods and classes to write byte code files + | + BCodeTypes ----------------> maps and fields for common BTypes, class Tracked, methods to collect information on classes, tests for BTypes (conforms), ... + | +BCodeIdiomatic ----------------> utilities for code generation, e.g. genPrimitiveArithmetic + | + BCodeGlue ----------------> BType class, predefined BTypes +</code></pre> +<h3><a href="#data-flow" id="data-flow">Data Flow</a></h3> +<p>Compiler creates a <code>BCodePhase</code>, calls <code>runOn(compilationUnits)</code>.</p> +<ul> +<li>initializes fields of <code>GenBCode</code> defined in <code>BCodeTypes</code> (BType maps, +common BTypes like <code>StringReference</code>)</li> +<li>initialize <code>primitives</code> map defined in <code>scalaPrimitives</code> (maps primitive +members, like <code>int.+</code>, to bytecode instructions)</li> +<li>creates <code>BytecodeWriter</code>, <code>JMirrorBuilder</code> and <code>JBeanInfoBuilder</code> instances +(on each compiler run)</li> +<li><code>buildAndSendToDisk(units)</code>: uses work queues, see below. +<ul> +<li><code>BCodePhase.addToQ1</code> adds class trees to <code>q1</code></li> +<li><code>Worker1.visit</code> creates ASM <code>ClassNodes</code>, adds to <code>q2</code>. It creates one +<code>PlainClassBuilder</code> for each compilation unit.</li> +<li><code>Worker2.addToQ3</code> adds byte arrays (one for each class) to <code>q3</code></li> +<li><code>BCodePhase.drainQ3</code> writes byte arrays to disk</li> +</ul> +</li> +</ul> +<h3><a href="#architecture" id="architecture">Architecture</a></h3> +<p>The architecture of <code>GenBCode</code> is the same as in Scalac. It can be partitioned +into weakly coupled components (called "subsystems" below):</p> +<h4><a href="#a-the-queue-subsystem" id="a-the-queue-subsystem">(a) The queue subsystem</a></h4> +<p>Queues mediate between processors, queues don't know what each processor does.</p> +<p>The first queue contains AST trees for compilation units, the second queue +contains ASM ClassNodes, and finally the third queue contains byte arrays, +ready for serialization to disk.</p> +<p>Currently the queue subsystem is all sequential, but as can be seen in +<a href="http://magarciaepfl.github.io/scala/">http://magarciaepfl.github.io/scala/</a> the above design enables overlapping (a.1) +building of <code>ClassNodes</code>, (a.2) intra-method optimizations, and (a.3) +serialization to disk.</p> +<p>This subsystem is described in detail in <code>GenBCode.scala</code></p> +<h4><a href="#b-bytecode-level-types-btype" id="b-bytecode-level-types-btype">(b) Bytecode-level types, BType</a></h4> +<p>The previous bytecode emitter goes to great lengths to reason about +bytecode-level types in terms of Symbols.</p> +<p><code>GenBCode</code> uses <code>BType</code> as a more direct representation. A <code>BType</code> is immutable, and +a value class (once the rest of GenBCode is merged from +<a href="http://magarciaepfl.github.io/scala/">http://magarciaepfl.github.io/scala/</a> ).</p> +<p>Whether value class or not, its API is the same. That API doesn't reach into +the type checker. Instead, each method on a <code>BType</code> answers a question that can +be answered based on the <code>BType</code> itself. Sounds too simple to be good? It's a +good building block, that's what it is.</p> +<p>The internal representation of a <code>BType</code> is based on what the JVM uses: internal +names (e.g. <code>Ljava/lang/String;</code> ) and method descriptors; as defined in the JVM +spec (that's why they aren't documented in <code>GenBCode</code>, just read the <a href="https://docs.oracle.com/javase/specs/jvms/se8/html/">JVM 8 spec</a>).</p> +<p>All things <code>BType</code> can be found in <code>BCodeGlue.scala</code></p> +<h4><a href="#c-utilities-offering-a-more-high-level-api-to-bytecode-emission" id="c-utilities-offering-a-more-high-level-api-to-bytecode-emission">(c) Utilities offering a more "high-level" API to bytecode emission</a></h4> +<p>Bytecode can be emitted one opcode at a time, but there are recurring patterns +that call for a simpler API.</p> +<p>For example, when emitting a load-constant, a dedicated instruction exists for +emitting load-zero. Similarly, emitting a switch can be done according to one +of two strategies.</p> +<p>All these utilities are encapsulated in file <code>BCodeIdiomatic.scala</code>. They know +nothing about the type checker (because, just between us, they don't need to).</p> +<h4><a href="#d-mapping-between-type-checker-types-and-btypes" id="d-mapping-between-type-checker-types-and-btypes">(d) Mapping between type-checker types and BTypes</a></h4> +<p>So that (c) can remain oblivious to what AST trees contain, some bookkeepers +are needed:</p> +<ul> +<li>Tracked: for a bytecode class (BType), its superclass, directly declared +interfaces, and inner classes.</li> +</ul> +<p>To understand how it's built, see:</p> +<pre><code class="language-scala">final def exemplar(csym0: Symbol): Tracked = { ... } +</code></pre> +<p>Details in <code>BCodeTypes.scala</code></p> +<h4><a href="#e-more-high-level-utilities-for-bytecode-emission" id="e-more-high-level-utilities-for-bytecode-emission">(e) More "high-level" utilities for bytecode emission</a></h4> +<p>In the spirit of <code>BCodeIdiomatic</code>, utilities are added in <code>BCodeHelpers</code> for +emitting:</p> +<ul> +<li>bean info class</li> +<li>mirror class and their forwarders</li> +<li>android-specific creator classes</li> +<li>annotations</li> +</ul> +<h4><a href="#f-building-an-asm-classnode-given-an-ast-typedef" id="f-building-an-asm-classnode-given-an-ast-typedef">(f) Building an ASM ClassNode given an AST TypeDef</a></h4> +<p>It's done by <code>PlainClassBuilder</code>(see <code>GenBCode.scala</code>).</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/benchmarks.html b/docs/internals/benchmarks.html new file mode 100644 index 000000000..c3e6eff5d --- /dev/null +++ b/docs/internals/benchmarks.html @@ -0,0 +1,173 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Benchmarks</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Benchmarks</h1> +<div id="doc-page-container"> + <p>The regression benchmark infrastructure is still under construction.</p> +<p>A preview can be found below:</p> +<ul> +<li><a href="https://d-d.me/tnc/dotty/web/">d-d.me/tnc/dotty/web/</a></li> +</ul> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/classpaths.html b/docs/internals/classpaths.html new file mode 100644 index 000000000..a418d71f5 --- /dev/null +++ b/docs/internals/classpaths.html @@ -0,0 +1,205 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Classpaths</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Classpaths</h1> +<div id="doc-page-container"> + <p>When ran from the <code>dotty</code> script, this is the classloader stack:</p> +<pre><code>===================================================== +class sun.misc.Launcher$AppClassLoader <= corresponds to java.class.path +sun.misc.Launcher$AppClassLoader@591ce4fe +file:/mnt/data-local/Work/Workspace/dev-2.11/dotty/target/scala-2.11.0-M7/dotty_2.11.0-M7-0.1-SNAPSHOT.jar:file:/home/sun/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.0-M7.jar +===================================================== +class sun.misc.Launcher$ExtClassLoader <= corresponds to sun.boot.class.path +sun.misc.Launcher$ExtClassLoader@77fe0d66 +file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunpkcs11.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/localedata.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/zipfs.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunec.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunjce_provider.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/dnsns.jar +===================================================== +</code></pre> +<p>When running from sbt or Eclipse, the classloader stack is:</p> +<pre><code>===================================================== +class sbt.classpath.ClasspathUtilities$$anon$1 +sbt.classpath.ClasspathUtilities$$anon$1@22a29f97 +file:/mnt/data-local/Work/Workspace/dev-2.11/dotty/target/scala-2.11.0-M7/classes/:file:/home/sun/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11.0-M7/bundles/scala-xml_2.11.0-M7-1.0.0-RC7.jar +===================================================== +class java.net.URLClassLoader +java.net.URLClassLoader@2167c879 +file:/home/sun/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.0-M7.jar:file:/home/sun/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11.0-M6/bundles/scala-xml_2.11.0-M6-1.0.0-RC6.jar:file:/home/sun/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11.0-M6/bundles/scala-parser-combinators_2.11.0-M6-1.0.0-RC4.jar:file:/home/sun/.ivy2/cache/jline/jline/jars/jline-2.11.jar +===================================================== +class xsbt.boot.BootFilteredLoader +xsbt.boot.BootFilteredLoader@73c74402 +not a URL classloader +===================================================== +class sun.misc.Launcher$AppClassLoader <= corresponds to java.class.path +sun.misc.Launcher$AppClassLoader@612dcb8c +file:/home/sun/.sbt/.lib/0.13.0/sbt-launch.jar +===================================================== +class sun.misc.Launcher$ExtClassLoader <= corresponds to sun.boot.class.path +sun.misc.Launcher$ExtClassLoader@58e862c +file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunpkcs11.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/localedata.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/zipfs.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunec.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunjce_provider.jar:file:/usr/lib/jvm/java-7-oracle/jre/lib/ext/dnsns.jar +===================================================== +</code></pre> +<p>Since scala/dotty only pick up <code>java.class.path</code> and <code>sun.boot.class.path</code>, +it's clear why dotty crashes in sbt and Eclipse unless we set the boot +classpath explicitly.</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/contexts.html b/docs/internals/contexts.html new file mode 100644 index 000000000..986d37de2 --- /dev/null +++ b/docs/internals/contexts.html @@ -0,0 +1,207 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Contexts</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Contexts</h1> +<div id="doc-page-container"> + <p>The <code>Context</code> contains the state of the compiler, for example +* <code>settings</code> +* <code>freshNames</code> (<code>FreshNameCreator</code>) +* <code>period</code> (run and phase id) +* <code>compilationUnit</code> +* <code>phase</code> +* <code>tree</code> (current tree) +* <code>typer</code> (current typer) +* <code>mode</code> (type checking mode) +* <code>typerState</code> (for example undetermined type variables) +* ...</p> +<h3><a href="#contexts-in-the-typer" id="contexts-in-the-typer">Contexts in the typer</a></h3> +<p>The type checker passes contexts through all methods and adapts fields where +necessary, e.g.</p> +<pre><code class="language-scala">case tree: untpd.Block => typedBlock(desugar.block(tree), pt)(ctx.fresh.withNewScope) +</code></pre> +<p>A number of fields in the context are typer-specific (<code>mode</code>, <code>typerState</code>).</p> +<h3><a href="#in-other-phases" id="in-other-phases">In other phases</a></h3> +<p>Other phases need a context for many things, for example to access the +denotation of a symbols (depends on the period). However they typically don't +need to modify / extend the context while traversing the AST. For these phases +the context can be simply an implicit class parameter that is then available in +all members.</p> +<p><strong>Careful</strong>: beware of memory leaks. Don't hold on to contexts in long lived +objects.</p> +<h3><a href="#using-contexts" id="using-contexts">Using contexts</a></h3> +<p>Nested contexts should be named <code>ctx</code> to enable implicit shadowing:</p> +<pre><code class="language-scala">scala> class A + +scala> def foo(implicit a: A) { def bar(implicit b: A) { println(implicitly[A]) } } +<console>:8: error: ambiguous implicit values: + both value a of type A + and value b of type A + match expected type A + def foo(implicit a: A) { def bar(implicit b: A) { println(implicitly[A]) } } + +scala> def foo(implicit a: A) { def bar(implicit a: A) { println(implicitly[A]) } } +foo: (implicit a: A)Unit +</code></pre> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/core-data-structures.html b/docs/internals/core-data-structures.html new file mode 100644 index 000000000..27ce14738 --- /dev/null +++ b/docs/internals/core-data-structures.html @@ -0,0 +1,259 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Core Data Structures</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Core Data Structures</h1> +<div id="doc-page-container"> + <p>(The following is work in progress)</p> +<h2><a href="#symbols-and-symdenotations" id="symbols-and-symdenotations">Symbols and SymDenotations</a></h2> +<ul> +<li>why symbols are not enough: their contents change all the time</li> +<li>they change themselvesSo a <code>Symbol</code></li> +<li>reference: string + sig</li> +</ul> +<p>Dotc is different from most other compilers in that it is centered around the idea of +maintaining views of various artifacts associated with code. These views are indexed +by tne</p> +<p>A symbol refers to a definition in a source program. Traditionally, +compilers store context-dependent data in a <em>symbol table</em>. The +symbol then is the central reference to address context-dependent +data. But for <code>dotc</code>'s requirements it turns out that symbols are +both too little and too much for this task.</p> +<p>Too little: The attributes of a symbol depend on the phase. Examples: +Types are gradually simplified by several phases. Owners are changed +in phases <code>LambdaLift</code> (when methods are lifted out to an enclosing +class) and Flatten (when all classes are moved to top level). Names +are changed when private members need to be accessed from outside +their class (for instance from a nested class or a class implementing +a trait). So a functional compiler, a <code>Symbol</code> by itself met mean +much. Instead we are more interested in the attributes of a symbol at +a given phase.</p> +<p><code>dotc</code> has a concept for "attributes of a symbol at</p> +<p>Too much: If a symbol is used to refer to a definition in another +compilation unit, we get problems for incremental recompilation. The +unit containing the symbol might be changed and recompiled, which +might mean that the definition referred to by the symbol is deleted or +changed. This leads to the problem of stale symbols that refer to +definitions that no longer exist in this form. <code>scalac</code> tried to +address this problem by <em>rebinding</em> symbols appearing in certain cross +module references, but it turned out to be too difficult to do this +reliably for all kinds of references. <code>dotc</code> attacks the problem at +the root instead. The fundamental problem is that symbols are too +specific to serve as a cross-module reference in a system with +incremental compilation. They refer to a particular definition, but +that definition may not persist unchanged after an edit.</p> +<p><code>dotc</code> uses instead a different approach: A cross module reference is +always type, either a <code>TermRef</code> or <code>TypeRef</code>. A reference type contains +a prefix type and a name. The definition the type refers to is established +dynamically based on these fields.</p> +<p>a system where sources can be recompiled at any instance,</p> +<p>the concept of a <code>Denotation</code>.</p> +<p>Since definitions are transformed by phases,</p> +<p>The <a href="https://github.com/lampepfl/dotty">Dotty project</a> +is a platform to develop new technology for Scala +tooling and to try out concepts of future Scala language versions. +Its compiler is a new design intended to reflect the +lessons we learned from work with the Scala compiler. A clean redesign +today will let us iterate faster with new ideas in the future.</p> +<p>Today we reached an important milestone: The Dotty compiler can +compile itself, and the compiled compiler can act as a drop-in for the +original one. This is what one calls a <em>bootstrap</em>.</p> +<h2><a href="#why-is-this-important" id="why-is-this-important">Why is this important?</a></h2> +<p>The main reason is that this gives us a some validation of the +<em>trustworthiness</em> of the compiler itself. Compilers are complex beasts, +and many things can go wrong. By far the worst things that can go +wrong are bugs where incorrect code is produced. It's not fun debugging code that looks perfectly +fine, yet gets translated to something subtly wrong by the compiler.</p> +<p>Having the compiler compile itself is a good test to demonstrate that +the generated code has reached a certain level of quality. Not only is +a compiler a large program (44k lines in the case of dotty), it is +also one that exercises a large part of the language in quite +intricate ways. Moreover, bugs in the code of a compiler don't tend to +go unnoticed, precisely because every part of a compiler feeds into +other parts and all together are necessary to produce a correct +translation.</p> +<h2><a href="#are-we-done-yet" id="are-we-done-yet">Are We Done Yet?</a></h2> +<p>Far from it! The compiler is still very rough. A lot more work is +needed to</p> +<ul> +<li>make it more robust, in particular when analyzing incorrect programs,</li> +<li>improve error messages and warnings,</li> +<li>improve the efficiency of some of the generated code,</li> +<li>embed it in external tools such as sbt, REPL, IDEs,</li> +<li>remove restrictions on what Scala code can be compiled,</li> +<li>help in migrating Scala code that will have to be changed.</li> +</ul> +<h2><a href="#what-are-the-next-steps" id="what-are-the-next-steps">What Are the Next Steps?</a></h2> +<p>Over the coming weeks and months, we plan to work on the following topics:</p> +<ul> +<li>Make snapshot releases.</li> +<li>Get the Scala standard library to compile.</li> +<li>Work on SBT integration of the compiler.</li> +<li>Work on IDE support.</li> +<li>Investigate the best way to obtaining a REPL.</li> +<li>Work on the build infrastructure.</li> +</ul> +<p>If you want to get your hands dirty with any of this, now is a good moment to get involved! +To get started: <a href="https://github.com/lampepfl/dotty">https://github.com/lampepfl/dotty</a>.</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/dotc-scalac.html b/docs/internals/dotc-scalac.html new file mode 100644 index 000000000..e22ea2f83 --- /dev/null +++ b/docs/internals/dotc-scalac.html @@ -0,0 +1,259 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Differences between Scalac and Dotty</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Differences between Scalac and Dotty</h1> +<div id="doc-page-container"> + <p>Overview explanation how symbols, named types and denotations hang together: +<a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Denotations.scala#L22">Denotations.scala:22</a></p> +<h3><a href="#denotation" id="denotation">Denotation</a></h3> +<p>Comment with a few details: <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Denotations.scala#L70">Denotations.scala:70</a></p> +<p>A <code>Denotation</code> is the result of a name lookup during a given period</p> +<ul> +<li>Most properties of symbols are now in the denotation (name, type, owner, +etc.)</li> +<li>Denotations usually have a reference to the selected symbol</li> +<li>Denotations may be overloaded (<code>MultiDenotation</code>). In this case the symbol +may be <code>NoSymbol</code> (the two variants have symbols).</li> +<li>Non-overloaded denotations have an <code>info</code></li> +</ul> +<p>Denotations of methods have a signature (<a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Signature.scala#L7">Signature.scala:7</a>), which +uniquely identifies overloaded methods.</p> +<h4><a href="#denotation-vs-symdenotation" id="denotation-vs-symdenotation">Denotation vs. SymDenotation</a></h4> +<p>A <code>SymDenotation</code> is an extended denotation that has symbol-specific properties +(that may change over phases) +* <code>flags</code> +* <code>annotations</code> +* <code>info</code></p> +<p><code>SymDenotation</code> implements lazy types (similar to scalac). The type completer +assigns the denotation's <code>info</code>.</p> +<h4><a href="#implicit-conversion" id="implicit-conversion">Implicit Conversion</a></h4> +<p>There is an implicit conversion:</p> +<pre><code class="language-scala">core.Symbols.toDenot(sym: Symbol)(implicit ctx: Context): SymDenotation +</code></pre> +<p>Because the class <code>Symbol</code> is defined in the object <code>core.Symbols</code>, the +implicit conversion does <strong>not</strong> need to be imported, it is part of the +implicit scope of the type <code>Symbol</code> (check the Scala spec). However, it can +only be applied if an implicit <code>Context</code> is in scope.</p> +<h3><a href="#symbol" id="symbol">Symbol</a></h3> +<ul> +<li><code>Symbol</code> instances have a <code>SymDenotation</code></li> +<li>Most symbol properties in scalac are now in the denotation (in dotc)</li> +</ul> +<p>Most of the <code>isFooBar</code> properties in scalac don't exist anymore in dotc. Use +flag tests instead, for example:</p> +<pre><code class="language-scala">if (sym.isPackageClass) // scalac +if (sym is Flags.PackageClass) // dotc (*) +</code></pre> +<p><code>(*)</code> Symbols are implicitly converted to their denotation, see above. Each +<code>SymDeotation</code> has flags that can be queried using the <code>is</code> method.</p> +<h3><a href="#flags" id="flags">Flags</a></h3> +<ul> +<li>Flags are instances of the value class <code>FlagSet</code>, which encapsulates a +<code>Long</code></li> +<li>Each flag is either valid for types, terms, or both</li> +</ul> +<pre><code>000..0001000..01 + ^ ^^ + flag | \ + | valid for term + valid for type +</code></pre> +<ul> +<li>Example: <code>Module</code> is valid for both module values and module classes, +<code>ModuleVal</code> / <code>ModuleClass</code> for either of the two.</li> +<li><code>flags.is(Method | Param)</code>: true if <code>flags</code> has either of the two</li> +<li><code>flags.is(allOf(Method | Deferred))</code>: true if <code>flags</code> has both. <code>allOf</code> +creates a <code>FlagConjunction</code>, so a different overload of <code>is</code> is chosen. +<ul> +<li>Careful: <code>flags.is(Method & Deferred)</code> is always true, because <code>Method & Deferred</code> is empty.</li> +</ul> +</li> +</ul> +<h3><a href="#tree" id="tree">Tree</a></h3> +<ul> +<li>Trees don't have symbols +<ul> +<li><code>tree.symbol</code> is <code>tree.denot.symbol</code></li> +<li><code>tree.denot</code> is <code>tree.tpe.denot</code> where the <code>tpe</code> is a <code>NamdedType</code> (see +next point)</li> +</ul> +</li> +<li>Subclasses of <code>DenotingTree</code> (<code>Template</code>, <code>ValDef</code>, <code>DefDef</code>, <code>Select</code>, +<code>Ident</code>, etc.) have a <code>NamedType</code>, which has a <code>denot</code> field. The +denotation has a symbol. +<ul> +<li>The <code>denot</code> of a <code>NamedType</code> (prefix + name) for the current period is +obtained from the symbol that the type refers to. This symbol is searched +using <code>prefix.member(name)</code>.</li> +</ul> +</li> +</ul> +<h3><a href="#type" id="type">Type</a></h3> +<ul> +<li><code>MethodType(paramSyms, resultType)</code> from scalac => +<code>mt @ MethodType(paramNames, paramTypes)</code>. Result type is <code>mt.resultType</code></li> +</ul> +<p><code>@todo</code></p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/higher-kinded-v2.html b/docs/internals/higher-kinded-v2.html new file mode 100644 index 000000000..38116866c --- /dev/null +++ b/docs/internals/higher-kinded-v2.html @@ -0,0 +1,452 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Higher-Kinded Types in Dotty</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Higher-Kinded Types in Dotty</h1> +<div id="doc-page-container"> + <p><strong>This page is out of date and preserved for posterity. Please see <a href="http://guillaume.martres.me/publications/dotty-hk.pdf">Implementing +Higher-Kinded Types in +Dotty</a> for a more up to +date version</strong></p> +<h1><a href="#higher-kinded-types-in-dotty-v2" id="higher-kinded-types-in-dotty-v2">Higher-Kinded Types in Dotty V2</a></h1> +<p>This note outlines how we intend to represent higher-kinded types in Dotty. +The principal idea is to collapse the four previously disparate features of +refinements, type parameters, existentials and higher-kinded types into just +one: refinements of type members. All other features will be encoded using +these refinements.</p> +<p>The complexity of type systems tends to grow exponentially with the number of +independent features, because there are an exponential number of possible +feature interactions. Consequently, a reduction from 4 to 1 fundamental +features achieves a dramatic reduction of complexity. It also adds some nice +usablilty improvements, notably in the area of partial type application.</p> +<p>This is a second version of the scheme which differs in a key aspect from the +first one: Following Adriaan's idea, we use traits with type members to model +type lambdas and type applications. This is both more general and more robust +than the intersections with type constructor traits that we had in the first +version.</p> +<h2><a href="#the-duality" id="the-duality">The duality</a></h2> +<p>The core idea: A parameterized class such as</p> +<pre><code class="language-scala">class Map[K, V] +</code></pre> +<p>is treated as equivalent to a type with type members:</p> +<pre><code class="language-scala">class Map { type Map$K; type Map$V } +</code></pre> +<p>The type members are name-mangled (i.e. <code>Map$K</code>) so that they do not conflict +with other members or parameters named <code>K</code> or <code>V</code>.</p> +<p>A type-instance such as <code>Map[String, Int]</code> would then be treated as equivalent +to:</p> +<pre><code class="language-scala">Map { type Map$K = String; type Map$V = Int } +</code></pre> +<h2><a href="#named-type-parameters" id="named-type-parameters">Named type parameters</a></h2> +<p>Type parameters can have unmangled names. This is achieved by adding the <code>type</code> +keyword to a type parameter declaration, analogous to how <code>val</code> indicates a +named field. For instance,</p> +<pre><code class="language-scala">class Map[type K, type V] +</code></pre> +<p>is treated as equivalent to</p> +<pre><code class="language-scala">class Map { type K; type V } +</code></pre> +<p>The parameters are made visible as fields.</p> +<h2><a href="#wildcards" id="wildcards">Wildcards</a></h2> +<p>A wildcard type such as <code>Map[_, Int]</code> is equivalent to:</p> +<pre><code class="language-scala">Map { type Map$V = Int } +</code></pre> +<p>I.e. <code>_</code>'s omit parameters from being instantiated. Wildcard arguments can have +bounds. E.g.</p> +<pre><code class="language-scala">Map[_ <: AnyRef, Int] +</code></pre> +<p>is equivalent to:</p> +<pre><code class="language-scala">Map { type Map$K <: AnyRef; type Map$V = Int } +</code></pre> +<h2><a href="#type-parameters-in-the-encodings" id="type-parameters-in-the-encodings">Type parameters in the encodings</a></h2> +<p>The notion of type parameters makes sense even for encoded types, which do not +contain parameter lists in their syntax. Specifically, the type parameters of a +type are a sequence of type fields that correspond to parameters in the +unencoded type. They are determined as follows.</p> +<ul> +<li>The type parameters of a class or trait type are those parameter fields declared in the class +that are not yet instantiated, in the order they are given. Type parameter fields of parents +are not considered.</li> +<li>The type parameters of an abstract type are the type parameters of its upper bound.</li> +<li>The type parameters of an alias type are the type parameters of its right hand side.</li> +<li>The type parameters of every other type is the empty sequence.</li> +</ul> +<h2><a href="#partial-applications" id="partial-applications">Partial applications</a></h2> +<p>The definition of type parameters in the previous section leads to a simple +model of partial applications. Consider for instance:</p> +<pre><code class="language-scala">type Histogram = Map[_, Int] +</code></pre> +<p><code>Histogram</code> is a higher-kinded type that still has one type parameter. +<code>Histogram[String]</code> would be a possible type instance, and it would be +equivalent to <code>Map[String, Int]</code>.</p> +<h2><a href="#modelling-polymorphic-type-declarations" id="modelling-polymorphic-type-declarations">Modelling polymorphic type declarations</a></h2> +<p>The partial application scheme gives us a new -- and quite elegant -- way to do +certain higher-kinded types. But how do we interprete the poymorphic types that +exist in current Scala?</p> +<p>More concretely, current Scala allows us to write parameterized type +definitions, abstract types, and type parameters. In the new scheme, only +classes (and traits) can have parameters and these are treated as equivalent to +type members. Type aliases and abstract types do not allow the definition of +parameterized types so we have to interprete polymorphic type aliases and +abstract types specially.</p> +<h2><a href="#modelling-polymorphic-type-aliases-simple-case" id="modelling-polymorphic-type-aliases-simple-case">Modelling polymorphic type aliases: simple case</a></h2> +<p>A polymorphic type alias such as:</p> +<pre><code class="language-scala">type Pair[T] = Tuple2[T, T] +</code></pre> +<p>where <code>Tuple2</code> is declared as</p> +<pre><code class="language-scala">class Tuple2[T1, T2] ... +</code></pre> +<p>is expanded to a monomorphic type alias like this:</p> +<pre><code class="language-scala">type Pair = Tuple2 { type Tuple2$T2 = Tuple2$T1 } +</code></pre> +<p>More generally, each type parameter of the left-hand side must appear as a type +member of the right hand side type. Type members must appear in the same order +as their corresponding type parameters. References to the type parameter are +then translated to references to the type member. The type member itself is +left uninstantiated.</p> +<p>This technique can expand most polymorphic type aliases appearing in Scala +codebases but not all of them. For instance, the following alias cannot be +expanded, because the parameter type <code>T</code> is not a type member of the right-hand +side <code>List[List[T]]</code>.</p> +<pre><code class="language-scala">type List2[T] = List[List[T]] +</code></pre> +<p>We scanned the Scala standard library for occurrences of polymorphic type +aliases and determined that only two occurrences could not be expanded. In +<code>io/Codec.scala</code>:</p> +<pre><code class="language-scala">type Configure[T] = (T => T, Boolean) +</code></pre> +<p>And in <code>collection/immutable/HashMap.scala</code>:</p> +<pre><code class="language-scala">private type MergeFunction[A1, B1] = ((A1, B1), (A1, B1)) => (A1, B1) +</code></pre> +<p>For these cases, we use a fall-back scheme that models a parameterized alias as +a <code>Lambda</code> type.</p> +<h2><a href="#modelling-polymorphic-type-aliases-general-case" id="modelling-polymorphic-type-aliases-general-case">Modelling polymorphic type aliases: general case</a></h2> +<p>A polymorphic type alias such as:</p> +<pre><code class="language-scala">type List2D[T] = List[List[T]] +</code></pre> +<p>is represented as a monomorphic type alias of a type lambda. Here's the +expanded version of the definition above:</p> +<pre><code class="language-scala">type List2D = Lambda$I { type Apply = List[List[$hkArg$0]] } +</code></pre> +<p>Here, <code>Lambda$I</code> is a standard trait defined as follows:</p> +<pre><code class="language-scala">trait Lambda$I[type $hkArg$0] { type +Apply } +</code></pre> +<p>The <code>I</code> suffix of the <code>Lambda</code> trait indicates that it has one invariant type +parameter (named $hkArg$0). Other suffixes are <code>P</code> for covariant type +parameters, and <code>N</code> for contravariant type parameters. Lambda traits can have +more than one type parameter. For instance, here is a trait with contravariant +and covariant type parameters:</p> +<pre><code class="language-scala">trait Lambda$NP[type -$hkArg$0, +$hkArg1] { type +Apply } extends Lambda$IP with Lambda$NI +</code></pre> +<p>Aside: the <code>+</code> prefix in front of <code>Apply</code> indicates that <code>Apply</code> is a covariant +type field. Dotty admits variance annotations on type members.</p> +<p>The definition of <code>Lambda$NP</code> shows that <code>Lambda</code> traits form a subtyping +hierarchy: Traits which have covariant or contravariant type parameters are +subtypes of traits which don't. The supertraits of <code>Lambda$NP</code> would themselves +be written as follows.</p> +<pre><code class="language-scala">trait Lambda$IP[type $hkArg$0, +$hkArg1] { type +Apply } extends Lambda$II +trait Lambda$NI[type -$hkArg$0, $hkArg1] { type +Apply } extends Lambda$II +trait Lambda$II[type $hkArg$0, $hkArg1] { type +Apply } +</code></pre> +<p><code>Lambda</code> traits are special in that they influence how type applications are +expanded: If the standard type application <code>T[X1, ..., Xn]</code> leads to a subtype +<code>S</code> of a type instance</p> +<pre><code class="language-scala">LambdaXYZ { type Arg1 = T1; ...; type ArgN = Tn; type Apply ... } +</code></pre> +<p>where all argument fields <code>Arg1, ..., ArgN</code> are concretely defined and the +definition of the <code>Apply</code> field may be either abstract or concrete, then the +application is further expanded to <code>S # Apply</code>.</p> +<p>For instance, the type instance <code>List2D[String]</code> would be expanded to</p> +<pre><code class="language-scala">Lambda$I { type $hkArg$0 = String; type Apply = List[List[String]] } # Apply +</code></pre> +<p>which in turn simplifies to <code>List[List[String]]</code>.</p> +<p>2nd Example: Consider the two aliases</p> +<pre><code class="language-scala">type RMap[K, V] = Map[V, K] +type RRMap[K, V] = RMap[V, K] +</code></pre> +<p>These expand as follows:</p> +<pre><code class="language-scala">type RMap = Lambda$II { self1 => type Apply = Map[self1.$hkArg$1, self1.$hkArg$0] } +type RRMap = Lambda$II { self2 => type Apply = RMap[self2.$hkArg$1, self2.$hkArg$0] } +</code></pre> +<p>Substituting the definition of <code>RMap</code> and expanding the type application gives:</p> +<pre><code class="language-scala">type RRMap = Lambda$II { self2 => type Apply = + Lambda$II { self1 => type Apply = Map[self1.$hkArg$1, self1.$hkArg$0] } + { type $hkArg$0 = self2.$hkArg$1; type $hkArg$1 = self2.$hkArg$0 } # Apply } +</code></pre> +<p>Substituting the definitions for <code>self1.$hkArg${1,2}</code> gives:</p> +<pre><code class="language-scala">type RRMap = Lambda$II { self2 => type Apply = + Lambda$II { self1 => type Apply = Map[self2.$hkArg$0, self2.$hkArg$1] } + { type $hkArg$0 = self2.$hkArg$1; type $hkArg$1 = self2.$hkArg$0 } # Apply } +</code></pre> +<p>Simplifiying the <code># Apply</code> selection gives:</p> +<pre><code class="language-scala">type RRMap = Lambda$II { self2 => type Apply = Map[self2.$hkArg$0, self2.$hkArg$1] } +</code></pre> +<p>This can be regarded as the eta-expanded version of <code>Map</code>. It has the same expansion as</p> +<pre><code class="language-scala">type IMap[K, V] = Map[K, V] +</code></pre> +<h2><a href="#modelling-higher-kinded-types" id="modelling-higher-kinded-types">Modelling higher-kinded types</a></h2> +<p>The encoding of higher-kinded types uses again the <code>Lambda</code> traits to represent +type constructors. Consider the higher-kinded type declaration</p> +<pre><code class="language-scala">type Rep[T] +</code></pre> +<p>We expand this to</p> +<pre><code class="language-scala">type Rep <: Lambda$I +</code></pre> +<p>The type parameters of <code>Rep</code> are the type parameters of its upper bound, so +<code>Rep</code> is a unary type constructor.</p> +<p>More generally, a higher-kinded type declaration</p> +<pre><code class="language-scala">type T[v1 X1 >: S1 <: U1, ..., vn XN >: S1 <: UN] >: SR <: UR +</code></pre> +<p>is encoded as</p> +<pre><code class="language-scala">type T <: LambdaV1...Vn { self => + type v1 $hkArg$0 >: s(S1) <: s(U1) + ... + type vn $hkArg$N >: s(SN) <: s(UN) + type Apply >: s(SR) <: s(UR) +} +</code></pre> +<p>where <code>s</code> is the substitution <code>[XI := self.$hkArg$I | I = 1,...,N]</code>.</p> +<p>If we instantiate <code>Rep</code> with a type argument, this is expanded as was explained +before.</p> +<pre><code class="language-scala">Rep[String] +</code></pre> +<p>would expand to</p> +<pre><code class="language-scala">Rep { type $hkArg$0 = String } # Apply +</code></pre> +<p>If we instantiate the higher-kinded type with a concrete type constructor (i.e. +a parameterized trait or class), we have to do one extra adaptation to make it +work. The parameterized trait or class has to be eta-expanded so that it +comforms to the <code>Lambda</code> bound. For instance,</p> +<pre><code class="language-scala">type Rep = Set +</code></pre> +<p>would expand to:</p> +<pre><code class="language-scala">type Rep = Lambda1 { type Apply = Set[$hkArg$0] } +</code></pre> +<p>Or,</p> +<pre><code class="language-scala">type Rep = Map[String, _] +</code></pre> +<p>would expand to</p> +<pre><code class="language-scala">type Rep = Lambda1 { type Apply = Map[String, $hkArg$0] } +</code></pre> +<h2><a href="#full-example" id="full-example">Full example</a></h2> +<p>Consider the higher-kinded <code>Functor</code> type class</p> +<pre><code class="language-scala">class Functor[F[_]] { + def map[A, B](f: A => B): F[A] => F[B] +} +</code></pre> +<p>This would be represented as follows:</p> +<pre><code class="language-scala">class Functor[F <: Lambda1] { + def map[A, B](f: A => B): F { type $hkArg$0 = A } # Apply => F { type $hkArg$0 = B } # Apply +} +</code></pre> +<p>The type <code>Functor[List]</code> would be represented as follows</p> +<pre><code class="language-scala">Functor { + type F = Lambda1 { type Apply = List[$hkArg$0] } +} +</code></pre> +<p>Now, assume we have a value</p> +<pre><code class="language-scala">val ml: Functor[List] +</code></pre> +<p>Then <code>ml.map</code> would have type</p> +<pre><code class="language-scala">s(F { type $hkArg$0 = A } # Apply => F { type $hkArg$0 = B } # Apply) +</code></pre> +<p>where <code>s</code> is the substitution of <code>[F := Lambda1 { type Apply = List[$hkArg$0] }]</code>. +This gives:</p> +<pre><code class="language-scala">Lambda1 { type Apply = List[$hkArg$0] } { type $hkArg$0 = A } # Apply + => Lambda1 { type Apply = List[$hkArg$0] } { type $hkArg$0 = B } # Apply +</code></pre> +<p>This type simplifies to:</p> +<pre><code class="language-scala">List[A] => List[B] +</code></pre> +<h2><a href="#status-of-" id="status-of-">Status of <code>#</code></a></h2> +<p>In the scheme above we have silently assumed that <code>#</code> "does the right thing", +i.e. that the types are well-formed and we can collapse a type alias with a <code>#</code> +projection, thereby giving us a form of beta reduction.</p> +<p>In Scala 2.x, this would not work, because <code>T#X</code> means <code>x.X forSome { val x: T }</code>. Hence, two occurrences of <code>Rep[Int]</code> say, would not be recognized to be +equal because the existential would be opened each time afresh.</p> +<p>In pre-existentials Scala, this would not have worked either. There, <code>T#X</code> was +a fundamental type constructor, but was restricted to alias types or classes +for both <code>T</code> and <code>X</code>. Roughly, <code>#</code> was meant to encode Java's inner classes. +In Java, given the classes</p> +<pre><code class="language-scala">class Outer { class Inner } +class Sub1 extends Outer +class Sub2 extends Outer +</code></pre> +<p>The types <code>Outer#Inner</code>, <code>Sub1#Inner</code> and <code>Sub2#Inner</code> would all exist and be +regarded as equal to each other. But if <code>Outer</code> had abstract type members this +would not work, since an abstract type member could be instantiated differently +in <code>Sub1</code> and <code>Sub2</code>. Assuming that <code>Sub1#Inner = Sub2#Inner</code> could then lead +to a soundness hole. To avoid soundness problems, the types in <code>X#Y</code> were +restricted so that <code>Y</code> was (an alias of) a class type and <code>X</code> was (an alias of) +a class type with no abstract type members.</p> +<p>I believe we can go back to regarding <code>T#X</code> as a fundamental type constructor, +the way it was done in pre-existential Scala, but with the following relaxed +restriction:</p> +<blockquote> +<p>In a type selection <code>T#x</code>, <code>T</code> is not allowed to have any abstract members different from <code>X</code></p> +</blockquote> +<p>This would typecheck the higher-kinded types examples, because they only +project with <code># Apply</code> once all <code>$hkArg$</code> type members are fully instantiated.</p> +<p>It would be good to study this rule formally, trying to verify its soundness.</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/overall-structure.html b/docs/internals/overall-structure.html new file mode 100644 index 000000000..90465c2bc --- /dev/null +++ b/docs/internals/overall-structure.html @@ -0,0 +1,333 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Dotty Overall Structure</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Dotty Overall Structure</h1> +<div id="doc-page-container"> + <p>The compiler code is found in package <a href="https://github.com/lampepfl/dotty/tree/master/compiler/src/dotty/tools">dotty.tools</a>. It spans the +following three sub-packages:</p> +<pre><code class="language-none">backend Compiler backends (currently for JVM and JS) + dotc The main compiler + io Helper modules for file access and classpath handling. +</code></pre> +<p>The <a href="https://github.com/lampepfl/dotty/tree/master/compiler/src/dotty/tools/dotc">dotc</a> package contains some main classes that can be run as separate +programs. The most important one is class <a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/Main.scala">Main</a>. <code>Main</code> inherits from +<a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/Driver.scala">Driver</a> which contains the highest level functions for starting a compiler +and processing some sources. <code>Driver</code> in turn is based on two other high-level +classes, <a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/Compiler.scala">Compiler</a> and <a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/Run.scala">Run</a>.</p> +<h2><a href="#package-structure" id="package-structure">Package Structure</a></h2> +<p>Most functionality of <code>dotc</code> is implemented in subpackages of <code>dotc</code>. Here's a +list of sub-packages and their focus.</p> +<pre><code class="language-none">. +├── ast // Abstract syntax trees +├── config // Compiler configuration, settings, platform specific definitions. +├── core // Core data structures and operations, with specific subpackages for: +│ ├── classfile // Reading of Java classfiles into core data structures +│ ├── tasty // Reading and writing of TASTY files to/from core data structures +│ └── unpickleScala2 // Reading of Scala2 symbol information into core data structures +├── parsing // Scanner and parser +├── printing // Pretty-printing trees, types and other data +├── repl // The interactive REPL +├── reporting // Reporting of error messages, warnings and other info. +├── rewrite // Helpers for rewriting Scala 2's constructs into dotty's. +├── transform // Miniphases and helpers for tree transformations. +├── typer // Type-checking and other frontend phases +└── util // General purpose utility classes and modules. +</code></pre> +<h2><a href="#contexts" id="contexts">Contexts</a></h2> +<p><code>dotc</code> has almost no global state (the only significant bit of global state is +the name table, which is used to hash strings into unique names). Instead, all +essential bits of information that can vary over a compiler run are collected +in a <a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/core/Contexts.scala">Context</a>. Most methods in <code>dotc</code> take a <code>Context</code> value as an implicit +parameter.</p> +<p>Contexts give a convenient way to customize values in some part of the +call-graph. To run, e.g. some compiler function <code>f</code> at a given phase <code>phase</code>, +we invoke <code>f</code> with an explicit context parameter, like this</p> +<pre><code class="language-scala">f(/*normal args*/)(ctx.withPhase(phase)) +</code></pre> +<p>This assumes that <code>f</code> is defined in the way most compiler functions are:</p> +<pre><code class="language-scala">def f(/*normal parameters*/)(implicit ctx: Context) ... +</code></pre> +<p>Compiler code follows the convention that all implicit <code>Context</code> parameters are +named <code>ctx</code>. This is important to avoid implicit ambiguities in the case where +nested methods contain each a Context parameters. The common name ensures then +that the implicit parameters properly shadow each other.</p> +<p>Sometimes we want to make sure that implicit contexts are not captured in +closures or other long-lived objects, be it because we want to enforce that +nested methods each get their own implicit context, or because we want to avoid +a space leak in the case where a closure can survive several compiler runs. A +typical case is a completer for a symbol representing an external class, which +produces the attributes of the symbol on demand, and which might never be +invoked. In that case we follow the convention that any context parameter is +explicit, not implicit, so we can track where it is used, and that it has a +name different from <code>ctx</code>. Commonly used is <code>ictx</code> for "initialization +context".</p> +<p>With these two conventions in place, it has turned out that implicit contexts +work amazingly well as a device for dependency injection and bulk +parameterization. There is of course always the danger that an unexpected +implicit will be passed, but in practice this has not turned out to be much of +a problem.</p> +<h2><a href="#compiler-phases" id="compiler-phases">Compiler Phases</a></h2> +<p>Seen from a temporal perspective, the <code>dotc</code> compiler consists of a list of +phases. The current list of phases is specified in class <a href="https://github.com/lampepfl/dotty/blob/master/compiler/src/dotty/tools/dotc/Compiler.scala">Compiler</a> as follows:</p> +<pre><code class="language-scala"> def phases: List[List[Phase]] = List( + List(new FrontEnd), // Compiler frontend: scanner, parser, namer, typer + List(new sbt.ExtractDependencies), // Sends information on classes' dependencies to sbt via callbacks + List(new PostTyper), // Additional checks and cleanups after type checking + List(new sbt.ExtractAPI), // Sends a representation of the API of classes to sbt via callbacks + List(new Pickler), // Generate TASTY info + List(new FirstTransform, // Some transformations to put trees into a canonical form + new CheckReentrant), // Internal use only: Check that compiled program has no data races involving global vars + List(new RefChecks, // Various checks mostly related to abstract members and overriding + new CheckStatic, // Check restrictions that apply to @static members + new ElimRepeated, // Rewrite vararg parameters and arguments + new NormalizeFlags, // Rewrite some definition flags + new ExtensionMethods, // Expand methods of value classes with extension methods + new ExpandSAMs, // Expand single abstract method closures to anonymous classes + new TailRec, // Rewrite tail recursion to loops + new LiftTry, // Put try expressions that might execute on non-empty stacks into their own methods + new ClassOf), // Expand `Predef.classOf` calls. + List(new TryCatchPatterns, // Compile cases in try/catch + new PatternMatcher, // Compile pattern matches + new ExplicitOuter, // Add accessors to outer classes from nested ones. + new ExplicitSelf, // Make references to non-trivial self types explicit as casts + new ShortcutImplicits, // Allow implicit functions without creating closures + new CrossCastAnd, // Normalize selections involving intersection types. + new Splitter), // Expand selections involving union types into conditionals + List(new VCInlineMethods, // Inlines calls to value class methods + new IsInstanceOfEvaluator, // Issues warnings when unreachable statements are present in match/if expressions + new SeqLiterals, // Express vararg arguments as arrays + new InterceptedMethods, // Special handling of `==`, `|=`, `getClass` methods + new Getters, // Replace non-private vals and vars with getter defs (fields are added later) + new ElimByName, // Expand by-name parameters and arguments + new AugmentScala2Traits, // Expand traits defined in Scala 2.11 to simulate old-style rewritings + new ResolveSuper, // Implement super accessors and add forwarders to trait methods + new ArrayConstructors), // Intercept creation of (non-generic) arrays and intrinsify. + List(new Erasure), // Rewrite types to JVM model, erasing all type parameters, abstract types and refinements. + List(new ElimErasedValueType, // Expand erased value types to their underlying implementation types + new VCElideAllocations, // Peep-hole optimization to eliminate unnecessary value class allocations + new Mixin, // Expand trait fields and trait initializers + new LazyVals, // Expand lazy vals + new Memoize, // Add private fields to getters and setters + new LinkScala2ImplClasses, // Forward calls to the implementation classes of traits defined by Scala 2.11 + new NonLocalReturns, // Expand non-local returns + new CapturedVars, // Represent vars captured by closures as heap objects + new Constructors, // Collect initialization code in primary constructors + // Note: constructors changes decls in transformTemplate, no InfoTransformers should be added after it + new FunctionalInterfaces,// Rewrites closures to implement @specialized types of Functions. + new GetClass), // Rewrites getClass calls on primitive types. + List(new LambdaLift, // Lifts out nested functions to class scope, storing free variables in environments + // Note: in this mini-phase block scopes are incorrect. No phases that rely on scopes should be here + new ElimStaticThis, // Replace `this` references to static objects by global identifiers + new Flatten, // Lift all inner classes to package scope + new RestoreScopes), // Repair scopes rendered invalid by moving definitions in prior phases of the group + List(new ExpandPrivate, // Widen private definitions accessed from nested classes + new SelectStatic, // get rid of selects that would be compiled into GetStatic + new CollectEntryPoints, // Find classes with main methods + new CollectSuperCalls, // Find classes that are called with super + new DropInlined, // Drop Inlined nodes, since backend has no use for them + new MoveStatics, // Move static methods to companion classes + new LabelDefs), // Converts calls to labels to jumps + List(new GenBCode) // Generate JVM bytecode + ) +</code></pre> +<p>Note that phases are grouped, so the <code>phases</code> method is of type +<code>List[List[Phase]]</code>. The idea is that all phases in a group are <em>fused</em> into a +single tree traversal. That way, phases can be kept small (most phases perform +a single function) without requiring an excessive number of tree traversals +(which are costly, because they have generally bad cache locality).</p> +<p>Phases fall into four categories:</p> +<ul> +<li> +<p>Frontend phases: <code>Frontend</code>, <code>PostTyper</code> and <code>Pickler</code>. <code>FrontEnd</code> parses the +source programs and generates untyped abstract syntax trees, which are then +typechecked and transformed into typed abstract syntax trees. <code>PostTyper</code> +performs checks and cleanups that require a fully typed program. In +particular, it</p> +<ul> +<li>creates super accessors representing <code>super</code> calls in traits</li> +<li>creates implementations of synthetic (compiler-implemented) methods</li> +<li>avoids storing parameters passed unchanged from subclass to superclass in +duplicate fields.</li> +</ul> +<p>Finally <code>Pickler</code> serializes the typed syntax trees produced by the frontend +as TASTY data structures.</p> +</li> +<li> +<p>High-level transformations: All phases from <code>FirstTransform</code> to <code>Erasure</code>. +Most of these phases transform syntax trees, expanding high-level constructs +to more primitive ones. The last phase in the group, <code>Erasure</code> translates all +types into types supported directly by the JVM. To do this, it performs +another type checking pass, but using the rules of the JVM's type system +instead of Scala's.</p> +</li> +<li> +<p>Low-level transformations: All phases from <code>ElimErasedValueType</code> to +<code>LabelDefs</code>. These further transform trees until they are essentially a +structured version of Java bytecode.</p> +</li> +<li>Code generators: These map the transformed trees to Java classfiles or +Javascript files.</li> +</ul> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/periods.html b/docs/internals/periods.html new file mode 100644 index 000000000..30904fbc6 --- /dev/null +++ b/docs/internals/periods.html @@ -0,0 +1,241 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Dotc's concept of time</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Dotc's concept of time</h1> +<div id="doc-page-container"> + <p>Conceptually, the <code>dotc</code> compiler's job is to maintain views of various +artifacts associated with source code at all points in time. But what is +<em>time</em> for <code>dotc</code>? In fact, it is a combination of compiler runs and compiler +phases.</p> +<p>The <em>hours</em> of the compiler's clocks are measured in compiler <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/Run.scala">runs</a>. Every run +creates a new hour, which follows all the compiler runs (hours) that happened +before. <code>dotc</code> is designed to be used as an incremental compiler that can +support incremental builds, as well as interactions in an IDE and a REPL. This +means that new runs can occur quite frequently. At the extreme, every +keystroke in an editor or REPL can potentially launch a new compiler run, so +potentially an "hour" of compiler time might take only a fraction of a second +in real time.</p> +<p>The <em>minutes</em> of the compiler's clocks are measured in phases. At every +compiler run, the compiler cycles through a number of <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Phases.scala">phases</a>. The list of +phases is defined in the [Compiler]object There are currently about 60 phases +per run, so the minutes/hours analogy works out roughly. After every phase the +view the compiler has of the world changes: trees are transformed, types are +gradually simplified from Scala types to JVM types, definitions are rearranged, +and so on.</p> +<p>Many pieces in the information compiler are time-dependent. For instance, a +Scala symbol representing a definition has a type, but that type will usually +change as one goes from the higher-level Scala view of things to the +lower-level JVM view. There are different ways to deal with this. Many +compilers change the type of a symbol destructively according to the "current +phase". Another, more functional approach might be to have different symbols +representing the same definition at different phases, which each symbol +carrying a different immutable type. <code>dotc</code> employs yet another scheme, which +is inspired by functional reactive programming (FRP): Symbols carry not a +single type, but a function from compiler phase to type. So the type of a +symbol is a time-indexed function, where time ranges over compiler phases.</p> +<p>Typically, the definition of a symbol or other quantity remains stable for a +number of phases. This leads us to the concept of a <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Periods.scala">period</a>. Conceptually, +period is an interval of some given phases in a given compiler run. Periods +are conceptually represented by three pieces of information</p> +<ul> +<li>the ID of the current run,</li> +<li>the ID of the phase starting the period</li> +<li>the number of phases in the period</li> +</ul> +<p>All three pieces of information are encoded in a value class over a 32 bit +integer. Here's the API for class <code>Period</code>:</p> +<pre><code class="language-scala">class Period(val code: Int) extends AnyVal { + def runId: RunId // The run identifier of this period. + def firstPhaseId: PhaseId // The first phase of this period + def lastPhaseId: PhaseId // The last phase of this period + def phaseId: PhaseId // The phase identifier of this single-phase period + + def containsPhaseId(id: PhaseId): Boolean + def contains(that: Period): Boolean + def overlaps(that: Period): Boolean + + def & (that: Period): Period + def | (that: Period): Period +} +</code></pre> +<p>We can access the parts of a period using <code>runId</code>, <code>firstPhaseId</code>, +<code>lastPhaseId</code>, or using <code>phaseId</code> for periods consisting only of a single +phase. They return <code>RunId</code> or <code>PhaseId</code> values, which are aliases of <code>Int</code>. +<code>containsPhaseId</code>, <code>contains</code> and <code>overlaps</code> test whether a period contains a +phase or a period as a sub-interval, or whether the interval overlaps with +another period. Finally, <code>&</code> and <code>|</code> produce the intersection and the union of +two period intervals (the union operation <code>|</code> takes as <code>runId</code> the <code>runId</code> of +its left operand, as periods spanning different <code>runId</code>s cannot be constructed.</p> +<p>Periods are constructed using two <code>apply</code> methods:</p> +<pre><code class="language-scala">object Period { + /** The single-phase period consisting of given run id and phase id */ + def apply(rid: RunId, pid: PhaseId): Period + + /** The period consisting of given run id, and lo/hi phase ids */ + def apply(rid: RunId, loPid: PhaseId, hiPid: PhaseId): Period +} +</code></pre> +<p>As a sentinel value there's <code>Nowhere</code>, a period that is empty.</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/syntax.html b/docs/internals/syntax.html new file mode 100644 index 000000000..ff80d2deb --- /dev/null +++ b/docs/internals/syntax.html @@ -0,0 +1,497 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Scala Syntax Summary</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Scala Syntax Summary</h1> +<div id="doc-page-container"> + <p>The following descriptions of Scala tokens uses literal characters <code>‘c’</code> when +referring to the ASCII fragment <code>\u0000</code> – <code>\u007F</code>.</p> +<p><em>Unicode escapes</em> are used to represent the Unicode character with the given +hexadecimal code:</p> +<pre><code class="language-ebnf">UnicodeEscape ::= ‘\’ ‘u’ {‘u’} hexDigit hexDigit hexDigit hexDigit +hexDigit ::= ‘0’ | … | ‘9’ | ‘A’ | … | ‘F’ | ‘a’ | … | ‘f’ +</code></pre> +<p>Informal descriptions are typeset as <code>“some comment”</code>.</p> +<h3><a href="#lexical-syntax" id="lexical-syntax">Lexical Syntax</a></h3> +<p>The lexical syntax of Scala is given by the following grammar in EBNF +form.</p> +<pre><code class="language-ebnf">whiteSpace ::= ‘\u0020’ | ‘\u0009’ | ‘\u000D’ | ‘\u000A’ +upper ::= ‘A’ | … | ‘Z’ | ‘\$’ | ‘_’ “… and Unicode category Lu” +lower ::= ‘a’ | … | ‘z’ “… and Unicode category Ll” +letter ::= upper | lower “… and Unicode categories Lo, Lt, Nl” +digit ::= ‘0’ | … | ‘9’ +paren ::= ‘(’ | ‘)’ | ‘[’ | ‘]’ | ‘{’ | ‘}’ +delim ::= ‘`’ | ‘'’ | ‘"’ | ‘.’ | ‘;’ | ‘,’ +opchar ::= “printableChar not matched by (whiteSpace | upper | lower | + letter | digit | paren | delim | opchar | Unicode_Sm | + Unicode_So)” +printableChar ::= “all characters in [\u0020, \u007F] inclusive” +charEscapeSeq ::= ‘\’ (‘b’ | ‘t’ | ‘n’ | ‘f’ | ‘r’ | ‘"’ | ‘'’ | ‘\’) + +op ::= opchar {opchar} +varid ::= lower idrest +alphaid ::= upper idrest + | varid +plainid ::= alphaid + | op +id ::= plainid + | ‘`’ { charNoBackQuoteOrNewline | UnicodeEscape | charEscapeSeq } ‘`’ + | INT // interpolation id, only for quasi-quotes +idrest ::= {letter | digit} [‘_’ op] + +integerLiteral ::= (decimalNumeral | hexNumeral) [‘L’ | ‘l’] +decimalNumeral ::= ‘0’ | nonZeroDigit {digit} +hexNumeral ::= ‘0’ (‘x’ | ‘X’) hexDigit {hexDigit} +digit ::= ‘0’ | nonZeroDigit +nonZeroDigit ::= ‘1’ | … | ‘9’ + +floatingPointLiteral + ::= digit {digit} ‘.’ {digit} [exponentPart] [floatType] + | ‘.’ digit {digit} [exponentPart] [floatType] + | digit {digit} exponentPart [floatType] + | digit {digit} [exponentPart] floatType +exponentPart ::= (‘E’ | ‘e’) [‘+’ | ‘-’] digit {digit} +floatType ::= ‘F’ | ‘f’ | ‘D’ | ‘d’ + +booleanLiteral ::= ‘true’ | ‘false’ + +characterLiteral ::= ‘'’ (printableChar | charEscapeSeq) ‘'’ + +stringLiteral ::= ‘"’ {stringElement} ‘"’ + | ‘"""’ multiLineChars ‘"""’ +stringElement ::= printableChar \ (‘"’ | ‘\’) + | UnicodeEscape + | charEscapeSeq +multiLineChars ::= {[‘"’] [‘"’] char \ ‘"’} {‘"’} +processedStringLiteral + ::= alphaid ‘"’ {printableChar \ (‘"’ | ‘$’) | escape} ‘"’ + | alphaid ‘"""’ {[‘"’] [‘"’] char \ (‘"’ | ‘$’) | escape} {‘"’} ‘"""’ +escape ::= ‘$$’ + | ‘$’ letter { letter | digit } + | ‘{’ Block [‘;’ whiteSpace stringFormat whiteSpace] ‘}’ +stringFormat ::= {printableChar \ (‘"’ | ‘}’ | ‘ ’ | ‘\t’ | ‘\n’)} + +symbolLiteral ::= ‘'’ plainid + +comment ::= ‘/*’ “any sequence of characters; nested comments are allowed” ‘*/’ + | ‘//’ “any sequence of characters up to end of line” + +nl ::= “new line character” +semi ::= ‘;’ | nl {nl} +</code></pre> +<h2><a href="#context-free-syntax" id="context-free-syntax">Context-free Syntax</a></h2> +<p>The context-free syntax of Scala is given by the following EBNF +grammar:</p> +<h3><a href="#literals-and-paths" id="literals-and-paths">Literals and Paths</a></h3> +<pre><code class="language-ebnf">SimpleLiteral ::= [‘-’] integerLiteral + | [‘-’] floatingPointLiteral + | booleanLiteral + | characterLiteral + | stringLiteral +Literal ::= SimpleLiteral + | processedStringLiteral + | symbolLiteral + | ‘null’ + +QualId ::= id {‘.’ id} +ids ::= id {‘,’ id} + +Path ::= StableId + | [id ‘.’] ‘this’ +StableId ::= id + | Path ‘.’ id + | [id ‘.’] ‘super’ [ClassQualifier] ‘.’ id +ClassQualifier ::= ‘[’ id ‘]’ +</code></pre> +<h3><a href="#types" id="types">Types</a></h3> +<pre><code class="language-ebnf">Type ::= [‘implicit’] FunArgTypes ‘=>’ Type Function(ts, t) + | HkTypeParamClause ‘=>’ Type TypeLambda(ps, t) + | InfixType +FunArgTypes ::= InfixType + | ‘(’ [ FunArgType {‘,’ FunArgType } ] ‘)’ +InfixType ::= RefinedType {id [nl] RefinedType} InfixOp(t1, op, t2) +RefinedType ::= WithType {[nl] Refinement} RefinedTypeTree(t, ds) +WithType ::= AnnotType {‘with’ AnnotType} (deprecated) +AnnotType ::= SimpleType {Annotation} Annotated(t, annot) +SimpleType ::= SimpleType (TypeArgs | NamedTypeArgs) AppliedTypeTree(t, args) + | SimpleType ‘#’ id Select(t, name) + | StableId + | Path ‘.’ ‘type’ SingletonTypeTree(p) + | ‘(’ ArgTypes ‘)’ Tuple(ts) + | ‘_’ TypeBounds + | Refinement RefinedTypeTree(EmptyTree, refinement) + | SimpleLiteral SingletonTypeTree(l) +ArgTypes ::= Type {‘,’ Type} + | NamedTypeArg {‘,’ NamedTypeArg} +FunArgType ::= Type + | ‘=>’ Type PrefixOp(=>, t) +ParamType ::= [‘=>’] ParamValueType +ParamValueType ::= Type [‘*’] PostfixOp(t, "*") +TypeArgs ::= ‘[’ ArgTypes ‘]’ ts +NamedTypeArg ::= id ‘=’ Type NamedArg(id, t) +NamedTypeArgs ::= ‘[’ NamedTypeArg {‘,’ NamedTypeArg} ‘]’ nts +Refinement ::= ‘{’ [Dcl] {semi [Dcl]} ‘}’ ds +TypeBounds ::= [‘>:’ Type] [‘<:’ Type] | INT TypeBoundsTree(lo, hi) +TypeParamBounds ::= TypeBounds {‘<%’ Type} {‘:’ Type} ContextBounds(typeBounds, tps) +</code></pre> +<h3><a href="#expressions" id="expressions">Expressions</a></h3> +<pre><code class="language-ebnf">Expr ::= [‘implicit’] FunParams ‘=>’ Expr Function(args, expr), Function(ValDef([implicit], id, TypeTree(), EmptyTree), expr) + | Expr1 +BlockResult ::= [‘implicit’] FunParams ‘=>’ Block + | Expr1 +FunParams ::= Bindings + | id + | ‘_’ +Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr] If(Parens(cond), thenp, elsep?) + | ‘if’ Expr ‘then’ Expr [[semi] ‘else’ Expr] If(cond, thenp, elsep?) + | ‘while’ ‘(’ Expr ‘)’ {nl} Expr WhileDo(Parens(cond), body) + | ‘while’ Expr ‘do’ Expr WhileDo(cond, body) + | ‘do’ Expr [semi] ‘while’ Expr DoWhile(expr, cond) + | ‘try’ Expr Catches [‘finally’ Expr] Try(expr, catches, expr?) + | ‘try’ Expr [‘finally’ Expr] Try(expr, Nil, expr?) + | ‘throw’ Expr Throw(expr) + | ‘return’ [Expr] Return(expr?) + | ForExpr + | [SimpleExpr ‘.’] id ‘=’ Expr Assign(expr, expr) + | SimpleExpr1 ArgumentExprs ‘=’ Expr Assign(expr, expr) + | PostfixExpr [Ascription] + | PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’ Match(expr, cases) -- point on match +Ascription ::= ‘:’ InfixType Typed(expr, tp) + | ‘:’ Annotation {Annotation} Typed(expr, Annotated(EmptyTree, annot)*) +Catches ::= ‘catch’ Expr +PostfixExpr ::= InfixExpr [id] PostfixOp(expr, op) +InfixExpr ::= PrefixExpr + | InfixExpr id [nl] InfixExpr InfixOp(expr, op, expr) +PrefixExpr ::= [‘-’ | ‘+’ | ‘~’ | ‘!’] SimpleExpr PrefixOp(expr, op) +SimpleExpr ::= ‘new’ Template New(templ) + | BlockExpr + | SimpleExpr1 [‘_’] PostfixOp(expr, _) +SimpleExpr1 ::= Literal + | Path + | ‘_’ + | ‘(’ ExprsInParens ‘)’ Parens(exprs) + | SimpleExpr ‘.’ id Select(expr, id) + | SimpleExpr (TypeArgs | NamedTypeArgs) TypeApply(expr, args) + | SimpleExpr1 ArgumentExprs Apply(expr, args) + | XmlExpr +ExprsInParens ::= ExprInParens {‘,’ ExprInParens} +ExprInParens ::= PostfixExpr ‘:’ Type + | Expr +ParArgumentExprs ::= ‘(’ ExprsInParens ‘)’ exprs + | ‘(’ [ExprsInParens] PostfixExpr ‘:’ ‘_’ ‘*’ ‘)’ exprs :+ Typed(expr, Ident(wildcardStar)) +ArgumentExprs ::= ParArgumentExprs + | [nl] BlockExpr +BlockExpr ::= ‘{’ CaseClauses ‘}’ Match(EmptyTree, cases) + | ‘{’ Block ‘}’ block // starts at { +Block ::= {BlockStat semi} [BlockResult] Block(stats, expr?) +BlockStat ::= Import + | {Annotation} [‘implicit’ | ‘lazy’] Def + | {Annotation} {LocalModifier} TmplDef + | Expr1 + +ForExpr ::= ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’) ForYield(enums, expr) + {nl} [‘yield’] Expr + | ‘for’ Enumerators (‘do’ Expr | ‘yield’ Expr) ForDo(enums, expr) +Enumerators ::= Generator {semi Enumerator | Guard} +Enumerator ::= Generator + | Guard + | Pattern1 ‘=’ Expr GenAlias(pat, expr) +Generator ::= Pattern1 ‘<-’ Expr GenFrom(pat, expr) +Guard ::= ‘if’ PostfixExpr + +CaseClauses ::= CaseClause { CaseClause } CaseDef(pat, guard?, block) // block starts at => +CaseClause ::= ‘case’ (Pattern [Guard] ‘=>’ Block | INT) + +Pattern ::= Pattern1 { ‘|’ Pattern1 } Alternative(pats) +Pattern1 ::= PatVar ‘:’ RefinedType Bind(name, Typed(Ident(wildcard), tpe)) + | Pattern2 +Pattern2 ::= [varid ‘@’] InfixPattern Bind(name, pat) +InfixPattern ::= SimplePattern { id [nl] SimplePattern } InfixOp(pat, op, pat) +SimplePattern ::= PatVar Ident(wildcard) + | Literal Bind(name, Ident(wildcard)) + | ‘(’ [Patterns] ‘)’ Parens(pats) Tuple(pats) + | XmlPattern + | SimplePattern1 [TypeArgs] [ArgumentPatterns] +SimplePattern1 ::= Path + | ‘{’ Block ‘}’ + | SimplePattern1 ‘.’ id +PatVar ::= varid + | ‘_’ +Patterns ::= Pattern {‘,’ Pattern} +ArgumentPatterns ::= ‘(’ [Patterns] ‘)’ Apply(fn, pats) + | ‘(’ [Patterns ‘,’] Pattern2 ‘:’ ‘_’ ‘*’ ‘)’ +</code></pre> +<h3><a href="#type-and-value-parameters" id="type-and-value-parameters">Type and Value Parameters</a></h3> +<pre><code class="language-ebnf">ClsTypeParamClause::= ‘[’ ClsTypeParam {‘,’ ClsTypeParam} ‘]’ +ClsTypeParam ::= {Annotation} [{Modifier} type] [‘+’ | ‘-’] TypeDef(Modifiers, name, tparams, bounds) + id [HkTypeParamClause] TypeParamBounds Bound(below, above, context) + +DefTypeParamClause::= ‘[’ DefTypeParam {‘,’ DefTypeParam} ‘]’ +DefTypeParam ::= {Annotation} id [HkTypeParamClause] TypeParamBounds + +TypTypeParamClause::= ‘[’ TypTypeParam {‘,’ TypTypeParam} ‘]’ +TypTypeParam ::= {Annotation} id [HkTypeParamClause] TypeBounds + +HkTypeParamClause ::= ‘[’ HkTypeParam {‘,’ HkTypeParam} ‘]’ +HkTypeParam ::= {Annotation} [‘+’ | ‘-’] (Id[HkTypeParamClause] | ‘_’) + TypeBounds + +ClsParamClauses ::= {ClsParamClause} [[nl] ‘(’ ‘implicit’ ClsParams ‘)’] +ClsParamClause ::= [nl] ‘(’ [ClsParams] ‘)’ +ClsParams ::= ClsParam {‘,’ ClsParam} +ClsParam ::= {Annotation} ValDef(mods, id, tpe, expr) -- point of mods on val/var + [{Modifier} (‘val’ | ‘var’) | ‘inline’] Param +Param ::= id ‘:’ ParamType [‘=’ Expr] + | INT + +DefParamClauses ::= {DefParamClause} [[nl] ‘(’ ‘implicit’ DefParams ‘)’] +DefParamClause ::= [nl] ‘(’ [DefParams] ‘)’ +DefParams ::= DefParam {‘,’ DefParam} +DefParam ::= {Annotation} [‘inline’] Param ValDef(mods, id, tpe, expr) -- point of mods at id. +</code></pre> +<h3><a href="#bindings-and-imports" id="bindings-and-imports">Bindings and Imports</a></h3> +<pre><code class="language-ebnf">Bindings ::= ‘(’ Binding {‘,’ Binding} ‘)’ +Binding ::= (id | ‘_’) [‘:’ Type] ValDef(_, id, tpe, EmptyTree) + +Modifier ::= LocalModifier + | AccessModifier + | ‘override’ +LocalModifier ::= ‘abstract’ + | ‘final’ + | ‘sealed’ + | ‘implicit’ + | ‘lazy’ +AccessModifier ::= (‘private’ | ‘protected’) [AccessQualifier] +AccessQualifier ::= ‘[’ (id | ‘this’) ‘]’ + +Annotation ::= ‘@’ SimpleType {ParArgumentExprs} Apply(tpe, args) + +TemplateBody ::= [nl] ‘{’ [SelfType] TemplateStat {semi TemplateStat} ‘}’ (self, stats) +TemplateStat ::= Import + | {Annotation [nl]} {Modifier} Def + | {Annotation [nl]} {Modifier} Dcl + | Expr1 +SelfType ::= id [‘:’ InfixType] ‘=>’ ValDef(_, name, tpt, _) + | ‘this’ ‘:’ InfixType ‘=>’ + +Import ::= ‘import’ ImportExpr {‘,’ ImportExpr} +ImportExpr ::= StableId ‘.’ (id | ‘_’ | ImportSelectors) Import(expr, sels) +ImportSelectors ::= ‘{’ {ImportSelector ‘,’} (ImportSelector | ‘_’) ‘}’ +ImportSelector ::= id [‘=>’ id | ‘=>’ ‘_’] Ident(name), Pair(id, id) +</code></pre> +<h3><a href="#declarations-and-definitions" id="declarations-and-definitions">Declarations and Definitions</a></h3> +<pre><code class="language-ebnf">Dcl ::= ‘val’ ValDcl + | ‘var’ VarDcl + | ‘def’ DefDcl + | ‘type’ {nl} TypeDcl + | INT + +ValDcl ::= ids ‘:’ Type PatDef(_, ids, tpe, EmptyTree) +VarDcl ::= ids ‘:’ Type PatDef(_, ids, tpe, EmptyTree) +DefDcl ::= DefSig [‘:’ Type] DefDef(_, name, tparams, vparamss, tpe, EmptyTree) +DefSig ::= id [DefTypeParamClause] DefParamClauses +TypeDcl ::= id [TypTypeParamClause] [‘=’ Type] TypeDefTree(_, name, tparams, tpt) + | id [HkTypeParamClause] TypeBounds TypeDefTree(_, name, tparams, bounds) + +Def ::= ‘val’ PatDef + | ‘var’ VarDef + | ‘def’ DefDef + | ‘type’ {nl} TypeDcl + | TmplDef + | INT +PatDef ::= Pattern2 {‘,’ Pattern2} [‘:’ Type] ‘=’ Expr PatDef(_, pats, tpe?, expr) +VarDef ::= PatDef + | ids ‘:’ Type ‘=’ ‘_’ +DefDef ::= DefSig [‘:’ Type] ‘=’ Expr DefDef(_, name, tparams, vparamss, tpe, expr) + | DefSig [nl] ‘{’ Block ‘}’ DefDef(_, name, tparams, vparamss, tpe, Block) + | ‘this’ DefParamClause DefParamClauses DefDef(_, <init>, Nil, vparamss, EmptyTree, expr | Block) + (‘=’ ConstrExpr | [nl] ConstrBlock) + +TmplDef ::= ([‘case’] ‘class’ | ‘trait’) ClassDef + | [‘case’] ‘object’ ObjectDef +ClassDef ::= id [ClsTypeParamClause] ClassDef(mods, name, tparams, templ) + [ConstrMods] ClsParamClauses TemplateOpt with DefDef(_, <init>, Nil, vparamss, EmptyTree, EmptyTree) as first stat +ConstrMods ::= AccessModifier + | Annotation {Annotation} (AccessModifier | ‘this’) +ObjectDef ::= id TemplateOpt ModuleDef(mods, name, template) // no constructor +TemplateOpt ::= [‘extends’ Template | [nl] TemplateBody] +Template ::= ConstrApps [TemplateBody] | TemplateBody Template(constr, parents, self, stats) +ConstrApps ::= ConstrApp {‘with’ ConstrApp} +ConstrApp ::= AnnotType {ArgumentExprs} Apply(tp, args) +ConstrExpr ::= SelfInvocation + | ConstrBlock +SelfInvocation ::= ‘this’ ArgumentExprs {ArgumentExprs} +ConstrBlock ::= ‘{’ SelfInvocation {semi BlockStat} ‘}’ + +TopStatSeq ::= TopStat {semi TopStat} +TopStat ::= {Annotation [nl]} {Modifier} TmplDef + | Import + | Packaging + | PackageObject +Packaging ::= ‘package’ QualId [nl] ‘{’ TopStatSeq ‘}’ Package(qid, stats) +PackageObject ::= ‘package’ ‘object’ ObjectDef object with package in mods. + +CompilationUnit ::= {‘package’ QualId semi} TopStatSeq Package(qid, stats) +</code></pre> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> diff --git a/docs/internals/type-system.html b/docs/internals/type-system.html new file mode 100644 index 000000000..cdde71759 --- /dev/null +++ b/docs/internals/type-system.html @@ -0,0 +1,285 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + + <title>Type System</title> + + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" + integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" + crossorigin="anonymous" + > + <link + rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" + > + + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + + <link + rel="stylesheet" + href="../.././css/dottydoc.css" + > + + <link + rel="stylesheet" + href="../.././css/color-brewer.css" + > + + + </head> + <body> + + +<div id="content-wrapper"> + <div class="index-wrapper"> + <ul class="toc"> + <li class="logo-li"> + <a id="home-button" href="../.././index.html"> + <svg width="64px" height="109px" viewBox="0 0 64 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="logo-background" transform="translate(0.000000, 16.000000)" fill="#636363"> + <path d="M0.5,59.5 C0.5,59.5 63.4,65.8 63.4,76.3 L63.4,51.1 C63.4,51.1 63.4,40.6 0.5,34.3 L0.5,59.5 L0.5,59.5 Z" id="logo-background-bottom"></path> + <path d="M0.5,25.9 C0.5,25.9 63.4,32.2 63.4,42.7 L63.4,17.5 C63.4,17.5 63.4,7 0.5,0.7 L0.5,10.5 L0.5,25.9 L0.5,25.9 Z" id="logo-background-top"></path> + </g> + <g id="logo-foreground" fill="#B6B6B6"> + <path d="M0.5,109 L0.5,83.8 C0.5,83.8 63.4,77.5 63.4,67 L63.4,92.2 C63.5,92.3 63.5,102.7 0.5,109" id="Logo_Foreground_Bottom"></path> + <path d="M0.5,50.3 C0.5,50.3 63.4,44 63.4,33.5 L63.4,58.7 C63.4,58.7 63.4,69.2 0.5,75.5 L0.5,50.3 L0.5,50.3 Z" id="Logo_Foreground_Middle"></path> + <path d="M63.5,0 L63.5,25.2 C63.5,25.2 63.5,35.7 0.6,42 L0.6,16.7 C0.5,16.7 63.5,10.5 63.5,0" id="logo-foreground-top"></path> + </g> + <g id="dots" transform="translate(4.000000, 10.000000)" fill="#FFFFFF"> + <g id="bottom" transform="translate(0.000000, 67.500000)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="middle" transform="translate(0.000000, 33.900002)"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + <g id="top"> + <path d="M1.4471104,12.2885536 C1.45019313,12.2881864 1.45019313,12.2881864 1.45327704,12.2878189 C1.91768952,12.2324787 2.24930811,11.8111359 2.1939679,11.3467234 C2.13862768,10.8823109 1.71728488,10.5506923 1.2528724,10.6060325 C1.24980572,10.606398 1.24980572,10.606398 1.24674021,10.6067632 C0.782326598,10.6620939 0.450699376,11.0834299 0.506030077,11.5478435 C0.561360778,12.0122571 0.982696791,12.3438844 1.4471104,12.2885536 L1.4471104,12.2885536 Z M9.34858965,12.1304907 C9.35409106,12.129756 9.35409106,12.129756 9.35959333,12.129021 C10.1807278,12.019341 10.7574756,11.2647668 10.6477955,10.4436323 C10.5381155,9.62249789 9.78354128,9.04575011 8.96240683,9.15543014 C8.95693539,9.15616095 8.95693539,9.15616095 8.95146479,9.15689157 C8.13032806,9.26655457 7.55356464,10.0211168 7.66322765,10.8422536 C7.77289065,11.6633903 8.52745292,12.2401537 9.34858965,12.1304907 L9.34858965,12.1304907 Z M17.0066591,11.0493128 C17.0121188,11.0484984 17.0121188,11.0484984 17.0175789,11.0476838 C17.8369369,10.9254384 18.4020584,10.1621181 18.279813,9.34276003 C18.1575677,8.52340201 17.3942473,7.95828052 16.5748893,8.08052587 C16.5694641,8.08133528 16.5694641,8.08133528 16.5640392,8.08214454 C15.7446783,8.20437064 15.1795389,8.96767771 15.301765,9.78703861 C15.4239911,10.6063995 16.1872982,11.1715389 17.0066591,11.0493128 L17.0066591,11.0493128 Z M24.8225082,10.4232459 C24.8297684,10.4220275 24.8297684,10.4220275 24.8370287,10.420809 C25.922252,10.2386672 26.6543441,9.21126476 26.4722023,8.12604147 C26.2900605,7.04081818 25.2626581,6.30872601 24.1774348,6.49086783 C24.1702314,6.4920768 24.1702314,6.4920768 24.1630282,6.49328559 C23.0777996,6.67539597 22.3456777,7.70277717 22.5277881,8.78800574 C22.7098984,9.87323431 23.7372796,10.6053563 24.8225082,10.4232459 L24.8225082,10.4232459 Z M32.4725265,9.05261002 C33.5532108,8.84532993 34.2612448,7.80122849 34.0539647,6.72054419 C33.8466846,5.63985989 32.8025831,4.93182589 31.7218988,5.13910599 C31.714724,5.14048211 31.714724,5.14048211 31.7075489,5.14185807 C30.6268567,5.34909665 29.9187826,6.39317088 30.1260211,7.47386314 C30.3332597,8.5545554 31.3773339,9.26262952 32.4580262,9.05539095 C32.4652764,9.05400057 32.4652764,9.05400057 32.4725265,9.05261002 Z M39.8723866,6.89476879 C39.877909,6.8935242 39.877909,6.8935242 39.883431,6.89227947 C40.6915794,6.71010471 41.1990314,5.90728916 41.0168566,5.09914075 C40.8346818,4.29099233 40.0318663,3.78354042 39.2237179,3.96571517 C39.218279,3.96694116 39.218279,3.96694116 39.2128397,3.96816703 C38.404681,4.15029588 37.8971834,4.9530826 38.0793123,5.76124136 C38.2614411,6.56940012 39.0642279,7.07689764 39.8723866,6.89476879 L39.8723866,6.89476879 Z M47.4276119,5.00828445 C47.4329844,5.00678549 47.4329844,5.00678549 47.4383562,5.00528637 C48.2362896,4.78258973 48.7026111,3.95520561 48.4799145,3.15727221 C48.2572179,2.35933881 47.4298337,1.89301728 46.6319003,2.11571391 C46.6266645,2.1171751 46.6266645,2.1171751 46.6214279,2.11863616 C45.8234736,2.34125773 45.3570742,3.16859798 45.5796958,3.96655233 C45.8023173,4.76450667 46.6296576,5.23090603 47.4276119,5.00828445 L47.4276119,5.00828445 Z M54.419759,2.30643871 C54.8556933,2.13695884 55.0716973,1.6461737 54.9022174,1.21023941 C54.7327376,0.774305114 54.2419524,0.558301127 53.8060181,0.727780997 C53.8032127,0.728871549 53.8032127,0.728871549 53.8004064,0.729962021 C53.3644359,0.89934874 53.148327,1.39008772 53.3177137,1.82605822 C53.4871005,2.26202871 53.9778394,2.47813756 54.4138099,2.30875084 C54.4167849,2.30759485 54.4167849,2.30759485 54.419759,2.30643871 Z" id="Shape"></path> + <path d="M1.67760355,20.096503 C1.68306395,20.0958524 1.68306395,20.0958524 1.68852642,20.0952015 C2.51113381,19.9971782 3.09852524,19.2508595 3.00050189,18.4282521 C2.90247854,17.6056447 2.15615986,17.0182533 1.33355246,17.1162767 C1.3281205,17.1169239 1.3281205,17.1169239 1.3226906,17.1175709 C0.500081196,17.2155774 -0.0873255124,17.961884 0.0106809923,18.7844934 C0.108687497,19.6071028 0.854994145,20.1945095 1.67760355,20.096503 L1.67760355,20.096503 Z M9.34858965,19.1274206 C9.35409106,19.1266859 9.35409106,19.1266859 9.35959333,19.1259509 C10.1807278,19.0162709 10.7574756,18.2616967 10.6477955,17.4405622 C10.5381155,16.6194278 9.78354128,16.04268 8.96240683,16.15236 C8.95693539,16.1530908 8.95693539,16.1530908 8.95146479,16.1538215 C8.13032806,16.2634845 7.55356464,17.0180467 7.66322765,17.8391835 C7.77289065,18.6603202 8.52745292,19.2370836 9.34858965,19.1274206 L9.34858965,19.1274206 Z M17.1767435,18.6256231 C17.1839958,18.6245412 17.1839958,18.6245412 17.1912486,18.6234592 C18.27963,18.4610765 19.0303002,17.4471319 18.8679175,16.3587506 C18.7055348,15.2703693 17.6915903,14.519699 16.6032089,14.6820817 C16.5960024,14.6831569 16.5960024,14.6831569 16.5887964,14.6842319 C15.5004112,14.846589 14.7497172,15.8605159 14.9120743,16.948901 C15.0744314,18.0372862 16.0883584,18.7879802 17.1767435,18.6256231 L17.1767435,18.6256231 Z M24.8370287,17.4177379 C25.922252,17.2355961 26.6543441,16.2081937 26.4722023,15.1229704 C26.2900605,14.0377471 25.2626581,13.3056549 24.1774348,13.4877968 C24.1702314,13.4890057 24.1702314,13.4890057 24.1630282,13.4902145 C23.0777996,13.6723249 22.3456777,14.6997061 22.5277881,15.7849347 C22.7098984,16.8701632 23.7372796,17.6022852 24.8225082,17.4201748 C24.8297684,17.4189565 24.8297684,17.4189565 24.8370287,17.4177379 Z M32.4725265,16.061085 C33.5532108,15.853199 34.2612448,14.8060455 34.0539647,13.7222022 C33.8466846,12.6383589 32.8025831,11.9282552 31.7218988,12.1361412 C31.714724,12.1375214 31.714724,12.1375214 31.7075489,12.1389013 C30.6268567,12.3467457 29.9187826,13.3938719 30.1260211,14.4777232 C30.3332597,15.5615745 31.3773339,16.2717185 32.4580262,16.0638741 C32.4652764,16.0624797 32.4652764,16.0624797 32.4725265,16.061085 Z M40.0707225,14.4695476 C40.0780573,14.4678946 40.0780573,14.4678946 40.0853916,14.4662413 C41.158768,14.2242783 41.8327617,13.1579849 41.5907986,12.0846085 C41.3488355,11.011232 40.2825422,10.3372384 39.2091657,10.5792015 C39.2019419,10.5808298 39.2019419,10.5808298 39.1947175,10.582458 C38.1213273,10.8243601 37.447273,11.8906152 37.6891752,12.9640053 C37.9310773,14.0373955 38.9973324,14.7114498 40.0707225,14.4695476 L40.0707225,14.4695476 Z M47.4276119,12.0082845 C47.4329844,12.0067855 47.4329844,12.0067855 47.4383562,12.0052864 C48.2362896,11.7825897 48.7026111,10.9552056 48.4799145,10.1572722 C48.2572179,9.35933881 47.4298337,8.89301728 46.6319003,9.11571391 C46.6266645,9.1171751 46.6266645,9.1171751 46.6214279,9.11863616 C45.8234736,9.34125773 45.3570742,10.168598 45.5796958,10.9665523 C45.8023173,11.7645067 46.6296576,12.230906 47.4276119,12.0082845 L47.4276119,12.0082845 Z M54.8999721,9.57562965 C54.9052414,9.57358217 54.9052414,9.57358217 54.9105092,9.57153441 C55.6826371,9.27135123 56.0652239,8.40207131 55.7650408,7.62994336 C55.4648576,6.85781542 54.5955777,6.4752286 53.8234497,6.77541179 C53.8184808,6.77734338 53.8184808,6.77734338 53.8135101,6.77927482 C53.0413181,7.07929302 52.6585455,7.94849117 52.9585637,8.72068323 C53.2585819,9.4928753 54.12778,9.87564785 54.8999721,9.57562965 L54.8999721,9.57562965 Z" id="Shape"></path> + <path d="M1.45327704,26.6978168 C1.54647464,26.6867112 1.63432439,26.660866 1.7147722,26.6228911 C2.03520341,26.4716332 2.23820252,26.1279362 2.1939679,25.7567213 C2.13862768,25.2923089 1.71728488,24.9606903 1.2528724,25.0160305 C1.24980572,25.0163959 1.24980572,25.0163959 1.24674021,25.0167611 C0.782326598,25.0720918 0.450699376,25.4934278 0.506030077,25.9578415 C0.561360778,26.4222551 0.982696791,26.7538823 1.4471104,26.6985516 C1.45019313,26.6981843 1.45019313,26.6981843 1.45327704,26.6978168 Z M9.34858965,26.1274206 C9.35409106,26.1266859 9.35409106,26.1266859 9.35959333,26.1259509 C10.1807278,26.0162709 10.7574756,25.2616967 10.6477955,24.4405622 C10.5381155,23.6194278 9.78354128,23.04268 8.96240683,23.15236 C8.95693539,23.1530908 8.95693539,23.1530908 8.95146479,23.1538215 C8.13032806,23.2634845 7.55356464,24.0180467 7.66322765,24.8391835 C7.77289065,25.6603202 8.52745292,26.2370836 9.34858965,26.1274206 L9.34858965,26.1274206 Z M17.0066591,25.0462427 C17.0121188,25.0454283 17.0121188,25.0454283 17.0175789,25.0446136 C17.8369369,24.9223683 18.4020584,24.1590479 18.279813,23.3396899 C18.1575677,22.5203319 17.3942473,21.9552104 16.5748893,22.0774558 C16.5694641,22.0782652 16.5694641,22.0782652 16.5640392,22.0790744 C15.7446783,22.2013005 15.1795389,22.9646076 15.301765,23.7839685 C15.4239911,24.6033294 16.1872982,25.1684688 17.0066591,25.0462427 L17.0066591,25.0462427 Z M24.8225082,24.4201748 C24.8297684,24.4189565 24.8297684,24.4189565 24.8370287,24.4177379 C25.922252,24.2355961 26.6543441,23.2081937 26.4722023,22.1229704 C26.2900605,21.0377471 25.2626581,20.3056549 24.1774348,20.4877968 C24.1702314,20.4890057 24.1702314,20.4890057 24.1630282,20.4902145 C23.0777996,20.6723249 22.3456777,21.6997061 22.5277881,22.7849347 C22.7098984,23.8701632 23.7372796,24.6022852 24.8225082,24.4201748 L24.8225082,24.4201748 Z M32.4725265,23.0495399 C33.5532108,22.8422598 34.2612448,21.7981584 34.0539647,20.7174741 C33.8466846,19.6367898 32.8025831,18.9287558 31.7218988,19.1360359 C31.714724,19.137412 31.714724,19.137412 31.7075489,19.138788 C30.6268567,19.3460265 29.9187826,20.3901008 30.1260211,21.470793 C30.3332597,22.5514853 31.3773339,23.2595594 32.4580262,23.0523208 C32.4652764,23.0509305 32.4652764,23.0509305 32.4725265,23.0495399 Z M39.8723866,20.8947688 C39.877909,20.8935242 39.877909,20.8935242 39.883431,20.8922795 C40.6915794,20.7101047 41.1990314,19.9072892 41.0168566,19.0991407 C40.8346818,18.2909923 40.0318663,17.7835404 39.2237179,17.9657152 C39.218279,17.9669412 39.218279,17.9669412 39.2128397,17.968167 C38.404681,18.1502959 37.8971834,18.9530826 38.0793123,19.7612414 C38.2614411,20.5694001 39.0642279,21.0768976 39.8723866,20.8947688 L39.8723866,20.8947688 Z M47.4276119,19.0082845 C47.4329844,19.0067855 47.4329844,19.0067855 47.4383562,19.0052864 C48.2362896,18.7825897 48.7026111,17.9552056 48.4799145,17.1572722 C48.2572179,16.3593388 47.4298337,15.8930173 46.6319003,16.1157139 C46.6266645,16.1171751 46.6266645,16.1171751 46.6214279,16.1186362 C45.8234736,16.3412577 45.3570742,17.168598 45.5796958,17.9665523 C45.8023173,18.7645067 46.6296576,19.230906 47.4276119,19.0082845 L47.4276119,19.0082845 Z M54.4138099,15.7087505 C54.4167849,15.7075945 54.4167849,15.7075945 54.419759,15.7064383 C54.8556933,15.5369585 55.0716973,15.0461733 54.9022174,14.610239 C54.7327376,14.1743047 54.2419524,13.9583007 53.8060181,14.1277806 C53.8032127,14.1288712 53.8032127,14.1288712 53.8004064,14.1299616 C53.3644359,14.2993484 53.148327,14.7900873 53.3177137,15.2260578 C53.4871005,15.6620283 53.9778394,15.8781372 54.4138099,15.7087505 L54.4138099,15.7087505 Z" id="Shape"></path> + </g> + </g> + </g> +</svg> + + </a> + </li> + + + <li><a href="../.././blog/index.html">Blog</a></li> + + <li><a href="../.././docs/index.html">Docs</a></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Usage");child.classList.toggle("show");child.classList.toggle("hide");})();'>Usage</a> +<ul id="Usage" class="hide"> + <li><a href="../.././docs/usage/cbt-projects.html">cbt-projects</a></li><li><a href="../.././docs/usage/sbt-projects.html">sbt-projects</a></li><li><a href="../.././docs/usage/dottydoc.html">Dottydoc</a></li><li><a href="../.././docs/usage/migrating.html">Migrating</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Contributing");child.classList.toggle("show");child.classList.toggle("hide");})();'>Contributing</a> +<ul id="Contributing" class="hide"> + <li><a href="../.././docs/contributing/eclipse.html">Eclipse</a></li><li><a href="../.././docs/contributing/getting-started.html">Getting Started</a></li><li><a href="../.././docs/contributing/intellij-idea.html">IntelliJ IDEA</a></li><li><a href="../.././docs/contributing/workflow.html">Workflow</a></li> +</ul></li> + + <li><a class="toggle-children" onclick='(function(){var child=document.getElementById("Internals");child.classList.toggle("show");child.classList.toggle("hide");})();'>Internals</a> +<ul id="Internals" class="show"> + <li><a href="../.././docs/internals/backend.html">Backend</a></li><li><a href="../.././docs/internals/benchmarks.html">Benchmarks</a></li><li><a href="../.././docs/internals/classpaths.html">Classpaths</a></li><li><a href="../.././docs/internals/core-data-structures.html">Core Data Structrues</a></li><li><a href="../.././docs/internals/contexts.html">Contexts</a></li><li><a href="../.././docs/internals/dotc-scalac.html">Dotc vs Scalac</a></li><li><a href="../.././docs/internals/higher-kinded-v2.html">Higher-Kinded Types</a></li><li><a href="../.././docs/internals/overall-structure.html">Overall Structure</a></li><li><a href="../.././docs/internals/periods.html">Periods</a></li><li><a href="../.././docs/internals/syntax.html">Syntax</a></li><li><a href="../.././docs/internals/type-system.html">Type System</a></li> +</ul></li> + +</ul> + + <ul class="index-entities"> + + <li class="index-title"> + <span>API</span> + </li> + + + <li class="index-entity entity-package"> + <a class="entity-name" href="../.././api/foo/index.html">foo</a> + </li> + + + <li class="index-entity "> + <div class="entity-kinds"> + + <a class="letter-anchor object" href="../.././api/foo/Foo$.html">O</a> + </div> + <a class="entity-name" href="../.././api/foo/Foo$.html">Foo</a> + </li> + + + + </ul> + </div> + <div id="content-body"> + <div id="menu-toggle" onclick="toggleMenu()"> + <i class="fa fa-bars" aria-hidden="true"></i> + </div> + +<h1 id="doc-page-title">Type System</h1> +<div id="doc-page-container"> + <p>The types are defined in <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Types.scala">dotty/tools/dotc/core/Types.scala</a></p> +<h2><a href="#class-diagram" id="class-diagram">Class diagram</a></h2> +<ul> +<li><a href="https://github.com/samuelgruetter/dotty/blob/classdiagrampdf/dotty-types.pdf">PDF</a>, generated with <a href="https://github.com/samuelgruetter/scaladiagrams/tree/print-descendants">a fork of scaladiagrams</a></li> +</ul> +<h2><a href="#proxy-types-and-ground-types" id="proxy-types-and-ground-types">Proxy types and ground types</a></h2> +<p>A type which inherits <code>TypeProxy</code> is a proxy for another type accessible using +the <code>underlying</code> method, other types are called <em>ground</em> types and inherit +<code>CachedGroundType</code> or <code>UncachedGroundType</code>.</p> +<p>Here's a diagram, copied from <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/Types.scala">dotty/tools/dotc/core/Types.scala</a>:</p> +<pre><code>Type -+- ProxyType --+- NamedType ----+--- TypeRef + | | \ + | +- SingletonType-+-+- TermRef + | | | + | | +--- ThisType + | | +--- SuperType + | | +--- ConstantType + | | +--- MethodParam + | | +----RecThis + | | +--- SkolemType + | +- PolyParam + | +- RefinedOrRecType -+-- RefinedType + | | -+-- RecType + | +- HKApply + | +- TypeBounds + | +- ExprType + | +- AnnotatedType + | +- TypeVar + | +- PolyType + | + +- GroundType -+- AndType + +- OrType + +- MethodType -----+- ImplicitMethodType + | +- JavaMethodType + +- ClassInfo + | + +- NoType + +- NoPrefix + +- ErrorType + +- WildcardType + +</code></pre> +<h2><a href="#representations-of-types" id="representations-of-types">Representations of types</a></h2> +<table> +<thead> +<tr><th>Type</th><th>Representation</th></tr> +</thead> +<tbody> +<tr><td><code>p.x.type</code></td><td><code>TermRef(p, x)</code></td></tr> +<tr><td><code>p#T</code></td><td><code>TypeRef(p, T)</code></td></tr> +<tr><td><code>p.x.T</code> == <code>p.x.type#T</code></td><td><code>TypeRef(TermRef(p, x), T)</code></td></tr> +<tr><td><code>this.type</code></td><td><code>ThisType</code></td></tr> +<tr><td><code>A & B</code></td><td><code>AndType(A, B)</code></td></tr> +<tr><td>`A</td><td>B`</td></tr> +<tr><td><code>=> T</code></td><td><code>ExprType(T)</code></td></tr> +<tr><td><code>p { refinedName }</code></td><td><code>RefinedType(p, refinedName)</code></td></tr> +<tr><td>type of the value <code>super</code></td><td><code>SuperType</code></td></tr> +<tr><td><code>type T >: A <: B</code></td><td><code>TypeRef</code> with underlying type <code>RealTypeBounds(A, B)</code></td></tr> +<tr><td><code>type T = A</code></td><td><code>TypeRef</code> with underlying type <code>TypeAlias(A)</code></td></tr> +<tr><td><code>class p.C ...</code></td><td><code>ClassInfo(p, C, ...)</code></td></tr> +</tbody> +</table> +<h3><a href="#representation-of-methods" id="representation-of-methods">Representation of methods</a></h3> +<pre><code class="language-scala">def f[A, B <: Ord[A]](x: A, y: B): Unit +</code></pre> +<p>is represented as:</p> +<pre><code class="language-scala">val p = PolyType(List("A", "B"))( + List(TypeBounds(Nothing, Any), + TypeBounds(Nothing, + RefinedType(Ordering, + scala$math$Ordering$$T, TypeAlias(PolyParam(p, 0))))), + m) + +val m = MethodType(List("x", "y"), + List(PolyParam(p, 0), PolyParam(p, 1)))(Unit) +</code></pre> +<p>(This is a slightly simplified version, e.g. we write <code>Unit</code> instead of +<code>TypeRef(TermRef(ThisType(TypeRef(NoPrefix,<root>)),scala),Unit)</code>).</p> +<p>Note that a PolyParam refers to a type parameter using its index (here A is 0 +and B is 1).</p> +<h2><a href="#subtyping-checks" id="subtyping-checks">Subtyping checks</a></h2> +<p><code>topLevelSubType(tp1, tp2)</code> in <a href="https://github.com/lampepfl/dotty/blob/master/src/dotty/tools/dotc/core/TypeComparer.scala">dotty/tools/dotc/core/TypeComparer.scala</a> +checks if <code>tp1</code> is a subtype of <code>tp2</code>.</p> +<h3><a href="#type-rebasing" id="type-rebasing">Type rebasing</a></h3> +<p><strong>FIXME</strong>: This section is no longer accurate because +<a href="https://github.com/lampepfl/dotty/pull/331">https://github.com/lampepfl/dotty/pull/331</a> changed the handling of refined +types.</p> +<p>Consider <a href="https://github.com/lampepfl/dotty/blob/master/tests/pos/refinedSubtyping.scala">tests/pos/refinedSubtyping.scala</a></p> +<pre><code class="language-scala">class Test { + + class C { type T; type Coll } + + type T1 = C { type T = Int } + + type T11 = T1 { type Coll = Set[Int] } + + type T2 = C { type Coll = Set[T] } + + type T22 = T2 { type T = Int } + + var x: T11 = _ + var y: T22 = _ + + x = y + y = x + +} +</code></pre> +<p>We want to do the subtyping checks recursively, since it would be nice if we +could check if <code>T22 <: T11</code> by first checking if <code>T2 <: T1</code>. To achieve this +recursive subtyping check, we remember that <code>T2#T</code> is really <code>T22#T</code>. This +procedure is called rebasing and is done by storing refined names in +<code>pendingRefinedBases</code> and looking them up using <code>rebase</code>.</p> +<h2><a href="#type-caching" id="type-caching">Type caching</a></h2> +<p>TODO</p> +<h2><a href="#type-inference-via-constraint-solving" id="type-inference-via-constraint-solving">Type inference via constraint solving</a></h2> +<p>TODO</p> + +</div> + </div> +</div> + + +<script> +function toggleMenu() { + var wrapper = document.getElementById("content-wrapper"); + wrapper.classList.toggle("toggled"); +} +</script> + + <script + src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" + integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" + crossorigin="anonymous" + ></script> + <script + src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" + integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" + crossorigin="anonymous" + ></script> + <script + src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" + integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" + crossorigin="anonymous" + ></script> + <script src="../.././js/highlight.pack.js"></script> + + <script> + $(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); + }); + </script> + </body> +</html> |