emojidex 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/emojidex.gemspec +7 -6
  3. data/lib/emojidex.rb +9 -1
  4. data/lib/emojidex/client.rb +53 -0
  5. data/lib/emojidex/data/categories.rb +42 -42
  6. data/lib/emojidex/data/category.rb +10 -10
  7. data/lib/emojidex/data/collection.rb +39 -21
  8. data/lib/emojidex/data/collection/asset_information.rb +19 -3
  9. data/lib/emojidex/data/collection/cache.rb +28 -33
  10. data/lib/emojidex/data/collection/moji_data.rb +13 -11
  11. data/lib/emojidex/data/collection/static_collection.rb +3 -3
  12. data/lib/emojidex/data/emoji.rb +54 -37
  13. data/lib/emojidex/data/emoji/asset_information.rb +86 -3
  14. data/lib/emojidex/data/extended.rb +2 -2
  15. data/lib/emojidex/data/utf.rb +2 -2
  16. data/lib/emojidex/defaults.rb +9 -1
  17. data/lib/emojidex/env_helper.rb +1 -2
  18. data/lib/emojidex/service/collection.rb +70 -31
  19. data/lib/emojidex/service/error.rb +1 -0
  20. data/lib/emojidex/service/indexes.rb +31 -10
  21. data/lib/emojidex/service/search.rb +5 -4
  22. data/lib/emojidex/service/transactor.rb +35 -19
  23. data/lib/emojidex/service/user.rb +80 -37
  24. data/lib/emojidex/service/user/history_item.rb +23 -0
  25. data/lib/emojidex/{data → util}/collection_checker.rb +2 -3
  26. metadata +10 -79
  27. data/.coveralls.yml +0 -1
  28. data/.gitignore +0 -12
  29. data/.rspec +0 -2
  30. data/.rubocop.yml +0 -18
  31. data/.travis.yml +0 -18
  32. data/Gemfile +0 -18
  33. data/Guardfile +0 -19
  34. data/README.md +0 -73
  35. data/spec/emojidex/data/categories_spec.rb +0 -19
  36. data/spec/emojidex/data/collection_checker_spec.rb +0 -72
  37. data/spec/emojidex/data/collection_spec.rb +0 -136
  38. data/spec/emojidex/data/emoji_spec.rb +0 -47
  39. data/spec/emojidex/data/extended_spec.rb +0 -118
  40. data/spec/emojidex/data/utf_spec.rb +0 -91
  41. data/spec/emojidex/service/collection_spec.rb +0 -20
  42. data/spec/emojidex/service/error_spec.rb +0 -17
  43. data/spec/emojidex/service/indexes_spec.rb +0 -62
  44. data/spec/emojidex/service/search_spec.rb +0 -87
  45. data/spec/emojidex/service/transactor_spec.rb +0 -11
  46. data/spec/emojidex/service/user_spec.rb +0 -128
  47. data/spec/spec_helper.rb +0 -18
  48. data/spec/support/Genshin.svg +0 -126
  49. data/spec/support/couple_kiss/0.svg +0 -177
  50. data/spec/support/couple_kiss/1.svg +0 -177
  51. data/spec/support/couple_kiss/10.svg +0 -293
  52. data/spec/support/couple_kiss/11.svg +0 -235
  53. data/spec/support/couple_kiss/12.svg +0 -235
  54. data/spec/support/couple_kiss/13.svg +0 -235
  55. data/spec/support/couple_kiss/14.svg +0 -177
  56. data/spec/support/couple_kiss/15.svg +0 -177
  57. data/spec/support/couple_kiss/2.svg +0 -177
  58. data/spec/support/couple_kiss/3.svg +0 -235
  59. data/spec/support/couple_kiss/4.svg +0 -235
  60. data/spec/support/couple_kiss/5.svg +0 -235
  61. data/spec/support/couple_kiss/6.svg +0 -293
  62. data/spec/support/couple_kiss/7.svg +0 -235
  63. data/spec/support/couple_kiss/8.svg +0 -235
  64. data/spec/support/couple_kiss/9.svg +0 -235
  65. data/spec/support/couple_kiss/animation.json +0 -14
  66. data/spec/support/fixtures/categories.json +0 -14
  67. data/spec/support/fixtures/category.json +0 -5
  68. data/spec/support/fixtures/emoji.json +0 -28
  69. data/spec/support/fixtures/emoji_detailed.json +0 -41
  70. data/spec/support/fixtures/search_emoji.json +0 -21
  71. data/spec/support/fixtures/single_emoji.json +0 -19
  72. data/spec/support/fixtures/single_emoji_detailed.json +0 -30
  73. data/spec/support/sample_collections/good/emoji.json +0 -30
  74. data/spec/support/sample_collections/good/mouth.svg +0 -49
  75. data/spec/support/sample_collections/good/nut_and_bolt.svg +0 -372
  76. data/spec/support/sample_collections/good/purple_heart.svg +0 -24
  77. data/spec/support/sample_collections/good/px32/mouth.png +0 -0
  78. data/spec/support/sample_collections/good/px32/nut_and_bolt.png +0 -0
  79. data/spec/support/sample_collections/good/px32/purple_heart.png +0 -0
  80. data/spec/support/sample_collections/good/px32/woman_with_bunny_ears.png +0 -0
  81. data/spec/support/sample_collections/good/woman_with_bunny_ears.svg +0 -90
  82. data/spec/support/sample_collections/missing_assets/emoji.json +0 -30
  83. data/spec/support/sample_collections/missing_assets/mouth.svg +0 -49
  84. data/spec/support/sample_collections/missing_assets/purple_heart.svg +0 -24
  85. data/spec/support/sample_collections/missing_assets/px32/mouth.png +0 -0
  86. data/spec/support/sample_collections/missing_assets/px32/nut_and_bolt.png +0 -0
  87. data/spec/support/sample_collections/missing_assets/px32/woman_with_bunny_ears.png +0 -0
  88. data/spec/support/sample_collections/missing_assets/woman_with_bunny_ears.svg +0 -90
  89. data/spec/support/sample_collections/missing_index/emoji.json +0 -23
  90. data/spec/support/sample_collections/missing_index/mouth.svg +0 -49
  91. data/spec/support/sample_collections/missing_index/nut_and_bolt.svg +0 -372
  92. data/spec/support/sample_collections/missing_index/purple_heart.svg +0 -24
  93. data/spec/support/sample_collections/missing_index/px32/mouth.png +0 -0
  94. data/spec/support/sample_collections/missing_index/px32/nut_and_bolt.png +0 -0
  95. data/spec/support/sample_collections/missing_index/px32/purple_heart.png +0 -0
  96. data/spec/support/sample_collections/missing_index/px32/woman_with_bunny_ears.png +0 -0
  97. data/spec/support/sample_collections/missing_index/woman_with_bunny_ears.svg +0 -90
@@ -1,87 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/search'
3
-
4
- describe Emojidex::Service::Search do
5
- describe '.term' do
6
- it 'searches for a term and returns a collection with the results' do
7
- res = Emojidex::Service::Search.term('chocolate')
8
- expect(res).to be_a(Emojidex::Service::Collection)
9
- expect(res.emoji.count >= 3).to be true
10
- end
11
- end
12
-
13
- describe '.search' do
14
- it 'searches for a term and returns a collection with the results' do
15
- res = Emojidex::Service::Search.term('チョコ')
16
- expect(res).to be_a(Emojidex::Service::Collection)
17
- expect(res.emoji.count >= 3).to be true
18
- end
19
- end
20
-
21
- describe '.starting' do
22
- it 'searches for a code starting with the term and returns a collection with the results' do
23
- res = Emojidex::Service::Search.starting('face')
24
- expect(res).to be_a(Emojidex::Service::Collection)
25
- expect(res.emoji.count >= 3).to be true
26
- for i in 0..10
27
- expect(/^face/.match(res.emoji.values[i].code).nil?).to be false
28
- end
29
- end
30
- end
31
-
32
- describe '.ending' do
33
- it 'searches for a code starting with the term and returns a collection with the results' do
34
- res = Emojidex::Service::Search.ending('face')
35
- expect(res).to be_a(Emojidex::Service::Collection)
36
- expect(res.emoji.count >= 3).to be true
37
- for i in 0..10
38
- expect(/face$/.match(res.emoji.values[i].code).nil?).to be false
39
- end
40
- end
41
- end
42
-
43
- describe '.tags' do
44
- it 'searches for emoji by a single tag' do
45
- res = Emojidex::Service::Search.tags(:metal)
46
- expect(res.emoji.values[0].tags.include? :metal).to be true
47
- end
48
-
49
- it 'searches for emoji by multiple tags and mixed symbols/strings with spaces' do
50
- res = Emojidex::Service::Search.tags([:metal, 'fist', 'heavy metal'])
51
- expect(res.emoji.values[0].tags.include? :metal).to be true
52
- expect(res.emoji.values[0].tags.include? :fist).to be true
53
- end
54
- end
55
-
56
- describe '.advanced' do
57
- it 'searches for a term' do
58
- res = Emojidex::Service::Search.advanced('face')
59
- expect(res).to be_a(Emojidex::Service::Collection)
60
- expect(res.emoji.count > 0).to be true
61
- for i in 0..(res.emoji.count - 1)
62
- expect(/face/.match(res.emoji.values[i].code).nil?).to be false
63
- end
64
- end
65
-
66
- it 'searches for a term constrained with a tag' do
67
- res = Emojidex::Service::Search.advanced('metal', [], :fist)
68
- expect(res).to be_a(Emojidex::Service::Collection)
69
- expect(res.emoji.count > 0).to be true
70
- for i in 0..(res.emoji.count - 1)
71
- expect(/metal/.match(res.emoji.values[i].code).nil?).to be false
72
- expect(res.emoji.values[i].tags.include? :fist).to be true
73
- end
74
- end
75
-
76
- it 'searches for a term constrained by a category' do
77
- res = Emojidex::Service::Search.advanced('san', [:food])
78
- expect(res).to be_a(Emojidex::Service::Collection)
79
- expect(res.emoji.count > 0).to be true
80
- for i in 0..(res.emoji.count - 1)
81
- expect(/san/.match(res.emoji.values[i].code).nil?).to be false
82
- expect(res.emoji.values[i].category).to be :food
83
- end
84
- end
85
-
86
- end
87
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/transactor'
3
-
4
- describe Emojidex::Service::Transactor do
5
- describe '.get' do
6
- it 'gets data' do
7
- res = Emojidex::Service::Transactor.get('emoji')
8
- expect(res.count > 0).to be true
9
- end
10
- end
11
- end
@@ -1,128 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/user'
3
-
4
-
5
- describe Emojidex::Service::User do
6
- it 'has a set of auth status codes which define if a user is authorized' do
7
- expect(Emojidex::Service::User.auth_status_codes.include? :verified).to be true
8
- expect(Emojidex::Service::User.auth_status_codes.include? :unverified).to be true
9
- expect(Emojidex::Service::User.auth_status_codes[:verified]).to be true
10
- expect(Emojidex::Service::User.auth_status_codes[:unverified]).to be false
11
- end
12
-
13
- describe 'initialize' do
14
- it 'sets defaults' do
15
- user = Emojidex::Service::User.new
16
- expect(user.username).to eq ''
17
- expect(user.pro).to eq false
18
- expect(user.premium).to eq false
19
- expect(user.pro_exp).to eq nil
20
- expect(user.premium_exp).to eq nil
21
- end
22
-
23
- it 'defaults to an unauthroized state' do
24
- user = Emojidex::Service::User.new
25
- expect(user.authorized?).to be false
26
- end
27
- end
28
-
29
- describe 'authorize' do
30
- it 'fails authorization with a bad token' do
31
- user = Emojidex::Service::User.new
32
- expect(user.authorize('test', '12345')).to be false
33
- expect(user.status).to eq :unverified
34
- end
35
-
36
- it 'authorizes with a good token' do
37
- user = Emojidex::Service::User.new
38
- expect(user.authorize('test',
39
- '1798909355d57c9a93e3b82d275594e7c7c000db05021138')).to be true
40
- expect(user.status).to eq :verified
41
- end
42
-
43
- it 'fails to sync history when unauthorized' do
44
- user = Emojidex::Service::User.new
45
- expect(user.sync_history).to be false
46
- expect(user.history.class == Array).to be true
47
- expect(user.history.size).to eq 0
48
- end
49
-
50
- it 'syncs history when authorized' do
51
- user = Emojidex::Service::User.new
52
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
53
- expect(user.sync_history).to be true
54
- expect(user.history.size > 0).to be true
55
- end
56
-
57
- it 'fails to sync favorites when unauthorized' do
58
- user = Emojidex::Service::User.new
59
- expect(user.sync_favorites).to be false
60
- end
61
-
62
- it 'syncs favorites when authorized' do
63
- user = Emojidex::Service::User.new
64
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
65
- expect(user.sync_favorites).to be true
66
- expect(user.favorites.emoji.length > 0).to be true
67
- end
68
-
69
- it 'refuses to add a favorite when not authorized' do
70
- user = Emojidex::Service::User.new
71
- expect(user.add_favorite('combat knife')).to be false
72
- end
73
-
74
- it 'adds a favorite when authorized' do
75
- user = Emojidex::Service::User.new
76
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
77
- expect(user.add_favorite('combat_knife')).to be true
78
- end
79
-
80
- it 'refuses to remove a favorite when not authorized' do
81
- user = Emojidex::Service::User.new
82
- expect(user.remove_favorite('combat_knife')).to be false
83
- end
84
-
85
- it 'removes a favorite when authorized' do
86
- user = Emojidex::Service::User.new
87
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
88
- user.add_favorite('combat_knife')
89
- expect(user.remove_favorite('combat_knife')).to be true
90
- end
91
-
92
- it 'saves user data' do
93
- user = Emojidex::Service::User.new
94
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
95
- user.save(tmp_cache_path)
96
- expect(File.exist? "#{tmp_cache_path}/user.json").to be true
97
- expect(File.exist? "#{tmp_cache_path}/history.json").to be true
98
- expect(File.exist? "#{tmp_cache_path}/favorites.json").to be true
99
- end
100
-
101
- it 'loads user data' do
102
- user = Emojidex::Service::User.new
103
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
104
- user.sync_favorites
105
- user.sync_history
106
- user.add_favorite('忍者') # just in case
107
- user.save(tmp_cache_path)
108
-
109
- # without syncing
110
- user = Emojidex::Service::User.new
111
- user.load(tmp_cache_path)
112
- expect(user.username).to eq 'test'
113
- expect(user.authorized?).to be true
114
- expect(user.favorites.emoji.count > 0).to be true
115
- expect(user.history.length > 0).to be true
116
-
117
- # with syncing
118
- user = Emojidex::Service::User.new
119
- user.load(tmp_cache_path, false)
120
- expect(user.username).to eq 'test'
121
- expect(user.authorized?).to be false
122
- expect(user.status).to be :loaded
123
- expect(user.favorites.emoji.count > 0).to be true
124
- expect(user.history.length > 0).to be true
125
- end
126
-
127
- end
128
- end
@@ -1,18 +0,0 @@
1
- require 'rspec'
2
- require 'emojidex'
3
- require 'emojidex/data/collection'
4
- require 'emojidex/vectors'
5
-
6
- def sample_collection(name)
7
- e = Emojidex::Data::Collection.new
8
- e.load_local_collection(File.expand_path("../support/sample_collections/#{name}", __FILE__))
9
- e
10
- end
11
-
12
- def tmp_cache_path
13
- tmp_cache_path = File.expand_path('../tmp/samplecache', __FILE__)
14
- end
15
-
16
- def clear_tmp_cache
17
- FileUtils.rm_rf tmp_cache_path if Dir.exist? tmp_cache_path
18
- end
@@ -1,126 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:xlink="http://www.w3.org/1999/xlink"
11
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
- width="64px"
14
- height="64px"
15
- id="svg3713"
16
- version="1.1"
17
- inkscape:version="0.48.2 r9819"
18
- sodipodi:docname="genshin-logo-revised-s2.svg"
19
- inkscape:export-filename="/home/zero/デスクトップ/genshin-logo-revised-s2.png"
20
- inkscape:export-xdpi="90.349998"
21
- inkscape:export-ydpi="90.349998">
22
- <defs
23
- id="defs3715">
24
- <linearGradient
25
- id="linearGradient4528">
26
- <stop
27
- style="stop-color:#d70b3a;stop-opacity:1;"
28
- offset="0"
29
- id="stop4530" />
30
- <stop
31
- style="stop-color:#d70b3a;stop-opacity:0;"
32
- offset="1"
33
- id="stop4532" />
34
- </linearGradient>
35
- <radialGradient
36
- inkscape:collect="always"
37
- xlink:href="#linearGradient4528"
38
- id="radialGradient4534"
39
- cx="31.954546"
40
- cy="32.045456"
41
- fx="31.954546"
42
- fy="32.045456"
43
- r="31.863636"
44
- gradientUnits="userSpaceOnUse"
45
- gradientTransform="matrix(0.9985415,-1.6601007e-5,1.6156097e-5,0.97684882,0.04608723,0.74242019)" />
46
- </defs>
47
- <sodipodi:namedview
48
- id="base"
49
- pagecolor="#ffffff"
50
- bordercolor="#666666"
51
- borderopacity="1.0"
52
- inkscape:pageopacity="0.0"
53
- inkscape:pageshadow="2"
54
- inkscape:zoom="5.6568543"
55
- inkscape:cx="-54.952613"
56
- inkscape:cy="18.847043"
57
- inkscape:current-layer="g3"
58
- showgrid="true"
59
- inkscape:document-units="px"
60
- inkscape:grid-bbox="true"
61
- inkscape:window-width="1920"
62
- inkscape:window-height="999"
63
- inkscape:window-x="0"
64
- inkscape:window-y="26"
65
- inkscape:window-maximized="1" />
66
- <metadata
67
- id="metadata3718">
68
- <rdf:RDF>
69
- <cc:Work
70
- rdf:about="">
71
- <dc:format>image/svg+xml</dc:format>
72
- <dc:type
73
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
74
- <dc:title></dc:title>
75
- </cc:Work>
76
- </rdf:RDF>
77
- </metadata>
78
- <g
79
- id="layer1"
80
- inkscape:label="Layer 1"
81
- inkscape:groupmode="layer">
82
- <g
83
- transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
84
- id="g3"
85
- style="fill:#eaf4fc;fill-opacity:1"
86
- inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
87
- inkscape:export-xdpi="899.45599"
88
- inkscape:export-ydpi="899.45599">
89
- <path
90
- style="fill:#000b00;fill-opacity:1"
91
- inkscape:connector-curvature="0"
92
- d="M 25.836,60.884 C 24.166,40.446 48.553,29.302 56.569,21.716 -18.048,34.763 21.127285,141.272 92.968,116.101 55.66,114.913 61,104.364 53.038,102.823 34.947,99.318 23.875,84.208 23.875,77.524 c 0,-5.82 3.127,-11.227 1.961,-16.64 z"
93
- id="path5"
94
- sodipodi:nodetypes="ccccsc" />
95
- <path
96
- style="fill:#000b00;fill-opacity:1"
97
- inkscape:connector-curvature="0"
98
- d="m 113.716,93.582 c -2.866,6.521 -6.899,12.655 -12.102,18.097 14.903,-9.178 23.524,-23.791 25.886,-39.501 -2.569,7.972 -7.767,15.337 -13.784,21.404 z"
99
- id="path7" />
100
- <path
101
- style="fill:#000b00;fill-opacity:1"
102
- inkscape:connector-curvature="0"
103
- d="M 103.22,17.748 C 90.066,15.033 74.921,11.61 64.736,17.282 47.742,14.826 29.859,28.196 27.575,30.997 49.169,1.381 87.748,5.928 103.22,17.748 z"
104
- id="path9" />
105
- </g>
106
- <g
107
- transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
108
- id="g19"
109
- style="fill:#d7003a;fill-opacity:1"
110
- inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
111
- inkscape:export-xdpi="899.45599"
112
- inkscape:export-ydpi="899.45599">
113
- <path
114
- style="fill:#d7003a;fill-opacity:1"
115
- inkscape:connector-curvature="0"
116
- d="M 51.111,43.19 C 58.462774,38.269206 66.017957,33.761108 74,28.841 l 0,-4.095 c -8.247318,5.125197 -15.321401,9.30897 -22.829,14.275 -8.797,5.749 -14.357,9.711 -14.357,16.446 0,5.879 4.211,9.647 11.136,14.334 C 46.919651,70.483832 45.873425,71.246791 45,71.879 40,75.676 36.801,79 36.801,84 l -0.004,0 -10e-4,-0.047 c 0,0.011 0.003,4.047 4.094,4.047 4.095,0 20.477,0 20.477,0 0,0 2.566,-0.008 3.633,-1.999 l 0,16.469 c 0,0 9,-4.095 9,-12.287 0,-8.191 0,-15.061 0,-15.061 C 74,75.122 73.654,71 69.558,71 65.462,71 65,71 65,71 l 0,13 -20.016,0 c 0,-6 0.007,-7.794 6.247,-12.221 2.081315,-1.349288 4.033477,-2.724396 5.769,-4.064 5,-3.797 8,-7.267 8,-12.252 L 65,51 57,51 c -0.07924,1.223929 0.04302,3.037425 0.136,4 0,7 0.061,8.075 -6.077,12.445 -6.143,-4.371 -6.109,-5.598 -6.109,-12.099 0,-6.501 0.017,-7.784 6.161,-12.156 z"
117
- id="path21"
118
- sodipodi:nodetypes="ccccscccccscccscsccccccsccccc" />
119
- <path
120
- style="fill:#d7003a;fill-opacity:1"
121
- inkscape:connector-curvature="0"
122
- d="m 116.841,37 c 0,0 -0.08,-4.199 -4.175,-4.199 -4.096,0 -4.142,-0.052 -16.428,8.14 C 92.937,43.141 90,44.684 88,45.861 V 27.106 C 88,27.106 88.014,23 83.917,23 80.264,23 80.012,23 80,23 v 26 4.176 c 4,0 3.761,0 16.048,-8.191 7.257,-4.838 9.952,-6.818 11.952,-7.629 0,3.689 0,24.739 0,32.203 0,8.19 0.358,8.19 -11.928,16.381 C 83.785,94.132 78,98.228 78,98.228 v 4.095 c 0,0 6.189,-4.095 18.477,-12.288 C 108.763,81.844 117,77.749 117,69.558 117,61.366 117,37 117,37 h -0.159 z"
123
- id="path23" />
124
- </g>
125
- </g>
126
- </svg>
@@ -1,177 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="_x30_1_12_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
6
- <g>
7
- <g>
8
- <g>
9
- <path fill="#FFB997" d="M47.156,8.059c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375
10
- s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
11
- <path fill="none" stroke="#190902" stroke-width="3" stroke-miterlimit="10" d="M47.156,8.059
12
- c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589
13
- c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
14
- </g>
15
- <defs>
16
- <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="39.224" y="6.559" width="36.722" height="48.408">
17
-
18
- <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
19
- </filter>
20
- </defs>
21
- <mask maskUnits="userSpaceOnUse" x="39.224" y="6.559" width="36.722" height="48.408" id="SVGID_1_">
22
- <g filter="url(#Adobe_OpacityMaskFilter)">
23
-
24
- <image overflow="visible" width="41" height="53" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
25
- EAMCAwYAAAG9AAACJQAAArv/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
26
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
27
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADUAKQMBIgACEQEDEQH/
28
- xACHAAACAwEBAAAAAAAAAAAAAAAABwQFBgECAQEAAAAAAAAAAAAAAAAAAAAAEAAABgIBBQEAAAAA
29
- AAAAAAABAgMEBQYAEBIwExU1BxYRAAIABQICCgMAAAAAAAAAAAECABARIQNBEjETUWFxkaEiYnIz
30
- BIEjFBIBAAAAAAAAAAAAAAAAAAAAMP/aAAwDAQACEQMRAAAAX+gz7LKjjMBOUbQV5MZuWZ50AySs
31
- aasNE2kIwTfEaMUat1OWD0Bf1gEEA//aAAgBAgABBQDqf//aAAgBAwABBQDqf//aAAgBAQABBQDI
32
- yqLP0w+duBwfnjgAl6yrGJaoDkq7TV9TKEfkfFupBSn100Q31fvWZQTcnIAABq/esymyJGj9FUqq
33
- er8YPHYQ5iGq1wTMVN+2UK8m2TUlpspJAdJ9zm1/T9l/5Xlr/9oACAECAgY/AE//2gAIAQMCBj8A
34
- T//aAAgBAQEGPwCFcORUaR8jdwj5G7hDZGYnb0zCm7JY/ieRgNJbMAtWhJgtkNcmS7Hrnk9snxst
35
- VBBB7YAE8ntly3sHuDCupqCJ5B6ZB0O1lNQRC/V+yaOBS+sBg4pBLOKjrhsGLzKbFtJry676+WnG
36
- sfrrt9XHwg/2czXjXb4T/9k=" transform="matrix(1 0 0 1 37 4)">
37
- </image>
38
- </g>
39
- </mask>
40
- <g opacity="0.36" mask="url(#SVGID_1_)">
41
- <path fill="#FF1744" d="M47.156,8.059c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375
42
- s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
43
- <path fill="none" stroke="#FF1744" stroke-width="3" stroke-miterlimit="10" d="M47.156,8.059
44
- c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589
45
- c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
46
- </g>
47
- </g>
48
- <polygon fill="#160201" points="53.757,18.434 60.394,22.999 54.375,14.521 "/>
49
- <g>
50
- <defs>
51
- <filter id="Adobe_OpacityMaskFilter_1_" filterUnits="userSpaceOnUse" x="55.268" y="25.355" width="17.814" height="11.5">
52
- <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
53
- <feBlend in="SourceGraphic" in2="back" mode="normal"/>
54
- </filter>
55
- </defs>
56
- <mask maskUnits="userSpaceOnUse" x="55.268" y="25.355" width="17.814" height="11.5" id="SVGID_2_">
57
- <g filter="url(#Adobe_OpacityMaskFilter_1_)">
58
-
59
- <image overflow="visible" width="23" height="16" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
60
- EAMCAwYAAAF7AAABnAAAAeH/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
61
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
62
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIABAAFwMBIgACEQEDEQH/
63
- xABsAAEBAQAAAAAAAAAAAAAAAAAGAAEBAQAAAAAAAAAAAAAAAAAAAAAQAAMBAQEAAAAAAAAAAAAA
64
- AAIDBQQQBhEAAwACAgMAAAAAAAAAAAAAARECABJRAyFyBBIBAAAAAAAAAAAAAAAAAAAAEP/aAAwD
65
- AQACEQMRAAAAKIjyILWx/9oACAECAAEFAOf/2gAIAQMAAQUA5//aAAgBAQABBQCNEOmTfCpFWiUz
66
- PQiWymG33aCVorM0b//aAAgBAgIGPwA//9oACAEDAgY/AD//2gAIAQEBBj8Ae2steM3BLXOdfx0W
67
- O25ia9iJxUHDbGGAC1wc6/roIdVzcz6nbP/Z" transform="matrix(1 0 0 1 53 23)">
68
- </image>
69
- </g>
70
- </mask>
71
- <g mask="url(#SVGID_2_)">
72
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="58.9609" y1="23.7437" x2="71.1666" y2="40.9757">
73
- <stop offset="0" style="stop-color:#FFA67F"/>
74
- <stop offset="0.0969" style="stop-color:#FF967B"/>
75
- <stop offset="0.3655" style="stop-color:#FF7170"/>
76
- <stop offset="0.6143" style="stop-color:#FF5568"/>
77
- <stop offset="0.8336" style="stop-color:#FF4564"/>
78
- <stop offset="1" style="stop-color:#FF3F62"/>
79
- </linearGradient>
80
- <ellipse fill="url(#SVGID_3_)" cx="64.175" cy="31.104" rx="8.907" ry="5.751"/>
81
- </g>
82
- </g>
83
- <path fill="#3E3A39" stroke="#000000" stroke-width="3" d="M46.852-3.604L34.977,1.521l4.837,1.052c0,0-4.212,4.073-1.837,10.448
84
- l1.837-2.5c0,0,1.532,4.032,5.4,6.875l0.638-6.375c0,0,10.725,6.375,15.625,9l0.5-7c0,0,4.494,13.75,6,18.085l5.125-8.835
85
- l2.375,0.25L75.352-3.604H46.852z"/>
86
- <path fill="#160201" d="M52.335,21.921l0.35,3.396c0,0,3.108,2.328,6.565,0.839C59.25,26.157,56.684,25.355,52.335,21.921z"/>
87
- </g>
88
- <g>
89
- <g>
90
- <g>
91
- <path fill="#FFB997" d="M20.397,7.396c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443
92
- c0,0,4.398,6.125-2.352,14.75c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
93
- <path fill="none" stroke="#3A0101" stroke-width="3" stroke-miterlimit="10" d="M20.397,7.396
94
- c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443c0,0,4.398,6.125-2.352,14.75
95
- c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
96
- </g>
97
- <defs>
98
- <filter id="Adobe_OpacityMaskFilter_2_" filterUnits="userSpaceOnUse" x="-15.54" y="5.869" width="43.925" height="49.331">
99
-
100
- <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
101
- </filter>
102
- </defs>
103
- <mask maskUnits="userSpaceOnUse" x="-15.54" y="5.869" width="43.925" height="49.331" id="SVGID_4_">
104
- <g filter="url(#Adobe_OpacityMaskFilter_2_)">
105
-
106
- <image overflow="visible" width="49" height="55" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
107
- EAMCAwYAAAHEAAACRAAAAwL/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
108
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
109
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADcAMQMBIgACEQEDEQH/
110
- xACHAAEBAAIDAQAAAAAAAAAAAAAABwUGAgMEAQEBAAAAAAAAAAAAAAAAAAAAABAAAQQCAgMBAAAA
111
- AAAAAAAAAQIDBAUABhAHQBIUMREBAAEDAgIIBwEAAAAAAAAAAQIAEQMQITESIEFRgZEiEwRhobHR
112
- QtIzBRIBAAAAAAAAAAAAAAAAAAAAQP/aAAwDAQACEQMRAAAAn/v8FIMRzpYkutWKOgHOzyizncDE
113
- SO5Ts0QGz1eE0U3N0dp9nu3yYxgHIM3kwwONAD//2gAIAQIAAQUA8D//2gAIAQMAAQUA8D//2gAI
114
- AQEAAQUAyrqJFmtvr6StJ67kZYaa/CaIIPHX9eBEAA42wpRWkknGWy67rkQRq7jZKxVlXWVVKrXM
115
- 12N9NrFbDbHH7nYbXoM0dDf3oIKeew5DakZCnSIL2u7nHkIZmR3h7pGWtzGhM3tquzmcI9/aBO2Z
116
- jFXm2lNnIuHzx//aAAgBAgIGPwAH/9oACAEDAgY/AAf/2gAIAQEBBj8ApjhbA2WhckjuK/rLwKlk
117
- ZrYpHicdTNIvzebxrbTJPg8rvSvF3dIYz85Bt8WscQtsa5MEWzIS5TDObXsSNMMd7ReZqEDqOhFj
118
- EsyLukskncsBQnC3QMY+ZkbaGXBKycTqaMWeXLMsI0MJjer3Kksy9qlkvfGPl++pyX5+rl4/Kj0c
119
- OfLHs9Ob9CrP+f7gO30sn61f32PLjj2ShKJ331//2Q==" transform="matrix(1 0 0 1 -18 3)">
120
- </image>
121
- </g>
122
- </mask>
123
- <g opacity="0.36" mask="url(#SVGID_4_)">
124
- <path fill="#FF1744" d="M20.397,7.396c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443
125
- c0,0,4.398,6.125-2.352,14.75c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
126
- <path fill="none" stroke="#FF1744" stroke-width="3" stroke-miterlimit="10" d="M20.397,7.396
127
- c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443c0,0,4.398,6.125-2.352,14.75
128
- c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
129
- </g>
130
- </g>
131
- <path fill="#8E480E" d="M16.785,14.016c0,0-3.604,1.261-5.823,2.135c-2.218,0.875-4.905,1.283-4.905,1.283s6.335-0.249,7.463-0.533
132
- C14.647,16.618,16.785,14.016,16.785,14.016z"/>
133
- <path fill="#160201" d="M17.115,21.189l-2.555,3.899c0,0-4.618,1.358-6.084-1.173C8.476,23.916,13.041,24.251,17.115,21.189z"/>
134
- <g>
135
- <defs>
136
- <filter id="Adobe_OpacityMaskFilter_3_" filterUnits="userSpaceOnUse" x="-0.82" y="26.344" width="16.482" height="10.354">
137
- <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
138
- <feBlend in="SourceGraphic" in2="back" mode="normal"/>
139
- </filter>
140
- </defs>
141
- <mask maskUnits="userSpaceOnUse" x="-0.82" y="26.344" width="16.482" height="10.354" id="SVGID_5_">
142
- <g filter="url(#Adobe_OpacityMaskFilter_3_)">
143
-
144
- <image overflow="visible" width="21" height="15" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
145
- EAMCAwYAAAGJAAABqQAAAfr/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
146
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
147
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAA8AFQMBIgACEQEDEQH/
148
- xAB5AAADAQAAAAAAAAAAAAAAAAAABQYBAQEAAAAAAAAAAAAAAAAAAAAAEAACAgIDAQAAAAAAAAAA
149
- AAADBQIEEBQBExUGEQACAQIEBgMAAAAAAAAAAAABAhEAEiExAwRBYXGxMhSyEwUSAQAAAAAAAAAA
150
- AAAAAAAAABD/2gAMAwEAAhEDEQAAAJh/PvyVMD//2gAIAQIAAQUAx//aAAgBAwABBQDH/9oACAEB
151
- AAEFAEKLlpO38KAQfNJvorzOpO2/fzD33t//2gAIAQICBj8AP//aAAgBAwIGPwA//9oACAEBAQY/
152
- AJZoQGIHGi6MQ0ZzXpTjPlyqdpt9TcITiNNGb4iip/M3S4ZtpOB2r7rG9iZstN3SM6//2Q==" transform="matrix(1 0 0 1 -3 24)">
153
- </image>
154
- </g>
155
- </mask>
156
- <g mask="url(#SVGID_5_)">
157
- <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="2.6548" y1="24.7915" x2="13.8115" y2="40.5427">
158
- <stop offset="0" style="stop-color:#FFA67F"/>
159
- <stop offset="0.0969" style="stop-color:#FF967B"/>
160
- <stop offset="0.3655" style="stop-color:#FF7170"/>
161
- <stop offset="0.6143" style="stop-color:#FF5568"/>
162
- <stop offset="0.8336" style="stop-color:#FF4564"/>
163
- <stop offset="1" style="stop-color:#FF3F62"/>
164
- </linearGradient>
165
- <ellipse fill="url(#SVGID_6_)" cx="7.421" cy="31.521" rx="8.241" ry="5.177"/>
166
- </g>
167
- </g>
168
- <path fill="#8E480E" stroke="#4C2101" stroke-width="2.8682" stroke-miterlimit="10" d="M0.791,17.044
169
- c0,0-1.562,36.691,2.299,43.508c0,0-11.708-2.723-16.34-23.697l-3.375-24.492L0.791,17.044z"/>
170
- <path fill="#8E480E" stroke="#4C2101" stroke-width="3" stroke-miterlimit="10" d="M14.658,3.521c0,0-7.395,24-13.145,28.75
171
- s-11.25,5.75-11.25,5.75l1.302-40h19.448C11.013-1.979,13.552-1.479,14.658,3.521z"/>
172
- <path fill="#8E480E" stroke="#4C2101" stroke-width="3" stroke-miterlimit="10" d="M12.495,2.896c0,0,5.505,11.875,11.505,15.5
173
- c0,0,2.885-8.875,0-15c-2.189-4.649-4.481-6.5-4.481-6.5H8.289L12.495,2.896z"/>
174
- <path fill="#160201" d="M19.519,23.321c0,0-2.885,0.813-3.942-0.931l-1.308,2.192C14.269,24.582,17.769,25.121,19.519,23.321z"/>
175
- <path fill="#160201" d="M12.795,24.658c3.21,0.784,3.213,0.637,4.319,0.795l-2.457-2.132L12.795,24.658z"/>
176
- </g>
177
- </svg>