Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
  • dev
  • appimage
  • fix_gitlab
  • fixappveyor
  • gitlab
  • fix_ci
  • fix_dbus_error
  • fix_ci_osx
  • sakia020
  • fix_travis#1105
  • feature/backend
  • check_uniq_node_by_endpoints
  • qt5.7
  • feature/agent_architecture
  • translations
  • pyqt5.6
  • qtwebengine
  • pyinstaller
  • landscape
  • 0.1.0
  • 0.10.0
  • 0.10.1
  • 0.10.2
  • 0.11.0
  • 0.11.1
  • 0.11.2
  • 0.11.3
  • 0.11.4
  • 0.11.4.post1
  • 0.11.5
  • 0.12.0
  • 0.12.1dev1
  • 0.12.1dev2
  • 0.12.1dev3
  • 0.12.1dev4
  • 0.12.dev1
  • 0.12.dev2
  • 0.12.dev3
  • 0.12.dev4
  • 0.12.dev5
  • 0.12rc1
  • 0.2.0
  • 0.2.1
  • 0.20.0
  • 0.20.0dev1
  • 0.20.0dev10
  • 0.20.0dev12
  • 0.20.0dev13
  • 0.20.0dev14
  • 0.20.0dev15
  • 0.20.0dev16
  • 0.20.0dev2
  • 0.20.0dev3
  • 0.20.0dev3-test1
  • 0.20.0dev4
  • 0.20.0dev5
  • 0.20.0dev6
  • 0.20.0dev7
  • 0.20.0dev8
  • 0.20.0dev9
  • 0.20.1
  • 0.20.10
  • 0.20.11
  • 0.20.13
  • 0.20.2
  • 0.20.3
  • 0.20.4
  • 0.20.5
  • 0.20.6
  • 0.20.7
  • 0.20.8
  • 0.20.9
  • 0.3.0
  • 0.30.0
  • 0.30.0beta
  • 0.30.0beta1
  • 0.30.0beta2
  • 0.30.0beta3
  • 0.30.0beta4
  • 0.30.0beta5
  • 0.30.0beta6
  • 0.30.0beta7
  • 0.30.0beta8
  • 0.30.0beta9
  • 0.30.1
  • 0.30.10
  • 0.30.11
  • 0.30.12
  • 0.30.13
  • 0.30.14
  • 0.30.2
  • 0.30.3
  • 0.30.4
  • 0.30.5
  • 0.30.6
  • 0.30.7
  • 0.30.8
  • 0.30.9
  • 0.31.0
  • 0.31.0.post1
  • 0.31.1
  • 0.31.2
  • 0.31.3
  • 0.31.4
  • 0.31.5
  • 0.31.6
  • 0.32.0
  • 0.32.0-linux
  • 0.32.0RC1
  • 0.32.0RC2
  • 0.32.0RC3
  • 0.32.0RC4
  • 0.32.0RC5
  • 0.32.0RC6
  • 0.32.1
  • 0.32.10
  • 0.32.10post1
  • 0.32.2
  • 0.32.3
120 results

Target

Select target project
No results found
Select Git revision
  • dev
  • master
  • fix_gitlab
  • fixappveyor
  • gitlab
  • fix_ci
  • fix_dbus_error
  • fix_ci_osx
  • sakia020
  • fix_travis#1105
  • feature/backend
  • check_uniq_node_by_endpoints
  • qt5.7
  • feature/agent_architecture
  • translations
  • pyqt5.6
  • qtwebengine
  • pyinstaller
  • landscape
  • 0.1.0
  • 0.10.0
  • 0.10.1
  • 0.10.2
  • 0.11.0
  • 0.11.1
  • 0.11.2
  • 0.11.3
  • 0.11.4
  • 0.11.4.post1
  • 0.11.5
  • 0.12.0
  • 0.12.1dev1
  • 0.12.1dev2
  • 0.12.1dev3
  • 0.12.1dev4
  • 0.12.dev1
  • 0.12.dev2
  • 0.12.dev3
  • 0.12.dev4
  • 0.12.dev5
  • 0.12rc1
  • 0.2.0
  • 0.2.1
  • 0.20.0
  • 0.20.0dev1
  • 0.20.0dev10
  • 0.20.0dev12
  • 0.20.0dev13
  • 0.20.0dev14
  • 0.20.0dev15
  • 0.20.0dev16
  • 0.20.0dev2
  • 0.20.0dev3
  • 0.20.0dev3-test1
  • 0.20.0dev4
  • 0.20.0dev5
  • 0.20.0dev6
  • 0.20.0dev7
  • 0.20.0dev8
  • 0.20.0dev9
  • 0.20.1
  • 0.20.10
  • 0.20.11
  • 0.20.13
  • 0.20.2
  • 0.20.3
  • 0.20.4
  • 0.20.5
  • 0.20.6
  • 0.20.7
  • 0.20.8
  • 0.20.9
  • 0.3.0
  • 0.30.0
  • 0.30.0beta
  • 0.30.0beta1
  • 0.30.0beta2
  • 0.30.0beta3
  • 0.30.0beta4
  • 0.30.0beta5
  • 0.30.0beta6
  • 0.30.0beta7
  • 0.30.0beta8
  • 0.30.0beta9
  • 0.30.1
  • 0.30.10
  • 0.30.11
  • 0.30.12
  • 0.30.13
  • 0.30.14
  • 0.30.2
  • 0.30.3
  • 0.30.4
  • 0.30.5
  • 0.30.6
  • 0.30.7
  • 0.30.8
  • 0.30.9
  • 0.31.0
  • 0.31.0.post1
  • 0.31.1
  • 0.31.2
  • 0.31.3
  • 0.31.4
  • 0.31.5
  • 0.31.6
  • 0.32.0
  • 0.32.0-linux
  • 0.32.0RC1
  • 0.32.0RC2
  • 0.32.0RC3
  • 0.32.0RC4
  • 0.32.0RC5
  • 0.32.0RC6
  • 0.32.1
  • 0.32.10
  • 0.32.10post1
  • 0.32.2
  • 0.32.3
119 results
Show changes

Commits on Source 3079

2,979 additional commits have been omitted to prevent performance issues.
427 files
+ 54888
2531
Compare changes
  • Side-by-side
  • Inline

Files

+19 −2
Original line number Original line Diff line number Diff line
@@ -10,7 +10,7 @@ dist
build
build
eggs
eggs
parts
parts
bin
bin/[a-b,d-z]
var
var
sdist
sdist
develop-eggs
develop-eggs
@@ -35,6 +35,23 @@ nosetests.xml
.project
.project
.pydevproject
.pydevproject
.settings
.settings
.idea


# Generated files
# Generated files
src/cutecoin/gen_resources/*
src/sakia/gen_resources/*
src/icons_rc.py
src/i18n_rc.py
src/sakia/icons_rc.py
src/sakia/i18n_rc.py
res/i18n/qm
res/i18n/lang-*
out
.directory
temp
*_uic.py

# mypy
.mypy_cache

# pyenv
/.python-version

.gitlab-ci.yml

0 → 100644
+106 −0
Original line number Original line Diff line number Diff line
stages:
  - format
  - tests
  - build
  - release

image: registry.duniter.org/docker/python3/sakia-builder:1.2.0

# SUB-TASKS
.push_to_github:
  tags:
    - github
  after_script:
    # remove all files in current repo
    - rm -rf ./*
    - rm -rf .git*
    # do a mirror clone in current repo
    - git clone --mirror $CI_REPOSITORY_URL .
    # do config for github push
    - git remote add github $GITHUB_URL_AND_KEY
    - git config --global user.email "contact@duniter.org"
    - git config --global user.name "Duniter"
    # remove refs about merge requests
    - bash -c "cat packed-refs | grep -v 'refs/merge-requests' > packed-refs-new; echo 'Removed merge-requests refs.'"
    - mv packed-refs-new packed-refs
    # github push
    - bash -c "git push --force --mirror github 2>&1 | grep -v duniter-gitlab; echo $?"

.changes:
  only:
    changes:
      - src/sakia/*
      - .gitlab-ci.yml
      - Makefile
      - requirements_dev.txt
      - requirements_deploy.txt
      - requirements.txt
      - setup.py
      - tests/**/*.py

# TASKS
format:
  extends:
    - .changes
  stage: format
  script:
    - pip install -r requirements_dev.txt
    - make check-format

tests:
  extends:
    - .changes
  stage: tests
  script:
    - pip install -r requirements.txt
    - pip install -r requirements_dev.txt
    - /start.sh # start xvfb
    - make tests

build:
  extends:
    - .changes
  stage: build
  script:
    - pip install -r requirements.txt
    - pip install -r requirements_deploy.txt
    - make build

release_appimage:
  extends:
    - .changes
  stage: release
  when: manual
  script:
    - pip install -r requirements.txt
    - pip install -r requirements_deploy.txt
    - make build
    - make appimage
  artifacts:
    paths:
      - ci/appimage/Sakia_x86_64.AppImage
#  only:
#    - master

release_pypi:
  extends:
    - .push_to_github
  stage: release
  when: manual
  script:
    - pip install -r requirements.txt
    - pip install -r requirements_deploy.txt
    - make build
    - make deploy PYPI_LOGIN=${PYPI_LOGIN} PYPI_PASSWORD=${PYPI_PASSWORD}
  only:
    - master

release_pypi_test:
  stage: release
  when: manual
  only: [tags, dev]
  script:
    - pip install -r requirements.txt
    - pip install -r requirements_deploy.txt
    - make build
    - make deploy_test PYPI_TEST_LOGIN=${PYPI_TEST_LOGIN} PYPI_TEST_PASSWORD=${PYPI_TEST_PASSWORD}

.landscape.yaml

0 → 100644
+10 −0
Original line number Original line Diff line number Diff line
requirements:
    - requirements.txt
python-targets:
    - 3
ignore-paths:
  - lib
  - build
  - res
  - ci
  - doc

.travis.yml

0 → 100644
+45 −0
Original line number Original line Diff line number Diff line
os: linux
matrix:
  include:
    - os: osx
    - dist: trusty
      sudo: required
  exclude:
    - os: linux
  allow_failures:
    - os: osx

env:
- PYENV_PYTHON_VERSION=3.5.4

before_install:
- ci/travis/before_install.sh
install:
- ci/travis/build.sh
script:
- ci/travis/test.sh
after_success:
- ci/travis/after_success.sh
- ci/travis/before_deploy.sh

deploy:
  - provider: releases
    api_key:
      secure: MUdvTDBeCxO9d/EpzIhr+QYra/KxgYkXX6177SjqWCWDqw9xB3fwSUj8I9ht9DGtwVdadtveumtvLw3pbtVIR0GtIPC9pyvtNz4j6T4Ei3TSE6+StXdMK4NnInvPeTRlobGL+9sZt9MwheJwZ8YGewhBcR0F5UzVfxWeSSrxmyk=
    file:
      - sakia-${TRAVIS_OS_NAME}.zip
    skip_cleanup: true
    on:
      tags: true
      condition: ${TRAVIS_OS_NAME} = osx
  - provider: releases
    api_key:
      secure: MUdvTDBeCxO9d/EpzIhr+QYra/KxgYkXX6177SjqWCWDqw9xB3fwSUj8I9ht9DGtwVdadtveumtvLw3pbtVIR0GtIPC9pyvtNz4j6T4Ei3TSE6+StXdMK4NnInvPeTRlobGL+9sZt9MwheJwZ8YGewhBcR0F5UzVfxWeSSrxmyk=
    file:
      - sakia-${TRAVIS_OS_NAME}.deb
      - sakia-${TRAVIS_OS_NAME}.zip
      - sakia-${TRAVIS_TAG}-py3-none-any.whl
    skip_cleanup: true
    on:
      tags: true
      condition: ${TRAVIS_OS_NAME} = linux

CHANGELOG.md

0 → 100644
+118 −0
Original line number Original line Diff line number Diff line
## v0.53.2 (18/01/2021)

This is the last version released by Vit.
No more new version or maintenance will be done.
Thanks to Inso for this wonderful project, and to every enthusiast users.

### Bugs
* #809 fix About Sakia available release search code and obsolete link to Github in exception
* #813 remove obsolete github references in README.md
* #815 remove unused dependency asynctest from requirements.txt
* fix "make tests" command running test scripts from AppDir in ci/appimage

## v0.53.1 (1/11/2020)
### Bugs
* #811 Fix WoT window is blank when clicking Explore until the menu "Show in WoT" is used.
  Button is removed.
* #793 Fix crash `RuntimeError: no running event loop` when running on Python 3.8
### CI/CD
* #817 Add AppImage to release with automatic compilation in CD

## v0.53.0 (25/09/2020)
### Features
* #816 Add root_servers.yml in $HOME/.config/sakia folder to configure your own root servers

## v0.52.0 (23/04/2020)
### Features
* #807 Add new "Percentage of Average" referential
* Transfer window now use current referential instead of only relative by UD
* Add current referential units on the balance display
### Bugs
* Fix referentials french translation
* Fix network "Open in browser" menu

## v0.51.1 (05/04/2020)
### Bugs
* #802 Fix "Send as source" context menu not appear in Expert Mode on normal received transactions
* Update incomplete french translation

## v0.51.0 (03/04/2020)
### Features
* #798 - Complete workflow to send transaction that we can get back after one week:
    * A selector allow to choose the lock condition of the output transaction
    * Then, the transaction with special lock condition appears with an underline in the transaction history
    * If you are the receiver, you can use the context menu action "Send as source" to send it to yourself
    before the issuer get it back
    * If you are the issuer, use the context menu action "Send as source" to send it to yourself after the delay
    * Before the delay, you can check the lock condition in the transfer window to see the date when the transaction will be unlocked
    * In Expert Mode (see Preferences), you can use any incoming transaction or dividend as source for your transfer

### Enhancement
* Add a legend for colors, italic and underlined display of transactions under transaction history
* Upgrade dependencies to duniterpy 0.57.0

### Bugs
* Fix gen_translations.py running Qt4 lrelease in Makefile
* Fix error parsing some WSP2 Head message because software version had a prefix (duniterpy fix)

### CI/CD
* Remove obsolete runner tag
* Release job only on `master`, release_test job only on `dev` or `tags`

## v0.50.5 (21/03/2020)
### Bugs
* Fix send money to pubkey with search user selected

### Tests
* Update and fix pytest suite
* Update duniter-mirage dependency version

### Enhancements
* Tx history update button set to disable until update is done
* Increase delay between network crawlings to 1 mn

### CI/CD
* Add format and tests stage in .gitlab-ci.yml

## v0.50.4 (18/03/2020)
### Code
* Fix session closed error (regression in v0.50.3)

## v0.50.3 (16/03/2020)
### Code
* Fix exception when refresh tx history
* Fix Unclosed client session error (at last !)
### CI/CD
* Fix bug with setuptools 28.8.x version in gitlab CI/CD image

## v0.50.2 (10/03/2020)
### Code
* Add system libs requirement and command line options in README.md
* Fix bad label "ok" on startup message box and enhance it
* Propose new sakia account menu at first start instead of create a new member account on the network
* Only display licence step when registering a new member account on the network
* Update french translation
### Project
* Fix release.sh using simple quote on sakia.__init__ version
* Add this changelog

## v0.50.1 (08/03/2020)
### Code
* Use asyncio.ensure_future() instead of async() which disappear from Py 3.7
* Include the license file into the wheel distributed, the license changed name
### CI/CD
* Fix sources path and allow all file extensions to trigger the CI
### Build
* Add dist check after build in Makefile
### Project
* Fix release.sh broken by black format

## [v0.50.0](https://git.duniter.org/clients/python/sakia/-/milestones/15) (07/03/2020)
### Code
* Update DuniterPy dependency to 0.56.0
* Fix all detected bugs
* Add the Sakia icon in toolbar
* Remove search direct connections
* Add update button in tx history
* Fix translation system
* Update french translation
+674 −20

File changed.

Preview size limit exceeded, changes collapsed.

+56 −36
Original line number Original line Diff line number Diff line
###### EDIT ##################### 
.PHONY: docs tests check check-format mypy pylint format build deploy deploy_test
#Directory with ui and resource files
.SILENT: deploy deploy_test # do not echo commands with password
RESOURCE_DIR = res/ui

 
# bash required to use source command
#Directory for compiled resources
SHELL := /bin/bash
COMPILED_DIR = src/cutecoin/gen_resources

 
# run tests
#UI files to compile
tests:
UI_FILES = mainwindow.ui addAccountDialog.ui addCommunityDialog.ui communityTabWidget.ui
	python3 gen_resources.py
#Qt resource files to compile
	python3 gen_translations.py
RESOURCES = 
	pytest -q -s --disable-warnings tests ${TESTS_FILTER}
 

#pyuic4 and pyrcc4 binaries
# check
PYUIC = pyuic5
check: mypy pylint check-format
PYRCC = pyrcc5

 
# check static typing
#################################
mypy:
# DO NOT EDIT FOLLOWING
	python3 -m mypy src --ignore-missing-imports
 
	python3 -m mypy tests --ignore-missing-imports
COMPILED_UI = $(UI_FILES:%.ui=$(COMPILED_DIR)/%_uic.py)

COMPILED_RESOURCES = $(RESOURCES:%.qrc=$(COMPILED_DIR)/%_rc.py)
# check code errors
 
pylint:
all : resources ui 
	pylint --disable=C,R0902,R0903,R0904,R0912,R0913,R0914,R0915,W0613 --enable=C0121,C0202,C0321 --jobs=0 src/sakia/
 
	pylint --disable=C,R0902,R0903,R0904,R0912,R0913,R0914,R0915,W0613 --enable=C0121,C0202,C0321 --jobs=0 tests/
resources : $(COMPILED_RESOURCES) 

 
# check format
ui : $(COMPILED_UI)
check-format:
 
	black --check src
$(COMPILED_DIR)/%_uic.py : $(RESOURCE_DIR)/%.ui
	black --check tests
	$(PYUIC) $< -o $@

 
# format code
$(COMPILED_DIR)/%_rc.py : $(RESOURCE_DIR)/%.qrc
format:
	$(PYRCC) $< -o $@
	black src
 
	black tests
clean : 

	$(RM) $(COMPILED_UI) $(COMPILED_RESOURCES) $(COMPILED_UI:.py=.pyc) $(COMPILED_RESOURCES:.py=.pyc)  
# build a wheel package in build folder and put it in dist folder
build:
	if [ -d "./build" ]; then rm -r build/*; fi
	if [ -d "./dist" ]; then rm -r dist/*; fi
	python3 gen_resources.py
	python3 gen_translations.py
	python3 setup.py sdist bdist_wheel
	twine check dist/*

appimage:
	cd ci/appimage && wget -qc https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && chmod u+x linuxdeploy-x86_64.AppImage
	cd ci/appimage && wget -qc https://github.com/niess/linuxdeploy-plugin-python/releases/download/continuous/linuxdeploy-plugin-python-x86_64.AppImage && chmod u+x linuxdeploy-plugin-python-x86_64.AppImage
	cd ci/appimage && source config.env && ./build.sh

# upload on PyPi repository
deploy:
	twine upload dist/* --username ${PYPI_LOGIN} --password ${PYPI_PASSWORD}

# upload on PyPi test repository
deploy_test:
	twine upload dist/* --username ${PYPI_TEST_LOGIN} --password ${PYPI_TEST_PASSWORD} --repository-url https://test.pypi.org/legacy/
+150 −3
Original line number Original line Diff line number Diff line
cutecoin
![sakia logo](https://git.duniter.org/clients/python/sakia/-/raw/master/sakia.png)
========


Qt Client for Ucoin project
This project is not maintained anymore since 18/01/2021.
No more new version or maintenance will be done.

Vit thanks Inso for this wonderful project, and every enthusiast users.

# Sakia
 [![coverage report](https://git.duniter.org/clients/python/sakia/badges/gitlab/coverage.svg)](https://git.duniter.org/clients/python/sakia/commits/gitlab)
 [![pipeline status](https://git.duniter.org/clients/python/sakia/badges/gitlab/pipeline.svg)](https://git.duniter.org/clients/python/sakia/commits/gitlab)
 [![Build Status](https://travis-ci.org/duniter/sakia.svg?branch=travis)](https://travis-ci.org/duniter/sakia)
 [![Build status](https://ci.appveyor.com/api/projects/status/pvl18xon8pvu2c8w/branch/dev?svg=true)](https://ci.appveyor.com/project/Insoleet/sakia-bee4m/branch/dev)

Python3 and PyQt5 Client for [duniter](http://www.duniter.org) project.

### Features
  * Accounts management
  * Communities viewing
  * Money Transfer
  * Wallets management
  * Contacts management
  * Joining a community, publishing keys
  * Multiple wallets management

### Dependencies
  * Dependencies :
   * Qt5
   * [python 3.6+](https://www.python.org/downloads/)
   * [libsodium](http://doc.libsodium.org/installation/README.html)

General tips : use [pyenv](https://github.com/pyenv/pyenv) to build sakia, as described in the [documentation](https://git.duniter.org/clients/python/sakia/-/blob/master/doc/install_for_developers.md)

Building Python with pyenv requires libraries of `openssl` and `sqlite3`. On Ubuntu, install it using the following commands : 


    apt-get update
    apt-get install libssl-dev
    apt-get install libsqlite3-dev


### Install with pip
  * Run `pip install sakia`
  * start "sakia" :)
 
### Download latest release
  * Go to [current release](https://git.duniter.org/clients/python/sakia/-/releases)
  * Download AppImage for linux x86_64. Run it !
  * Join our developer community by contacting us on [duniter forum](http://forum.duniter.org/)

## Command line options

`-d` to display log to debug

`--currency g1-test` to connect to the g1-test currency network.

## Development
* When writing docstrings, use the reStructuredText format recommended by [PEP 0287](https://www.python.org/dev/peps/pep-0287/#docstring-significant-features)
* Use make commands to check the code and the format it correct.

The development tools require Python 3.6.x or higher.

* Install a supported Python version with [pyenv](https://github.com/pyenv/pyenv)

        curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

* Create a virtualenv in the project folder:
    
        python -m venv .venv

* Install dependencies

        pip install -r requirements.txt

* Run Sakia from the source code

        PYTHONPATH="`pwd`/src/." python src/sakia/main.py

* Before submiting a merge requests, please check the static typing and tests.

* Install dev dependencies

        pip install -r requirements_dev.txt


* Check static typing with [mypy](http://mypy-lang.org/)

        make check

* Run all unit tests (pytest module) with:

        make tests

> **Warning:** *do not run tests with sakia installed in your dev environment, because pytest will use the installed Sakia.*

* Run only some unit tests by passing a special ENV variable:

        make tests TESTS_FILTER=tests/functional/test_transfer_dialog.py::test_transfer

## Packaging and deploy
### PyPi
In the development pyenv environment, install the tools to build and deploy

    pip install --upgrade -r requirements_deploy.txt

Change and commit and tag the new version number (semantic version number)
    
    ./release.sh 0.x.y

Build the PyPi package in the `dist` folder
    
    make build

Deploy the package to PyPi test repository (prefix the command with a space in order for the shell not to save in its history system the command containing the password)

    [SPACE]make deploy_test PYPI_TEST_LOGIN=xxxx PYPI_TEST_PASSWORD=xxxx

Install the package from PyPi test repository

    pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.python.org/simple/ sakia


Deploy the package on the PyPi repository (prefix the command with a space in order for the shell not to save in its history system the command containing the password)

    [SPACE]make deploy PYPI_LOGIN=xxxx PYPI_PASSWORD=xxxx


### Wheel Build scripts

    make build

Or manually:

  * Install __wheel__ with `pip install wheel`
  * Run `python3 gen_resources.py` in sakia folder
  * Run `python3 gen_translations.py` in sakia folder
  * To build the wheel : Run `python3 setup.py bdist_wheel` in sakia folder
  
### AppImage

    make appimage

The make command will do a wheel build, then create the AppImage file `ci/appimage/Sakia_x86_64.AppImage`

### Pyinstaller Build scripts (not maintained)
  * Install __pyinstaller__ with `pip install pyinstaller`
  * Run `python3 gen_resources.py` in sakia folder
  * Run `python3 gen_translations.py` in sakia folder
  * To build the binaries : Run `pyinstall sakia.spec`

## License
This software is distributed under [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.html).

appveyor.yml

0 → 100644
+70 −0
Original line number Original line Diff line number Diff line
environment:
  global:
    # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
    # /E:ON and /V:ON options are not enabled in the batch script intepreter
    # See: http://stackoverflow.com/a/13751649/163740
    CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\ci\\appveyor\\run_with_env.cmd"

  matrix:
    - PYTHON: "C:\\Python35_64"
      PYTHON_VERSION: "3.5"
      PYTHON_ARCH: "64"
      CONDA_PY: "35"
      CONDA_NPY: "18"
      QTDIR: "C:\\Qt\\5.9\\msvc2015_64"
      platform: x64

    - PYTHON: "C:\\Python35_32"
      PYTHON_VERSION: "3.5"
      PYTHON_ARCH: "32"
      CONDA_PY: "35"
      CONDA_NPY: "18"
      QTDIR: "C:\\Qt\\5.9\\msvc2015"
      platform: x86

install:
  # this installs the appropriate Miniconda (Py2/Py3, 32/64 bit),
  # as well as pip, conda-build, and the binstar CLI
  - powershell .\\ci\\appveyor\\install.ps1

  #- dir /b /s /ad c:\Qt\5.6
  - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
  #- "SET QT_PLUGIN_PATH=%QTDIR%\\plugins"
  - echo %PATH%
  #- choco install -y vcredist2015
  - "%CMD_IN_ENV% conda config --set always_yes yes --set changeps1 no"
  - "%CMD_IN_ENV% conda config --add channels inso/channel/sakia"
  - "%CMD_IN_ENV% conda create -q -n test-environment python=%PYTHON_VERSION% libsodium=1.0.3 setuptools=19.2"

build_script:
  - ".\\ci\\appveyor\\build.cmd"

#test_script:
  - ".\\ci\\appveyor\\tests.cmd"
  - echo %errorlevel%

  - powershell .\\ci\\appveyor\\download_vcredist.ps1 -target %cd%\\ci\\appveyor

  # Windows Installer
  - choco install -y InnoSetup
  - set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH%
  - iscc %cd%\ci\appveyor\sakia.iss /DROOT_PATH=%cd%
  - move %cd%\sakia.exe %cd%\sakia-%APPVEYOR_REPO_TAG_NAME%-win%PYTHON_ARCH%.exe

artifacts:
  - path: dist
    name: sakia-win$(PYTHON_ARCH)
  - path: sakia*.exe
    name: sakia-exe
# upload to releases
deploy:
  tag: $(APPVEYOR_REPO_TAG_NAME)
  release: sakia $(APPVEYOR_REPO_TAG_NAME)
  provider: GitHub
  auth_token:
    secure: wbzlh6nx1zY1J1avlB0C3hKGm1abFNHBdM60u/U09i5Nam//D6kazvnv5ZBKdR89
  artifact: /sakia-/
  draft: true
  prerelease: true
  on:
    appveyor_repo_tag: true

ci/appimage/build.sh

0 → 100755
+6 −0
Original line number Original line Diff line number Diff line
#!/bin/bash
#./linuxdeploy-x86_64.AppImage --appdir AppDir -i sakia.png -d sakia.desktop --plugin python --output appimage --custom-apprun sakia.sh
# workaround to run inside a docker container
./linuxdeploy-x86_64.AppImage --appimage-extract
mv squashfs-root linuxdeploy-x86_64.AppDir
./linuxdeploy-x86_64.AppDir/AppRun --appdir AppDir  -i sakia.png -d sakia.desktop --plugin python --output appimage --custom-apprun sakia.sh

ci/appimage/config.env

0 → 100644
+9 −0
Original line number Original line Diff line number Diff line
version=0.53.2

# linuxdeploy python plugin
export PYTHON_SOURCE=https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
export PIP_REQUIREMENTS=$(pwd)/../../dist/sakia-${version}-py3-none-any.whl

# linuxdeploy appimage plugin
export OUTPUT=Sakia_x86_64.AppImage
+17 −0
Original line number Original line Diff line number Diff line
[Desktop Entry]
Version=1.0
Name=Sakia
Name[fr]=Sakia
Comment=Duniter Ğ1 Libre Currency Client
Comment[fr]=Client pour la Monnaie Libre Duniter Ğ1
GenericName=Sakia client
GenericName[fr]=Client Sakia
Exec=sakia
Terminal=false
Type=Application
Icon=sakia
Categories=Utility;
StartupNotify=true
GenericName[fr_FR]=Client Sakia
Comment[fr_FR]=Client pour la Monnaie Libre Duniter Ğ1
MimeType=x-scheme-handler/duniter;

ci/appimage/sakia.sh

0 → 100755
+9 −0
Original line number Original line Diff line number Diff line
#!/bin/bash

# Export APPRUN if running from an extracted image
self="$(readlink -f -- $0)"
here="${self%/*}"
APPDIR="${APPDIR:-${here}}"

# Call the entry point
${APPDIR}/usr/bin/python3.6 -s ${APPDIR}/usr/python/lib/python3.6/site-packages/sakia/main.py "$@"
+3 −0
Original line number Original line Diff line number Diff line
@ECHO OFF

rd /s /q %APPDATA%\sakia
 No newline at end of file

ci/appveyor/build.cmd

0 → 100644
+28 −0
Original line number Original line Diff line number Diff line
@ECHO ON

call activate test-environment

echo "%PATH%"
echo "%QT_PLUGIN_PATH%"
python -V

lrelease -version

call pyuic5 --version
pyrcc5 -version

pip install -r requirements.txt
pip install pyinstaller==3.2
pip install six
pip install packaging

python gen_resources.py
if %errorlevel% neq 0 exit /b 1s

call .\\ci\\appveyor\\gen_translations.cmd
if %errorlevel% neq 0 exit /b 1

SET PATH=c:\\python35_64\\envs\\test-environment\\lib\\site-packages\\PyQt5\\Qt\\bin;%PATH%

pyinstaller sakia.spec
if %errorlevel% neq 0 exit /b 1
+6 −0
Original line number Original line Diff line number Diff line
Param([String]$target)

Write-Host "Downloading vcredist to $target"
(New-Object Net.WebClient).DownloadFile('https://download.microsoft.com/download/A/4/D/A4D9F1D3-6449-49EB-9A6E-902F61D8D14B/vcredist_x86.exe', "$target\vcredist_x86.exe")
(New-Object Net.WebClient).DownloadFile('https://download.microsoft.com/download/A/4/D/A4D9F1D3-6449-49EB-9A6E-902F61D8D14B/vcredist_x64.exe', "$target\vcredist_x64.exe")
+12 −0
Original line number Original line Diff line number Diff line
@ECHO ON

SET PREVPATH=%PATH%
SET PATH=%QTDIR%\\bin;%QTDIR%\\lib;%PATH%

lrelease -version

python gen_translations.py
if %errorlevel% neq 0 exit /b 1

SET PATH=%PREVPATH%
+96 −0
Original line number Original line Diff line number Diff line
# Sample script to install Miniconda under Windows
# Authors: Olivier Grisel, Jonathan Helmus and Kyle Kastner, Robert McGibbon
# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/

$MINICONDA_URL = "http://repo.continuum.io/miniconda/"


function DownloadMiniconda ($python_version, $platform_suffix) {
    $webclient = New-Object System.Net.WebClient
    if ($python_version -match "3.4") {
        $filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe"
    } else {
        $filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe"
    }
    $url = $MINICONDA_URL + $filename

    $basedir = $pwd.Path + "\"
    $filepath = $basedir + $filename
    if (Test-Path $filename) {
        Write-Host "Reusing" $filepath
        return $filepath
    }

    # Download and retry up to 3 times in case of network transient errors.
    Write-Host "Downloading" $filename "from" $url
    $retry_attempts = 2
    for($i=0; $i -lt $retry_attempts; $i++){
        try {
            $webclient.DownloadFile($url, $filepath)
            break
        }
        Catch [Exception]{
            Start-Sleep 1
        }
   }
   if (Test-Path $filepath) {
       Write-Host "File saved at" $filepath
   } else {
       # Retry once to get the error message if any at the last try
       $webclient.DownloadFile($url, $filepath)
   }
   return $filepath
}


function InstallMiniconda ($python_version, $architecture, $python_home) {
    Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
    if (Test-Path $python_home) {
        Write-Host $python_home "already exists, skipping."
        return $false
    }
    if ($architecture -match "32") {
        $platform_suffix = "x86"
    } else {
        $platform_suffix = "x86_64"
    }

    $filepath = DownloadMiniconda $python_version $platform_suffix
    Write-Host "Installing" $filepath "to" $python_home
    $install_log = $python_home + ".log"
    $args = "/S /D=$python_home"
    Write-Host $filepath $args
    Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru
    if (Test-Path $python_home) {
        Write-Host "Python $python_version ($architecture) installation complete"
    } else {
        Write-Host "Failed to install Python in $python_home"
        Get-Content -Path $install_log
        Exit 1
    }
}


function InstallCondaPackages ($python_home, $spec) {
    $conda_path = $python_home + "\Scripts\conda.exe"
    $args = "install --yes " + $spec
    Write-Host ("conda " + $args)
    Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
}

function UpdateConda ($python_home) {
    $conda_path = $python_home + "\Scripts\conda.exe"
    Write-Host "Updating conda..."
    $args = "update --yes conda"
    Write-Host $conda_path $args
    Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
}


function main () {
    InstallMiniconda $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON
    UpdateConda $env:PYTHON
    InstallCondaPackages $env:PYTHON "conda-build=1.4.0 pip jinja2 binstar"
}

main
Original line number Original line Diff line number Diff line
// Emacs mode hint: -*- mode: JavaScript -*-

function Controller() {
    installer.autoRejectMessageBoxes();
    installer.installationFinished.connect(function() {
        gui.clickButton(buttons.NextButton);
    })
}

Controller.prototype.WelcomePageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.CredentialsPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.IntroductionPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.TargetDirectoryPageCallback = function()
{
    gui.currentPageWidget().TargetDirectoryLineEdit.setText("C:\\Qt\\5.6");
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.ComponentSelectionPageCallback = function() {
    //var widget = gui.currentPageWidget();

    //widget.selectAll();

    gui.clickButton(buttons.NextButton);
}

Controller.prototype.LicenseAgreementPageCallback = function() {
    gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.StartMenuDirectoryPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.ReadyForInstallationPageCallback = function()
{
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
    checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
    gui.clickButton(buttons.FinishButton);
}
+47 −0
Original line number Original line Diff line number Diff line
:: To build extensions for 64 bit Python 3, we need to configure environment
:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of:
:: MS Windows SDK for Windows 7 and .NET Framework 4 (SDK v7.1)
::
:: To build extensions for 64 bit Python 2, we need to configure environment
:: variables to use the MSVC 2008 C++ compilers from GRMSDKX_EN_DVD.iso of:
:: MS Windows SDK for Windows 7 and .NET Framework 3.5 (SDK v7.0)
::
:: 32 bit builds do not require specific environment configurations.
::
:: Note: this script needs to be run with the /E:ON and /V:ON flags for the
:: cmd interpreter, at least for (SDK v7.0)
::
:: More details at:
:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows
:: http://stackoverflow.com/a/13751649/163740
::
:: Author: Olivier Grisel
:: License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
@ECHO OFF

SET COMMAND_TO_RUN=%*
SET WIN_SDK_ROOT=C:\Program Files\Microsoft SDKs\Windows

SET MAJOR_PYTHON_VERSION="%PYTHON_VERSION:~0,1%"
IF %MAJOR_PYTHON_VERSION% == "2" (
    SET WINDOWS_SDK_VERSION="v7.0"
) ELSE IF %MAJOR_PYTHON_VERSION% == "3" (
    SET WINDOWS_SDK_VERSION="v7.1"
) ELSE (
    ECHO Unsupported Python version: "%MAJOR_PYTHON_VERSION%"
    EXIT 1
)

IF "%PYTHON_ARCH%"=="64" (
    ECHO Configuring Windows SDK %WINDOWS_SDK_VERSION% for Python %MAJOR_PYTHON_VERSION% on a 64 bit architecture
    SET DISTUTILS_USE_SDK=1
    SET MSSdk=1
    "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Setup\WindowsSdkVer.exe" -q -version:%WINDOWS_SDK_VERSION%
    "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release
    ECHO Executing: %COMMAND_TO_RUN%
    call %COMMAND_TO_RUN% || exit 1
) ELSE (
    ECHO Using default MSVC build environment for 32 bit architecture
    ECHO Executing: %COMMAND_TO_RUN%
    call %COMMAND_TO_RUN% || exit 1
)

ci/appveyor/sakia.iss

0 → 100644
+107 −0
Original line number Original line Diff line number Diff line
#define MyAppName "Sakia"
#define MyAppPublisher "Sakia team"
#define MyAppURL "http://sakia-wallet.org"
#define MyAppExeName "sakia.exe"

#if !Defined(ROOT_PATH)
#define ROOT_PATH "."
#endif

#define MyAppSrc ROOT_PATH
#define MyAppExe ROOT_PATH + "\dist\sakia\" + MyAppExeName
#pragma message MyAppSrc

#if !FileExists(MyAppExe)
#error "Unable to find MyAppExe"
#endif

#define MyAppVerStr "0.53.2"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVerStr}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputDir={#ROOT_PATH}
OutputBaseFilename={#MyAppName}
Compression=lzma
SolidCompression=yes
UninstallDisplayIcon={app}\{#MyAppExeName}

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "french"; MessagesFile: "compiler:Languages\French.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "{#MyAppSrc}\dist\sakia\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs
Source: "{#MyAppSrc}\sakia.ico"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs
Source: "{#MyAppSrc}\sakia.png"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs
Source: "{#MyAppSrc}\LICENSE"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs
Source: "{#MyAppSrc}\ci\appveyor\after_install.cmd"; DestDir: "{app}\"; Flags: ignoreversion
Source: "{#MyAppSrc}\ci\appveyor\vcredist_x86.exe"; DestDir: "{tmp}\"; Flags: ignoreversion deleteafterinstall
Source: "{#MyAppSrc}\ci\appveyor\vcredist_x64.exe"; DestDir: "{tmp}\"; Flags: ignoreversion deleteafterinstall

[Icons]
Name: "{group}\{#MyAppName}"; IconFilename: "{app}\sakia.ico"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; IconFilename: "{app}\sakia.ico"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
#define VCmsg "Installing Microsoft Visual C++ Redistributable...."

[Run]
Filename: "{tmp}\vcredist_x86.exe"; StatusMsg: "{#VCmsg}"; Check: not IsWin64 and not VCinstalled
Filename: "{tmp}\vcredist_x64.exe"; StatusMsg: "{#VCmsg}"; Check: IsWin64 and not VCinstalled
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\after_install.cmd"; Description: "Delete ALL existing data"; Flags: postinstall nowait skipifsilent unchecked

[Code]
function VCinstalled: Boolean;
 // By Michael Weiner <mailto:spam@cogit.net>
 // Function for Inno Setup Compiler
 // 13 November 2015
 // Returns True if Microsoft Visual C++ Redistributable is installed, otherwise False.
 // The programmer may set the year of redistributable to find; see below.
 var
  names: TArrayOfString;
  i: Integer;
  dName, key, year: String;
 begin
  // Year of redistributable to find; leave null to find installation for any year.
  year := '';
  Result := False;
  key := 'Software\Microsoft\Windows\CurrentVersion\Uninstall';
  // Get an array of all of the uninstall subkey names.
  if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, key, names) then
   // Uninstall subkey names were found.
   begin
    i := 0
    while ((i < GetArrayLength(names)) and (Result = False)) do
     // The loop will end as soon as one instance of a Visual C++ redistributable is found.
     begin
      // For each uninstall subkey, look for a DisplayName value.
      // If not found, then the subkey name will be used instead.
      if not RegQueryStringValue(HKEY_LOCAL_MACHINE, key + '\' + names[i], 'DisplayName', dName) then
       dName := names[i];
      // See if the value contains both of the strings below.
      Result := (Pos(Trim('Visual C++ ' + year),dName) * Pos('Redistributable',dName) <> 0)
      i := i + 1;
     end;
   end;
 end;

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{2F4DA7A9-B15B-06FC-474C-A470394CAEAA}
LicenseFile="{#MyAppSrc}\LICENSE"

ci/appveyor/tests.cmd

0 → 100644
+18 −0
Original line number Original line Diff line number Diff line
@ECHO ON

call activate test-environment

echo "%PATH%"
echo "%QT_PLUGIN_PATH%"

python -V
call pyuic5 --version

pyrcc5 -version

lrelease -version

echo "%cd%"
py.test tests/

if %errorlevel% neq 0 exit /b 1
 No newline at end of file
+11 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

cd $HOME/build/duniter/sakia
pyenv shell $PYENV_PYTHON_VERSION

coverage -rm
coveralls
 No newline at end of file
+20 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash

if [ $TRAVIS_OS_NAME == "osx" ]
then
    zip -r sakia-${TRAVIS_OS_NAME}.zip dist/sakia.app/
elif [ $TRAVIS_OS_NAME == "linux" ]
then
    zip -r sakia-${TRAVIS_OS_NAME}.zip dist/sakia/

    # Debian package
    chmod 755 ci/travis/debian/DEBIAN/post*
    chmod 755 ci/travis/debian/DEBIAN/pre*
    mkdir -p ci/travis/debian/opt/sakia

    cp sakia.png ci/travis/debian/opt/sakia/
    cp sakia-${TRAVIS_OS_NAME}.zip ci/travis/debian/opt/sakia/sakia.zip
    cp -r res/linux/usr ci/travis/debian
    fakeroot dpkg-deb --build ci/travis/debian
    mv ci/travis/debian.deb sakia-${TRAVIS_OS_NAME}.deb
fi
+61 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash


if [ $TRAVIS_OS_NAME == "linux" ]
then
    export XVFBARGS="-screen 0 1280x1024x24"
    export DISPLAY=:99.0
    sh -e /etc/init.d/xvfb start
    sleep 3
fi

if [ $TRAVIS_OS_NAME == "osx" ]
then
    brew update
    brew install libsodium
    ## Ensure your brew QT version is up to date. (brew install qt -> qt 4.8)
    brew install qt5
    brew list qt5
    brew install pyenv-virtualenv
elif [ $TRAVIS_OS_NAME == "linux" ]
then
    sudo apt-get update
    sudo apt-get install -qq -y libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 \
            libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev \
            libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 \
            libxcb-render-util0-dev libxcb-glx0-dev libgl1-mesa-dri libegl1-mesa libpcre3 libgles2-mesa-dev \
            freeglut3-dev libfreetype6-dev xorg-dev xserver-xorg-input-void xserver-xorg-video-dummy xpra libosmesa6-dev \
            curl libdbus-1-dev libdbus-glib-1-dev autoconf automake libtool libgstreamer-plugins-base0.10-0 dunst fakeroot \
            dbus-x11
    wget https://download.qt.io/official_releases/qt/5.9/5.9.4/qt-opensource-linux-x64-5.9.4.run
    chmod +x qt-opensource-linux-x64-5.9.4.run
    ./qt-opensource-linux-x64-5.9.4.run -v --script $HOME/build/duniter/sakia/ci/travis/qt-installer-noninteractive.qs

    wget http://archive.ubuntu.com/ubuntu/pool/universe/libs/libsodium/libsodium18_1.0.13-1_amd64.deb
    sudo dpkg -i libsodium18_1.0.13-1_amd64.deb
    rm -r ~/.pyenv
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    ldconfig -p
    #export $(dbus-launch)

fi

eval "$(pyenv init -)"

pyenv update
pyenv install --list
if [ $TRAVIS_OS_NAME == "osx" ]
then
    env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install $PYENV_PYTHON_VERSION
elif [ $TRAVIS_OS_NAME == "linux" ]
then
    PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install --force $PYENV_PYTHON_VERSION
fi

pyenv shell $PYENV_PYTHON_VERSION

cd $HOME

ci/travis/build.sh

0 → 100755
+45 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

cd $HOME/build/duniter/sakia

pyenv shell $PYENV_PYTHON_VERSION
pip install --upgrade pip
pyenv rehash
pip install coveralls
pip install pytest-cov
pip install pyinstaller==3.3.1
pip install wheel
pip install -r requirements.txt
if [ $TRAVIS_OS_NAME == "linux" ]
then
    pip install -U git+https://github.com/posborne/dbus-python.git
    pip install notify2

    export PATH=/tmp/qt/5.8/5.8/gcc_64/bin:$PATH
fi
if [ $TRAVIS_OS_NAME == "osx" ]
then
    brew link --force qt5
    export PATH=/Users/travis/.pyenv/versions/$PYENV_PYTHON_VERSION/Python.framework/Versions/3.5/bin:$PATH
fi

echo $PATH
python gen_resources.py
python gen_translations.py --lrelease

if [ $TRAVIS_OS_NAME == "osx" ]
then
    pyinstaller sakia.spec
    cp -rv dist/sakia/* dist/sakia.app/Contents/MacOS
    cp -v res/osx/Info.plist dist/sakia.app/Contents/
    rm -rfv dist/sakia
elif [ $TRAVIS_OS_NAME == "linux" ]
then
    pyinstaller sakia.spec
    rm -f dist/sakia/libdrm.so.2
    python setup.py bdist_wheel
fi
+8 −0
Original line number Original line Diff line number Diff line
Package: sakia
Version: 0.53.2
Section: misc
Priority: optional
Architecture: all
Installed-Size: 122000
Maintainer: inso <insomniak.fr@gmail.com>
Description: Sakia Wallet
+9 −0
Original line number Original line Diff line number Diff line
#!/bin/bash

SAKIA_ROOT=/opt/sakia

unzip -d $SAKIA_ROOT/ $SAKIA_ROOT/sakia.zip
mv $SAKIA_ROOT/dist/sakia/* $SAKIA_ROOT/
rm $SAKIA_ROOT/sakia.zip

ln -s /opt/sakia/sakia.bin /usr/bin/sakia
+4 −0
Original line number Original line Diff line number Diff line
#!/bin/bash

rm /usr/bin/sakia
rm -Rf /opt/sakia
Original line number Original line Diff line number Diff line
// Emacs mode hint: -*- mode: JavaScript -*-

function Controller() {
    installer.autoRejectMessageBoxes();
    installer.installationFinished.connect(function() {
        gui.clickButton(buttons.NextButton);
    })
}

Controller.prototype.WelcomePageCallback = function() {
    gui.clickButton(buttons.NextButton, 3000);
}

Controller.prototype.CredentialsPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.IntroductionPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.TargetDirectoryPageCallback = function()
{
    gui.currentPageWidget().TargetDirectoryLineEdit.setText("/tmp/qt/5.8");
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.ComponentSelectionPageCallback = function() {
    var widget = gui.currentPageWidget();

    widget.selectAll();

    gui.clickButton(buttons.NextButton);
}

Controller.prototype.LicenseAgreementPageCallback = function() {
    gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.StartMenuDirectoryPageCallback = function() {
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.ReadyForInstallationPageCallback = function()
{
    gui.clickButton(buttons.NextButton);
}

Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
    checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
    gui.clickButton(buttons.FinishButton);
}

ci/travis/test.sh

0 → 100755
+30 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

if [ $TRAVIS_OS_NAME == "linux" ]
then
    export XVFBARGS="-screen 0 1280x1024x24"
    export DISPLAY=:99.0
    sh -e /etc/init.d/xvfb start
    sleep 3
fi

if [ $TRAVIS_OS_NAME == "osx" ]
then
    brew link --force qt5
    export PATH=/Users/travis/.pyenv/versions/$PYENV_PYTHON_VERSION/Python.framework/Versions/3.5/bin:$PATH
fi

cd $HOME/build/duniter/sakia
pyenv shell $PYENV_PYTHON_VERSION
if [ $TRAVIS_OS_NAME == "linux" ]
then
    py.test --cov=sakia tests/
else
    py.test -s
fi

data.txt

deleted100644 → 0
+0 −25
Original line number Original line Diff line number Diff line
{
    "localAccounts": [
        {
            "communities": [
                {
                    "currency": "beta_brousouf", 
                    "nodes": [
                        {
                            "port": 9101, 
                            "server": "ucoin.twiced.fr"
                        }
                    ]
                }
            ], 
            "name": "Inso", 
            "pgpKeyId": "3EA42BBCAAD72714", 
            "wallets": [
                {
                    "coins": [], 
                    "currency": "beta_brousouf"
                }
            ]
        }
    ]
}
 No newline at end of file

doc/Specifications.md

deleted100644 → 0
+0 −21
Original line number Original line Diff line number Diff line
# Specifications

## Client-side concepts

### Account
 * An account is a PGP Key
 * An account can be a member of multiple communities
 * An account own at least one wallet for each currency he owns
 * An account can own multiple wallets of the same currency
 * An account must declare the nodes he trusts to receive transactions
 * An account must declare the nodes he uses to send transactions for a currency type

### Community
 * A community uses one unique currency
 * A community has members
 * Each members of the community can issue currency following the rule defined in the community amendment

### Wallets
 * Wallets can own only one type of currency
 * Wallets value are the sum of the transactions received and sent that the user listed in this wallet
 
 No newline at end of file

doc/cutecoint_concept.ui

deleted100644 → 0
+0 −324
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>452</width>
    <height>400</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string notr="true">CuteCoin</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QHBoxLayout" name="horizontalLayout_2">
    <item>
     <widget class="QFrame" name="actionsFrame">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
        <widget class="QTabWidget" name="tabWidget">
         <property name="currentIndex">
          <number>0</number>
         </property>
         <widget class="QWidget" name="walletsTab">
          <attribute name="title">
           <string>Wallets</string>
          </attribute>
          <layout class="QHBoxLayout" name="horizontalLayout">
           <item>
            <widget class="QListWidget" name="listWidget_2">
             <item>
              <property name="text">
               <string>Main wallet (uCoins)</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>Freecoins wallet (freeCoins)</string>
              </property>
             </item>
            </widget>
           </item>
           <item>
            <widget class="QListWidget" name="listWidget_3">
             <item>
              <property name="text">
               <string>+10</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>-100</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>-30</string>
              </property>
             </item>
             <item>
              <property name="text">
               <string>+300</string>
              </property>
             </item>
            </widget>
           </item>
          </layout>
         </widget>
         <widget class="QWidget" name="transactionsTab">
          <attribute name="title">
           <string>Transactions</string>
          </attribute>
          <layout class="QHBoxLayout" name="horizontalLayout_3">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_3">
             <item>
              <widget class="QLabel" name="label">
               <property name="text">
                <string>Sent</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QListWidget" name="listWidget">
               <item>
                <property name="text">
                 <string>100 to Caner Candan (0x5D2662E0F300EBAD)</string>
                </property>
               </item>
               <item>
                <property name="text">
                 <string>30 to cgeek twicedd (0x399EB3415C237F93)</string>
                </property>
               </item>
              </widget>
             </item>
            </layout>
           </item>
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_2">
             <item>
              <widget class="QLabel" name="label_2">
               <property name="text">
                <string>Received</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QListWidget" name="listWidget_4">
               <item>
                <property name="text">
                 <string>10 from Caner Candan  (0x5D2662E0F300EBAD)</string>
                </property>
               </item>
              </widget>
             </item>
            </layout>
           </item>
          </layout>
         </widget>
         <widget class="QWidget" name="communitiesTab">
          <attribute name="title">
           <string>Communities</string>
          </attribute>
          <layout class="QHBoxLayout" name="horizontalLayout_4">
           <item>
            <widget class="QTabWidget" name="tabWidget_2">
             <property name="currentIndex">
              <number>1</number>
             </property>
             <widget class="QWidget" name="ucoinTab">
              <attribute name="title">
               <string>Ucoin</string>
              </attribute>
             </widget>
             <widget class="QWidget" name="freecoinTab">
              <attribute name="title">
               <string>FreeCoin</string>
              </attribute>
              <layout class="QHBoxLayout" name="horizontalLayout_5">
               <item>
                <layout class="QVBoxLayout" name="verticalLayout_4">
                 <item>
                  <widget class="QLabel" name="label_3">
                   <property name="text">
                    <string>Members</string>
                   </property>
                  </widget>
                 </item>
                 <item>
                  <widget class="QListWidget" name="listWidget_5">
                   <item>
                    <property name="text">
                     <string>Mister K</string>
                    </property>
                   </item>
                   <item>
                    <property name="text">
                     <string>Another guy</string>
                    </property>
                   </item>
                   <item>
                    <property name="text">
                     <string>Inso sonI</string>
                    </property>
                   </item>
                  </widget>
                 </item>
                </layout>
               </item>
               <item>
                <layout class="QVBoxLayout" name="verticalLayout_5">
                 <item>
                  <widget class="QLabel" name="label_4">
                   <property name="text">
                    <string>Last issuance</string>
                   </property>
                  </widget>
                 </item>
                 <item>
                  <widget class="QListWidget" name="listWidget_6">
                   <item>
                    <property name="text">
                     <string>110 (27/12/2014)</string>
                    </property>
                   </item>
                   <item>
                    <property name="text">
                     <string>140 (27/01/2015)</string>
                    </property>
                   </item>
                   <item>
                    <property name="text">
                     <string>190 (27/02/2015)</string>
                    </property>
                   </item>
                  </widget>
                 </item>
                </layout>
               </item>
              </layout>
             </widget>
            </widget>
           </item>
          </layout>
         </widget>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>452</width>
     <height>20</height>
    </rect>
   </property>
   <widget class="QMenu" name="menuTr_File">
    <property name="title">
     <string>Account</string>
    </property>
    <addaction name="actionChange_account"/>
    <addaction name="actionManage_accounts"/>
    <addaction name="actionConfigure_trustable_nodes"/>
   </widget>
   <widget class="QMenu" name="menuEdit">
    <property name="title">
     <string>Contacts</string>
    </property>
    <widget class="QMenu" name="menuCaner_Candan">
     <property name="title">
      <string>Caner Candan</string>
     </property>
     <addaction name="separator"/>
     <addaction name="actionSend_a_message"/>
     <addaction name="actionSend_money"/>
     <addaction name="separator"/>
     <addaction name="actionRemove_contact"/>
    </widget>
    <widget class="QMenu" name="menuCGeek">
     <property name="title">
      <string>cGeek</string>
     </property>
     <addaction name="actionSend_a_message_2"/>
     <addaction name="actionSend_money_2"/>
     <addaction name="separator"/>
     <addaction name="actionRemove_contact_2"/>
    </widget>
    <addaction name="menuCaner_Candan"/>
    <addaction name="menuCGeek"/>
    <addaction name="separator"/>
    <addaction name="actionAdd_a_contact"/>
   </widget>
   <addaction name="menuTr_File"/>
   <addaction name="menuEdit"/>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
  <action name="actionChange_account">
   <property name="text">
    <string>Change account</string>
   </property>
  </action>
  <action name="actionManage_accounts">
   <property name="text">
    <string>Manage accounts</string>
   </property>
  </action>
  <action name="actionConfigure_trustable_nodes">
   <property name="text">
    <string>Configure trustable nodes</string>
   </property>
  </action>
  <action name="actionAdd_a_contact">
   <property name="text">
    <string>Add a contact</string>
   </property>
  </action>
  <action name="actionSend_a_message">
   <property name="text">
    <string>Send a message</string>
   </property>
  </action>
  <action name="actionSend_money">
   <property name="text">
    <string>Send money</string>
   </property>
  </action>
  <action name="actionRemove_contact">
   <property name="text">
    <string>Remove contact</string>
   </property>
  </action>
  <action name="actionSend_a_message_2">
   <property name="text">
    <string>Send a message</string>
   </property>
  </action>
  <action name="actionSend_money_2">
   <property name="text">
    <string>Send money</string>
   </property>
  </action>
  <action name="actionRemove_contact_2">
   <property name="text">
    <string>Remove contact</string>
   </property>
  </action>
 </widget>
 <resources/>
 <connections/>
</ui>
+174 −0
Original line number Original line Diff line number Diff line
# Install Sakia for developpers
### Windows install

 * Download and install [vcredist2015](https://www.microsoft.com/fr-FR/download/details.aspx?id=48145)
 * Download and install [Miniconda](http://conda.pydata.org/miniconda.html).
 * Download and install [Git](https://git-scm.com/) and add the binaries path to your `PATH` variable
 * Download and install [Qt 5.6](http://download.qt.io/development_releases/qt/5.6/) for your architecture (msvc2015_64 for 64 bits, msvc2015 for 32 bits)
 * Open Conda console then : `conda update --yes conda`
 * Restart Conda console then : 

```
conda config --add channels inso/channel/sakia
conda create -n sakia-env python=3.5 pyqt5 libsodium=1.0.3
activate sakia-env
pip install -r requirements.txt
pip install pyinstaller
```
 * To run sakia, you have to export the following variable in your conda console : 

```
SET PYTHONPATH=[Path to sakia dir]\\src;%PYTHONPATH%
```

 * Then : 
```batch
python gen_resources.py 
python gen_translations.py
python src/sakia/main.py
```

### Linux & Macos (Pyenv install)
#### Linux System dependencies
##### Fedora
    sudo dnf install libsodium qt5-qtsvg python3-qt5 qt5-qttools \
    qt5-qttools-devel python3-qt5-devel qtchooser openssl-devel zfstream-devel \
    readline-devel sqlite-devel gcc-c++ \
    qt5-qtbase-devel qt5-qtsvg-devel

    sudo ln -s /usr/bin/lrelease-qt5 /usr/bin/lrelease

##### Ubuntu 14.04+ install

    sudo apt-get install curl qt5-qmake qtbase5-dev qttools5-dev-tools libqt5svg5-dev libdbus-1-dev libdbus-glib-1-dev autoconf automake libtool

64 bits:

      wget http://archive.ubuntu.com/ubuntu/pool/universe/libs/libsodium/libsodium13_1.0.1-1_amd64.deb
      sudo dpkg -i libsodium13_1.0.1-1_amd64.deb

32 bits:

     wget http://archive.ubuntu.com/ubuntu/pool/universe/libs/libsodium/libsodium13_1.0.1-1_i386.deb
     sudo dpkg -i libsodium13_1.0.1-1_i386.deb

##### Install pyenv on your home:

* Linux : 
```bash
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
```

Add in `~/.bash_profile`, in `~/.bashrc` on Fedora:
```bash
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv virtualenv-init -)"
eval "$(pyenv init -)"
export PYENV_ROOT="$HOME/.pyenv"
```
Restart your terminal.


#### MacOS system dependencies

Install the following brew packages : 
```bash
brew install wget
brew install libsodium
## Ensure your brew QT version is up to date. (brew install qt -> qt 4.8)
brew install qt5
brew link --force qt5
## Install pyenv
brew install pyenv
brew install pyenv-virtualenv
```

After installation, you'll need to add :  
```bash
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```
to your profile (as stated in the caveats displayed by Homebrew — to display them again, use brew info pyenv). You only need to add that to your profile once.

If you are running El Capitan (MacOS 10.10), you'll need to run `xcode-select --install`

#### Pyenv environment 

##### Build python 3.5.4

Building python 3.5.4 requires libraries of `openssl` and `sqlite3`. On Ubuntu, install it using the following commands : 

```
apt-get update
apt-get install libssl-dev
apt-get install libsqlite3-dev
```

Restart your shell then prepare your virtualenv: 

On GNU/Linux: `PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.4`  
On MacOS: `env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.5.4`

Run:
```bash
pyenv shell 3.5.4
pyenv virtualenv sakia-env
```

#### Build Sakia: 

##### Download Sakia

    git clone https://github.com/duniter/sakia

##### Go to dev branch
```bash
cd sakia && git checkout dev
```

##### Configure your PYTHONPATH environment variable
```bash
export PYTHONPATH=${PYTHONPATH}:/YOUR_SAKIA_INSTALL_PATH/src
```

On Linux, you'll need buildable python-dbus and notify2 :  
```bash
pyenv local sakia-env
pip install PyQt5
pip install -U git+https://github.com/posborne/dbus-python.git
pip install notify2
```

To build sakia dependencies, go in sakia directory then : 
```bash
pip install -r requirements.txt --upgrade
pip install pyinstaller
pyenv rehash
```

##### Run Sakia ressources generator

    python gen_resources.py 

##### Run Sakia translations generator

    python gen_translations.py

##### Build Sakia as a binary
```sh
pyinstaller sakia.spec
```

##### Run Sakia build
```sh
./dist/sakia/sakia
```

##### Run Sakia from sources

    cd src && python sakia/main.py


#### Tips
You could find cache repositories on Unix at `~/.conf/sakia` and on Windows at `%APPDATA%\sakia`.
+67 −0
Original line number Original line Diff line number Diff line
# Install Sakia dev on Fedora

## Install Sakia
### Clone respository
```bash
mkdir -p ~/projects
git clone -b dev git@gihub.com:/duniter/sakia.git ~/projects/sakia_dev
cd ~/projects/sakia_dev
```

### Install pip dependencies
```bash
pip3 install --upgrade pip --user
pip3 install -r requirements.txt --user
```

### Fix Qt link
```bash
sudo ln -s /usr/bin/lrelease-qt5 /usr/bin/lrelease
```

### Script to launch Sakia
```bash
echo "#!/bin/bash

if [ $1 == "dev" ]; then
        python3 $HOME/projects/gen_resources.py
        python3 $HOME/projects/gen_translations.py
        python3 $HOME/projects/src/sakia/main.py -d
fi
if [ $1 == "stable" ]; then
        ./sakia_stable/dist/sakia/sakia -d
fi" >> $HOME/run_sakia.sh
```

## Python path
### Bash
```bash
echo "# Sakia
export PYTHONPATH=$HOME/projects/sakia_dev/src" >> ~/.bashrc
```

### Fish
```bash
echo "# Sakia
set -x PYTHONPATH "$HOME/projects/sakia_dev/src" >> ~/.config/fish/config.fish
```

## Install dependencies
```bash
sudo dnf install -y python3-qt5 python3-jsonschema qt5-qttools-devel python3-qt5-devel libsodium
```

## Launch Sakia
```bash
./run_sakia.sh dev
```

## Upgrade DuniterPy
```bash
sudo pip3 install --upgrade duniterpy
```

## Dependency to build
```bash
sudo pip3 install pyinstaller
```
+88 −0
Original line number Original line Diff line number Diff line
# Developing a plugin for sakia

## Prepare dev environment

Follow the doc file [Install for developers](https://github.com/duniter/sakia/blob/dev/doc/install_for_developers.md).
You can use the same pyenv environment to develop your plugin.

## Plugin structure

The plugin source code should follow the structure below :

```
/
   [plugin_pkg_name]/
      images/                # The directory containing images used in the widget
         images.qrc          # The qt resources .qrc file describing available images
         [image1.png]        # The list of images
         [image2.png]
      __init__.py            # The __init__ file of the plugin
      [script_1.py]          # Some scripts imported in the __init__ file
      [script_2.py]
      [ui_file.ui]           # ui files designed using QtDesigner
```

The `__init__.py` file must set the following global constants :

```python
PLUGIN_NAME = "Title of the plugin"
PLUGIN_DESCRIPTION = "Description of the plugin"
PLUGIN_VERSION = "0.1"
```

The function below must be present in the `__init__.py` file to initialize the plugin on Sakia startup :

```python

def plugin_exec(app, main_window):
    """
    :param sakia.app.Application app:
    :param sakia.gui.main_window.controller.MainWindowController main_window:
    """
    # Place your init code here
    pass
```

## Building your plugin

To build the plugin, you need :

### To generate resources (images, qrc, ...)

Generating resources uses [pyrcc5](http://pyqt.sourceforge.net/Docs/PyQt5/resources.html).
Generating designer ui files uses [pyuic5](http://pyqt.sourceforge.net/Docs/PyQt5/designer.html).

To help you generate your resources, you should copy the `gen_resources.py` file from sakia sources and configure the
 variable `gen_resources`. Replace `'src'` by the name of your plugin package.

### To import your resources in your code

The generation of the resources builds the following python files :

 - `filename.ui` -> `filename_uic.py`
 - `filename.qrc` -> `filename_rc.py`

The `filename_uic.py` file should be imported in the file using the designed widget. See the
[dialog of the example plugin](https://github.com/Insoleet/sakia-plugin-example/blob/master/plugin_example/main_dialog.py)

The `filename_rc.py` file should be imported in the `__init__.py` file, on the last line. See the
[\__init__.py of the example plugin](https://github.com/Insoleet/sakia-plugin-example/blob/master/plugin_example/__init__.py#L28)

### To generate your plugin

To generate your plugin, you must zip everything (generated resources) in a zip file respecting the structure below :

```
[plugin_name].zip\
    [plugin_name]\
        __init__.py
        [generated files...]
```

The [setup.py](https://github.com/Insoleet/sakia-plugin-example/blob/master/setup.py) file from the
example plugin is available to help you generate correctly the plugin.

### To test your plugin

To test your plugin, you need to run sakia with the parameter `--withplugin [path to zip file]`. The plugin will
be loaded automatically on startup but won't be installed to user profile directory.
 No newline at end of file

doc/uml/backend.pu

0 → 100644
+51 −0
Original line number Original line Diff line number Diff line
@startuml

!include data.pu
!include processors.pu
!include services.pu

ProfileService "1" --> "1" UserParameters
ProfileService "*" --> "1" UserParametersRepo

AccountService "1" --> "1" Key
AccountService "*" --> "1" KeyRepo


TransactionsService "1" --> "*" Transaction
TransactionsService "*" --> "1" TransactionProcessor
TransactionProcessor "1" --> "1" TransactionRepo

RegistryService "1" --> "*" Identity
RegistryService "1" --> "*" Certification
RegistryService "*" --> "1" IdentitiesProcessor
IdentitiesProcessor "1" --> "1" IdentitiesRepo
RegistryService "*" --> "1" CertificationProcessor
CertificationProcessor "1" --> "1" CertificationRepo

NetworkService "1" --> "*" Node
NetworkService "*" --> "1" NodesProcessor
NodesProcessor "1" --> "1" NodesRepo

BlockchainService "1" --> "1" Blockchain
BlockchainService "1" --> "1" Community
BlockchainService "*" --> "1" BlockchainProcessor
BlockchainProcessor "1" --> "1" BlockchainRepo
BlockchainService "*" --> "1" CommunityProcessor
CommunityProcessor "1" --> "1" CommunityRepo

package Connectors {
    class BMAConnector << (S,cyan) >>  {
        get()
        post()
        broadcast()
    }
}

AccountService --> BMAConnector
BlockchainProcessor --> BMAConnector
CommunityProcessor --> BMAConnector
TransactionProcessor --> BMAConnector
IdentitiesProcessor --> BMAConnector
CertificationProcessor --> BMAConnector

@enduml
 No newline at end of file

doc/uml/data.pu

0 → 100644
+180 −0
Original line number Original line Diff line number Diff line
@startuml


class Identity << (D,orchid) >> {
    currency: str (FK)
    uid: str
    pubkey: str (PK)
    blockstamp: BlockUID
    timestamp: int
    signature: str
    written_on: BlockUID
    revoked_on: BlockUID
    member: bool
    membership_buid: BlockUID
    membership_timestamp: int
    membership_type: str
    membership_written_on: BlockUID
}

class Certification << (D,orchid) >> {
    currency: str (PK)
    certifier: str (PK)
    certified: str (PK)
    blockstamp: BlockUID (PK)
    timestamp: int
    signature: str
    written_on: BlockUID
}

class Transaction  << (D,orchid) >> {
    currency: str (FK)
    blockstamp: str
    locktime: int
    issuer: str
    recipient: str
    amount: int
    comment: str
    sha_hash: str (PK)
}

class Community  << (D,orchid) >> {
    profile: str (FK)
    pubkey: str (FK)
    currency: str (PK)
    c: float
    dt: int
    ud0: int
    sig_period: int
    sig_stock: int
    sig_window: int
    sig_validity: int
    sig_qty: int
    xpercent: float
    ms_validity: int
    step_max: int
    median_time_blocks: int
    avg_gen_time: int
    dt_diff_eval: int
    blocks_rot: int
    percent_rot: float
}

class Blockchain  << (D,orchid) >> {
    currency: str (PK)
    current_buid: BlockUID
    nb_members: int
    current_mass: int
    median_time: int
    last_ud: int
    last_ud_base: int
    previous_mass: int
}

class Node  << (D,orchid) >> {
    currency: str (FK)
    endpoints: str
    uid: str
    pubkey: str (PK)
    current_buid: BlockUID
    previous_buid: BlockUID
    state: int
    software: str
    version: str
    merkle_nodes: dict
}

class Key  << (D,orchid) >> {
    pubkey: str (PK)
    salt: str
}

class UserParameters  << (D,orchid) >> {
    profile: str (PK)
    lang: str
    ref: 0
    expert_mode: bool,
    digits_after_comma: int
    maximized: bool
    notifications: bool
    enable_proxy: bool
    proxy_type: int
    proxy_address: str
    proxy_port: 8080: int
    international_system_of_units: bool
    auto_refresh: bool
    forgetfulness: bool
}

class UserParametersRepo << (R,orange) >> {
    Create()
    Update()
    Save()
    Drop()
}


class KeyRepo << (R,orange) >>  {
    Create()
    Update()
    Save()
    Drop()
}


class NodesRepo << (R,orange) >>   {
    Create()
    Update()
    Save()
    Drop()
}

class BlockchainRepo << (R,orange) >>  {
    Create()
    Update()
    Save()
    Drop()
}
class CommunityRepo << (R,orange) >>  {
    Commit()
    Update()
    Save()
    Drop()
}
class TransactionRepo << (R,orange) >>  {
    Commit()
    Update()
    Save()
    Drop()
}
class CertificationRepo  << (R,orange) >> {
    Commit()
    Update()
    Save()
    Drop()
}
class IdentitiesRepo  << (R,orange) >>  {
    Commit()
    Update()
    Save()
    Drop()
}

IdentitiesRepo "1" --* "*" Identity

CertificationRepo "1" --* "*" Certification

TransactionRepo "1" --* "*" Transaction

CommunityRepo "1" --* "*" Community

BlockchainRepo "1" --* "*" Blockchain

NodesRepo "1" --* "*" Node

KeyRepo "1" --* "*" Key

UserParametersRepo "1" --* "*" UserParameters


@enduml
 No newline at end of file

doc/uml/models.pu

deleted100644 → 0
+0 −44
Original line number Original line Diff line number Diff line
@startuml

class Account {
	pgpkey
}

Account --> "0..*" Community : is a member of
Account --> "0..*" Node : trusts
Account --> "0..*" Node : send transactions with
Account --> "*" Transaction : send
Account --> "*" Transaction : receive
Account --> "0..*" Wallet : owns

class Community {
}

Community "1" -- "1" Currency : uses
Community "1" --> "1..*" Node : known nodes

class Node {
	address
	port
	auth
}

Node --> "1" Community

class Transaction {
	value
	currency
	sender
	receiver
}

class Wallet {
	currency
	coins
}



@enduml

doc/uml/network.pu

0 → 100644
+20 −0
Original line number Original line Diff line number Diff line
@startuml

Network -->o Node : Connect to node_received()
Network -> Node : Starts network discovery
activate Node
Node -> duniterpy : HTTP GET peering/peers?leaves=true
alt "root" hash changed
loop "for all leaves changed"
activate Node
Node -> duniterpy : HTTP GET peering/peers/leaf=leaf_hash
end
end
Network <-- Node : node_received()
ref over Network
New node is instanciated
if pubkey not known yet.
It starts it's own
network discovery
end ref
@enduml
 No newline at end of file

doc/uml/processors.pu

0 → 100644
+21 −0
Original line number Original line Diff line number Diff line
@startuml


class IdentitiesProcessor  << (P,lightgreen) >> {
    find_identities()
    find_certifiers_of()
    find_certified_by()
}

class CertificationProcessor  << (P,lightgreen) >> {
}
class TransactionProcessor  << (P,lightgreen) >> {
}
class CommunityProcessor  << (P,lightgreen) >> {
}
class BlockchainProcessor  << (P,lightgreen) >> {
}
class NodesProcessor  << (P,lightgreen) >> {
}

@enduml
 No newline at end of file

doc/uml/requests.pu

0 → 100644
+27 −0
Original line number Original line Diff line number Diff line
@startuml

activate "Core Component"
"Core Component" -> BmaAccess : Request data
BmaAccess -> BmaAccess : Request cache
ref over BmaAccess
    Data is obsolete
    (new block mined
    since last caching)
end ref
BmaAccess -> duniterpy : HTTP GET
alt Rollback
BmaAccess -> BmaAccess : Find last block number rollbacked
ref over BmaAccess
    If the request is a bma/blockchain/Block, we check if the hash answered is the same
    as our hash, in which case, we know that the rollback didn't reset blocks before
    this one.
    Blocks from this one to the current block are considered obsolete
end ref
end
BmaAccess -> BmaAccess : Update cache data

"Core Component" <- BmaAccess : Return data data
deactivate "Core Component"


@enduml
 No newline at end of file

doc/uml/services.pu

0 → 100644
+36 −0
Original line number Original line Diff line number Diff line
@startuml



class ProfileService << (S,cyan) >>  {
    add_connection()
    remove_connection()
}

class AccountService << (S,cyan) >>  {
    send_transaction()
    send_certification()
    send_membership()
    send_identity()
    send_revokation()
}

class TransactionsService << (S,cyan) >>  {
    handle_new_block()
    refresh_transactions()
    rollback_transactions()
}

class RegistryService << (S,cyan) >> {
    handle_new_block()
}

class NetworkService << (S,cyan) >>  {
    discover_network()
}

class BlockchainService  << (S,cyan) >>  {
    receive_block()
}

@enduml
 No newline at end of file
+1 −0
Original line number Original line Diff line number Diff line
@startuml

note "With B a Block\nWith W the Median fork window\nWith Cur the current block of the main branch\nWith T a time" as N1
state Local_Tx {
 [*] --> To_send : Signed locally
 To_send : B = none
 To_send --> Awaiting : Node answered\n200 OK to POST
 Awaiting : Time = Cur.MedianTime
 Awaiting --> Refused : Not registered in [T; T+W*MedianTime]
 Refused --> To_send : Send back
 Refused --> [*] : Drop
}
state Registered {
 [*] --> Validating : Posted\nsin the blockchain
 Validating : B = Block containing the Tx
 Awaiting --> Validating : Found in the blockchain
 Validating --> Validated : Cur-B > W
 Validated --> Validating : Blockchain\nrollback\ntx in fork window
 Validated --> Awaiting : Blockchain\nrollback\ntx local removed
 Validated --> [*] : Blockchain\nrollback\ntx removed
 Validating --> [*] : Blockchain\nrollback\ntx removed
}

@enduml
 No newline at end of file

gen_resources.py

0 → 100644
+47 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, multiprocessing, subprocess


root_path = os.path.abspath(os.path.join(os.path.dirname(__file__)))
resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res'))
gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src/sakia'))

def convert_ui(args, **kwargs):
    subprocess.call(args, **kwargs)

def build_resources():
    try:
        to_process = []
        for root, dirs, files in os.walk(root_path):
            for f in files:
                if f.endswith('.ui'):
                    source = os.path.join(root, f)
                    dest = os.path.join(root, os.path.splitext(os.path.basename(source))[0]+'_uic.py')

                    exe = 'pyuic5'
                elif f.endswith('.qrc'):
                    source = os.path.join(root, f)
                    filename = os.path.splitext(os.path.basename(source))[0]
                    # we remove "sakia." from the rc filename
                    # its only named like this so that imports are corrects in uic files
                    dest = os.path.join(gen_resources, filename.replace('sakia.', '')+'_rc.py')
                    exe = 'pyrcc5'
                else:
                    continue
                print(source + " >> " + dest)
                to_process.append([exe, '-o', dest, source])

        if sys.platform.startswith('win'):
            # doing this in parallel on windows will crash your computer
            [convert_ui(args, shell=True) for args in to_process]
        else:
            pool = multiprocessing.Pool()
            pool.map(convert_ui, to_process)
    except EnvironmentError:
        print("""\
Warning: PyQt5 development utilities (pyuic5 and pyrcc5) not found
Unable to install praxes' graphical user interface
""")

build_resources()
 No newline at end of file

gen_translations.py

0 → 100644
+72 −0
Original line number Original line Diff line number Diff line
import sys, os, multiprocessing, subprocess, time, shutil

gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src/sakia'))
ts = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res', 'i18n', 'ts'))
qm = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res', 'i18n', 'qm'))
if not os.path.exists(qm):
    os.mkdir(qm)

translations = []
qm_files = []
qm_shortnames = []


def prepare_qm():
    for root, dirs, files in os.walk(ts):
        for f in files:
            if f.endswith('.ts'):
                tsfilename = os.path.join(root, f)
                qmshort = "{0}qm".format(f[:-2])
                qmfilename = os.path.join(qm, qmshort)
                srcdest = (tsfilename, qmfilename)
                translations.append(srcdest)
                qm_shortnames.append(qmshort)
            else:
                continue
            print(os.path.join(root, f))

    for (ts_file, qm_file) in translations:
        # avoid conflict with qt4 lrelease by running qtchooser directly
        if sys.platform.startswith('win') or shutil.which("qtchooser") == None or "--lrelease" in sys.argv:
            subprocess.call(["lrelease", ts_file, "-qm", qm_file])
        else:
            subprocess.call(["qtchooser", "-run-tool=lrelease", "-qt=5", ts_file, "-qm", qm_file])
        print(ts_file + " >> " + qm_file)


def build_resources():
    files = ""
    for file in qm_shortnames:
        files += """
<file alias="{0}">qm/{0}.qm</file>""".format(file[:-3])
    rccfile = """<RCC>
      <qresource prefix="i18n">{0}
      </qresource>
    </RCC>
    """.format(files)
    print(rccfile)

    qrc_filename = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                                'res',
                                                'i18n',
                                                'langs-{0}.qrc'.format(int(time.time()))
                                                ))

    pyc_filename = os.path.abspath(os.path.join(gen_resources, 'i18n_rc.py'))
    with open(qrc_filename, 'w') as outfile:
        outfile.write(rccfile)

    try:
        subprocess.call(["pyrcc5", "-o", pyc_filename, qrc_filename])
        print(qrc_filename + " >> " + pyc_filename)
    finally:
        os.remove(qrc_filename)


prepare_qm()
# add Qt standardButtons qm file
# This file must be copied from Qt libs in the res/i18n/qm folder of the project
qtbase_filename = "qtbase_fr.qm"
if os.path.exists(os.path.join(qm, qtbase_filename)):
    qm_shortnames.append(qtbase_filename)
build_resources()
+26 −0
Original line number Original line Diff line number Diff line
#-----------------------------------------------------------------------------
# Copyright (c) 2013-2016, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License with exception
# for distributing bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------


hiddenimports = ['sip', 'PyQt5.QtCore']

from PyInstaller.utils.hooks import qt_plugins_binaries
from PyInstaller.compat import is_linux


binaries = []
binaries.extend(qt_plugins_binaries('accessible', namespace='PyQt5'))
binaries.extend(qt_plugins_binaries('iconengines', namespace='PyQt5'))
binaries.extend(qt_plugins_binaries('imageformats', namespace='PyQt5'))
binaries.extend(qt_plugins_binaries('inputmethods', namespace='PyQt5'))
binaries.extend(qt_plugins_binaries('graphicssystems', namespace='PyQt5'))
binaries.extend(qt_plugins_binaries('platforms', namespace='PyQt5'))

if is_linux:
    binaries.extend(qt_plugins_binaries('platformthemes', namespace='PyQt5'))

hooks/hook-lib2to3.py

0 → 100644
+15 −0
Original line number Original line Diff line number Diff line
#-----------------------------------------------------------------------------
# Copyright (c) 2005-2016, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License with exception
# for distributing bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------

# This is needed to bundle draft3.json and draft4.json files that come
# with jsonschema module

from PyInstaller.utils.hooks import collect_data_files

datas = collect_data_files('lib2to3')
+12 −0
Original line number Original line Diff line number Diff line
#-----------------------------------------------------------------------------
# Copyright (c) 2005-2016, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License with exception
# for distributing bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------


from PyInstaller.utils.hooks import collect_submodules
hiddenimports = collect_submodules('pkg_resources._vendor')
 No newline at end of file

release.sh

0 → 100755
+18 −0
Original line number Original line Diff line number Diff line
#!/bin/bash

#__version_info__ = ('0', '20', '0dev6')
current=`grep -P "__version_info__ = \(\"\d+\", \"\d+\", \"\d+(\w*)\"\)" src/sakia/__init__.py | grep -oP "\"\d+\", \"\d+\", \"\d+(\w*)\""`
echo "Current version: $current"

if [[ $1 =~ ^[0-9]+.[0-9]+.[0-9]+[0-9A-Za-z]*$ ]]; then
  IFS='.' read -r -a array <<< "$1"
  sed -i "s/__version_info__\ = ($current)/__version_info__ = (\"${array[0]}\", \"${array[1]}\", \"${array[2]}\")/g" src/sakia/__init__.py
  sed -i "s/#define MyAppVerStr .*/#define MyAppVerStr \"$1\"/g" ci/appveyor/sakia.iss
  sed -i "s/Version: .*/Version: $1/g" ci/travis/debian/DEBIAN/control
  sed -i "s/Version=.*/Version=$1/g" res/linux/usr/share/applications/sakia.desktop
  sed -i "s/version=.*/version=$1/g" ci/appimage/config.env
  git commit src/sakia/__init__.py ci/appveyor/sakia.iss ci/travis/debian/DEBIAN/control res/linux/usr/share/applications/sakia.desktop ci/appimage/config.env -m "$1"
  git tag "$1" -a -m "$1"
else
  echo "Wrong version format"
fi
+3 −0
Original line number Original line Diff line number Diff line
setuptools>=46.0.0
wheel
twine
 No newline at end of file

requirements_dev.txt

0 → 100644
+7 −0
Original line number Original line Diff line number Diff line
black==20.8b1
duniter-mirage>=0.1.50
mypy==0.770
pylint==2.4.4
pytest
pytest-asyncio
md-to-html
 No newline at end of file

res/i18n/ts/cs.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/de.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/es.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/fr.ts

0 → 100644
+2461 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/it.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/pl.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/pt.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/i18n/ts/ru.ts

0 → 100644
+2294 −0

File added.

Preview size limit exceeded, changes collapsed.

res/icons/AUTHORS

0 → 100644
+45 −0
Original line number Original line Diff line number Diff line
Icons are from the Noun Project.

iconmonstr-info-2-icon.svg: http://iconmonstr.com/license/
noun_2651_cc.svg : Created by Sergey Bakin
noun_18704_cc.svg : Created by Ian Mawle
noun_22441_cc.svg : Created by Bruno Castro
noun_29542_cc.svg : Created by Chris Kerr
noun_43022_cc.svg : Created by Jon Prepeluh
noun_63271_cc.svg : Created by Mark Shorter
noun_43022_cc.svg : Created by Piotrek Chuchla
noun_7440_cc.svg : Created by Yuri Mamae
noun_62479_cc.svg : Created by Bridget Gahagan
noun_76373_cc.svg : Created by João Paulo
noun_5197_cc.svg : Created by Bibzee
noun_38960_cc.svg : Created by Agarunov Oktay-Abraham
noun_42425_cc.svg : Created by Luis Rodrigues
noun_62146_cc.svg : Created by Sergey Krivoy
noun_2149_cc.svg : Created by Anand A Nair
noun_152997_cc.svg : Created by Pedro Ivo Hudson
noun_139613_cc.svg : Created by Aha-Soft
noun_19900_cc.svg : Created by by Stefan Parnarov
noun_178785_cc.svg : by Jevgeni Striganov
noun_41979_cc.svg : by by hunotika
noun_155533_cc.svg : by anbileru adaleru
noun_155520_cc.svg : by anbileru adaleru
noun_155540_cc.svg : by anbileru adaleru
noun_100552_cc.svg : by Rui
noun_178537_cc.svg : by Nathan David Smith
noun_213188_cc.svg : by Aha-Soft
noun_213886_cc.svg : by Aha-Soft
noun_213196_cc.svg : by Aha-Soft
noun_60040_cc.svg : by Dmitry Baranovskiy
noun_87601_cc.svg : by Arthur Shlain
noun_274635_cc.svg : by Pham Thi Dieu Linh
noun_198591_cc.svg : by Андрей Уханёв
noun_269788_cc.svg : by TMD
noun_269789_cc.svg : by TMD
noun_269790_cc.svg : by TMD
noun_269791_cc.svg : by TMD
noun_269792_cc.svg : by TMD
noun_269793_cc.svg : by TMD
noun_188924_cc.svg : by anbileru adaleru
noun_188905_cc.svg : by anbileru adaleru
noun_188906_cc.svg : by anbileru adaleru
noun_169247_cc.svg : by anbileru adaleru
 No newline at end of file
+19 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>


<!-- The icon can be used freely in both personal and commercial projects with no attribution required, but always appreciated. 
You may NOT sub-license, resell, rent, redistribute or otherwise transfer the icon without express written permission from iconmonstr.com -->


<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">

<path id="home-icon" d="M257.122,165.188L414.22,301.287v143.779H300.098v-82.955h-85.953v82.955H100.023V302.369L257.122,165.188z

	 M257.086,128.15l174.271,153.27L462,250.776L257.158,66.934L50,252.118l30.571,30.716L257.086,128.15z"/>

</svg>
+27 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>


<!-- The icon can be used freely in both personal and commercial projects with no attribution required, but always appreciated. 
You may NOT sub-license, resell, rent, redistribute or otherwise transfer the icon without express written permission from iconmonstr.com -->


<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">

<path id="info-2-icon" d="M255.998,90.001c91.74,0,166.002,74.241,166.002,165.998c0,91.741-74.245,166-166.002,166

	c-91.74,0-165.998-74.243-165.998-166C90,164.259,164.243,90.001,255.998,90.001 M255.998,50.001

	C142.229,50.001,50,142.229,50,255.999c0,113.771,92.229,206,205.998,206c113.771,0,206.002-92.229,206.002-206

	C462,142.229,369.77,50.001,255.998,50.001L255.998,50.001z M285.822,367.567h-57.646V230.6h57.646V367.567z M257,202.268

	c-17.522,0-31.729-14.206-31.729-31.73c0-17.522,14.206-31.729,31.729-31.729c17.524,0,31.728,14.206,31.728,31.729

	C288.728,188.062,274.524,202.268,257,202.268z"/>

</svg>
+12 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>

<!-- The icon can be used freely in both personal and commercial projects with no attribution required, but always appreciated. 
You may NOT sub-license, resell, rent, redistribute or otherwise transfer the icon without express written permission from iconmonstr.com -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
<path id="user-icon" d="M407.448,360.474c-59.036-13.617-113.989-25.541-87.375-75.717
	c81.01-152.729,21.473-234.406-64.072-234.406c-87.231,0-145.303,84.812-64.072,234.406c27.412,50.482-29.608,62.393-87.375,75.717
	c-59.012,13.609-54.473,44.723-54.473,101.176h411.838C461.919,405.196,466.458,374.083,407.448,360.474z"/>
</svg>

res/icons/logo.svg

0 → 100644
+227 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0
Original line number Original line Diff line number Diff line
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 960 700" enable-background="new 0 0 960 560" xml:space="preserve"><g><rect x="256.7" y="256.4" fill="#000000" width="436.1" height="52.3"/></g><g><rect x="256.7" y="396" fill="#000000" width="436.1" height="52.3"/></g><g><rect x="256.7" y="116.9" fill="#000000" width="436.1" height="52.3"/></g><text x="0" y="575" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Rui</text><text x="0" y="580" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg>
 No newline at end of file
+44 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   enable-background="new 0 0 100 100"
   xml:space="preserve"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_101791_cc.svg"><metadata
     id="metadata14"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs12" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="777"
     inkscape:window-height="480"
     id="namedview10"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" /><path
     d="M 77.891855,62.286039 C 83.30181,41.246432 70.585007,19.72692 49.546735,14.316965 28.504455,8.9056726 6.9862794,21.622477 1.5749866,42.662085 -3.8349685,63.703028 8.8804994,85.219867 29.921443,90.632496 50.959714,96.042452 72.480563,83.326984 77.891855,62.286039 Z M 32.585649,80.269764 C 17.258111,76.328931 7.9968867,60.651155 11.937719,45.324953 15.879889,29.998751 31.554991,20.736191 46.879857,24.677023 62.207396,28.617856 71.469956,44.294295 67.527786,59.620497 63.585617,74.946699 47.913188,84.210597 32.585649,80.269764 Z m 64.940859,27.323826 c 0.0021,-0.001 0.0043,-0.002 0.0054,-0.002 -0.01741,0.0241 -0.04009,0.0494 -0.0588,0.0722 -0.01602,0.0227 -0.03074,0.0414 -0.04676,0.0642 -0.0022,0.001 -0.0043,0.001 -0.0064,0.004 -0.201856,0.24597 -0.458522,0.54942 -0.660378,0.75528 l -0.815433,0.83148 c -2.364767,2.41156 -5.464764,3.2056 -6.927202,1.77257 L 65.622872,88.163459 c 1.263259,-1.046699 2.932899,-2.573304 3.693528,-3.272441 l -0.0027,-0.0013 c 2.116125,-1.914271 2.855365,-3.03182 3.265757,-3.420823 0.818111,-0.772661 2.018541,-2.439628 2.418239,-2.870071 l 23.393699,22.925756 c 1.285982,1.26326 0.864889,3.82855 -0.8649,6.069 z M 30.801046,36.40862 c -5.951352,4.030396 -10.322628,11.609948 -8.509952,18.799161 0.661707,2.618755 -3.222981,3.823195 -3.883351,1.209787 -2.344715,-9.29598 2.997065,-18.605328 10.394814,-23.616923 2.211037,-1.497195 4.201505,2.116126 1.998489,3.607975 z"
     id="path4"
     inkscape:connector-curvature="0" /></svg>
 No newline at end of file
+68 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   enable-background="new 0 0 100 100"
   xml:space="preserve"
   id="svg26"
   sodipodi:docname="noun_10271_cc.svg"
   inkscape:version="0.92.2 5c3e80d, 2017-08-06"><metadata
     id="metadata32"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
     id="defs30" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1920"
     inkscape:window-height="1021"
     id="namedview28"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="-8.7923729"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg26" /><g
     id="g20"><path
       d="M40.052,26.288c-3.801,0-7.054-2.288-8.413-5.288h-1.093H26v4.264v9.535c0,2.23,0.79,3.746,1.566,5.849l4.307,9.441   C32.264,51.139,33.604,52,34.771,52h10.562c1.164,0,2.427-0.861,2.815-1.912l4.337-9.437C53.262,38.549,54,37.029,54,34.799v-9.535   V21h-4.442h-1.093C47.104,24,43.851,26.288,40.052,26.288z"
       id="path2" /><rect
       x="41"
       width="2"
       height="2"
       id="rect4" /><rect
       x="45"
       width="2"
       height="2"
       id="rect6" /><polygon
       points="50,4 47,4 47,12 45,12 45,18 52,18 52,0 50,0 50,2.105  "
       id="polygon8" /><path
       d="M45,4H35v6h2v13.329c0,0,0.942,1.062,3.064,1.062S43,23.329,43,23.329V10h2V4z"
       id="path10" /><polygon
       points="28,18 35,18 35,12 33,12 33,4 30,4 30,2.105 30,0 28,0  "
       id="polygon12" /><rect
       x="37"
       width="2"
       height="2"
       id="rect14" /><rect
       x="33"
       width="2"
       height="2"
       id="rect16" /><path
       d="M60,99.667c-12.683,0-23-9.421-23-21V56h6v22.667c0,8.271,7.626,15,17,15s17-7.626,17-17V54c0-12.682,10.317-23,23-23v6   c-9.374,0-17,7.626-17,17v22.667C83,89.35,72.683,99.667,60,99.667z"
       id="path18" /></g></svg>
 No newline at end of file
+44 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   viewBox="0 0 100.00001 125"
   xml:space="preserve"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_139613_cc.svg"><metadata
     id="metadata14"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs12" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview10"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="-42.425844"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" /><path
     d="m 25.78125,24.656245 c -1.19804,0.03338 -2.390296,0.356511 -3.5,1 -3.551054,2.059166 -4.777916,6.605196 -2.71875,10.15625 2.059166,3.551054 6.605196,4.777916 10.15625,2.71875 0.456937,-0.264966 0.872582,-0.566293 1.25,-0.90625 l 11.90625,8.84375 c -0.102601,-0.265069 -0.210456,-0.53323 -0.28125,-0.8125 -0.377046,-0.995022 -0.216682,-1.991187 0.03125,-2.96875 l -9.9375,-7.34375 c 1.040295,-2.147247 1.036979,-4.749341 -0.25,-6.96875 -1.415677,-2.441349 -4.020561,-3.792192 -6.65625,-3.71875 z m 53.90625,3.09375 c -1.19804,0.03338 -2.421546,0.356511 -3.53125,1 -3.09834,1.796649 -4.395139,5.479306 -3.3125,8.75 l -11.125,6.65625 c -0.01921,1.463022 -0.639159,2.857354 -1.375,4.1875 L 74.25,39.999995 c 2.284876,2.676533 6.222001,3.422095 9.375,1.59375 3.551054,-2.059166 4.746666,-6.605196 2.6875,-10.15625 -1.415677,-2.441349 -3.989311,-3.760942 -6.625,-3.6875 z m -27.625,6.0625 c -6.491611,0 -6.40625,5.65625 -6.40625,5.65625 l -0.0625,3.03125 c -0.530352,-0.0072 -0.65625,0.514594 -0.65625,1.5625 0,1.570663 0.973035,3.213529 1.84375,4.0625 0.295074,1.234764 0.866408,2.327458 1.625,3.15625 -0.02641,0.0162 -0.06722,0.01506 -0.09375,0.03125 -2.587069,1.578079 -5.672508,2.649945 -7.6875,3.71875 -0.555696,0.29448 -1.144777,0.811066 -1.625,1.46875 -0.32697,0.452412 -0.598878,0.935264 -0.84375,1.4375 -0.009,0.01782 -0.0225,0.04466 -0.03125,0.0625 -0.0335,0.0697 -0.06169,0.148406 -0.09375,0.21875 -0.48672,1.041571 -0.840864,2.134504 -1.03125,3.25 -0.004,0.02072 0.0038,0.04182 0,0.0625 -0.0086,0.05238 -0.02313,0.10387 -0.03125,0.15625 -0.03411,0.193194 -0.06636,0.403903 -0.09375,0.59375 -0.02338,0.156384 -0.04306,0.493278 -0.03125,0.65625 -0.0018,0.0099 9e-4,0.02135 0,0.03125 -0.07182,1.018098 1.84375,1.34375 1.84375,1.34375 0.715321,0.211536 2.029012,0.44187 3.625,0.65625 2.847115,0.46989 5.761037,0.630802 8.625,0.71875 0.277992,0.0086 0.572546,-0.0011 0.875,0 l 0.03125,0 c 0.150498,0 0.31314,0.0018 0.46875,0 0.302454,-0.0018 0.59699,0.0086 0.875,0 2.862703,-0.08791 5.779109,-0.249346 8.625,-0.71875 1.598346,-0.21456 2.908924,-0.444498 3.625,-0.65625 0,0 1.915552,-0.325652 1.84375,-1.34375 -0.0018,-0.0099 9e-4,-0.02133 0,-0.03125 0.01188,-0.162972 -0.0079,-0.499866 -0.03125,-0.65625 -0.03917,-0.271261 -0.103166,-0.566172 -0.15625,-0.84375 -0.210852,-1.219968 -0.58763,-2.440343 -1.15625,-3.5625 -0.0063,-0.0126 0.0065,-0.01868 0,-0.03125 -0.23436,-0.469476 -0.505438,-0.918878 -0.8125,-1.34375 -0.480222,-0.657684 -1.069304,-1.17427 -1.625,-1.46875 -2.014992,-1.068805 -5.100449,-2.140671 -7.6875,-3.71875 -0.02651,-0.0162 -0.06734,-0.01497 -0.09375,-0.03125 0.75861,-0.828792 1.329925,-1.921486 1.625,-3.15625 0.870714,-0.848971 1.8125,-2.491837 1.8125,-4.0625 0,-1.047906 -0.12588,-1.569664 -0.65625,-1.5625 l -0.03125,-3.03125 c 0,0 0.08537,-5.65625 -6.40625,-5.65625 z m -13.46875,19.65625 -19.375,4.84375 C 19.115362,58.083617 19.003698,57.846936 18.875,57.624995 16.815834,54.073941 12.269804,52.878329 8.71875,54.937495 5.1676963,56.996661 3.9408337,61.542691 6,65.093745 c 2.059166,3.551054 6.605196,4.746666 10.15625,2.6875 2.450927,-1.42123 3.803575,-4.041145 3.71875,-6.6875 l 15.84375,-3.9375 c 0.07438,-0.159517 0.172762,-0.313302 0.25,-0.46875 0.603648,-1.339254 1.514598,-2.380579 2.625,-3.21875 z m 31.125,7.78125 c 0.20349,1.074546 0.137248,2.244139 -0.3125,3.21875 l 11.3125,7.34375 c -0.855939,2.066285 -0.802327,4.478297 0.40625,6.5625 2.059166,3.551054 6.605196,4.777916 10.15625,2.71875 3.551054,-2.059166 4.777916,-6.605196 2.71875,-10.15625 -2.059166,-3.551054 -6.605196,-4.777916 -10.15625,-2.71875 -0.574435,0.3331 -1.08329,0.738901 -1.53125,1.1875 l -12.59375,-8.15625 z m -25.3125,6.5 -7.96875,20.84375 c -1.689316,-0.317982 -3.52127,-0.05496 -5.125,0.875 -3.551054,2.059166 -4.746666,6.605196 -2.6875,10.15625 2.059166,3.551055 6.605196,4.777915 10.15625,2.718755 3.551054,-2.05917 4.777916,-6.605201 2.71875,-10.156255 -0.607794,-1.048147 -1.45443,-1.883708 -2.40625,-2.5 l 8.3125,-21.65625 c -0.996859,-0.07277 -2.0091,-0.172782 -3,-0.28125 z"
     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
     id="path4"
     inkscape:connector-curvature="0" /></svg>
 No newline at end of file
+44 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="-255 347 100 125"
   enable-background="new -255 347 100 100"
   xml:space="preserve"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_152997_cc.svg"><metadata
     id="metadata14"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs12" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="743"
     inkscape:window-height="480"
     id="namedview10"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" /><path
     d="m -205,364 c -24.9,0 -45,20.1 -45,45 0,24.9 20.1,45 45,45 24.9,0 45,-20.1 45,-45 0,-24.9 -20.1,-45 -45,-45 z m -26,72.4 c 1.8,-0.8 3.6,-1.4 5.5,-1.9 5.2,-1.2 8.3,-2.9 9.3,-5.1 0.8,-1.7 0.3,-4 -1.2,-6.9 -9.6,-17.7 -7.9,-27.7 -4.8,-32.9 3.1,-5.3 9.1,-8.2 16.7,-8.2 7.6,0 13.5,2.9 16.6,8.1 3.1,5.2 4.8,15.2 -4.7,33 -1.6,3 -2,5.3 -1.2,7 1,2.1 4.1,3.8 9.3,5 1.8,0.4 4,1.1 6.3,2.1 -6.7,6.3 -15.8,10.1 -25.7,10.1 -10.2,0.1 -19.3,-3.9 -26.1,-10.3 z"
     id="path4"
     inkscape:connector-curvature="0" /></svg>
 No newline at end of file
+59 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 100 125"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_155520_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="743"
     inkscape:window-height="480"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.3457509,0,0,1.3457509,-17.552378,-1285.5892)"
     id="g4">
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 15.110586,975.08438 c -0.257006,0 -0.505174,0.0945 -0.703274,0.2579 l -0.01172,0.015 -0.0059,0 C 14.081837,975.61353 14,976.00871 14,976.40929 l 0,34.68311 c 6.2e-5,0.6214 0.503812,1.1252 1.125238,1.1252 l 33.801091,0 c 0.586855,9.7103 8.643142,17.4323 18.49903,17.4323 10.236198,0 18.560564,-8.3214 18.560564,-18.5575 -0.05194,-0.3616 0,-0.6773 0,-1.0052 l 0,-33.68677 c 0.108906,-0.68863 -0.428123,-1.30945 -1.125237,-1.30105 -23.24491,-0.099 -46.520652,0.13953 -69.7501,-0.015 z m 1.139889,2.26514 67.484972,0 0,24.88708 c -3.148794,-5.77627 -9.278805,-9.70217 -16.310089,-9.70217 -9.856474,0 -17.913031,7.72137 -18.49903,17.43237 l -32.675853,0 z m 4.688492,3.56034 c -1.521671,-0.021 -1.521671,2.27207 0,2.25057 l 58.107989,0 c 1.521671,0.021 1.521671,-2.27203 0,-2.25057 z m 0,5.81077 c -1.521685,-0.021 -1.521685,2.272 0,2.2506 l 34.864793,0 c 1.521686,0.021 1.521686,-2.2721 0,-2.2506 z m 0,5.8138 c -1.521685,-0.021 -1.521685,2.272 0,2.2504 l 23.243195,0 c 1.521684,0.021 1.521684,-2.2719 0,-2.2504 z m 46.486391,2.2504 c 9.019957,0 16.310089,7.28737 16.310089,16.30727 0,9.0199 -7.290132,16.3071 -16.310089,16.3071 -8.975386,0 -16.229773,-7.2172 -16.301298,-16.1753 0.0111,-0.09 0.0111,-0.1819 0,-0.2726 0.07611,-8.9541 7.328792,-16.16647 16.301298,-16.16647 z m -5.822521,9.35937 c -1.007872,0 -1.504007,1.2276 -0.78239,1.9312 l 5.013755,5.0167 -5.013755,5.0136 c -1.104574,1.0606 0.530609,2.6958 1.591156,1.5912 l 5.016685,-5.0166 5.013757,5.0166 c 1.060547,1.1046 2.695728,-0.5306 1.591156,-1.5912 l -5.016685,-5.0136 5.016685,-5.0167 c 0.73468,-0.7155 0.207553,-1.9606 -0.817556,-1.9312 -0.292229,0.015 -0.569676,0.1305 -0.7736,0.34 l -5.013757,5.0138 -5.016685,-5.0138 c -0.212505,-0.218 -0.504294,-0.3407 -0.808766,-0.34 z m -40.66387,0.015 c -1.521685,-0.021 -1.521685,2.2721 0,2.2506 l 11.621597,0 c 1.521684,0.021 1.521684,-2.272 0,-2.2506 z"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+59 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 100 125"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_155533_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="743"
     inkscape:window-height="480"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.2812691,0,0,1.2812691,-14.189139,-1221.9757)"
     id="g4">
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.49966645;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 15.110916,975.06807 c -0.621665,-0.004 -1.119023,0.51848 -1.110801,1.14011 -1.54e-4,0.0107 -1.54e-4,0.0215 0,0.0322 l 0,34.85682 c -7.6e-5,0.6217 0.503852,1.1256 1.125456,1.1255 l 33.807617,0 c 0.586097,9.717 8.644024,17.4446 18.502602,17.4446 10.238382,0 18.574502,-8.3278 18.564148,-18.5701 -0.01155,-11.42186 0,-23.20066 0,-34.71614 3.28e-4,-0.0313 -6.5e-4,-0.0626 -0.0029,-0.0938 l 0,-0.0117 0,-0.009 c 0.03354,-0.64318 -0.478479,-1.18327 -1.122524,-1.18408 -23.249396,-0.0987 -46.529588,0.13224 -69.763567,-0.0147 z m 1.14011,2.26556 67.498002,0 0,24.90357 c -3.149351,-5.78006 -9.280447,-9.70996 -16.313238,-9.70996 -9.858578,0 -17.916505,7.72756 -18.502602,17.44456 l -32.682162,0 z m 4.686466,3.56394 c -1.499511,10e-4 -1.499511,2.24977 0,2.25087 l 58.125071,0 c 1.499511,0 1.499511,-2.24977 0,-2.25087 z m 0,5.81487 c -1.500607,0 -1.500607,2.2509 0,2.2509 l 34.874456,0 c 1.500606,0 1.500606,-2.2509 0,-2.2509 z m 0,5.8148 c -1.500607,0 -1.500607,2.2509 0,2.2509 l 23.250614,0 c 1.500606,0 1.500606,-2.2509 0,-2.2509 z m 46.498298,2.2509 c 9.021606,0 16.313238,7.29246 16.313238,16.31906 0,9.0266 -7.291632,16.3191 -16.313238,16.3191 -9.021607,0 -16.310308,-7.2925 -16.310308,-16.3191 0,-9.0266 7.288701,-16.31906 16.310308,-16.31906 z m -0.07034,2.8108 c -1.170749,0.01 -2.351251,0.1892 -3.505324,0.5598 -4.616281,1.4824 -7.847018,5.67446 -8.112657,10.52466 -0.08958,1.5071 2.171195,1.6311 2.245049,0.1231 0.214979,-3.9251 2.817603,-7.303 6.553431,-8.5024 3.735824,-1.19976 7.812697,0.035 10.263918,3.1037 2.45122,3.0686 2.757006,7.325 0.770819,10.7153 -1.752047,2.9905 -4.962346,4.7388 -8.350056,4.666 l 1.679389,-2.0575 c 0.622368,-0.7447 0.07326,-1.8752 -0.896847,-1.8465 -0.331131,0.01 -0.641,0.1656 -0.847022,0.425 l -3.347057,4.1032 c -0.392984,0.4809 -0.322154,1.1892 0.158268,1.5827 l 4.09443,3.3529 c 1.160624,0.9516 2.58796,-0.7893 1.427335,-1.7409 l -1.925584,-1.5768 c 4.045379,-0.05 7.850052,-2.188 9.947383,-5.768 2.454098,-4.1888 2.073993,-9.4725 -0.955465,-13.2651 -2.272099,-2.84446 -5.687763,-4.41696 -9.20001,-4.39916 z m -46.427957,6.56796 c -1.500607,0 -1.500607,2.251 0,2.251 l 11.626771,0 c 1.500607,0 1.500607,-2.251 0,-2.251 z"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+59 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 100 125"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_155540_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="743"
     inkscape:window-height="480"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="61.00568"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.3383945,0,0,1.3383945,-16.919727,-1280.9706)"
     id="g4">
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 67.422429,975.07796 c -17.441637,0.0192 -34.88975,0.12012 -52.311843,0.006 -0.257006,-0.002 -0.504221,0.0953 -0.703273,0.25786 -0.006,0.005 -0.01173,0.01 -0.01758,0.0147 C 14.081844,975.61282 14,976.0079 14,976.4085 l 0,34.6831 c 6.2e-5,0.6214 0.503812,1.1252 1.125238,1.1253 l 33.801091,0 c 0.586857,9.7104 8.643143,17.4324 18.49903,17.4324 10.236196,0 18.569433,-8.3215 18.560564,-18.5577 -0.0099,-11.41928 0,-23.18198 0,-34.69189 0.108903,-0.68861 -0.428123,-1.30955 -1.125238,-1.30106 -5.811227,-0.0247 -11.624378,-0.0269 -17.438256,-0.0205 z m -51.171953,2.27098 67.484971,0 0,24.88706 c -3.148794,-5.77618 -9.278806,-9.70218 -16.310088,-9.70218 -9.856474,0 -17.913032,7.72128 -18.49903,17.43238 l -32.675853,0 z m 4.688491,3.56033 c -1.52167,-0.0215 -1.52167,2.27195 0,2.25045 l 58.107989,0 c 1.521671,0.021 1.521671,-2.27196 0,-2.25045 z m 0,5.81075 c -1.521685,-0.021 -1.521685,2.272 0,2.2505 l 34.864794,0 c 1.521684,0.022 1.521684,-2.272 0,-2.2505 z m 0,5.8138 c -1.521685,-0.022 -1.521685,2.272 0,2.2505 l 23.243195,0 c 1.521685,0.022 1.521685,-2.272 0,-2.2505 z m 46.486392,2.2505 c 9.019955,0 16.310088,7.28718 16.310088,16.30708 0,9.0199 -7.290133,16.3072 -16.310088,16.3072 -8.975387,0 -16.241481,-7.2171 -16.301299,-16.1753 -6.09e-4,-0.091 -6.56e-4,-0.1814 0,-0.2725 0.06436,-8.9543 7.328793,-16.16648 16.301299,-16.16648 z m -0.0117,6.45248 c -0.369837,10e-5 -0.716,0.182 -0.925976,0.4864 l -8.574079,8.5712 c -1.104572,1.0605 0.53061,2.6957 1.591157,1.5911 l 6.795383,-6.7924 0,14.713 c -0.02152,1.5217 2.271996,1.5217 2.250475,0 l 0,-14.716 6.795383,6.7954 c 1.060545,1.1046 2.695779,-0.5306 1.591155,-1.5911 l -8.650266,-8.6474 c -0.0123,-0.014 -0.02506,-0.028 -0.03809,-0.041 l -0.02638,-0.026 c -0.01425,-0.015 -0.0289,-0.03 -0.04396,-0.044 -0.01713,-0.015 -0.03472,-0.03 -0.05275,-0.044 -0.02455,-0.021 -0.04998,-0.04 -0.07619,-0.059 l -0.0147,-0.01 c -0.184168,-0.1222 -0.400227,-0.1874 -0.621226,-0.1876 z m -46.474689,2.9186 c -1.521685,-0.021 -1.521685,2.272 0,2.2504 l 11.621597,0 c 1.521685,0.022 1.521685,-2.2719 0,-2.2504 z"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+99 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 100 125"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_169247_cc.svg">
  <metadata
     id="metadata32">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs30" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="711"
     id="namedview28"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="-17.33691"
     inkscape:cy="62.398508"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.2399278,0,0,1.2399278,-8.0778253,-1180.1732)"
     id="g4">
    <path
       d="m 13.35023,958.55845 c 0,27.33333 0,54.66665 0,82.00005 l 40.73828,0 c -0.45628,-0.642 -0.88502,-1.3036 -1.26172,-2 l -37.47656,0 0,-78.00005 58,0 0,49.79495 c 0.67929,0.1242 1.34726,0.2792 2,0.4726 l 0,-52.26755 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path6"
       inkscape:connector-curvature="0" />
    <path
       d="m 28.5121,1006.3699 c 0,0.666 0,1.332 0,1.9981 l 31.67774,0 0,-1.9981 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path8"
       inkscape:connector-curvature="0" />
    <path
       d="m 28.51234,1014.1815 c 0,0.666 0,1.332 0,1.998 l 27.23242,0 c 0.6729,-0.7192 1.39538,-1.3878 2.16992,-1.998 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path10"
       inkscape:connector-curvature="0" />
    <path
       d="m 38.3246,987.88853 0,0.2168 0,6.02734 12.05274,0 0,-6.24414 -1.9961,0 0,4.24609 -8.06054,0 0,-4.24609 -1.9961,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path12"
       inkscape:connector-curvature="0" />
    <path
       d="m 44.34999,981.55259 c -1.92949,0 -3.51171,1.58223 -3.51171,3.51172 0,1.92949 1.58235,3.51172 3.51171,3.51172 1.92937,0 3.51368,-1.58223 3.51368,-3.51172 0,-1.92949 -1.58418,-3.51172 -3.51368,-3.51172 z m 0,1.99609 c 0.85126,0 1.51563,0.66438 1.51563,1.51563 0,0.85124 -0.66415,1.51562 -1.51563,1.51562 -0.85147,0 -1.51562,-0.66438 -1.51562,-1.51562 0,-0.85125 0.66437,-1.51563 1.51562,-1.51563 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path14"
       inkscape:connector-curvature="0" />
    <path
       d="m 44.34999,975.12681 c -7.01092,0 -12.71484,5.70392 -12.71484,12.71484 0,7.01094 5.70392,12.71485 12.71484,12.71485 7.01094,0 12.7168,-5.70391 12.7168,-12.71485 0,-7.01092 -5.70587,-12.71484 -12.7168,-12.71484 z m 0,1.99609 c 5.93161,0 10.71875,4.78716 10.71875,10.71875 0,5.93162 -4.78714,10.71875 -10.71875,10.71875 -5.9316,0 -10.71679,-4.78713 -10.71679,-10.71875 0,-5.93159 4.78519,-10.71875 10.71679,-10.71875 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path16"
       inkscape:connector-curvature="0" />
    <path
       d="m 28.51234,1021.992 c 0,0.6661 0,1.3321 0,1.9981 l 22.77343,0 c 0.19808,-0.6813 0.4245,-1.3498 0.69336,-1.9981 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path18"
       inkscape:connector-curvature="0" />
    <path
       d="m 44.35083,975.34329 c -6.89303,0 -12.49769,5.60466 -12.49769,12.49768 0,6.89304 5.60466,12.49763 12.49769,12.49763 6.89304,0 12.4977,-5.60459 12.4977,-12.49763 0,-6.89302 -5.60467,-12.49768 -12.4977,-12.49768 z m 0,1.5622 c 6.04875,0 10.93548,4.88674 10.93548,10.93548 0,6.04876 -4.88673,10.93548 -10.93548,10.93548 -6.04875,0 -10.93548,-4.88672 -10.93548,-10.93548 0,-6.04874 4.88673,-10.93548 10.93548,-10.93548 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path20"
       inkscape:connector-curvature="0" />
    <path
       style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 69.86267,1012.5937 a 16.785713,16.785713 0 0 0 -16.78516,16.7871 16.785713,16.785713 0 0 0 16.78516,16.7851 16.785713,16.785713 0 0 0 16.7871,-16.7851 16.785713,16.785713 0 0 0 -16.7871,-16.7871 z m -4.59571,10.7754 4.59571,4.5957 4.5957,-4.5957 1.41406,1.414 -4.5957,4.5957 4.5957,4.5977 -1.41406,1.414 -4.5957,-4.5957 -4.59571,4.5957 -1.41406,-1.414 4.5957,-4.5977 -4.5957,-4.5957 1.41406,-1.414 z"
       id="path22"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+44 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   enable-background="new 0 0 100 100"
   xml:space="preserve"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_178537_cc.svg"><metadata
     id="metadata14"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs12" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview10"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" /><path
     d="m 50,13.6 c -26.9,0 -48.8,21.8 -48.8,48.8 0,27 21.9,48.7 48.8,48.7 26.9,0 48.8,-21.8 48.8,-48.8 0,-27 -21.9,-48.7 -48.8,-48.7 z m 0.1,81.9 c -3,0 -5.5,-2.5 -5.5,-5.5 0,-3.1 2.5,-5.6 5.5,-5.6 3.1,0.1 5.6,2.5 5.6,5.6 0,3 -2.5,5.5 -5.6,5.5 z M 61.9,57.4 c -1.4,1.7 -2.8,3.1 -4.1,4.2 -3.5,3.5 -5.5,5.5 -5.5,9.6 0,1.2 -1,2.2 -2.2,2.2 -1.2,0 -2.2,-1 -2.2,-2.2 0,-5.8 3,-8.9 6.8,-12.7 1.2,-1.2 2.5,-2.5 3.9,-4.1 2.2,-2.5 3.5,-5.6 3.5,-8.8 0.1,-3.2 -1.2,-6.3 -3.5,-8.6 -4.8,-4.7 -12.5,-4.7 -17.2,0.1 -2.3,2.3 -3.6,5.3 -3.6,8.6 0,1.2 -1,2.2 -2.2,2.2 -1.2,0 -2.2,-1 -2.2,-2.2 0,-4.4 1.8,-8.6 4.9,-11.8 6.5,-6.5 17,-6.5 23.5,0 3.2,3.3 4.8,7.5 4.8,11.9 -0.1,4.2 -1.7,8.3 -4.7,11.6 z"
     id="path4"
     inkscape:connector-curvature="0" /></svg>
 No newline at end of file
+65 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   style="enable-background:new 0 0 100 100;"
   xml:space="preserve"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_178785_cc.svg"><metadata
     id="metadata28"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs26" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="743"
     inkscape:window-height="480"
     id="namedview24"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="58.142293"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="0"
     inkscape:current-layer="svg2" /><path
     d="m 47.7,96 c 4.6,0 8.6,-1.4 11.5,-4.3 l 9.3,-9.3 c 3,-3 4.5,-7.4 4.3,-12.6 -0.1,-1.1 -1,-1.9 -2.1,-1.9 -1.1,0.1 -2,1 -1.9,2.1 0.2,4 -0.9,7.3 -3.1,9.6 -6.7,6.7 -22.4,2.1 -34.4,-9.9 -12,-12 -16.5,-27.8 -9.9,-34.4 5.6,-5.6 17.8,-3.5 29,5.1 0.9,0.7 2.1,0.5 2.8,-0.4 0.7,-0.9 0.5,-2.1 -0.4,-2.8 -13,-10 -27.1,-11.9 -34.3,-4.8 L 9.2,41.7 C 0.7,50.2 5.1,67.8 19.1,81.8 28.3,90.9 39.1,96 47.7,96 Z M 12.2,65.3 18.5,59 c 0.7,1.4 1.6,2.9 2.5,4.3 l -6.4,6.4 c -0.9,-1.5 -1.7,-2.9 -2.4,-4.4 z m -2.8,-8.5 5.9,-5.9 c 0.4,1.4 0.8,2.8 1.4,4.2 l -6.2,6.2 C 10,59.8 9.7,58.3 9.4,56.8 Z m 14,9.8 c 1.1,1.5 2.4,2.9 3.7,4.4 l -6.5,6.5 C 19.3,76.1 18,74.6 16.9,73.1 l 6.5,-6.5 z m 10.8,10.8 -6.5,6.5 c -1.5,-1.1 -2.9,-2.3 -4.3,-3.6 l 6.5,-6.5 c 1.5,1.3 2.9,2.5 4.3,3.6 z m 7.6,5 -6.4,6.4 C 33.9,88.1 32.5,87.3 31,86.3 l 6.4,-6.4 c 1.6,0.9 3,1.7 4.4,2.5 z m -2.3,8 6.2,-6.2 c 1.4,0.6 2.8,1 4.2,1.4 l -6,6 C 43.2,91.5 42.5,91.3 41.8,91.1 41,90.9 40.2,90.6 39.5,90.4 Z m 19.2,-3.9 -2.3,2.3 c -1.8,1.8 -4.2,2.8 -7.2,3.1 l 5.4,-5.4 c 0.8,0.1 1.7,0.1 2.5,0.1 0.5,0 1.1,0 1.6,-0.1 z M 14.4,46.1 9.1,51.4 c 0.3,-2.8 1.2,-5.2 3,-6.9 l 2.3,-2.3 c -0.1,1.3 -0.1,2.6 0,3.9 z"
     id="path4"
     inkscape:connector-curvature="0" /><path
     d="M 98.4,52.7 79.7,33.8 c -0.8,-0.8 -2,-0.8 -2.8,0 -0.4,0.4 -0.6,1 -0.6,1.6 0,0.1 0,0.1 0,0.2 l 0,9.6 -6.4,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 8.4,0 c 1.1,0 2,-0.9 2,-2 l 0,-7.1 13.9,14 -13.9,14 0,-6.7 c 0,-1.1 -0.9,-2 -2,-2 l -8.4,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 6.4,0 0,9.6 c 0,0 0,0 0,0 0,0.1 0,0.3 0,0.4 0,0.1 0,0.1 0.1,0.2 0,0.1 0,0.1 0.1,0.2 0,0.1 0.1,0.1 0.1,0.2 0,0 0,0.1 0.1,0.1 0.1,0.1 0.2,0.2 0.3,0.3 l 0,0 c 0,0 0,0 0,0 0.1,0.1 0.2,0.2 0.3,0.2 0,0 0.1,0.1 0.1,0.1 0.1,0 0.1,0.1 0.2,0.1 0.1,0 0.1,0 0.2,0.1 0.1,0 0.1,0 0.2,0.1 0.1,0 0.3,0 0.4,0 0.1,0 0.3,0 0.4,0 0.1,0 0.1,0 0.2,-0.1 0.1,0 0.1,0 0.2,-0.1 0.1,0 0.1,-0.1 0.2,-0.1 0.1,0 0.1,0 0.2,-0.1 0.1,-0.1 0.2,-0.2 0.3,-0.3 l 0,0 18.7,-18.8 c 0.6,-0.8 0.6,-2.1 -0.2,-2.8 z"
     id="path6"
     inkscape:connector-curvature="0" /><path
     d="m 63.1,59.3 -4.2,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 4.2,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path8"
     inkscape:connector-curvature="0" /><path
     d="m 63.1,45.2 -4.2,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 4.2,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path10"
     inkscape:connector-curvature="0" /><path
     d="m 49.5,59.3 -1.8,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 1.8,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path12"
     inkscape:connector-curvature="0" /><path
     d="m 49.5,45.2 -1.8,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 1.8,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path14"
     inkscape:connector-curvature="0" /><path
     d="m 36.7,59.3 -0.2,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 0.2,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path16"
     inkscape:connector-curvature="0" /><path
     d="m 36.7,45.2 -0.2,0 c -1.1,0 -2,0.9 -2,2 0,1.1 0.9,2 2,2 l 0.2,0 c 1.1,0 2,-0.9 2,-2 0,-1.1 -0.9,-2 -2,-2 z"
     id="path18"
     inkscape:connector-curvature="0" /></svg>
 No newline at end of file
+84 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   id="Layer_1"
   x="0px"
   y="0px"
   width="100px"
   height="100px"
   viewBox="5.0 -10.0 100.0 135.0"
   enable-background="new 0 0 100 100"
   xml:space="preserve"
   inkscape:version="0.48.5 r10040"
   sodipodi:docname="noun_18704_cc.svg"><metadata
     id="metadata31"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs29" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="640"
     inkscape:window-height="480"
     id="namedview27"
     showgrid="false"
     inkscape:zoom="2.36"
     inkscape:cx="50"
     inkscape:cy="50"
     inkscape:window-x="0"
     inkscape:window-y="27"
     inkscape:window-maximized="0"
     inkscape:current-layer="Layer_1" /><g
     id="g3"
     transform="matrix(1.2341921,0,0,1.2341921,-7.7559354,-7.7122004)"><g
       id="g5"><path
         d="m 58.065,32.624 h -16.13 c -2.584,0 -4.684,2.093 -4.684,4.68 v 21.95 c 0,2.585 2.1,4.682 4.684,4.682 h 0.024 v 15.551 c 0,2.586 2.034,4.682 4.554,4.682 h 6.975 c 2.515,0 4.555,-2.095 4.555,-4.682 V 63.936 h 0.023 c 2.586,0 4.685,-2.095 4.685,-4.682 v -21.95 c -0.004,-2.587 -2.1,-4.68 -4.686,-4.68 z"
         id="path7"
         inkscape:connector-curvature="0"
         style="fill:#000000" /><circle
         cx="50"
         cy="23.473"
         r="7.6399999"
         id="circle9"
         d="m 57.64,23.473 c 0,4.219455 -3.420545,7.639999 -7.64,7.639999 -4.219455,0 -7.64,-3.420544 -7.64,-7.639999 0,-4.219456 3.420545,-7.64 7.64,-7.64 4.219455,0 7.64,3.420544 7.64,7.64 z"
         sodipodi:cx="50"
         sodipodi:cy="23.473"
         sodipodi:rx="7.6399999"
         sodipodi:ry="7.6399999"
         style="fill:#000000" /></g><g
       id="g11"><path
         d="m 85.989,34.448 h -13.82 c -2.221,0 -4.016,1.797 -4.016,4.012 v 18.812 c 0,2.218 1.795,4.012 4.016,4.012 h 0.021 v 13.324 c 0,2.216 1.744,4.01 3.896,4.01 h 5.981 c 2.154,0 3.897,-1.794 3.897,-4.01 V 61.283 h 0.021 c 2.218,0 4.014,-1.797 4.014,-4.014 V 38.458 c 0.002,-2.213 -1.794,-4.01 -4.01,-4.01 z"
         id="path13"
         inkscape:connector-curvature="0"
         style="fill:#000000" /><path
         d="m 79.08,20.062 c 3.612,0 6.546,2.931 6.546,6.545 0,3.617 -2.934,6.549 -6.546,6.549 -3.617,0 -6.548,-2.932 -6.548,-6.549 0,-3.614 2.931,-6.545 6.548,-6.545 z"
         id="path15"
         inkscape:connector-curvature="0"
         style="fill:#000000" /></g><g
       id="g17"><path
         d="m 27.833,34.448 h -13.82 c -2.217,0 -4.012,1.797 -4.012,4.01 V 57.27 c 0,2.217 1.795,4.014 4.012,4.014 h 0.021 v 13.322 c 0,2.218 1.746,4.012 3.9,4.012 h 5.979 c 2.152,0 3.896,-1.794 3.896,-4.012 V 61.283 h 0.021 c 2.216,0 4.012,-1.797 4.012,-4.014 V 38.458 c 0,-2.213 -1.793,-4.01 -4.009,-4.01 z"
         id="path19"
         inkscape:connector-curvature="0"
         style="fill:#000000" /><circle
         cx="20.922001"
         cy="26.608999"
         r="6.546"
         id="circle21"
         d="m 27.468001,26.608999 c 0,3.615256 -2.930744,6.546 -6.546,6.546 -3.615256,0 -6.546,-2.930744 -6.546,-6.546 0,-3.615256 2.930744,-6.546 6.546,-6.546 3.615256,0 6.546,2.930744 6.546,6.546 z"
         sodipodi:cx="20.922001"
         sodipodi:cy="26.608999"
         sodipodi:rx="6.546"
         sodipodi:ry="6.546"
         style="fill:#000000" /></g></g></svg>
 No newline at end of file
+136 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 125 100"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_188905_cc.svg"
   width="125"
   height="100">
  <metadata
     id="metadata38">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs36" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview34"
     showgrid="false"
     inkscape:zoom="2.6700352"
     inkscape:cx="-21.344737"
     inkscape:cy="57.606196"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="g4" />
  <g
     transform="matrix(1.1387208,0,0,1.1387208,-7.4656982,-1106.1042)"
     id="g4"
     style="fill:#aa8800">
    <rect
       style="opacity:1;fill:#decd87;fill-opacity:0.61290325;fill-rule:evenodd;stroke:none;stroke-width:9;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect4145"
       width="86.172173"
       height="42.09938"
       x="8.2007217"
       y="996.02557" />
    <path
       style="opacity:1;fill:#e9ddaf;fill-opacity:0.99539173;fill-rule:evenodd;stroke:none;stroke-width:9;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="path4147"
       sodipodi:type="arc"
       sodipodi:cx="93.715096"
       sodipodi:cy="999.8078"
       sodipodi:rx="21.04969"
       sodipodi:ry="20.227436"
       sodipodi:start="0"
       sodipodi:end="6.2784729"
       d="m 114.76479,999.8078 a 21.04969,20.227436 0 0 1 -21.024896,20.2274 21.04969,20.227436 0 0 1 -21.07443,-20.17974 21.04969,20.227436 0 0 1 20.975236,-20.27497 21.04969,20.227436 0 0 1 21.12385,20.13199 l -21.049454,0.0953 z" />
    <path
       d="m 8,995.49506 c 0,14.88924 0,29.77844 0,44.66764 l 86.973908,0 0,-20.2133 c -0.320011,0.015 -0.634655,0.047 -0.9585,0.047 -0.323462,0 -0.638489,-0.032 -0.9585,-0.047 l 0,18.2963 -83.139908,0 0,-40.83364 63.827666,0 c 0.06646,-0.64846 0.170102,-1.28708 0.297007,-1.917 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path6"
       inkscape:connector-curvature="0" />
    <path
       d="m 18.910414,995.77609 -10.6307876,10.68831 1.3577472,1.3504 10.6334714,-10.68582 -1.360431,-1.35289 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path8"
       inkscape:connector-curvature="0" />
    <path
       d="m 24.22715,995.77609 -15.9475236,16.03241 1.3577472,1.3504 15.9500794,-16.02992 -1.360303,-1.35289 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path10"
       inkscape:connector-curvature="0" />
    <path
       d="m 72.751149,1032.9005 0,1.917 15.947523,0 0,-1.917 -15.947523,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path12"
       inkscape:connector-curvature="0" />
    <path
       d="m 19.589415,1006.1834 0,1.917 55.944962,0 c -0.28755,-0.6229 -0.543789,-1.2616 -0.768845,-1.917 l -55.176117,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path14"
       inkscape:connector-curvature="0" />
    <path
       d="m 19.589415,1011.5239 0,1.917 42.728142,0 0,-1.917 -42.728142,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path16"
       inkscape:connector-curvature="0" />
    <path
       d="m 19.589415,1016.8681 0,1.917 26.683235,0 0,-1.917 -26.683235,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path18"
       inkscape:connector-curvature="0" />
    <path
       d="m 94.015408,978.06876 c -11.703541,0 -21.336594,9.68673 -21.336594,21.44395 0,11.88299 9.640593,21.44399 21.336594,21.44399 11.821752,0 21.336592,-9.5684 21.336592,-21.44399 0,-11.74981 -9.50742,-21.44395 -21.336592,-21.44395 z m 0,1.917 c 10.783512,0 19.419592,8.80925 19.419592,19.52695 0,10.85549 -8.62867,19.52699 -19.419592,19.52699 -10.653153,0 -19.419594,-8.6789 -19.419594,-19.52699 0,-10.71028 8.773981,-19.52695 19.419594,-19.52695 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.90360552;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path20"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 95.14113,988.45949 -1.350387,1.35787 11.010267,10.96284 1.35289,-1.36037 -11.01277,-10.96034 z"
       id="path22"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 104.80101,998.24667 -11.010267,10.96033 1.350387,1.3603 11.01277,-10.96276 -1.35289,-1.35787 z"
       id="path24"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 81.874392,998.55369 0,1.91701 23.358448,0 0,-1.91701 -23.358448,0 z"
       id="path26"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.90360552;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 19.586867,1022.2202 c 0,2.4204 0,4.8408 0,7.2612 l 33.814583,0 0,-7.2612 z m 1.917,1.917 8.71636,0 0,3.4272 -8.71636,0 z m 10.63336,0 19.347223,0 0,3.4272 -19.347223,0 z"
       id="path28"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+138 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 125 100"
   version="1.1"
   x="0px"
   y="0px"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_188906_cc.svg"
   width="125"
   height="100">
  <metadata
     id="metadata38">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs36" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview34"
     showgrid="false"
     inkscape:zoom="3.776"
     inkscape:cx="47.720009"
     inkscape:cy="73.89717"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="g4" />
  <g
     transform="matrix(1.4786603,0,0,1.4786603,-9.8292821,-1439.5248)"
     id="g4"
     style="fill:#338000">
    <path
       style="opacity:1;fill:#aade87;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:27.23500061;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="path4147"
       sodipodi:type="arc"
       sodipodi:cx="75.691109"
       sodipodi:cy="995.31189"
       sodipodi:rx="16.387802"
       sodipodi:ry="17.01466"
       sodipodi:start="0"
       sodipodi:end="6.2783233"
       d="M 92.078911,995.31189 A 16.387802,17.01466 0 0 1 75.711028,1012.3265 16.387802,17.01466 0 0 1 59.303355,995.35325 16.387802,17.01466 0 0 1 75.631351,978.29734 16.387802,17.01466 0 0 1 92.078717,995.22916"
       sodipodi:open="true" />
    <rect
       style="opacity:1;fill:#aade87;fill-opacity:0.61290325;fill-rule:evenodd;stroke:none;stroke-width:27.23500061;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect4145"
       width="67.879524"
       height="34.208435"
       x="7.9011359"
       y="992.26715" />
    <path
       d="m 8,991.70436 c 0,11.65044 0,23.30084 0,34.95124 l 68.0547,0 0,-15.8164 c -0.2504,0.012 -0.4966,0.037 -0.75,0.037 -0.2531,0 -0.4996,-0.025 -0.75,-0.037 l 0,14.3164 -65.0547,0 0,-31.95124 49.9434,0 c 0.052,-0.5074 0.1331,-1.0071 0.2324,-1.5 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path6"
       inkscape:connector-curvature="0" />
    <path
       d="m 16.5371,991.92426 -8.3183,8.36334 1.0624,1.0566 8.3204,-8.36134 -1.0645,-1.0586 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path8"
       inkscape:connector-curvature="0" />
    <path
       d="m 20.6973,991.92426 -12.4785,12.54494 1.0624,1.0566 12.4805,-12.54294 -1.0644,-1.0586 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path10"
       inkscape:connector-curvature="0" />
    <path
       d="m 58.666,1020.9731 0,1.5 12.4785,0 0,-1.5 -12.4785,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path12"
       inkscape:connector-curvature="0" />
    <path
       d="m 17.0684,1000.0677 0,1.5 43.7754,0 c -0.225,-0.4874 -0.4255,-0.9872 -0.6016,-1.5 l -43.1738,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path14"
       inkscape:connector-curvature="0" />
    <path
       d="m 17.0684,1004.2465 0,1.5 33.4336,0 0,-1.5 -33.4336,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path16"
       inkscape:connector-curvature="0" />
    <path
       d="m 17.0684,1008.4282 0,1.5 20.8789,0 0,-1.5 -20.8789,0 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path18"
       inkscape:connector-curvature="0" />
    <path
       d="m 75.3047,978.06876 c -9.1577,0 -16.6953,7.5796 -16.6953,16.7793 0,9.29814 7.5435,16.77934 16.6953,16.77934 9.2502,0 16.6953,-7.487 16.6953,-16.77934 0,-9.1939 -7.4393,-16.7793 -16.6953,-16.7793 z m 0,1.5 c 8.4378,0 15.1953,6.893 15.1953,15.2793 0,8.49414 -6.7517,15.27934 -15.1953,15.27934 -8.3358,0 -15.1953,-6.791 -15.1953,-15.27934 0,-8.3805 6.8654,-15.2793 15.1953,-15.2793 z"
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       id="path20"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 74.421873,986.19922 1.056641,1.0625 -8.615235,8.57812 -1.058593,-1.06445 8.617187,-8.57617 z"
       id="path22"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 66.863279,993.85742 8.615235,8.57618 -1.056641,1.0644 -8.617187,-8.57808 1.058593,-1.0625 z"
       id="path24"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 84.802732,994.09766 0,1.5 -18.277343,0 0,-1.5 18.277343,0 z"
       id="path26"
       inkscape:connector-curvature="0" />
    <path
       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#338000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.49999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
       d="m 17.066406,60.253906 c 0,1.89388 0,3.787761 0,5.681641 l 26.458985,0 0,-5.681641 z m 1.5,1.5 6.820313,0 0,2.681641 -6.820313,0 z m 8.320313,0 15.138672,0 0,2.681641 -15.138672,0 z"
       transform="translate(0,952.36216)"
       id="path28"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+45 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 99.999 125"
   enable-background="new 0 0 99.999 100"
   xml:space="preserve"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_198591_cc.svg"><metadata
     id="metadata14"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs12" /><sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview10"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="49.9995"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" /><path
     d="m 86.731,35.862 8.268,-8.267 -10.59,-10.593 -8.284,8.283 C 60.558,14.231 39.493,14.253 23.946,25.353 L 15.595,17 5.001,27.59 13.369,35.959 C 2.337,51.494 2.336,72.504 13.366,88.041 l -8.367,8.367 10.594,10.59 8.351,-8.35 c 15.545,11.099 36.609,11.121 52.179,0.066 L 84.407,107 94.997,96.406 86.729,88.138 C 97.854,72.561 97.854,51.438 86.731,35.862 Z M 72.891,28.52 50.001,51.409 27.18,28.586 C 40.896,19.178 59.15,19.155 72.891,28.52 Z M 16.604,84.805 C 7.257,71.1 7.257,52.897 16.603,39.191 L 39.409,62 16.604,84.805 Z m 10.577,10.606 22.82,-22.819 22.889,22.89 c -13.742,9.367 -31.995,9.34 -45.709,-0.071 z M 83.496,84.905 60.593,62 83.498,39.096 c 9.431,13.75 9.431,32.06 -0.002,45.809 z"
     id="path4"
     inkscape:connector-curvature="0"
     style="fill:#6c5353" /></svg>
 No newline at end of file
+1 −0
Original line number Original line Diff line number Diff line
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 125" enable-background="new 0 0 100 100" xml:space="preserve"><g><path d="M56.49,47.086c-0.022-0.023-0.04-0.045-0.06-0.066L33.688,24.334c-1.549-1.546-4.052-1.545-5.588-0.001   c-1.537,1.544-1.527,4.052,0.021,5.596l16.344,16.304H3.936C1.754,46.231-0.008,48.003,0,50.188   c0.009,2.185,1.785,3.957,3.967,3.956l40.548,0.001L27.927,70.822c-1.538,1.544-1.527,4.051,0.022,5.595   c1.548,1.546,4.05,1.546,5.587,0l22.567-22.686c0.116-0.119,0.222-0.241,0.32-0.369c0.964-0.722,1.591-1.872,1.585-3.172   C58.006,48.931,57.409,47.81,56.49,47.086z"/><path d="M51.486,63.151l-7.861,7.903v17.939c0,3.433,2.918,6.214,6.519,6.214l7.724-0.002v-7.861l-6.382,0.002V63.151z"/><path d="M51.486,13.406l6.382,0V5.543l-7.724,0c-3.601,0-6.519,2.781-6.519,6.212v17.731l7.861,7.842V13.406z"/><path d="M97.492,8.293L65.182,0.071c-2.04-0.506-3.736,1.751-3.736,5.094v89.679c0,3.326,1.696,5.614,3.736,5.079l32.311-8.22   c1.396-0.352,2.508-2.825,2.508-5.502V13.788C100,11.097,98.888,8.65,97.492,8.293z M74.087,54.922   c-2.72,0-4.924-2.204-4.924-4.922c0-2.72,2.204-4.925,4.924-4.925c2.718,0,4.924,2.205,4.924,4.925   C79.011,52.718,76.805,54.922,74.087,54.922z"/></g><text x="0" y="115" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Stefan Parnarov</text><text x="0" y="120" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg>
 No newline at end of file
+61 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_213188_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.2059793,0,0,1.2059793,-9.8622,43.847222)"
     id="g4"
     style="fill:#008000">
    <path
       d="M 50,5 C 39.766783,5 31.46875,15.218727 31.46875,27.8125 c 0,12.6 8.298033,22.8125 18.53125,22.8125 10.233219,0 18.53125,-10.2125 18.53125,-22.8125 C 68.53125,15.218727 60.233219,5 50,5 Z M 31.375,53.78125 c -2.404152,-0.0062 -4.971172,0.888365 -7.46875,2.9375 -6.869896,5.624221 -11.602724,13.02221 -14.1875,21.21875 -2.416609,7.667128 1.916284,9.677963 8.40625,10.53125 5.319031,0.703805 8.871669,2.39866 13.3125,3.8125 C 39.758607,94.940767 44.824222,95 50,95 c 5.175779,0 10.241392,-0.05923 18.5625,-2.71875 4.440831,-1.41384 7.993469,-3.108695 13.3125,-3.8125 6.489965,-0.853287 10.822859,-2.864122 8.40625,-10.53125 -2.584775,-8.19654 -7.317603,-15.594529 -14.1875,-21.21875 -3.998616,-3.276125 -8.168037,-3.638063 -11.5625,-2 -5.088582,2.460207 -9.598378,3.75 -14.53125,3.75 -4.932871,0 -9.442669,-1.289793 -14.53125,-3.75 -1.270588,-0.610381 -2.648768,-0.931273 -4.09375,-0.9375 z"
       transform="translate(0,-36)"
       style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+61 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_213192_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="-50.900424"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.1000428,0,0,1.1000428,-4.4991194,48.745336)"
     id="g4"
     style="fill:#aa0000">
    <path
       d="M 37.84375,11.46875 C 29.634879,11.46875 23,19.647734 23,29.75 c 0,10.108496 6.634879,18.3125 14.84375,18.3125 8.208869,0 14.875,-8.204004 14.875,-18.3125 0,-10.102266 -6.666131,-18.28125 -14.875,-18.28125 z M 62.1875,47.125 c -0.211762,0 -0.400565,0.08807 -0.5625,0.25 l -7.78125,7.75 c -0.32387,0.32387 -0.32387,0.838607 0,1.15625 L 65.375,67.84375 53.84375,79.375 c -0.32387,0.323871 -0.32387,0.83238 0,1.15625 l 7.78125,7.75 c 0.32387,0.323871 0.83238,0.323871 1.15625,0 L 74.3125,76.75 85.84375,88.28125 c 0.317641,0.323871 0.832379,0.323871 1.15625,0 l 7.75,-7.75 c 0.32387,-0.32387 0.32387,-0.832379 0,-1.15625 L 83.21875,67.84375 94.75,56.28125 c 0.32387,-0.317643 0.32387,-0.83238 0,-1.15625 L 87,47.375 c -0.323871,-0.323871 -0.838609,-0.323871 -1.15625,0 L 74.3125,58.90625 62.78125,47.375 c -0.161935,-0.161936 -0.381989,-0.25 -0.59375,-0.25 z m -39.28125,3.46875 c -1.930766,-0.0062 -4.000722,0.705714 -6,2.34375 -5.512025,4.509274 -9.3009835,10.460417 -11.375,17.03125 -1.9369944,6.15354 1.5493878,7.752389 6.75,8.4375 4.26637,0.560544 7.131153,1.922726 10.6875,3.0625 6.676713,2.130071 10.720738,2.1875 14.875,2.1875 3.936271,0 7.771178,-0.05634 13.84375,-1.875 -0.498263,-0.803446 -0.736565,-1.715998 -0.46875,-2.71875 2.958433,-4.241456 7.074882,-7.494239 10.625,-11.21875 C 59.564201,65.557972 57.27955,63.285776 55,61 53.59241,59.349505 51.156033,58.110192 51.09375,55.65625 51.486131,53.600919 53.11153,52.188947 54.625,50.8125 52.806345,50.388976 51.050842,50.596357 49.5,51.34375 c -4.079521,1.968136 -7.701294,3 -11.65625,3 -3.954957,0 -7.576728,-1.031864 -11.65625,-3 -1.015209,-0.498261 -2.122791,-0.75 -3.28125,-0.75 z"
       transform="translate(0,-36)"
       style="fill:#aa0000;fill-opacity:1;fill-rule:nonzero;stroke:none"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>
+61 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   x="0px"
   y="0px"
   viewBox="0 0 100 125"
   id="svg2"
   inkscape:version="0.91 r13725"
   sodipodi:docname="noun_213886_cc.svg">
  <metadata
     id="metadata16">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs14" />
  <sodipodi:namedview
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1"
     objecttolerance="10"
     gridtolerance="10"
     guidetolerance="10"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:window-width="1366"
     inkscape:window-height="712"
     id="namedview12"
     showgrid="false"
     inkscape:zoom="1.888"
     inkscape:cx="50"
     inkscape:cy="62.5"
     inkscape:window-x="0"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     inkscape:current-layer="svg2" />
  <g
     transform="matrix(1.0756045,0,0,1.0756045,-4.3771943,50.028402)"
     id="g4"
     style="fill:#d45500">
    <path
       d="M 37.84375,11.46875 C 29.634795,11.46875 23,19.672651 23,29.78125 c 0,10.10237 6.634795,18.28125 14.84375,18.28125 8.208953,0 14.875,-8.17888 14.875,-18.28125 0,-10.108599 -6.666047,-18.3125 -14.875,-18.3125 z M 71.28125,47.125 c -0.429757,0 -0.844508,0.257528 -1.0625,0.625 L 47.75,86.6875 c -0.217992,0.367472 -0.211765,0.845049 0,1.21875 0.211763,0.367472 0.632745,0.625 1.0625,0.625 l 44.96875,0 c 0.429756,0 0.850737,-0.257528 1.0625,-0.625 0.217992,-0.373701 0.217965,-0.851278 0,-1.21875 l -22.5,-38.9375 c -0.211765,-0.367472 -0.638974,-0.625 -1.0625,-0.625 z m -48.375,3.46875 c -1.930786,-0.0062 -4.000702,0.705696 -6,2.34375 -5.512083,4.515547 -9.3009621,10.460349 -11.375,17.03125 -1.9370144,6.147373 1.5493347,7.752384 6.75,8.4375 4.266414,0.560551 7.131117,1.922712 10.6875,3.0625 6.676783,2.130092 10.720696,2.1875 14.875,2.1875 2.846352,0 5.650126,-0.02118 9.28125,-0.71875 C 52.032933,73.981145 57.280324,65.206788 62.40625,56.375 61.297605,55.166703 60.076745,54.002546 58.78125,52.9375 55.573654,50.315369 52.221787,50.060819 49.5,51.375 c -4.079563,1.968156 -7.701253,2.96875 -11.65625,2.96875 -3.954997,0 -7.545436,-1.000594 -11.625,-2.96875 -1.015219,-0.492041 -2.154029,-0.775022 -3.3125,-0.78125 z m 48.375,6.1875 c 0.566779,0 1.107615,0.320354 1.5,0.78125 0.392385,0.460898 0.682137,1.090012 0.9375,1.8125 0.523179,1.438747 0.84375,3.313528 0.84375,5.40625 0,2.192376 -0.677317,5.026916 -1.34375,7.375 -0.666432,2.348085 -1.34375,4.1875 -1.34375,4.1875 -0.09342,0.26159 -0.344617,0.4375 -0.59375,0.4375 -0.242905,0 -0.469074,-0.17591 -0.5625,-0.4375 0,0 -0.683546,-1.839415 -1.34375,-4.1875 -0.666433,-2.348084 -1.34375,-5.182624 -1.34375,-7.375 0,-2.092722 0.295548,-3.967503 0.8125,-5.40625 0.26159,-0.722488 0.576365,-1.351602 0.96875,-1.8125 0.392385,-0.460896 0.901971,-0.78125 1.46875,-0.78125 z m 0,21.4375 c 1.575769,0 2.875,1.261751 2.875,2.84375 0,1.581999 -1.299231,2.875 -2.875,2.875 -1.575771,0 -2.84375,-1.293001 -2.84375,-2.875 0,-1.57577 1.267979,-2.84375 2.84375,-2.84375 z"
       transform="translate(0,-36)"
       style="fill:#d45500;fill-opacity:1;fill-rule:nonzero;stroke:none"
       id="path6"
       inkscape:connector-curvature="0" />
  </g>
</svg>

res/osx/Info.plist

0 → 100644
+30 −0

File added.

Preview size limit exceeded, changes collapsed.

res/osx/qt.conf

0 → 100644
+2 −0

File added.

Preview size limit exceeded, changes collapsed.

res/ui/addAccountDialog.ui

deleted100644 → 0
+0 −154

File deleted.

Preview size limit exceeded, changes collapsed.

res/ui/mainwindow.ui

deleted100644 → 0
+0 −267

File deleted.

Preview size limit exceeded, changes collapsed.

sakia.ico

0 → 100644
+176 KiB

File added.

Preview size limit exceeded, changes collapsed.

sakia.png

0 → 100644
+64.8 KiB

File added.

Preview size limit exceeded, changes collapsed.

sakia.spec

0 → 100644
+100 −0

File added.

Preview size limit exceeded, changes collapsed.

sakia.svg

0 → 100644
+227 −0

File added.

Preview size limit exceeded, changes collapsed.

setup.py

0 → 100644
+103 −0

File added.

Preview size limit exceeded, changes collapsed.

src/cutecoin/__init__.py

deleted100644 → 0
+0 −17

File deleted.

Preview size limit exceeded, changes collapsed.

src/sakia/__init__.py

0 → 100644
+2 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/app.py

0 → 100644
+348 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/constants.py

0 → 100644
+14 −0

File added.

Preview size limit exceeded, changes collapsed.

+60 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/errors.py

0 → 100644
+67 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/helpers.py

0 → 100644
+59 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/main.py

0 → 100755
+223 −0

File added.

Preview size limit exceeded, changes collapsed.

src/sakia/options.py

0 → 100644
+120 −0

File added.

Preview size limit exceeded, changes collapsed.

tests/__init__.py

0 → 100644
+0 −0
Original line number Original line Diff line number Diff line

tests/conftest.py

0 → 100644
+368 −0

File added.

Preview size limit exceeded, changes collapsed.

tests/helpers.py

0 → 100644
+27 −0

File added.

Preview size limit exceeded, changes collapsed.

ubuntu_packages.sh

0 → 100755
+4 −0

File added.

Preview size limit exceeded, changes collapsed.

update_license.sh

0 → 100755
+7 −0

File added.

Preview size limit exceeded, changes collapsed.

update_ts.py

0 → 100644
+54 −0

File added.

Preview size limit exceeded, changes collapsed.