Starting to build UI; everything spotify goes via getToken

This commit is contained in:
James Barnsley
2016-10-23 23:48:06 +13:00
parent 9f2490fd17
commit a89d87a960
49 changed files with 5762 additions and 70 deletions

1
src/images/blur.svg Executable file
View File

@ -0,0 +1 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"> <filter id="blur"> <feGaussianBlur stdDeviation="10" /> </filter> </svg>

After

Width:  |  Height:  |  Size: 127 B

20
src/images/icons/cd.svg Executable file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<path d="M8.026,2.105c3.216,0,5.833,2.617,5.833,5.833s-2.617,5.833-5.833,5.833c-3.217,0-5.832-2.617-5.832-5.833
S4.81,2.105,8.026,2.105 M8.026,0.688c-4.004,0-7.25,3.246-7.25,7.25s3.245,7.249,7.25,7.249c4.005,0,7.25-3.245,7.25-7.249
S12.031,0.688,8.026,0.688L8.026,0.688z"/>
</g>
<g>
<path d="M8.026,6.5c0.794,0,1.438,0.646,1.438,1.438S8.818,9.375,8.026,9.375c-0.793,0-1.438-0.646-1.438-1.438
S7.233,6.5,8.026,6.5 M8.026,5.083c-1.577,0-2.855,1.278-2.855,2.855c0,1.577,1.278,2.854,2.855,2.854s2.855-1.277,2.855-2.854
C10.882,6.361,9.604,5.083,8.026,5.083L8.026,5.083z"/>
</g>
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-miterlimit="10" d="M4.74,5.081
c0.798-0.918,1.974-1.498,3.286-1.498"/>
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-miterlimit="10" d="M11.313,10.796
c-0.797,0.918-1.974,1.498-3.286,1.498"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<polyline fill="none" stroke="#010101" stroke-width="1.8546" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
11.207,14.299 4.845,7.936 11.207,1.576 "/>
</svg>

After

Width:  |  Height:  |  Size: 663 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<polyline fill="none" stroke="#010101" stroke-width="1.8546" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
4.845,1.576 11.207,7.938 4.845,14.299 "/>
</svg>

After

Width:  |  Height:  |  Size: 662 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
<line fill="none" stroke="#000000" stroke-width="2.8346" stroke-miterlimit="10" x1="6" y1="6" x2="44" y2="44"/>
<line fill="none" stroke="#000000" stroke-width="2.8346" stroke-miterlimit="10" x1="6" y1="44" x2="44" y2="6"/>
</svg>

After

Width:  |  Height:  |  Size: 703 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
<line fill="none" stroke="#FFFFFF" stroke-width="2.8346" stroke-miterlimit="10" x1="6" y1="6" x2="44" y2="44"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2.8346" stroke-miterlimit="10" x1="6" y1="44" x2="44" y2="6"/>
</svg>

After

Width:  |  Height:  |  Size: 703 B

44
src/images/icons/cog.svg Executable file
View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<g>
<path d="M7.938,6.948c0.532,0,0.966,0.435,0.966,0.968c0,0.532-0.434,0.967-0.966,0.967c-0.533,0-0.967-0.435-0.967-0.967
C6.972,7.383,7.405,6.948,7.938,6.948 M7.938,5.815c-1.16,0-2.102,0.941-2.102,2.102c0,1.16,0.94,2.102,2.102,2.102
c1.159,0,2.101-0.941,2.101-2.102C10.039,6.756,9.098,5.815,7.938,5.815L7.938,5.815z"/>
</g>
<g>
<path d="M7.938,4.235c2.029,0,3.681,1.652,3.681,3.682c0,2.029-1.65,3.682-3.681,3.682c-2.029,0-3.68-1.652-3.68-3.682
C4.259,5.887,5.908,4.235,7.938,4.235 M7.938,2.818c-2.815,0-5.098,2.283-5.098,5.099s2.282,5.099,5.098,5.099
s5.099-2.282,5.099-5.099S10.754,2.818,7.938,2.818L7.938,2.818z"/>
</g>
<g>
<g>
<polygon points="9.318,12.788 6.548,12.788 6.548,14.916 9.318,14.916 "/>
</g>
<g>
<polygon points="9.318,0.959 6.548,0.959 6.548,3.086 9.318,3.086 "/>
</g>
<g>
<polygon points="3.08,6.552 0.953,6.552 0.954,9.323 3.081,9.323 "/>
</g>
<g>
<polygon points="15.098,6.552 12.781,6.552 12.783,9.323 15.099,9.323 "/>
</g>
<g>
<polygon points="3.523,10.39 2.019,11.894 3.978,13.853 5.482,12.349 "/>
</g>
<g>
<polygon points="11.887,2.025 10.383,3.529 12.342,5.488 13.847,3.984 "/>
</g>
<g>
<polygon points="3.978,2.024 2.019,3.983 3.523,5.487 5.481,3.528 "/>
</g>
<g>
<polygon points="12.342,10.389 10.383,12.348 11.887,13.852 13.846,11.893 "/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

15
src/images/icons/compass.svg Executable file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<g>
<path d="M8.026,2.104c3.215,0,5.832,2.617,5.832,5.833c0,3.216-2.617,5.831-5.832,5.831c-3.216,0-5.832-2.615-5.832-5.831
C2.194,4.721,4.811,2.104,8.026,2.104 M8.026,0.688c-4.004,0-7.25,3.246-7.25,7.25c0,4.004,3.245,7.25,7.25,7.25
c4.003,0,7.249-3.246,7.249-7.25C15.275,3.932,12.029,0.688,8.026,0.688L8.026,0.688z"/>
</g>
<path d="M6.517,6.428l-2.07,5.089l5.09-2.069l2.069-5.091L6.517,6.428z M8.026,8.775c-0.462,0-0.837-0.375-0.837-0.836
c0-0.463,0.375-0.838,0.837-0.838c0.461,0,0.836,0.375,0.836,0.838C8.862,8.4,8.487,8.775,8.026,8.775z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

9
src/images/icons/filter.svg Executable file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path d="M13.954,2.139c-0.085-0.163-0.253-0.264-0.437-0.264H2.48c-0.183,0-0.352,0.102-0.437,0.264s-0.074,0.359,0.03,0.51
L6.86,9.604c0,1.3,0,4.013,0,4.32c1.021-0.254,1.258,1.165,2.278,0.429c0-0.426,0-3.384,0-4.748l4.785-6.957
C14.028,2.498,14.04,2.302,13.954,2.139z M8,8.604L5.351,4.754h5.297L8,8.604z"/>
</svg>

After

Width:  |  Height:  |  Size: 787 B

14
src/images/icons/folder.svg Executable file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" d="M13.94,13.125c0,0.274-0.225,0.5-0.5,0.5
H2.612c-0.275,0-0.5-0.226-0.5-0.5v-7.75c0-0.275,0.225-0.5,0.5-0.5H13.44c0.275,0,0.5,0.225,0.5,0.5V13.125z"/>
</g>
<rect x="2.706" y="2.25" fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" width="4.854" height="2.625"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 876 B

12
src/images/icons/grid.svg Executable file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<rect x="1.995" y="1.908" width="4.969" height="4.971"/>
<rect x="9.086" y="8.999" width="4.971" height="4.969"/>
<rect x="1.995" y="8.999" width="4.969" height="4.969"/>
<rect x="9.086" y="1.907" width="4.969" height="4.972"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 724 B

4802
src/images/icons/icons-single.ai Executable file

File diff suppressed because one or more lines are too long

309
src/images/icons/icons.ai Executable file
View File

@ -0,0 +1,309 @@
%PDF-1.5
%<25><><EFBFBD><EFBFBD>
1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 7567/Subtype/XML/Type/Metadata>>stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
<xmp:CreatorTool>Adobe Illustrator CS6 (Windows)</xmp:CreatorTool>
<xmp:CreateDate>2016-05-06T07:25:20+13:00</xmp:CreateDate>
<xmp:ModifyDate>2016-05-06T07:25:20+12:00</xmp:ModifyDate>
<xmp:MetadataDate>2016-05-06T07:25:20+12:00</xmp:MetadataDate>
<xmp:Thumbnails>
<rdf:Alt>
<rdf:li rdf:parseType="Resource">
<xmpGImg:width>16</xmpGImg:width>
<xmpGImg:height>256</xmpGImg:height>
<xmpGImg:format>JPEG</xmpGImg:format>
<xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FULNqulw6hb6dNeQR6hdq72tm8iLNKkVDI0cZPJglRyIG2KorFWJfmR5F0XzVo&#xA;oe8uTpWo6UTeaV5giYRzWE0Y5eqHJX4Ph/eKTQjwIBCqC/JnztrHnDyYNS1aJPrVtdTWI1GBWW2v&#xA;1tyFF7bq6owjlJI6faB+WKorz/5DufOb6dp15qb23lWN2l1rSoFKyX5WhihecMCkIIJdQPi8R1Cq&#xA;c+Wda8s6lZzweXZ4JrLSJ202RLUUhhlgRSYVoAvwK6j4dh0xV59+ffmTWdNttE0r6zLoflTW7k2n&#xA;mPzVAOclnE1AkS0/uvrBJT1jsmKvRPLGgaDoGg2Wk6Bbx22k20YFrHFupU78+W/MvXkWJqTviqE1&#xA;PW/ImqWOq6XqOpabd2cCNDrVrLcQMsSs3pstwpb938Xw/FTf3xVJPyqsvKug6XP5b0LzTFr9rDNL&#xA;c6da/WYbiazsm4KtuCju7RxuTxZv5gPDFXnfl25/KY+avzKHl2HVoPMMc83+IpmaFUaT6+RIbUyz&#xA;RoB61ftFfhxVl35Xz2Emv3C282pSP9UckXstm8dPUj6C3ubh+XzWnXfFVX/HX5Gjzre+T0a0j81a&#xA;lcfVtQtY7CaOSecn1SJbhIVRzy+Kpk64qu/Lbz/+S3mLXZ7LyPdRz6tHavNOiW13ARbrJGrHlPHG&#xA;p+N02Brirxn6/wDl5/0NP6H6H1L/ABD+l+P1/wCvRfVfW9P7X1b6tz4/5Pq/Tirv+cT7/wDLy4/M&#xA;XUk8t6PqWn3w0iZpJr2+iu4zD9atgVEaW1uQ3IqeXI9Dtir0/V/Mn5S6V50utQm8k6jN5itLljJr&#xA;Fvok0zNMnwmSO4Vfi9mBxVHflle/la/mGWPyp5PutA1J7ZxJezaTJYI0IdC0frMqg1YKePt7YqxT&#xA;zf8AmLa2PmjVbNvzq/QrW9zJGdI/QdvcfVuLEej6rQsX4dORO+Kp5+U/na31rzQ9nH+aX+MWFtJJ&#xA;+iP0TDY04sg9b1Y4o2+GtONe+Kv/2Q==</xmpGImg:image>
</rdf:li>
</rdf:Alt>
</xmp:Thumbnails>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
<xmpTPg:NPages>1</xmpTPg:NPages>
<xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
<xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
<xmpTPg:MaxPageSize rdf:parseType="Resource">
<stDim:w>16.000000</stDim:w>
<stDim:h>320.000000</stDim:h>
<stDim:unit>Pixels</stDim:unit>
</xmpTPg:MaxPageSize>
<xmpTPg:PlateNames>
<rdf:Seq>
<rdf:li>Cyan</rdf:li>
<rdf:li>Magenta</rdf:li>
<rdf:li>Yellow</rdf:li>
<rdf:li>Black</rdf:li>
</rdf:Seq>
</xmpTPg:PlateNames>
<xmpTPg:SwatchGroups>
<rdf:Seq>
<rdf:li rdf:parseType="Resource">
<xmpG:groupName>Default Swatch Group</xmpG:groupName>
<xmpG:groupType>0</xmpG:groupType>
</rdf:li>
</rdf:Seq>
</xmpTPg:SwatchGroups>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
<illustrator:Type>Document</illustrator:Type>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>application/pdf</dc:format>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">icons</rdf:li>
</rdf:Alt>
</dc:title>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
<xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
<xmpMM:DocumentID>uuid:5fc21c6c-2c40-425e-9db9-b8ba2b0961a8</xmpMM:DocumentID>
<xmpMM:InstanceID>uuid:6e37fc72-9ed1-4729-83e7-daf6338204b4</xmpMM:InstanceID>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
<pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[7 0 R]/Type/Pages>>
endobj
7 0 obj
<</ArtBox[0.508301 50.1973 15.5449 319.437]/BleedBox[0.0 0.0 16.0 320.0]/Contents 8 0 R/LastModified(D:20160506072520+13'00')/MediaBox[0.0 0.0 16.0 320.0]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ExtGState<</GS0 10 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 11 0 R/TrimBox[0.0 0.0 16.0 320.0]/Type/Page>>
endobj
8 0 obj
<</Filter/FlateDecode/Length 2195>>stream
H<EFBFBD><EFBFBD>Wݪ7 <0C>ߧ<EFBFBD><17><><EFBFBD><EFBFBD>&-<2D>B)m.<2E><00>6!<21><16>BK߾<4B>'ٳ<><D9B3>=<3D>i!PvFcI<63><49><EFBFBD>I~<7E>ݛ<EFBFBD>շo<D5B7><6F><EFBFBD><EFBFBD>7<EFBFBD>E6<45>><3E><><EFBFBD>z<EFBFBD><7A>m<EFBFBD><EFBFBD><7F><06><>'<27>?Zke .9<15>=<3D>r<EFBFBD><72>/<17>CB<43><42><11><><EFBFBD>o<12>R<EFBFBD><52><EFBFBD>"G<><47><EFBFBD><EFBFBD>zc=R<><52>gk<67><6B><EFBFBD>+<2B>ϗ<EFBFBD>/<2F>A:xh<78><68><EFBFBD>租.?n<>N6Tl<1F><> yn<79><6E>ù<EFBFBD>׽>A<><41>1B<>.<2E><><EFBFBD>><3E>M%H<>#QN<51><17>c<EFBFBD>¿<EFBFBD><C2BF>n<EFBFBD><6E><EFBFBD>3j¡xR,<2C> F<><46><EFBFBD>=<3D>4<EFBFBD>Ate<74>wĜ<77>!W<>fo<66>]<5D>)<29>O<EFBFBD>A<EFBFBD><41>v<EFBFBD>6<EFBFBD>[N<1F><>W<EFBFBD>><3E><>IIG<49><47>|!<21><><EFBFBD>޼<EFBFBD><DEBC>qo8<6F>n<><1B><>{<1D>H<EFBFBD><48>**<2A><>J<EFBFBD><4A>'<27><>A<EFBFBD><41><EFBFBD>v:Q-S!XR<58><52>=.<2E>W<13><><EFBFBD><18>:i;<3B><><EFBFBD>8<EFBFBD><1D><>A<EFBFBD>?<3F>U.<2E>+a<>:P<>P)u<>o<EFBFBD>c{<7B><01>j$t<>A<EFBFBD><41>=i<69>^<5E><><EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>M><3E>G+I<><49><EFBFBD><EFBFBD>s*<2A><><EFBFBD><11><>y"|A(k<><6B><0F>wK<00><>)<29>hJp[<5B><><EFBFBD><EFBFBD>
ͤ<EFBFBD><EFBFBD><14><>e7<65><37>}<7D><><EFBFBD>mWm1k<31>;<3B><19>J<>5ds&I<04><><EFBFBD>Kȑ <0B>Ԟ<EFBFBD><D49E><EFBFBD>ub_5͛<35><CD9B>-<13>cL<63><10> 8HҐ<48><14><>w΅<77>.F<05><01><16>%<1E><06>t<EFBFBD>w<EFBFBD>}m Gd򐡯\i<>]<5D><><EFBFBD>$6G <20>yd<10>O<EFBFBD><4F><EFBFBD>y<EFBFBD><79><EFBFBD>E<EFBFBD>>ﱏ<><EFB18F><EFBFBD>4<<3C>}<7D><><16><11><><01><><EFBFBD>6eפdP<><50><EFBFBD>C;<1B><>-h<>1<EFBFBD><31><EFBFBD>p<EFBFBD>R<EFBFBD>z<EFBFBD>s<7F><73>'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WsQ<73><1E><>r<EFBFBD><72><EFBFBD>k<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ҹ<>9N<39><4E> <09><>g!O<><4F><EFBFBD><EFBFBD>Bu<42>|E<>]<5D>r<14>E<EFBFBD><45><EFBFBD>؃<EFBFBD><D883> <0B>Qu<51><75><EFBFBD><EFBFBD>5w#<23><>r4<72><1F> гЄCѻK4B]r
<EFBFBD><EFBFBD><EFBFBD><1B><>w<EFBFBD>s9<73>ey<65>S}<7D><>{[_<><5F><EFBFBD>O<EFBFBD><1D><><EFBFBD>4.<2E>ַ<EFBFBD>)4 <0B>R|x <0B><><EFBFBD>OV <0C><><EFBFBD>z)<29><>-<2D>=ԨE<D4A8>FݲW7`j\<5C><>LxO! <12>Y8<>:<08>B<EFBFBD><42>dVF<56><46>@<40><><EFBFBD>X;-p<>\<5C>̕2<CC95><32><EFBFBD><EFBFBD><EFBFBD>Ր<EFBFBD>ro4<6F><34><06><1A>jc?<3F>d<EFBFBD><64>5<EFBFBD><35><EFBFBD>t<EFBFBD><1F><><11>K<>&<26><07><><EFBFBD>A<EFBFBD><41><EFBFBD>}<7D>T<EFBFBD>6<EFBFBD>.Չ<><D589><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>О϶ ĨbNj<4E><18>:Y<0E><> <0B><>^qE<71><45><EFBFBD>^4Q<1C>;<3B><><EFBFBD><0E>N<EFBFBD><4E>5Ҷ<35>g#nf<6E><66><EFBFBD><02>GpJ<70><4A>U,<2C><>m<EFBFBD><6D><EFBFBD>CŻ 3"F<>!<21>e<EFBFBD>!p
<11>Y<EFBFBD><59><EFBFBD><EFBFBD>܃0<DC83>ʕ<EFBFBD>puIG<49><47><EFBFBD>i <0C><><EFBFBD> <20><><1A>Yba<62>B<EFBFBD>xYGL<47><4C><EFBFBD><EFBFBD><EFBFBD>'&<26><>c<EFBFBD>^ޒBl<42><6C><EFBFBD><EFBFBD>Pd<50><64>&<26>t<EFBFBD><74>Fo<46>'<27><>y<EFBFBD><11>8W<38>ֲ<EFBFBD><D6B2>bǛg<>˦w<CBA6><77>(j<>B<EFBFBD><42><EFBFBD>M/<2F> pbQ{<7B><01>i<EFBFBD>/P<>mH<6D>^<1F>[ڗoF>*<2A>]<5D>, <20><><EFBFBD><EFBFBD>N<EFBFBD>.<2E><>ž<EFBFBD>x<EFBFBD>ub<75>TR<54>E*<2A><>]P<>X<EFBFBD><58><EFBFBD><EFBFBD>I)<29>e<EFBFBD><65>|P<>{7E<37>x<EFBFBD>B<EFBFBD>Rft<66><74>#<23><>IGp<47><70>sS<><53>2<EFBFBD>J<EFBFBD><4A>5x<35>?<01><><EFBFBD>Q1;<3B><><1B>u#>`a<06>)<29><>Y <0C><S<>2<10>)<29>)<13>B<EFBFBD>kg<6B>rR<72><52> m|V<><56>~<7E>#<23>5<EFBFBD>?<3F><>Ԗ<1C>—s<C297><1F><>KT<4B>
<EFBFBD><13>խd<D5AD><01><><EFBFBD>w<EFBFBD>bW[<5B> X<8<><38><EFBFBD><1C>;<3B><><1F><>\O 9<>fw4<77>0#<23><>k<EFBFBD><6B><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>h<EFBFBD><68>1g<31><67><EFBFBD><EFBFBD><EFBFBD>m<18><>\'-ş<><C59F>)<29>nn<1D><>iY<69>V<EFBFBD><56><EFBFBD>쨰{
G<EFBFBD><EFBFBD><3ݗN\)sו.<2E>x<EFBFBD>p<EFBFBD>c<04>E<EFBFBD>}#P <0C>a$<19>’<EFBFBD>8F?j<><6A>v<12>'ɼaF<61><46>Q<EFBFBD><51>[<5B><><EFBFBD>j<EFBFBD><6A>%#s5<73>\%<08><><EFBFBD>=<3D><><EFBFBD><EFBFBD>cޯ8<19><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v,<2C>]<5D>Ь<EFBFBD><D0AC><EFBFBD>4L{<7B>{<7B>@<14><>$<16><>*|Q<>L<Z<><5A><EFBFBD><EFBFBD>[<5B><05><>63<1F>ϫ+V<><56> <09><><19><><EFBFBD>N<05>+H<>`ll<6C>woT<6F>'`<60><>yɊ<79>Ũ<EFBFBD>gc<67>9<EFBFBD><39>"t<><74><EFBFBD>A<EFBFBD><41>CV=<3D>q<>f<EFBFBD>#Ĥ<>M0L<07><><EFBFBD>+<2B><08><><EFBFBD><03><00>m<>-u+(<28><>4&h<><68>z<EFBFBD>DZ<44>YRp<52> ~i <0B>i<EFBFBD>?g(`<60><>Q<EFBFBD>悬<EFBFBD><E682AC>n<EFBFBD>ֺ'<27>;N<><4E>ٜ0ݘ<30><DD98>zc<7A><63><EFBFBD>1x<31>+<2B><>}<7D>{<7B>q<EFBFBD>%#}i_<><5F><EFBFBD><EFBFBD>q<EFBFBD>x<EFBFBD>I<EFBFBD>>i<><69>n<EFBFBD>ou<15><>e<EFBFBD><65><EFBFBD><EFBFBD>4<EFBFBD> <20>Tm<54><6D>W<EFBFBD><57><EFBFBD>
fL<>e<16>.ï<>j{AdDq<44><71> '<27>l<1E>ǭ<EFBFBD><12>0K<30>O<05>#<1A>]<5D><>jf&<26> <20>Dg<44><67><EFBFBD>b><3E><>5td<74><64>E<EFBFBD>3"ٰa<>!O<><1B><>W<EFBFBD>y#<23>O^<5E>6<EFBFBD>oa<11>\<03>j<EFBFBD>B|H<><48>e<18><><EFBFBD>I<EFBFBD>&<1A>Q$(z׺?ׁ <03><>̈<13>89<13>Yc<59>Mz<4D><7A>)<29>H
<EFBFBD>:_g<5F>Q<EFBFBD><51>t,'ʜo<1A>yi_<69><5F><1B><><EFBFBD><EFBFBD>≯<>
<EFBFBD><EFBFBD><1D>CvK*<2A><><1D><>q<1D>p/<2F>B<7F><42>vS<76><53>S<EFBFBD>W <0C>p!<21>8<EFBFBD>l<03><>ǣ<EFBFBD>`<60>O<> <0C><><10>V<00><><EFBFBD><EFBFBD>3<EFBFBD>tLs<4C>*<2A><>q<EFBFBD><71>3vV<76><1F>6<EFBFBD>!<21>m
<EFBFBD>Vx<EFBFBD>N+<2B><0F>3<EFBFBD><33> <04>D<EFBFBD><44><EFBFBD>E<EFBFBD>|<7C>\l<>_
<1E>LL<4C><4C><EFBFBD><EFBFBD>@<40><>ft<66>?.<2E><05>s<EFBFBD><73>۔<EFBFBD><DB94><EFBFBD><EFBFBD>e<EFBFBD>힄.<2E><>$A2n}<15>dž﵂<C786><EFB582><EFBFBD><EFBFBD>Iü,<2C><>E<>pX<70>m<EFBFBD>*ّ<> XU"@Fz<46>9
<EFBFBD>Z<EFBFBD>S/t<><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<05>X<EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>o6<<3C>`<00><>.(
endstream
endobj
11 0 obj
<</BitsPerComponent 8/ColorSpace 12 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 40/Length 26/Width 2>>stream
8;Xp,SM\-4"X(tj";h+e!A\3~>
endstream
endobj
12 0 obj
[/Indexed/DeviceRGB 255 13 0 R]
endobj
13 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
5 0 obj
<</Intent 14 0 R/Name(Layer 1)/Type/OCG/Usage 15 0 R>>
endobj
14 0 obj
[/View/Design]
endobj
15 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>>
endobj
10 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
9 0 obj
<</LastModified(D:20160506072520+13'00')/Private 16 0 R>>
endobj
16 0 obj
<</AIMetaData 17 0 R/AIPrivateData1 18 0 R/AIPrivateData2 19 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 2/RoundtripStreamType 1/RoundtripVersion 16>>
endobj
17 0 obj
<</Length 978>>stream
%!PS-Adobe-3.0
%%Creator: Adobe Illustrator(R) 16.0
%%AI8_CreatorVersion: 16.0.0
%%For: (James) ()
%%Title: (icons.svg)
%%CreationDate: 5/6/2016 7:25 AM
%%Canvassize: 16383
%%BoundingBox: 8 -94 24 176
%%HiResBoundingBox: 8.0083 -93.3027 23.0449 175.937
%%DocumentProcessColors: Cyan Magenta Yellow Black
%AI5_FileFormat 12.0
%AI12_BuildNumber: 682
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%RGBProcessColor: 0 0 0 ([Registration])
%AI3_Cropmarks: 7.5 -143.5 23.5 176.5
%AI3_TemplateBox: 15.5 16.5 15.5 16.5
%AI3_TileBox: -290.5 -379.5 321.5 412.5
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 6
%AI9_ColorModel: 1
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 1
%AI9_OpenToView: -171.25 57 4 1652 844 26 0 0 143 158 0 0 0 1 1 0 1 1 0 1
%AI5_OpenViewLayers: 7
%%PageOrigin:0 0
%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments
endstream
endobj
18 0 obj
<</Length 2249>>stream
%%BoundingBox: 8 -94 24 176
%%HiResBoundingBox: 8.0083 -93.3027 23.0449 175.937
%AI7_Thumbnail: 8 128 8
%%BeginData: 2102 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FDFCFFFDFCFFFDE1FFA852FD07FF5252FD07FF2752FD07FF2752FD
%05FFA8F8A8FD04FFA8F8A8FD05FFF87DFD05FFA8FD0AFF527DFD05FF5227
%A8FD04FF5227FD05FFA8F8A8FD06FF5227A8FD06FF5227A8FD06FF527DFD
%0AFFA87DA8A87D7DA8FF7DF8A87D7D52A8FFFD04A87D7DA8FFFF7DFFA8A8
%7DA8FF52F87D7D52527DFFA87DFF7D7D7DA8FD0AFFA8FD06FF7DF8F8A8F8
%F852FFA8F8F87D27F87DFFA87D52FF7D7DA8FFA82727A852277DFF7DF8F8
%7DF8F852FFFF5252A87D27A8FD0AFF7DA87D7D7DA8FF7D52275252527DFD
%09FF7DFD052752FD04FFA8FD04FF7D272727F82752FF
%%EndData
endstream
endobj
19 0 obj
<</Length 23115>>stream
%AI12_CompressedDatax<61>ݽg{*;<3B>0z><3E><><EFBFBD>?@*<2A>S)顥<><E9A1A5>{hIX!@(<28><><1F>o?<3F>=<3D><> S<>u<EFBFBD>uγ<75>;<3B><>x$[<5B>eI<65><49><EFBFBD><EFBFBD><EFBFBD>eb<65>ѭ5rR<08><>Z\,<2C><><EFBFBD>a<EFBFBD><61>&<26><><EFBFBD>v{4<18><>(z <0B>餀<EFBFBD>v<0F><>Z͛f<66><7F>v<EFBFBD><76>;<3B><><EFBFBD><EFBFBD>G<0F><><EFBFBD>A,<1C>a<EFBFBD>Uk<55>nBa<42><61><EFBFBD> <0C><><EFBFBD>?b:2<><32>X<1D>K5<4B>NI<4E><49>g<>$5<>{LjT;W<07><><EFBFBD>i"9+ca<63>;<3B>4Z<34><5A>|<7C>ߵp6<70><36>)aI <09><>4<EFBFBD><34>o]4<07>IA<49><41>PMNʂ<4E> K<>WE<57><45>j2'g<><67>b<EFBFBD>><3E>nv<6E>g<EFBFBD>n<EFBFBD>9<14><>n<6E>.<2E>W턏<57><1F><><1A>o<EFBFBD><6F><EFBFBD><EFBFBD><7F>v<EFBFBD><76><05><><1E><><EFBFBD>V<EFBFBD> <09><><EFBFBD>âD<C3A2><44>{ J<><4A>Q<EFBFBD><51>8}ך@<40>tV"<22><>+<2B>z=p<><7F><EFBFBD><EFBFBD><EFBFBD>7]6<>Ch0 %$<24><><EFBFBD><EFBFBD>m<EFBFBD>R<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>"d{<7B>1<EFBFBD><31>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3I5<49><19><><EFBFBD>P%<25>jծ<6A>߽6<DFBD><36>PET<45>m<1A><>_<EFBFBD><1A><>TIH9<01>ə<1C>#K"<22>U<EFBFBD><55><EFBFBD><EFBFBD>A<EFBFBD><41>߭<EFBFBD>?k<><6B>n<EFBFBD><6E><EFBFBD>f<EFBFBD>?<3F><><EFBFBD><EFBFBD>(<28>@<40>j<EFBFBD>.F<>f<EFBFBD><66><EFBFBD>BsӤ,Gis<69>m4<6D><34><EFBFBD><01>ܮ<12><><EFBFBD>D<EFBFBD><44>V<EFBFBD><56><EFBFBD><EFBFBD>ha<><61><EFBFBD>ѐ0aV<61><02><>T<EFBFBD>k<EFBFBD>0<EFBFBD><1A><>^<5E>sս!MM<4D>1 l<>f<EFBFBD><66>:iU
g`<60>4š<34>@<40><><EFBFBD>W4<57>j<EFBFBD>b(<17><>8<EFBFBD><38>[<1F><>kc<6B>u<EFBFBD><75>j<18><><<3C><0F>G2<47><32>/<2F><><EFBFBD>5:?6;<3B><><EFBFBD>X<EFBFBD>c<EFBFBD>M<EFBFBD><4D><EFBFBD>%b-u<1A><>7<EFBFBD>ÀL`<60><0E>N<EFBFBD><4E><EFBFBD><EFBFBD>5<1E>;1<>i<EFBFBD> <05>0lg<6C>V<01><>:<3A>ﲯg<EFB2AF><11><><EFBFBD>wG<77><47><EFBFBD>{7<>W<EFBFBD><57><EFBFBD><EFBFBD>f<1D>=<3D>m#|Z<>0<> <0B><><EFBFBD><EFBFBD>:<3A><>g<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><B?<3F><>0} ߒG<DF92><47><1D><><EFBFBD>}<7D><>s<>@KK<4B><4B><EFBFBD><EFBFBD>n<EFBFBD><03><>T;<3B><>m<EFBFBD><6D><EFBFBD><03><>]<5D>T<EFBFBD>a<EFBFBD>B<EFBFBD>]i<>
o<EFBFBD>@2<03>Q<EFBFBD> ,pM<0F>D>"u,(\*p<>|<7C><>?Aj5;<3B><><0E>>ZO <0B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><06>:@<40>D<EFBFBD><44><EFBFBD>u<EFBFBD>f<EFBFBD>sڡ<73><DAA1><EFBFBD><06><><EFBFBD>n<EFBFBD>m<10>V<EFBFBD>^<19><><1F>o<EFBFBD>$ze;<04><><EFBFBD>^<5E><>ۭ<EFBFBD>~<7E><>٪<EFBFBD><D9AA><EFBFBD>y<EFBFBD>#r<><72><17> <09><>0<EFBFBD>_<EFBFBD><5F>ƿ<EFBFBD><C6BF><EFBFBD>0&*5Z <20><1C><>k<EFBFBD><6B><EFBFBD><7F><EFBFBD>'<27><>Z<EFBFBD><5A>o5=<3D>"<0E>{<7B>Ӏ<EFBFBD>^<5E>Zæ1^<5E><>*@<40><><EFBFBD>j<0F><>f<EFBFBD><66>i<EFBFBD>U_a<5F><61><17>D<EFBFBD>si<73><69>w<EFBFBD><77><0F>k7a<37>Iu<><75>t<EFBFBD>Sx
Z<EFBFBD>"<22>:j<0F>c<EFBFBD><63> <09><><EFBFBD>U<EFBFBD>s<EFBFBD><02><><EFBFBD>W§<><C2A7>Xb<58><62>]K.<2E>O2<4F>
<12><><EFBFBD>t&<26><06>
<08>$<24><><1A><>}v<><76><1F><><EFBFBD>?|:<3A>_<EFBFBD><5F>쟰(<28><>Ï<EFBFBD>B<EFBFBD><11><><00><>h@S<><53>^<0F>NAK<41><07><16><><EFBFBD><EFBFBD>7uΪmX<6D><58><EFBFBD>g5<67><35><EFBFBD><EFBFBD>q<EFBFBD>w<>)g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<>A<EFBFBD>P<><50><EFBFBD>w<EFBFBD>V<EFBFBD><56>'D<><44><EFBFBD><EFBFBD>A<>_<EFBFBD><1C>YK<59>0h<30>fz%<25><05><11><>)V<>|<7C><><EFBFBD>:<3A><><EFBFBD><EFBFBD>O+<2B>;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z=<1C><><EFBFBD>݁
<09>}<7D>Vm4D<34>d<EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD>S03<30><33>ի<D5AB><7F><EFBFBD>ov<6F>ZR8u<00><>_<EFBFBD><5F><EFBFBD>(<07><><EFBFBD>Rg<52><67>w<EFBFBD>?X<><58>y :<1F><>W<7F>#<23>2<EFBFBD>8T<38><54><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><19><1F>?O<><0E>3~<7E><><EFBFBD>ֿ<EFBFBD>
_dbUW<EFBFBD><EFBFBD><0E>Z<EFBFBD>L<16>txL<><13><1D><>ϒ)<29>'<27><>N<>hUk<55><6B><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67>_g<5F><67>Ba<42>o<EFBFBD>b<01><> <0C><><EFBFBD><EFBFBD><06><><EFBFBD> <20>~+<2B><>
<EFBFBD><EFBFBD>o<EFBFBD>
<EFBFBD><EFBFBD>?<3F><>/<2F>
4<EFBFBD>Ok<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD>? <20><07>V<EFBFBD><56>?b\T<><54><EFBFBD>ΆS<17>jۥ<6A><DBA5><EFBFBD><1A>O_î<5F><C3AE>#<23><><EFBFBD><EFBFBD>%%9<><39><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>K<EFBFBD><4B>U<EFBFBD><55><0E><>
ѳ{<7B><><EFBFBD><EFBFBD>H<7F><48>m<17>n<EFBFBD><6E><EFBFBD>[<5B><>!݂a<DD82>w<EFBFBD>n<EFBFBD><6E>u<EFBFBD><75>fT<66><54>C<EFBFBD>'<27><>{<7B><1F>1<11><><EFBFBD>Q<EFBFBD><51>$<24>k<6B>J+<2B>ю<><D18E><EFBFBD><EFBFBD>]k<06><>Mݘ<4D><DD98><EFBFBD>0<EFBFBD><30>s\mJ <0C>g<EFBFBD>ڰ{<7B>|/t'<16><><EFBFBD>3`<60>@<14>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><19>j<EFBFBD>;$<24><>j<EFBFBD><6A>n
<EFBFBD>|4<><34>U<EFBFBD><55>oVw<56><77><EFBFBD><EFBFBD><EFBFBD>`<60><>:<3A><><EFBFBD>nX<7F>V<EFBFBD>
͋<EFBFBD><19>Y1<59><31><EFBFBD>YA<59>MJ"jκ<6A>ΐ,JvM<13>5<EFBFBD><35><1A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/F<<3C>$<24>V<EFBFBD>u<EFBFBD>U<07>1"ru9}<7D>{<7B>D<EFBFBD>ll<6C>M<>h<EFBFBD><68><EFBFBD>;m<>Yw<59><77>.<2E>ג<EFBFBD>q<EFBFBD>m<EFBFBD><6D><EFBFBD>T<1C>(<28>vBOKW<4B>0<EFBFBD><30>4<EFBFBD> <18>T;#ܺ;<3B><><EFBFBD><03>j;r<><72><EFBFBD>Wm4 <0C>tX<74><58><EFBFBD>/+K zݡ<7A>^<5E><>b"+Äk<C384><6B>Jje<6A>VT<56><54><EFBFBD>o<><1E>wG<77>n<EFBFBD><6E>:6<><06> &<26>c <1C><>t<EFBFBD>_<EFBFBD><5F>0<EFBFBD>A=<3D>nu[<5B>.n<><6E>k<EFBFBD><6B>E<EFBFBD>-<2D><>s<EFBFBD>^<5E><><EFBFBD><EFBFBD><07><>Q<EFBFBD>xd-kV<19><><EFBFBD>A<EFBFBD>
ӷ<EFBFBD><1F>m5<6D><03><1C>+V_<>q<EFBFBD>[<5B><>J<EFBFBD><4A>u<EFBFBD><14><>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>Bijr_<72>B<EFBFBD>UUV<55><56><EFBFBD>|<<3C><>m<EFBFBD><6D>l<EFBFBD>!<21>x<EFBFBD>l<EFBFBD>F<EFBFBD>ac3<63>y|<7C>ٱ<EFBFBD><D9B1>K<0E>DD<44>0<EFBFBD><30>QU`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>xr<78><72>Od<4F><64><EFBFBD><EFBFBD>h<EFBFBD>v<><76><EFBFBD><EFBFBD><03>3<EFBFBD><33><EFBFBD><EFBFBD>W<EFBFBD><57>j4<6A>Zkwʻ<77>}^<15>k<17><>6/<2F>U<EFBFBD><55>X<><58><EFBFBD>h_<68><5F><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>&<26><><EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>uC<75><43> ;t+_<>C<EFBFBD>fsYѥf<D1A5><66>2)-<2D><>K<EFBFBD>=<3D><>=<3D>ej<65>,e<><07><><EFBFBD><EFBFBD>\Ϫ\{5<>qj/<2F><>7Xp<58><70>1V9<56><39>{pV<70>C<03>
Ίe<EFBFBD><EFBFBD>4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD>j7<6A><37><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>0u? v Kߵfc <0C><>u<EFBFBD><75>ҿCC<43>p<EFBFBD>{<7B><>o<EFBFBD><1C><>d<EFBFBD><03>)<29><>m6<6D><36><EFBFBD>3xk#<23><><EFBFBD>w].T;<3B>VV<><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD><EFBFBD><EFBFBD>4Ãa<C383><61><EFBFBD><EFBFBD>[{
<0F><>!<L<><4C><1C>`r<><72><EFBFBD><EFBFBD><EFBFBD>E7"<02><<3C><><EFBFBD>D<EFBFBD>$<24>&<26>4<EFBFBD>Z<EFBFBD>]<5D><><EFBFBD>4/<2F><><1E><><EFBFBD>7<7F>=<3D>Zx|Qo<51>z <20><>Q<EFBFBD>/H<><0F><><EFBFBD><EFBFBD><EFBFBD>ʺéRc<03>ĕ<EFBFBD><C495>&a<><61>j<EFBFBD>5<EFBFBD><35><EFBFBD>"0<>L!:YV<16>6<EFBFBD><36>-#`<60>M嗉#<23>&<26><><EFBFBD>Mk<4D>͍<EFBFBD>auh<75><68>9l@&<26><><EFBFBD><EFBFBD><EFBFBD>Ю<EFBFBD>=S?(<28><>L<><4C>t&H<> <0C>D<01><>dK<64>LN
@Y<><59> k<><6B><07>F<EFBFBD><46><EFBFBD>f<EFBFBD><66>i<04><><EFBFBD><EFBFBD><0F><11>qA<><41><EFBFBD>.<2E>b<EFBFBD>u`S<><53>e|<7C>31<><31># <20>Qw[<5B><08><>YlHż<48>^g[<5B>[<5B>݅<EFBFBD>y<EFBFBD>U<1C>R<>\<5C>7w;<1F><>gu$<24>Xm<58><6D>c3<63>n`<60>
9<EFBFBD>l(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD><51><EFBFBD>zUoaV0<56>a<7F><61>[<5B>.o<>H;<3B><><EFBFBD><7F><EFBFBD>`<06><0F>-h<> ZЦOd<4F><01>VӤX<D3A4>eե<65>-<2D><>]Ǿֻ<C7BE>F<EFBFBD>ac<19>S'ݡ<>=SE*<2A>x1S<31><53><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73>s<>M<EFBFBD>7<EFBFBD><37>h<1B>Ҿ<EFBFBD>K<EFBFBD>a<EFBFBD><61>k<1D>X<EFBFBD>E<EFBFBD><45>-r<17>En<45><EFBFBD>_:<3A><00>jW<6A>ڟ1,Z<><5A> )
<1B>[WpS<70>S<EFBFBD><53><EFBFBD>M,1\:<3A> @-<2D><>E.
<EFBFBD>'<27>heo<65><6F><EFBFBD>9P<39>V<EFBFBD>I2
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> w<><77>nu<6E><75><EFBFBD><EFBFBD><13><><EFBFBD><EFBFBD><EFBFBD><06>S<EFBFBD><53>5<EFBFBD><35>[K<><4B>M<><4D>?<3F>
<1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><47>W<EFBFBD>W<EFBFBD><57>~Y$<24><>^<5E> <09>4<><34>}<7D><>`^<5E><>U0:nG[?`<60>y<EFBFBD>n<EFBFBD>o<EFBFBD>MA<4D><11>?<3F><>0J1<4A>T<EFBFBD>Iq<49><71><EFBFBD>Z<EFBFBD><5A>*<2A><>f<EFBFBD>[<17>|<7C><><EFBFBD><EFBFBD>W<EFBFBD><57>n6<1B><><EFBFBD>$u<><75>α>ɜ<18>o<EFBFBD>3<7F>Ѡ <09>H<1F>i<EFBFBD>E><3E>G<>I<EFBFBD>a<EFBFBD>(<28>a <0C><>I<08><><EFBFBD>Ǩ<EFBFBD>w<EFBFBD><07><><EFBFBD><EFBFBD>G<EFBFBD><47>7<EFBFBD>nw<6E><77><EFBFBD><EFBFBD><EFBFBD><0F><>^<18><>
z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
T<><1A>D<><44>CE~3<>s<EFBFBD>f<EFBFBD> <0C><>/<2F><><EFBFBD>\<5C>d<1B>5<7F>ݞw i<>><3E>ߥ<EFBFBD><DFA5><EFBFBD><EFBFBD>[<5B><>w ^<1B><><EFBFBD>bT<><54><EFBFBD>X <20><>i<EFBFBD>GU<47><55>ι<EFBFBD>7<EFBFBD>(<28>.<2E>erg<>76<37><36>q<>z<EFBFBD><7A>Fs<46><73><EFBFBD><EFBFBD>9om[M<><4D>r<EFBFBD>Ij?<3F><><EFBFBD><EFBFBD><01>`<60>űy`<60><><EFBFBD><EFBFBD>'q<>zT[
<EFBFBD>`<60><>x<EFBFBD>aU}<7D><>ar<61><EFBFBD><EEA4B7>o$<24><>f<>
<EFBFBD>F֚<46><D69A>J|v<><76><EFBFBD><EFBFBD><0E>zڮ<7A>+c<10>Iwf<77>*<2A>x3<78>!c<>6@5]<5D><>Y<EFBFBD>o<EFBFBD><6F><0E><>v<EFBFBD><76><EFBFBD><1B>T<EFBFBD><54><19><>JC<4A>c<EFBFBD><63><08>^<><C290>=<1F><>*<2A>u<EFBFBD><75>k<EFBFBD><0E>B<EFBFBD>
f<EFBFBD>6<EFBFBD>Xq<EFBFBD>L<EFBFBD>SI<EFBFBD>M?<1F>,b<>(k f<>9-߰
<EFBFBD>fiT.k<>W<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>J` <1C>z}.<2E><>/<2F><>Ԫ<EFBFBD><D4AA>ې<EFBFBD>U<10>U<EFBFBD>T{<7B><>˫2<CBAB><16>Н<EFBFBD><D09D><EFBFBD><EFBFBD>ͭ<EFBFBD>ޕ<EFBFBD><DE95><EFBFBD>ͬ<EFBFBD><CDAC>0<EFBFBD>h{HDZ<44><5A><EFBFBD>v\<5C>!<21><1B>j<EFBFBD>,<2C><>Fk<00><><EFBFBD><EFBFBD>v<1B>譨<><E8ADA8><EFBFBD><EFBFBD>4?<3F><>><3E>C<EFBFBD><43><EFBFBD><EFBFBD>~<7E>"<22>Khm<68>NvX<07>%T|V<><56>h<EFBFBD>Q k5<6B><35>O<EFBFBD>@<40><>1<EFBFBD><31>g<EFBFBD><67><EFBFBD>[
<EFBFBD><EFBFBD>%;nY<6E><59> <0B><>c<01><><EFBFBD><EFBFBD><EFBFBD>ag<<3C>UԖLޣ<4C>Z<EFBFBD>nxT<78>%<25>+<2B>OT<4F>F<EFBFBD>C<EFBFBD>n<EFBFBD><6E>&qH<71><48><EFBFBD><EFBFBD><EFBFBD><1A><><EFBFBD><EFBFBD><EFBFBD>E8<45><38><1E> <18>K <09><>><3E><><EFBFBD>x<EFBFBD>V<EFBFBD><:<3A>x<EFBFBD><1F><>j<EFBFBD><6A> <20>[򤚧<>Q<EFBFBD><51>5<EFBFBD><35>u<EFBFBD>2<19>m<EFBFBD>….<2E>׍<EFBFBD>S<EFBFBD><53><EFBFBD><EFBFBD><EFBFBD>)<16>[<5B><><EFBFBD><EFBFBD>A<17>5F;%*<2A><><EFBFBD>{m+<2B>m<EFBFBD><6D><EFBFBD>nN<03>fw<66><77>4U<>v<EFBFBD>.<2E><>[<5B><><EFBFBD>F5<46><35><EFBFBD>Z<EFBFBD>6<EFBFBD>g<EFBFBD><67>{S<>i<EFBFBD>`<60><><EFBFBD><EFBFBD>~<7E><><EFBFBD>!ɲ<>;<3B><>{<7B><><EFBFBD>
<EFBFBD><EFBFBD>0<EFBFBD><15>"!Dc_<63>qQP`d<>3<1F>8\V<>n<1E><><EFBFBD>굛<EFBFBD><16><><EFBFBD>S#<23>ȝ<EFBFBD><11><>s<00><><EFBFBD>˯<> <0B>^UĪl<C4AA><17><><EFBFBD>6<EFBFBD>
<EFBFBD>rc3V<EFBFBD>\ aj<61>C<EFBFBD>M<EFBFBD>0<EFBFBD><30><EFBFBD>&<26><1B><><EFBFBD><07>h<EFBFBD>-E<>*<1E>pங<19><00>+oR<6F><1C>^<5E>[<5B>|<1C>&a<><61>!<21>0<>o:TLj<4C>#ܫ~<7E><>k<EFBFBD>{<7B><><EFBFBD><EFBFBD>>A<16><><EFBFBD>a<>uh<>I<EFBFBD><49><EFBFBD>lvƒ<76><C283>ȍ<EFBFBD><>K<18>V<EFBFBD>:<3A>b-<2D><>X<EFBFBD>è<EFBFBD><C3A8><EFBFBD> <><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=X<><58><EFBFBD>N<18>|CPSp<1F>V<07><><1C><>0 <20>?<3F>@<07><>.<2E><>7<EFBFBD>-<2D>ĭ<EFBFBD><C4AD><EFBFBD><EFBFBD>0<EFBFBD> <0B><>n<EFBFBD>i4<69>`T<><54><EFBFBD>t<><74><EFBFBD>7<EFBFBD>Pl<1D><>Z<>}7з<06>Q<EFBFBD> <0B><><EFBFBD><EFBFBD>s<EFBFBD><73>@<40><><EFBFBD>/<2F>\<5C>EwM<77><1E>+]!vc,<1A><04><>Q5<51>g] <20><><EFBFBD><EFBFBD><EFBFBD>
m=<3D><>^<5E>#S<><53>h<EFBFBD>f<EFBFBD>骟<05>R<EFBFBD><52><EFBFBD>XS<58><53><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD>nah<><68><EFBFBD><10><03><1A><><EFBFBD>X.<2E><><EFBFBD>]<5D>GU.<2E><><EFBFBD><12>G<EFBFBD>8<EFBFBD><38><EFBFBD>^<5E><><EFBFBD>t<EFBFBD>_y/_<><5F><EFBFBD><12><><EFBFBD><06><>S<EFBFBD><53>"<22><><EFBFBD>(k<><6B>]<5D><>!<21>ht<68><74><EFBFBD>t<EFBFBD>z0i<00><> <0B>Vҳu<D2B3><75>$9<><39>><3E><1F><>hvkݿ<6B> %<25><>#S<><53>%ߺ<>
6J<EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><EFBFBD>;6m
T<EFBFBD><EFBFBD>i<10><>A<06><><EFBFBD><EFBFBD>5<EFBFBD>t<00>ql<71>c2<63><32>)<29>Gu<>wp<77>F<EFBFBD>^h<>0Ԃ<30><D482>zs<7A>đ<01><><EFBFBD>)<29><><EFBFBD><EFBFBD>O<EFBFBD><05><06>N<>p0<70><30>G<EFBFBD>zIPc&:<3A><><EFBFBD>4<EFBFBD><34><EFBFBD>͕U,ss|mq<6D>)Z<15>ۦ<EFBFBD><DBA6><EFBFBD><01><><EFBFBD>p\<07>O%<25>s<16>qm<71><6D><EFBFBD>xKv<04>[\h<>ϡ4<><34><EFBFBD>.q@<40>(<28>2<EFBFBD>8<<3C><15>=D&<26><><EFBFBD><EFBFBD><EFBFBD>֩<EFBFBD><D6A9>*=A<04>+!ȕ<><C895><EFBFBD>l<EFBFBD><6C>.]q<11><><EFBFBD> Y<>2J<32><4A>rdċ<64>pQW$o<>Y<03>}<7D><>v<EFBFBD><76><EFBFBD><7F><1A>
<EFBFBD><EFBFBD><05>5ƁZ<C681>c<EFBFBD>O<EFBFBD><4F>X<EFBFBD><58>X<EFBFBD><58><EFBFBD>?<3F>-ݣºty<74><07>ꭁ<EFBFBD><0E><><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>7<EFBFBD>+^<5E><18><>8><3E><>xU<78>9L<39>/<2F>
R<EFBFBD><EFBFBD>ƌ<EFBFBD>_<EFBFBD>4<EFBFBD><EFBFBD><EFBFBD>HT4<15><>0+<2B>z<EFBFBD>ί<00><><EFBFBD>=+M<><14>]<5D><>}<7D><0F>><3E><><EFBFBD>P<EFBFBD><19>d<EFBFBD> @4<>pt<70>i<EFBFBD><69><10>;+<2B>s<EFBFBD>,G<> <20>ѳy<D1B3><16>e<EFBFBD>/<2F>|:Av/ Y<><59>D<EFBFBD>#<23><>[<5B>[&<26>}SK <09><>q"<22><>9<EFBFBD><39><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>y<>.o_
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD><EFBFBD>.<2E>o<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>3<12><>7#<23><><EFBFBD><05><>ķ<EFBFBD>6"<22><><EFBFBD>\d<><64><05><>ޓ<EFBFBD><DE93>h<EFBFBD>2<EFBFBD>z|W<>$<24>cIHm<48>G ~5R<35><52>+ip <0C>+~)ۧo[r>+g<><0F><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD>mM<><4D><EFBFBD>Y<EFBFBD>]<5D><><1C><1C>[<5B><><EFBFBD><EFBFBD>d<EFBFBD><64><EFBFBD>ܔ<EFBFBD>OB<><42>|U<7F><55>ݬ<EFBFBD>+<2B><><EFBFBD><EFBFBD>F^<08>9$<1A>_<EFBFBD><5F>DVo^"<22>l"<1B>ד<EFBFBD>د,<2C><>"<22><>
5k}<7D>#<23>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SV/<2F><>ry<72><79>^"o<>z<EFBFBD><7A><1E><><EFBFBD><1B>h]<5D>^<5E><>_o<5F>ۤ<EFBFBD><DBA4><EFBFBD>@<40><>_<EFBFBD><5F><EFBFBD>*@<40>A<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><05><>$<24>n<EFBFBD><1A><>|d<>r%;<3B>o<EFBFBD>E<EFBFBD><10>Ni<4E><69>ݓo<DD93><6F><EFBFBD><EFBFBD>q<EFBFBD>
<EFBFBD><EFBFBD>Y+<2B>~}<7D><>^?;Ŗӡ<C596><D3A1><EFBFBD><EFBFBD>O<EFBFBD><4F>ge<67>+<2B><><EFBFBD>G~<7E>@l<><6C><EFBFBD>~<7E>"NXk<58><6B>T<EFBFBD><54><1E>I>6<36>kWV@cA<<3C>I睰<49>o<EFBFBD>g:7<>X<EFBFBD><58>]|<7C>~zl<7A><15> <0C><>/<2F><>؂U(<28><>v<1C><><EFBFBD>:<3A>ئ<03><><17><>~rI<72>"<22>Y<EFBFBD>;<3B><17>X_<>l<EFBFBD><6C><EFBFBD>KW<4B><14><1E><><EFBFBD>V<><56>Z<EFBFBD><5A>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4ڪ <20><><EFBFBD><EFBFBD>F<EFBFBD><46>Ƕ<03>J<EFBFBD><4A>P<EFBFBD><15>Q<EFBFBD>lyقUU<55>_{+<2B><> F<><46><EFBFBD><EFBFBD><EFBFBD>Ε֝j:S^m<><6D>l<EFBFBD>]<5D>a4dh<17><><EFBFBD><EFBFBD>]w<><77><EFBFBD><EFBFBD><EFBFBD>`<60><>ya<79><61><EFBFBD><10><>Y<EFBFBD><59><EFBFBD>a<EFBFBD><61><EFBFBD>׶V":<3A><>M<EFBFBD><4D><EFBFBD><EFBFBD>2<>X<EFBFBD><58>G<EFBFBD>|<7C>qf<71>u<EFBFBD><75><EFBFBD>[TN<54><4E><16>L<EFBFBD><08>n<EFBFBD>Ё<EFBFBD><D081><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֦<>w><3E>`<60>ד[a<>+u<><75><EFBFBD><02>L<EFBFBD>:y<><79>^e
<EFBFBD>}"j<><6A><EFBFBD>|<7C><>"XKO_eև-<2D>r<EFBFBD><72>늁<15><><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD><64><EFBFBD>b<EFBFBD>U<EFBFBD>|<7C>7<1D>f<EFBFBD>K/5'<27>/<2F>i<EFBFBD><69><EFBFBD>ƌX<C68C>z<EFBFBD><7A>p<EFBFBD>Lv<4C><76>X/<2F><><EFBFBD>#<23>ʞr<CA9E>X<EFBFBD>4<14><>"\\<5C><1C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nj-<2D>a<>r<EFBFBD>z<EFBFBD><I}<7D>Eڮ<45><DAAE><07><><EFBFBD><EFBFBD><EFBFBD>=<3D>Jn<4A>&9ٶ<39>z<EFBFBD><7A>Y<EFBFBD>`<60>h4ķ<34><C4B7><EFBFBD>y'<27>-<2D>au<61><75><1E><>A<EFBFBD>W<EFBFBD><57><12><><EFBFBD>\<5C>C4<43><34><EFBFBD>Zk/:`}<7D>^^v{<7B><><EFBFBD><EFBFBD><EFBFBD>
LN+.k<06>7<EFBFBD>.<2E><>u<EFBFBD><75>e%e<>u#<12><><EFBFBD>g_<67>5>6yN<79>$<24>\v<><0E><>~<7E>j$vn4<6E>_<EFBFBD> ֟<><D69F>w<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><1D><10>*<2A>j<EFBFBD>t<>^<5E>O[<5B><17>ug`%r<><72>'hX<68><58>q<EFBFBD>z<EFBFBD>(,<2C><><EFBFBD>#=<0F>͂<><19>T<EFBFBD>.#⤥<><E2A4A5><EFBFBD><EFBFBD>bd<62><19><><03><><EFBFBD>*7S<37>[<5B>u[<JX<4A><58>]^QA!o_W*dY3K<>ND* <0C><>U#<23><><EFBFBD><EFBFBD>뮸<EFBFBD>X#V
<EFBFBD><EFBFBD><EFBFBD>8[<5B>ξ<EFBFBD>U<EFBFBD><55><EFBFBD>;xw<78><10><> Ƿ<><C7B7><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD>R<EFBFBD>X<08>+<08><><EFBFBD>*<2A><>rl<72><6C><EFBFBD><EFBFBD>?<3F><>7<EFBFBD>UF<55>\\<5C>Zޚ<19><>x<EFBFBD>;~i<69><7F>U<16><>o<EFBFBD>NG_<47><5F>?<3F><><EFBFBD><EFBFBD>\<5C>~<7E><><EFBFBD>o<EFBFBD>.<2E><><1C><>*<2A><><EFBFBD>[<5B><><EFBFBD><EFBFBD>e<EFBFBD>u懽}<7D>N7<4E><37><EFBFBD>0<EFBFBD><30>5<13>v<EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD><53><EFBFBD><EFBFBD>g<EFBFBD><67>-<12>A}<7D>;<><7F>=u~<7E>U<>\<5C>~<7E>49<34><39>U<EFBFBD>%k<7F><6B>sQ<73>IT<49><54>n&݈߯&<26>s<EFBFBD><73><EFBFBD><EFBFBD>ɖ<EFBFBD>u~{<7B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD>^<5E>ձBd)^P<><50>׾<EFBFBD><D7BE><EFBFBD><EFBFBD><EFBFBD>{[<5B>J<EFBFBD><4A>$<14>9<EFBFBD><39>U<EFBFBD>oH<6F><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D>xc<78>:<3A>ߎ;<3B><><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD>K,<2C>S<EFBFBD><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>eq;~y<>MD<4D>F<EFBFBD>k<EFBFBD>l'5\.<2E><><EFBFBD><EFBFBD>
X<1C><><EFBFBD>30<>̉N<CC89>$<24>O<EFBFBD>6k1<6B><31><EFBFBD>,<0E>&!ڟ<><DA9F>7<EFBFBD><12>1ts<73><7F>uk^^&<26>&5<><35>
<EFBFBD><EFBFBD>&] u<><75>,<2C><>z7"<22>P<>}<7D>+,k<>#V<>,<2C><1C>a<EFBFBD><61>:<3A>C<EFBFBD><43>س<EFBFBD>f<EFBFBD><66><EFBFBD>?9b<05><>';cݛ<DD9B>634<33><34><EFBFBD><EFBFBD><EFBFBD>A-<2D><><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><1B><18>U<EFBFBD>\<5C>)|<7C>J<1C><><EFBFBD><EFBFBD><<3C><>T<EFBFBD><54>rf<72><66>VلU<D984><55>E<EFBFBD><1F><>X<EFBFBD>س3ֹr5i<35>t<><1A><><EFBFBD>p<EFBFBD><70><EFBFBD>G<EFBFBD><47><EFBFBD><01><><EFBFBD>Vj<56>!⽅<>]w5"<22>i<EFBFBD><69><15>
PR<EFBFBD>NX/V<><56>-D>9<>qƊJ<C68A><4A><EFBFBD><16><><EFBFBD><EFBFBD>+<2B>i`+<2B><>1p<>* <20><><EFBFBD><EFBFBD>]<5D>z<EFBFBD>ƨJt8Ct<43>H<><1F><><EFBFBD>eB<65><42><EFBFBD><EFBFBD><EFBFBD>/2<05>r{wiy[8@<40><>_<1C><><EFBFBD><EFBFBD>U<EFBFBD>O!<21>R<EFBFBD>]<02>S <0B>.<2E>YtUc<55>|wpB<01><><EFBFBD>&(<11><05><>ψ<EFBFBD><CF88><EFBFBD><EFBFBD>&<26>h<EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD>mv<6D><76>P<EFBFBD>U<EFBFBD><55><EFBFBD>s <00>Cuq<75><71><EFBFBD>Ջ6<D58B>4M<1C>X<EFBFBD>P<1F><><EFBFBD>Ck<43>s<><73><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>u<02>ع
<EFBFBD><0F>E<EFBFBD><45><EFBFBD><EFBFBD>Oh<4F><68><00><><EFBFBD>Ң<EFBFBD>g<EFBFBD><67>ki<6B>x<EFBFBD><78><03>6͋<36><CD8B>"<22>T<EFBFBD><54>G޽<47><DEBD><EFBFBD><EFBFBD>#<23>v<EFBFBD>t<EFBFBD>Hx<48><78><EFBFBD>O<EFBFBD><4F>h<EFBFBD><68>F<0F><>&<26><>֏*:<3A>8<EFBFBD><10>x<EFBFBD><78><EFBFBD><EFBFBD>e MNHcq<><71><EFBFBD>&<26>MQ'<27>;<3B>&<26><>n<18><><EFBFBD><EFBFBD>Mzق4<1A><>׭4_<<3C>Kσ= <0B><>_ 8<38>'}<7D> <20><><EFBFBD>i.<2E><EFBFBD><7F>fao<61> <0B><>I<EFBFBD>e<EFBFBD>B<EFBFBD><42><EFBFBD><15>*)ļL<>k$8"<22><>}
<EFBFBD>3bo-<2D>g<EFBFBD>%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06><>Ks^G<> <20><>Wu<57>Y<EFBFBD>-<2D><><EFBFBD>R<EFBFBD><52>G<EFBFBD>#;9<>0=<3D><>Ϧs<CFA6>9K<39><1C><>G<EFBFBD><47><EFBFBD>Ώ<EFBFBD>h<EFBFBD>["s<><73><EFBFBD><EFBFBD><11>Q<EFBFBD><51>O6<4F>~<7E>-i,`<60><><EFBFBD><EFBFBD>b<EFBFBD>蒙u <09>E<EFBFBD><45><EFBFBD><EFBFBD>hb<68>%<25>s<EFBFBD>֛qf) <09><><EFBFBD>} <20><><11><>i<EFBFBD><69>Y<EFBFBD>G5<47><35><N<><4E>S<EFBFBD><53>=<3D><>C<EFBFBD><43>U9ܠY&`un/n<><6E>e<EFBFBD>`<60>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD>5i<35>>S<><53><EFBFBD>U<EFBFBD>G<EFBFBD><47>d<EFBFBD><64>񆉡<EFBFBD><F18689A1><EFBFBD>sޣJ<DEA3>\<5C><><EFBFBD>1)[<5B>!?6<>Ž<EFBFBD>^<5E><><EFBFBD>V<EFBFBD>c<EFBFBD>|[<5B>;<3B><1C><><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD>V<EFBFBD><56>i<EFBFBD><69>BuHӰ<48><D3B0>kg<6B>",<2C> <20>X<EFBFBD>ƞ<EFBFBD><C69E><EFBFBD>U<EFBFBD>W<12>UI<55><49><EFBFBD><EFBFBD><1D><>T<EFBFBD><54>lT<6C>濌,˔<><CB94><EFBFBD><EFBFBD>*o<>j<EFBFBD>*<2A><><EFBFBD><EFBFBD>b,<2C><>/<2F>ج<EFBFBD><D8AC><EFBFBD>깣7<EAB9A3>O<EFBFBD><4F><EFBFBD>q<EFBFBD><71>N/<2F><>뼘c<><63><EFBFBD><EFBFBD><EFBFBD>PE<50>k<18><18><16><><EFBFBD><EFBFBD>X<>u<EFBFBD><75>G<>$<24>73<37><33>r<04>t<EFBFBD> Є<>M<>]7<><37>M<><4D>h<EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75>/4<><34>%G<><47>ch/<2F>Y<EFBFBD><59>5<EFBFBD>B<EFBFBD>Q<EFBFBD>u<EFBFBD>i<EFBFBD><69><EFBFBD>o<EFBFBD><6F>~z~<7E><>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>p{!<21>9}<7D><><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>қ<>d<EFBFBD><64>&!<21>Ь<EFBFBD>^<5E>4$.<2E>{<7B><><<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><18><>x<EFBFBD>`<60>%<25>Z'4ƢuN<75>:e<>F<EFBFBD>/<2F><11><><EFBFBD><EFBFBD>͚<EFBFBD>O|<7C><><EFBFBD>h<><68>c<EFBFBD><63><1E>@nG<6E>}<7D><><EFBFBD><05><>σ<EFBFBD><CF83><0F><>5<1B><07><11>ׁ<EFBFBD>
<EFBFBD>b<EFBFBD><EFBFBD><EFBFBD> 
<EFBFBD>rK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><EFBFBD>m<EFBFBD><16><>OQڃ<>`<60><>#2ņQ<C586><51>ѥ<EFBFBD><D1A5><10><><EFBFBD>7W<37><57><10>Q<EFBFBD><51>{<7B><>2<EFBFBD><32><EFBFBD>@<40><15><>P <1C>vRx_<78><5F> <0B><>p0<70>a
<0C>'<27>lxLN/ŝ#<23>E<EFBFBD><0F><>&<26>#G m<><6D><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>\o<>m<EFBFBD>9<EFBFBD><39>8g<38><67><EFBFBD>y<EFBFBD>O<EFBFBD>t<EFBFBD>֢ v<>A4Am<41>C<EFBFBD>ro<72>0<EFBFBD><1D><> <0B><><EFBFBD>Y<EFBFBD><59><EFBFBD>sJT<4A>޾ǖXWj'G<15><0E>`<60><><EFBFBD>율K<EC9CA8>٪<>N<EFBFBD>$:${<7B><>|<7C>-k^<5E>y_<79>>pV<70><56>v<EFBFBD><76> <09><>ޱ
&<26><>Y<EFBFBD>NY<4E>l<EFBFBD><6C><EFBFBD><1D>5mO j<><6A>}<1D><><EFBFBD>7<EFBFBD><37><EFBFBD>9nk<6E><6B><EFBFBD>6N<36><4E><EFBFBD><EFBFBD>e?la֒:<3A>6<EFBFBD>y<EFBFBD>;2/<2F><><EFBFBD><EFBFBD>1<EFBFBD>=<3D>o_/<2F>Ӳ<EFBFBD>Y<08>|<7C>E<1D>d]<03><><EFBFBD><EFBFBD>nQ<18><><EFBFBD>7<>( *<2A><>b<EFBFBD>m<><6D>ܣ<EFBFBD><DCA3>ϑ<EFBFBD>}<7D><><EFBFBD><EFBFBD>e
9<EFBFBD>eN<EFBFBD><EFBFBD>0
<EFBFBD>M@<14><><EFBFBD>la<0E><>~`<60>wA<77>w<EFBFBD>CPk_<>Ƈ<EFBFBD><16>m<0E><><EFBFBD>w<EFBFBD><77><EFBFBD>8,<2C>ʂ<EFBFBD><CA82>.<2E>.<2E><04>y<EFBFBD><79><EFBFBD>^
<06>{*<2A>A1G
Q@S<>s(<28><><EFBFBD>d{<7B>] yh<79>]F'P<>.<2E><>P<EFBFBD><1D><>EŲ<><C5B2> 2<>Z<EFBFBD><5A>t<EFBFBD><74>!4a<34><61><EFBFBD>ٞm<>ki<6B><69>:R<><52>c<EFBFBD><63><EFBFBD><EFBFBD>𺩫t<F0BAA9AB><74><EFBFBD>K7(3K7 <0B><05>n<EFBFBD><6E><EFBFBD>_<EFBFBD>F<EFBFBD><46>~<7E>+<2B>jL.<2E>h TŇ<54><C587>G<EFBFBD><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*`<60>f <20><10>I<EFBFBD>9s<39>'<27> <20><>0<EFBFBD><30>M/<2F>
H7˞4<EFBFBD>usnl<04><><07>As<41><73>ѥ<EFBFBD><D1A5>@<40><>.=~ʼ<><CABC><EFBFBD>^<5E><><1B><><EFBFBD>@]{<7B><> <09>msX<02><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>}W<>xo<><1F><>>$M<> <20><><EFBFBD>l-<2D> <20><><EFBFBD><EFBFBD>S󀙠h
<EFBFBD>O@<40><>*<2A>}6<04><><EFBFBD><EFBFBD><EFBFBD>9c1Mc<4D><63>n<EFBFBD><6E><15><EFBFBD><7F><EFBFBD><EFBFBD>s]<1F>~<7E><>G( b{<13>9<EFBFBD><39> <20>R<EFBFBD><1A>(w#/<2F><><EFBFBD><EFBFBD><EFBFBD><1E><>s<EFBFBD><73><EFBFBD><EFBFBD>:W<>`<1A><>f<1C>۩<EFBFBD>:r<><72>q<EFBFBD>e
9h<39><68><EFBFBD>54<><34>?G<1F>v><00><>`6<><36> <0C>c}<7D>u_<1F>G<>h<EFBFBD><68>1a<31>><3E><>ur\<1C>

9
src/images/icons/leaf.svg Executable file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path d="M1.78,4.06c0,0,4.205-3.785,8.232-1.403c4.026,2.381,5.229,5.486,3.476,7.74c-2.023-3.173-3.096-4.701-7.327-6.003
c0,0,6.63,4.153,7.778,9.058c-0.175,1.047-1.152,0.289-1.152,0.289l-1.067-1.77c0,0-2.05,1.583-4.471-0.508
C3.144,7.916,6.444,3.951,1.78,4.06z"/>
</svg>

After

Width:  |  Height:  |  Size: 745 B

12
src/images/icons/list.svg Executable file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<line fill="none" stroke="#010101" stroke-width="1.8546" stroke-miterlimit="10" x1="1.729" y1="3.359" x2="14.323" y2="3.359"/>
<line fill="none" stroke="#010101" stroke-width="1.8546" stroke-miterlimit="10" x1="1.729" y1="7.938" x2="14.323" y2="7.938"/>
<line fill="none" stroke="#010101" stroke-width="1.8546" stroke-miterlimit="10" x1="1.729" y1="12.516" x2="14.323" y2="12.516"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 881 B

8
src/images/icons/local.svg Executable file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path id="local" d="M14.268,4.293H9.65L8.11,2.754H3.494v1.539H1.955v9.234h10.773v-1.538h1.539V4.293L14.268,4.293z M13.499,11.219
h-0.771V5.832H8.11l-1.538-1.54H4.264V3.523h3.529l1.539,1.539h4.167V11.219z"/>
</svg>

After

Width:  |  Height:  |  Size: 687 B

14
src/images/icons/mic.svg Executable file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<polyline fill="none" stroke="#000000" stroke-width="1.4173" stroke-linecap="round" stroke-miterlimit="10" points="
11.813,7.648 5.428,12.582 3.452,10.605 8.619,4.454 "/>
<path fill="none" stroke="#000000" stroke-width="0.8504" stroke-linecap="round" stroke-miterlimit="10" d="M4.46,11.611
c-1.803,0.971-0.776,2.625-2.844,2.625"/>
<circle fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" cx="11.535" cy="4.539" r="2.9"/>
<line fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" x1="9.484" y1="2.487" x2="13.585" y2="6.588"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

10
src/images/icons/music.svg Executable file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<circle fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" cx="12.286" cy="10.32" r="2.41"/>
<circle fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" cx="3.767" cy="12.32" r="2.41"/>
<polyline fill="none" stroke="#000000" stroke-width="1.4173" stroke-linejoin="round" stroke-miterlimit="10" points="6.177,12.32
6.177,3.144 14.696,1.144 14.696,10.32 "/>
</svg>

After

Width:  |  Height:  |  Size: 884 B

8
src/images/icons/no-image.svg Executable file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<line fill="none" stroke="#CCCCCC" stroke-width="0.1417" stroke-miterlimit="10" x1="4.167" y1="4.167" x2="27.833" y2="27.833"/>
<line fill="none" stroke="#CCCCCC" stroke-width="0.1417" stroke-miterlimit="10" x1="4.167" y1="27.833" x2="27.833" y2="4.167"/>
</svg>

After

Width:  |  Height:  |  Size: 735 B

11
src/images/icons/play.svg Executable file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<g>
<path d="M4.181,3.19l7.152,4.749l-7.152,4.748V3.19 M2.764,0.548v14.779l11.132-7.389L2.764,0.548L2.764,0.548z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 616 B

12
src/images/icons/playlist.svg Executable file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<circle fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" cx="8.068" cy="11.82" r="2.41"/>
<polyline fill="none" stroke="#000000" stroke-width="1.4173" stroke-linejoin="round" stroke-miterlimit="10" points="
10.479,11.82 10.479,1.644 14.495,5.661 "/>
<line fill="none" stroke="#000000" stroke-width="1.4173" stroke-linejoin="round" stroke-miterlimit="10" x1="1.558" y1="1.912" x2="7.692" y2="1.912"/>
<line fill="none" stroke="#000000" stroke-width="1.4173" stroke-linejoin="round" stroke-miterlimit="10" x1="1.558" y1="4.322" x2="7.692" y2="4.322"/>
<line fill="none" stroke="#000000" stroke-width="1.4173" stroke-linejoin="round" stroke-miterlimit="10" x1="1.558" y1="6.732" x2="7.692" y2="6.732"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

10
src/images/icons/search.svg Executable file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<circle fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" cx="6.63" cy="6.758" r="5.061"/>
<line fill="none" stroke="#000000" stroke-width="1.4173" stroke-miterlimit="10" x1="10.086" y1="9.78" x2="14.483" y2="14.178"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 735 B

26
src/images/icons/sections.svg Executable file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<rect x="2.018" y="2.128" fill="#010101" width="4.289" height="4.289"/>
<g>
<rect x="7.305" y="2.128" fill="#010101" width="6.678" height="0.851"/>
</g>
<g>
<rect x="7.305" y="4.128" fill="#010101" width="6.678" height="0.851"/>
</g>
<g>
<rect x="7.305" y="6.128" fill="#010101" width="6.678" height="0.851"/>
</g>
<rect x="2.018" y="9.211" fill="#010101" width="4.289" height="4.289"/>
<g>
<rect x="7.305" y="9.211" fill="#010101" width="6.678" height="0.851"/>
</g>
<g>
<rect x="7.305" y="11.211" fill="#010101" width="6.678" height="0.851"/>
</g>
<g>
<rect x="7.305" y="13.211" fill="#010101" width="6.678" height="0.851"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

21
src/images/icons/soundcloud.svg Executable file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path id="soundcloud" d="M0.027,10.945c0,0.197,0.072,0.347,0.215,0.447c0.145,0.104,0.298,0.139,0.462,0.108
c0.153-0.028,0.261-0.084,0.323-0.164c0.063-0.079,0.093-0.211,0.093-0.394V8.789c0-0.154-0.053-0.283-0.159-0.391
c-0.107-0.107-0.237-0.16-0.391-0.16c-0.147,0-0.275,0.053-0.382,0.16C0.081,8.506,0.027,8.635,0.027,8.789V10.945L0.027,10.945z
M1.736,11.865c0,0.145,0.053,0.252,0.154,0.322c0.101,0.071,0.23,0.108,0.389,0.108c0.165,0,0.297-0.037,0.397-0.108
c0.103-0.07,0.153-0.179,0.153-0.322V6.842c0-0.148-0.055-0.276-0.159-0.383C2.563,6.352,2.434,6.298,2.279,6.298
c-0.148,0-0.275,0.054-0.383,0.161c-0.105,0.106-0.16,0.234-0.16,0.383V11.865z M3.438,12.104c0,0.145,0.054,0.252,0.156,0.324
c0.105,0.071,0.238,0.107,0.402,0.107c0.157,0,0.288-0.036,0.391-0.107c0.101-0.072,0.151-0.181,0.151-0.324V7.518
c0-0.153-0.054-0.285-0.16-0.394C4.271,7.016,4.145,6.96,3.997,6.96c-0.154,0-0.285,0.056-0.395,0.164
c-0.108,0.108-0.164,0.24-0.164,0.394V12.104z M5.148,12.125c0,0.273,0.185,0.41,0.551,0.41c0.367,0,0.55-0.137,0.55-0.41V4.694
c0-0.418-0.128-0.653-0.38-0.707C5.707,3.948,5.545,3.994,5.387,4.129C5.228,4.262,5.148,4.45,5.148,4.694V12.125z M6.888,12.342
V4.256c0-0.259,0.077-0.412,0.23-0.461c0.333-0.08,0.663-0.12,0.989-0.12c0.758,0,1.463,0.179,2.118,0.535
c0.654,0.357,1.185,0.845,1.588,1.462c0.401,0.615,0.638,1.295,0.701,2.039c0.303-0.129,0.625-0.193,0.969-0.193
c0.69,0,1.285,0.246,1.777,0.735C15.754,8.744,16,9.334,16,10.021c0,0.693-0.246,1.287-0.739,1.776
c-0.493,0.49-1.085,0.736-1.771,0.736l-6.468-0.009c-0.043-0.016-0.077-0.041-0.102-0.082C6.898,12.406,6.888,12.371,6.888,12.342
L6.888,12.342z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

14
src/images/icons/spotify.svg Executable file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path id="spotify" d="M7.94,1.887c-3.389,0-6.16,2.772-6.16,6.162c0,3.391,2.771,6.161,6.16,6.161c3.388,0,6.16-2.771,6.16-6.161
C14.1,4.659,11.357,1.887,7.94,1.887z M10.773,10.789c-0.123,0.186-0.34,0.246-0.522,0.123c-1.449-0.893-3.267-1.078-5.422-0.584
c-0.215,0.061-0.399-0.094-0.461-0.279C4.306,9.834,4.458,9.65,4.645,9.588c2.34-0.523,4.375-0.309,5.975,0.678
C10.836,10.359,10.866,10.605,10.773,10.789z M11.514,9.094c-0.154,0.219-0.433,0.309-0.646,0.156
c-1.664-1.018-4.19-1.327-6.13-0.709C4.49,8.604,4.213,8.48,4.151,8.232C4.089,7.986,4.213,7.708,4.458,7.648
c2.25-0.678,5.021-0.34,6.933,0.832C11.574,8.572,11.667,8.878,11.514,9.094z M11.574,7.371C9.604,6.198,6.308,6.075,4.43,6.661
C4.121,6.754,3.812,6.569,3.72,6.292C3.628,5.983,3.812,5.676,4.089,5.583C6.276,4.937,9.88,5.06,12.16,6.415
c0.277,0.154,0.369,0.523,0.215,0.801C12.223,7.431,11.852,7.523,11.574,7.371z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

16
src/images/icons/star.svg Executable file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
<path d="M8.024,3.464l1.198,2.422l0.33,0.668l0.736,0.106l2.672,0.389l-1.936,1.888l-0.533,0.521l0.127,0.734l0.457,2.661
l-2.393-1.257l-0.659-0.348l-0.658,0.348l-2.394,1.258l0.458-2.662l0.126-0.736L5.021,8.935L3.081,7.05L5.76,6.66l0.735-0.106
l0.33-0.668L8.024,3.464 M8.025,0.79c-0.18,0-0.327,0.122-0.44,0.369L5.558,5.258L1.036,5.915C0.7,5.97,0.532,6.106,0.532,6.329
c0,0.127,0.074,0.271,0.225,0.434L4.036,9.95l-0.774,4.504c-0.013,0.084-0.019,0.144-0.019,0.182c0,0.125,0.032,0.23,0.096,0.318
c0.063,0.088,0.158,0.131,0.283,0.131c0.107,0,0.229-0.037,0.36-0.108l4.044-2.125l4.044,2.125
c0.127,0.071,0.246,0.108,0.359,0.108c0.12,0,0.213-0.043,0.275-0.131s0.096-0.193,0.096-0.318c0-0.079-0.006-0.141-0.012-0.182
L12.017,9.95l3.271-3.188c0.154-0.158,0.232-0.3,0.232-0.434c0-0.222-0.167-0.359-0.503-0.414l-4.522-0.657L8.469,1.159
C8.352,0.912,8.206,0.79,8.025,0.79L8.025,0.79z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -4,7 +4,7 @@
<title>Iris</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Archivo+Narrow:300,400,700" rel="stylesheet">
<link href="app.css" rel="stylesheet" />
</head>

19
src/js/components/Header.js Executable file
View File

@ -0,0 +1,19 @@
import React, { PropTypes } from 'react'
import Icon from './Icon'
export default class Header extends React.Component{
constructor(props) {
super(props);
}
render(){
return (
<header>
<Icon name={ this.props.icon } />
<h1>{ this.props.title }</h1>
</header>
);
}
}

15
src/js/components/Icon.js Executable file
View File

@ -0,0 +1,15 @@
import React, { PropTypes } from 'react'
import { Link } from 'react-router'
export default class Icon extends React.Component{
constructor(props) {
super(props);
}
render(){
var src = require('../../images/icons/'+this.props.name+'.svg');
return <img className="icon" src={src} />;
}
}

View File

@ -5,7 +5,9 @@ import { bindActionCreators } from 'redux'
import FontAwesome from 'react-fontawesome'
import VolumeSlider from './VolumeSlider'
import * as actions from '../services/mopidy/actions'
import ArtistList from './ArtistList'
import * as mopidyActions from '../services/mopidy/actions'
class Player extends React.Component{
@ -16,8 +18,9 @@ class Player extends React.Component{
renderTrackInFocus(){
if( this.props.mopidy && this.props.mopidy.trackInFocus ){
return (
<div>
<div>{ this.props.mopidy.trackInFocus.track.name }</div>
<div className="track-in-focus">
<div className="title">{ this.props.mopidy.trackInFocus.track.name }</div>
<ArtistList artists={ this.props.mopidy.trackInFocus.track.artists } />
</div>
);
}
@ -26,34 +29,34 @@ class Player extends React.Component{
renderControls(){
var playButton = <a onClick={() => this.props.actions.play()}><FontAwesome name="play" /> </a>
var playButton = <a onClick={() => this.props.mopidyActions.play()}><FontAwesome name="play" /> </a>
if( this.props.mopidy.state == 'playing' ){
playButton = <a onClick={() => this.props.actions.pause()}><FontAwesome name="pause" /> </a>
playButton = <a onClick={() => this.props.mopidyActions.pause()}><FontAwesome name="pause" /> </a>
}
var consumeButton = <a onClick={() => this.props.actions.instruct('tracklist.setConsume', [true])}>Consume </a>
var consumeButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setConsume', [true])}>Consume </a>
if( this.props.mopidy.consume ){
consumeButton = <a onClick={() => this.props.actions.instruct('tracklist.setConsume', [false])}>Un-Consume </a>
consumeButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setConsume', [false])}>Un-Consume </a>
}
var randomButton = <a onClick={() => this.props.actions.instruct('tracklist.setRandom', [true])}>Random </a>
var randomButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRandom', [true])}>Random </a>
if( this.props.mopidy.random ){
randomButton = <a onClick={() => this.props.actions.instruct('tracklist.setRandom', [false])}>Un-Random </a>
randomButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRandom', [false])}>Un-Random </a>
}
var repeatButton = <a onClick={() => this.props.actions.instruct('tracklist.setRepeat', [true])}>Repeat </a>
var repeatButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRepeat', [true])}>Repeat </a>
if( this.props.mopidy.repeat ){
repeatButton = <a onClick={() => this.props.actions.instruct('tracklist.setRepeat', [false])}>Un-Repeat </a>
repeatButton = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRepeat', [false])}>Un-Repeat </a>
}
return (
<div>
<div className="player">
{ this.renderTrackInFocus() }
{ playButton }
<a onClick={() => this.props.actions.previous()}>
<a onClick={() => this.props.mopidyActions.previous()}>
<FontAwesome name="step-backward" />
</a>&nbsp;
<a onClick={() => this.props.actions.next()}>
<a onClick={() => this.props.mopidyActions.next()}>
<FontAwesome name="step-forward" />
</a>&nbsp;
{ consumeButton }
@ -61,7 +64,7 @@ class Player extends React.Component{
{ repeatButton }
<VolumeSlider
volume={ this.props.mopidy.volume }
onChange={(volume) => this.props.actions.instruct('playback.setVolume', { volume: volume })} />
onChange={(volume) => this.props.mopidyActions.instruct('playback.setVolume', { volume: volume })} />
</div>
);
}
@ -88,7 +91,7 @@ const mapStateToProps = (state, ownProps) => {
const mapDispatchToProps = (dispatch) => {
return {
actions: bindActionCreators(actions, dispatch)
mopidyActions: bindActionCreators(mopidyActions, dispatch)
}
}

74
src/js/components/Sidebar.js Executable file
View File

@ -0,0 +1,74 @@
import React, { PropTypes } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import Player from '../components/Player'
import FontAwesome from 'react-fontawesome'
import * as mopidyActions from '../services/mopidy/actions'
class Sidebar extends React.Component{
constructor(props) {
super(props);
}
componentDidMount(){
console.log( this.props )
}
render(){
return (
<aside>
<nav>
<section>
<Link activeClassName="active" to="/queue">Now playing</Link>
</section>
<section>
<title>Discover</title>
</section>
<section>
<title>My Music</title>
<Link activeClassName="active" to="/library/playlists">Playlists</Link>
<Link activeClassName="active" to="/library/artists">Artists</Link>
<Link activeClassName="active" to="/library/albums">Albums</Link>
<Link activeClassName="active" to="/library/tracks">Tracks</Link>
</section>
<section>
<Link activeClassName="active" to="/settings">Settings</Link>
</section>
</nav>
<Player />
</aside>
);
}
}
/**
* Export our component
*
* We also integrate our global store, using connect()
**/
const mapStateToProps = (state, ownProps) => {
return state;
}
const mapDispatchToProps = (dispatch) => {
return {
mopidyActions: bindActionCreators(mopidyActions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Sidebar)

View File

@ -6,7 +6,7 @@ import React, { PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import { Router, Route, Link, browserHistory } from 'react-router'
import { Router, Route, Link, IndexRoute, browserHistory } from 'react-router'
import store from './bootstrap.js'
@ -28,6 +28,9 @@ ReactDOM.render(
<Provider store={store}>
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Queue} />
<Route path="/queue" component={Queue} />
<Route path="library/artists" component={LibraryArtists} />
<Route path="library/albums" component={LibraryAlbums} />
@ -37,7 +40,6 @@ ReactDOM.render(
<Route path="album/:uri" component={Album} />
<Route path="artist/:uri" component={Artist} />
<Route path="playlist/:uri" component={Playlist} />
<Route path="queue" component={Queue} />
<Route path="settings" component={Settings} />
</Route>

View File

@ -41,25 +41,21 @@ export function loadAlbum( uri ){
* @return Promise
**/
const sendRequest = ( dispatch, getState, endpoint, method = 'GET', data = false) => {
var options = {
method: method,
cache: true,
url: 'https://api.spotify.com/v1/'+endpoint,
headers: {
Authorization: 'Bearer '+ getState().spotify.access_token
},
data: data
};
return new Promise( (resolve, reject) => {
checkToken( dispatch, getState )
.then( response => {
$.ajax( options )
.then(
getToken( dispatch, getState )
.then( response => {
$.ajax({
method: method,
cache: true,
url: 'https://api.spotify.com/v1/'+endpoint,
headers: {
Authorization: 'Bearer '+ response
},
data: data
}).then(
response => resolve(response),
error => {
console.error(error)
console.error('sendRequest', error)
reject(error)
}
)
@ -92,27 +88,30 @@ export function removeAuthorization(){
*
* @return Promise
**/
function checkToken( dispatch, getState ){
function getToken( dispatch, getState ){
return new Promise( (resolve, reject) => {
// is our token_expiry still in the future?
// token is okay for now, so just resolve with the current token
if( new Date().getTime() < getState().spotify.token_expiry ){
resolve();
resolve(getState().spotify.access_token);
return
}
// token is expiring/expired
doRefreshToken( dispatch, getState )
// token is expiring/expired, so go get a new one and resolve that
refreshToken( dispatch, getState )
.then(
response => {
resolve();
resolve(response.access_token);
},
error => reject(error)
error => {
console.error('getToken', error)
reject(error)
}
);
});
}
function doRefreshToken( dispatch, getState ){
function refreshToken( dispatch, getState ){
return new Promise( (resolve, reject) => {
$.ajax({
method: 'GET',
@ -127,9 +126,12 @@ function doRefreshToken( dispatch, getState ){
type: 'SPOTIFY_TOKEN_REFRESHED',
data: response
});
resolve();
resolve(response);
},
error => reject(error)
error => {
console.error('refreshToken', error)
reject(error)
}
);
})
}

View File

@ -4,6 +4,8 @@ import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import TrackList from '../components/TrackList'
import Header from '../components/Header'
import * as spotifyActions from '../services/spotify/actions'
import * as mopidyActions from '../services/mopidy/actions'
@ -29,7 +31,10 @@ class Album extends React.Component{
if( this.props.spotify.album ){
return (
<div>
<h3>{ this.props.spotify.album.name }</h3>
<Header
icon="cd"
title={ this.props.spotify.album.name }
/>
<TrackList tracks={this.props.spotify.album.tracks.items} />
</div>
);

View File

@ -5,7 +5,7 @@ import { createStore, bindActionCreators } from 'redux'
import { Link } from 'react-router'
import { connect } from 'react-redux'
import Player from '../components/Player'
import Sidebar from '../components/Sidebar'
import * as mopidyActions from '../services/mopidy/actions'
import * as spotifyActions from '../services/spotify/actions'
@ -25,19 +25,12 @@ class App extends React.Component{
}
render(){
return (
<div>
<ul role="nav">
<li><Link to="/queue">Now playing</Link></li>
<li><Link to="/library/artists">Library: My artists</Link></li>
<li><Link to="/library/albums">Library: My albums</Link></li>
<li><Link to="/library/tracks">Library: My tracks</Link></li>
<li><Link to="/library/playlists">Library: My playlists</Link></li>
<li><Link to="/settings">Settings</Link></li>
</ul>
{this.props.children}
<Player />
<Sidebar />
<main>
{this.props.children}
</main>
</div>
);
}

View File

@ -30,7 +30,10 @@ class Artist extends React.Component{
if( this.props.spotify.artist ){
return (
<div>
<h3>{ this.props.spotify.artist.name }</h3>
<Header
icon="mic"
title={ this.props.spotify.artist.name }
/>
<p>{ this.props.spotify.artist.followers.total.toLocaleString() } followers</p>
{ this.props.spotify.artist.tracks ? <TrackList tracks={ this.props.spotify.artist.tracks } /> : null }
{ this.props.spotify.artist_albums ? <AlbumGrid items={ this.props.spotify.artist_albums } /> : null }

View File

@ -4,6 +4,8 @@ import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import TrackList from '../components/TrackList'
import Header from '../components/Header'
import * as spotifyActions from '../services/spotify/actions'
import * as mopidyActions from '../services/mopidy/actions'
@ -29,7 +31,10 @@ class Playlist extends React.Component{
if( this.props.spotify.playlist ){
return (
<div>
<h3>{ this.props.spotify.playlist.name }</h3>
<Header
icon="playlist"
title={ this.props.spotify.playlist.name }
/>
<TrackList tracks={this.props.spotify.playlist.tracks.items} />
</div>
);

View File

@ -9,6 +9,8 @@ import Track from '../components/Track'
import Player from '../components/Player'
import ArtistList from '../components/ArtistList'
import AlbumLink from '../components/AlbumLink'
import Header from '../components/Header'
import * as actions from '../services/mopidy/actions'
class Queue extends React.Component{
@ -60,9 +62,11 @@ class Queue extends React.Component{
render(){
return (
<div>
<h3>Now playing</h3>
<Header
icon="play"
title="Now playing"
/>
{ this.renderTrackInFocus() }
<Player />
<h4>Other tracks</h4>
{ this.renderTrackList() }
</div>

View File

@ -6,6 +6,7 @@ import { bindActionCreators } from 'redux'
import FontAwesome from 'react-fontawesome'
import SpotifyAuthenticationFrame from '../components/SpotifyAuthenticationFrame'
import ConfirmationButton from '../components/ConfirmationButton'
import Header from '../components/Header'
import * as mopidyActions from '../services/mopidy/actions'
import * as spotifyActions from '../services/spotify/actions'
@ -40,7 +41,10 @@ class Settings extends React.Component{
render(){
return (
<div>
<h3>Settings</h3>
<Header
icon="cog"
title="Settings"
/>
<h4>Mopidy</h4>
<form onSubmit={() => this.setMopidyConfig()}>

View File

@ -5,6 +5,7 @@ import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import AlbumGrid from '../../components/AlbumGrid'
import Header from '../../components/Header'
import * as mopidyActions from '../../services/mopidy/actions'
import * as spotifyActions from '../../services/spotify/actions'
@ -24,7 +25,10 @@ class LibraryAlbums extends React.Component{
if( this.props.spotify.libraryAlbums ){
return (
<div>
<h3>My albums</h3>
<Header
icon="cd"
title="My albums"
/>
<AlbumGrid items={this.props.spotify.libraryAlbums} />
</div>
);

View File

@ -4,6 +4,8 @@ import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import Header from '../../components/Header'
import * as mopidyActions from '../../services/mopidy/actions'
import * as spotifyActions from '../../services/spotify/actions'
@ -22,7 +24,10 @@ class LibraryArtists extends React.Component{
if( this.props.spotify.libraryArtists ){
return (
<div>
<h3>My artists</h3>
<Header
icon="mic"
title="My artists"
/>
<ul>
{
this.props.spotify.libraryArtists.artists.items.map( (artist, index) => {

View File

@ -5,6 +5,7 @@ import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import PlaylistListItem from '../../components/PlaylistListItem'
import Header from '../../components/Header'
import * as mopidyActions from '../../services/mopidy/actions'
import * as spotifyActions from '../../services/spotify/actions'
@ -67,7 +68,10 @@ class LibraryPlaylists extends React.Component{
render(){
return (
<div>
<h3>My playlists</h3>
<Header
icon="playlist"
title="My playlists"
/>
{ this.renderPlaylists() }
</div>
)

View File

@ -5,6 +5,7 @@ import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import TrackList from '../../components/TrackList'
import Header from '../../components/Header'
import * as mopidyActions from '../../services/mopidy/actions'
import * as spotifyActions from '../../services/spotify/actions'
@ -24,7 +25,7 @@ class LibraryTracks extends React.Component{
if( this.props.spotify.libraryTracks ){
return (
<div>
<h3>My tracks</h3>
<Header icon="music" title="My tracks" />
<TrackList tracks={this.props.spotify.libraryTracks.items} />
</div>
);

View File

@ -1,10 +1,13 @@
@import 'vendor/font-awesome/index';
@import 'global/variables';
@import 'global/core';
@import 'global/reset';
@import 'global/forms';
@import 'components/sidebar';
@import 'components/lists';
@import 'components/track';
@import 'components/header';

View File

@ -0,0 +1,19 @@
main {
header {
padding: 14px 20px;
background: #EEEEEE;
.icon {
display: inline-block;
padding-right: 14px;
height: 16px;
}
h1 {
font-size: 22px;
font-weight: 100;
display: inline-block;
}
}
}

View File

@ -41,6 +41,7 @@
color: #CCCCCC;
text-transform: uppercase;
border-top: 0;
padding-bottom: 2px;
}
@ -61,7 +62,7 @@
}
&.playing {
font-weight: bold;
font-weight: 500;
}
}

View File

@ -0,0 +1,73 @@
aside{
position: fixed;
top: 0;
left: 0;
bottom: 0;
background: #333333;
width: 200px;
nav {
a {
font-size: 16px;
color: #FFFFFF;
text-decoration: none;
display: block;
padding: 6px 18px 6px 14px;
border-left: 4px solid transparent;
&.active {
border-color: $turquoise;
background: rgba( 0,0,0,0.1 );
}
&:hover {
background: rgba( 255,255,255,0.1 );
}
}
section {
padding: 10px 0;
title {
display: block;
padding: 0 18px 2px;
font-size: 11px;
text-transform: uppercase;
opacity: 0.5;
color: #FFFFFF;
}
}
}
.player {
.track-in-focus {
font-size: 16px;
text-transform: uppercase;
text-align: center;
color: #FFFFFF;
.title {
@include one_line_text
}
.artist-list {
opacity: 0.5;
@include one_line_text
.artist a {
color: inherit;
text-decoration: none;
border-bottom: 1px dotted transparent;
&:hover {
border-color: #FFFFFF !important;
}
}
}
}
}
}

View File

@ -2,13 +2,29 @@
body,
html {
background: #FFFFFF;
background: #F5F5F5;
color: #000000;
font-family: 'Roboto Condensed', Helvetica, Arial, sans-serif;
font-family: "Archivo Narrow", Helvetica, Arial, sans-serif;
font-size: 14px;
}
body {
overflow-y: scroll;
overflow-x: hidden;
}
main {
padding-left: 200px;
a {
color: inherit;
text-decoration: none;
border-bottom: 1px dotted transparent;
&:hover {
border-color: #000000;
}
}
}

View File

@ -0,0 +1,8 @@
$turquoise: #08d58f;
@mixin one_line_text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}