panko_serializer 0.7.2 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/docs.yml +39 -0
- data/.github/workflows/ruby.yml +48 -0
- data/.gitignore +2 -1
- data/Gemfile +5 -14
- data/README.md +7 -7
- data/benchmarks/bm_panko_json.rb +5 -1
- data/benchmarks/setup.rb +3 -1
- data/benchmarks/type_casts/bm_panko.rb +2 -2
- data/docs/.DS_Store +0 -0
- data/docs/README.md +195 -8
- data/docs/core/Footer.js +81 -0
- data/docs/{associations.md → docs/associations.md} +7 -3
- data/docs/{attributes.md → docs/attributes.md} +8 -4
- data/docs/{design-choices.md → docs/design-choices.md} +6 -2
- data/docs/{getting-started.md → docs/getting-started.md} +5 -1
- data/docs/docs/introduction.md +13 -0
- data/docs/{performance.md → docs/performance.md} +11 -7
- data/docs/{response-bag.md → docs/response-bag.md} +24 -1
- data/docs/i18n/en.json +50 -0
- data/docs/package-lock.json +9673 -0
- data/docs/package.json +14 -0
- data/docs/sidebars.json +15 -0
- data/docs/siteConfig.js +80 -0
- data/docs/static/.DS_Store +0 -0
- data/docs/static/css/custom.css +51 -0
- data/docs/static/img/favicon.ico +0 -0
- data/docs/static/img/oss_logo.png +0 -0
- data/docs/static/img/undraw_code_review.svg +1 -0
- data/docs/static/img/undraw_monitor.svg +1 -0
- data/docs/static/img/undraw_note_list.svg +1 -0
- data/docs/static/img/undraw_online.svg +1 -0
- data/docs/static/img/undraw_open_source.svg +1 -0
- data/docs/static/img/undraw_operating_system.svg +1 -0
- data/docs/static/img/undraw_react.svg +1 -0
- data/docs/static/img/undraw_tweetstorm.svg +1 -0
- data/docs/static/img/undraw_youtube_tutorial.svg +1 -0
- data/docs/static/index.html +14 -0
- data/ext/panko_serializer/attributes_writer/active_record.c +58 -16
- data/ext/panko_serializer/attributes_writer/attributes_writer.c +8 -7
- data/ext/panko_serializer/attributes_writer/common.h +1 -1
- data/ext/panko_serializer/attributes_writer/hash.c +2 -4
- data/ext/panko_serializer/attributes_writer/plain.c +2 -3
- data/ext/panko_serializer/attributes_writer/type_cast/type_cast.c +70 -21
- data/ext/panko_serializer/attributes_writer/type_cast/type_cast.h +1 -2
- data/ext/panko_serializer/panko_serializer.c +23 -8
- data/ext/panko_serializer/serialization_descriptor/association.c +1 -0
- data/ext/panko_serializer/serialization_descriptor/attribute.c +1 -0
- data/ext/panko_serializer/serialization_descriptor/serialization_descriptor.c +7 -10
- data/lib/panko/association.rb +1 -1
- data/lib/panko/object_writer.rb +8 -0
- data/lib/panko/response.rb +5 -4
- data/lib/panko/serializer.rb +4 -2
- data/lib/panko/serializer_resolver.rb +28 -15
- data/lib/panko/version.rb +1 -1
- data/panko_serializer.gemspec +8 -7
- metadata +67 -25
- data/.travis.yml +0 -37
- data/docs/docpress.json +0 -4
@@ -0,0 +1 @@
|
|
1
|
+
<svg id="a75d69e6-d07c-4db3-9c83-72b2470e5561" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1108" height="731.18" viewBox="0 0 1108 731.18"><title>react</title><path d="M813.68,415.2l6.89-2.7c.66-.26,1.31-.54,2-.81a59.85,59.85,0,0,1,15.28-115.77l-4.8,24.2,18.22-23.92.16,0a59.87,59.87,0,0,1,51.16,67.45c-.15,1.13-.39,2.23-.6,3.34,5.61-4.43,10.87-9.32,14.81-15,8-11.54,10.71-25.76,13.47-43.17,5.47-34.48,10.4-69.34,14.84-104.18a59.83,59.83,0,0,1-42-65.36c.25-1.82.6-3.59,1-5.34.1-.44.2-.88.31-1.31.43-1.69.91-3.35,1.47-5,.09-.27.21-.52.3-.78.5-1.37,1-2.72,1.65-4,.22-.5.44-1,.67-1.47.69-1.43,1.42-2.83,2.22-4.19.27-.45.56-.88.83-1.33.62-1,1.27-2,1.94-2.93.36-.5.71-1,1.08-1.49l.27-.39,0,0a59.81,59.81,0,0,1,74.64-17l-6.24,31.49,18-23.64a59.5,59.5,0,0,1,16.32,68.62h.07c-.17.4-.38.78-.55,1.18-.33.74-.67,1.47-1,2.2-.46.93-1,1.84-1.45,2.74-.38.68-.75,1.36-1.16,2-.59,1-1.23,1.9-1.87,2.83-.38.54-.73,1.1-1.12,1.63-1,1.39-2.12,2.72-3.26,4-.4.45-.83.86-1.25,1.3-.81.86-1.62,1.71-2.48,2.52-.53.5-1.09,1-1.64,1.46-.79.7-1.6,1.38-2.43,2-.59.47-1.19.92-1.79,1.36-.87.63-1.75,1.22-2.64,1.81-.6.39-1.2.78-1.81,1.15-1,.61-2.05,1.17-3.1,1.72-.53.27-1,.57-1.59.83-1.58.77-3.2,1.48-4.85,2.11-.31.12-.64.21-.95.32-1.38.5-2.77,1-4.18,1.35-.61.17-1.23.31-1.85.46-1.15.28-2.31.54-3.48.76q-1,.18-2.07.33c-1.15.17-2.31.3-3.48.4-.69.06-1.37.12-2.07.16-1.26.06-2.53.07-3.8.06a2.08,2.08,0,0,0-.25,0q-2.82,22-5.92,44A59.82,59.82,0,0,1,1042,240.88l-15.68,26.58,25.21-16.59a59.68,59.68,0,0,1,11.5,44.16,58.76,58.76,0,0,1-4.5,15.94,59.83,59.83,0,0,1-111.19-4c-.23,1.48-.45,3-.68,4.46-2.44,15.35-5.47,34.46-16.23,50-7.29,10.56-17.33,18.36-27.09,25.22q-9.52,6.7-19.48,12.77a59.85,59.85,0,0,1-24.53,13.74q-16,8.19-32.69,14.81l-6.95,2.72c-6.25,2.44-12.65,4.94-19,7.6,1,.09,2,.17,3,.3a59.9,59.9,0,0,1,50.86,49.05l-42.31,23.11,42.18-1.89A59.16,59.16,0,0,1,843,534.54a59.87,59.87,0,0,1-82.7,11.74l2.1,3.91c1.4,2.58,2.78,5.15,4.12,7.7,18.33,34.74,19.66,64.74,3.75,84.49l-13-10.45c15.49-19.22,3.2-49.77-5.5-66.27-1.32-2.5-2.68-5-4-7.56C736,536.27,722.65,511.53,728,485.2,736,445.5,779.05,428.7,813.68,415.2Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M315.6,603.42l-5.38-2.11c-.52-.2-1-.43-1.54-.63a46.75,46.75,0,0,0-11.94-90.42l3.75,18.9-14.22-18.68h-.13a46.76,46.76,0,0,0-40,52.68c.12.89.31,1.74.47,2.61a55.84,55.84,0,0,1-11.56-11.73c-6.23-9-8.37-20.12-10.53-33.71C220.29,493.4,216.45,466.18,213,439a46.72,46.72,0,0,0,32.77-51.05c-.2-1.42-.47-2.8-.79-4.17l-.24-1c-.34-1.32-.71-2.62-1.15-3.88-.07-.21-.16-.41-.24-.61-.39-1.07-.82-2.12-1.28-3.15-.18-.38-.35-.77-.53-1.15-.54-1.11-1.11-2.2-1.73-3.26-.21-.36-.44-.7-.65-1-.49-.78-1-1.55-1.52-2.29-.28-.39-.55-.79-.84-1.17l-.21-.3h0a46.76,46.76,0,0,0-58.29-13.32l4.88,24.6-14.07-18.46a46.48,46.48,0,0,0-12.75,53.59h-.05c.13.31.29.61.43.92.26.58.52,1.15.8,1.72q.54,1.08,1.14,2.13c.29.54.58,1.07.9,1.59.46.75,1,1.48,1.46,2.21.3.42.57.86.88,1.27.8,1.08,1.65,2.12,2.54,3.13.31.35.65.67,1,1,.63.67,1.27,1.33,1.94,2,.41.4.85.77,1.28,1.14q.93.83,1.89,1.59c.46.36.93.71,1.4,1.06.68.49,1.37,1,2.06,1.41.47.31.94.61,1.42.9.79.48,1.6.91,2.42,1.34.42.22.82.45,1.24.66,1.24.6,2.5,1.15,3.79,1.64.24.1.5.16.74.25,1.07.39,2.16.75,3.27,1.06.47.13,1,.24,1.44.35.9.22,1.8.43,2.72.6l1.61.26c.9.13,1.81.23,2.72.31.54.05,1.07.09,1.62.12,1,.05,2,.06,3,.05h.19q2.2,17.22,4.62,34.41a46.71,46.71,0,0,0-67.48-8.14L149.49,488l-19.68-12.95a46.57,46.57,0,0,0-9,34.49A45.8,45.8,0,0,0,124.34,522a46.73,46.73,0,0,0,86.84-3.12c.18,1.15.35,2.32.53,3.48,1.9,12,4.27,26.92,12.67,39.08,5.7,8.24,13.54,14.33,21.16,19.69q7.44,5.24,15.21,10a46.88,46.88,0,0,0,19.16,10.74c8.32,4.26,16.84,8.14,25.54,11.56l5.42,2.13c4.88,1.9,9.88,3.85,14.81,5.93-.78.07-1.57.13-2.36.24A46.77,46.77,0,0,0,283.6,660l33,18-32.94-1.47a46.78,46.78,0,0,0,73.57,29.2c-.55,1-1.09,2-1.64,3.05-1.09,2-2.17,4-3.22,6-14.31,27.13-15.35,50.57-2.92,66l10.13-8.16c-12.1-15-2.5-38.87,4.3-51.76,1-1.95,2.09-3.92,3.16-5.9,9.19-17,19.61-36.37,15.46-56.94C376.29,627.08,342.64,614,315.6,603.42Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" fill="#3f3d56"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" opacity="0.1"/><ellipse cx="554" cy="694.68" rx="554" ry="23.5" fill="#3f3d56"/><path d="M131,770.73c-3-5.51.4-12.26,4.28-17.18s8.61-10,8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78,84.78,0,0,1-15.56-12.51,23,23,0,0,1-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.5-19.26,1.9-38.48" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M92.11,648.7a14,14,0,0,1,7-11.49l3.14,6.21-.09-7.52a13.86,13.86,0,0,1,4.62-.56A14,14,0,1,1,92.11,648.7Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M117.14,743.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-26.27.15l8.77,7.13-9.64-2.24A13.89,13.89,0,0,0,117.14,743.7Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M124.07,716.45a14,14,0,0,0,4.46-27.54l.07,5.79-3.18-6.29h0a14,14,0,0,0-1.31,28.05Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M90,693.78a14,14,0,0,0,1.32-28,13.88,13.88,0,0,0-7.52,1.78l2.48,6.8-5.11-4.9a14,14,0,0,0-4.53,9.69A13.33,13.33,0,0,0,77,683,14,14,0,0,0,90,693.78Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M94,652.44c3.24.36,6.39,1.37,9.64,1.57s6.82-.58,8.88-3.1c1.11-1.37,1.66-3.09,2.59-4.57a10.08,10.08,0,0,1,3.54-3.33,14,14,0,1,1-26.24,9.32C92.94,652.35,93.47,652.39,94,652.44Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M90,693.78a14,14,0,0,0,13.35-20,10.4,10.4,0,0,0-2.82,2.83c-1,1.51-1.61,3.25-2.78,4.64-2.19,2.57-5.92,3.41-9.31,3.25s-6.66-1.11-10-1.42c-.47,0-.94-.08-1.41-.09A14,14,0,0,0,90,693.78Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M124.07,716.45a14,14,0,0,0,13.47-19.76,11.36,11.36,0,0,0-3,2.85c-1.09,1.54-1.77,3.31-3,4.73-2.36,2.64-6.34,3.57-9.93,3.48s-6.82-.93-10.28-1.19A14,14,0,0,0,124.07,716.45Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M117.14,743.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-3.08,2.74c-1.34,1.63-2.21,3.47-3.76,5-2.87,2.82-7.5,4-11.62,4.09A62.35,62.35,0,0,1,117.14,743.7Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M152.19,764.39s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65,19-4.14,19.06,29.06-2,32.39-4S152.19,764.39,152.19,764.39Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M115.54,778c12.51.1,29.06-2,32.4-4,2.53-1.54,3.54-7.09,3.88-9.65l.37,0s-.7,8.93-4,11-19.89,4.08-32.39,4c-3.61,0-4.86-1.31-4.79-3.22C111.48,777.26,112.86,778,115.54,778Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M1101,779.73c-3-5.51.4-12.26,4.28-17.18s8.61-10,8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78,84.78,0,0,1-15.56-12.51,23,23,0,0,1-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.49-19.26,1.9-38.48" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M1062.11,657.7a14,14,0,0,1,7-11.49l3.14,6.21-.09-7.52a13.86,13.86,0,0,1,4.62-.56,14,14,0,1,1-14.68,13.36Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M1087.14,752.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-26.27.15l8.77,7.13-9.64-2.24A13.89,13.89,0,0,0,1087.14,752.7Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M1094.07,725.45a14,14,0,0,0,4.46-27.54l.07,5.79-3.18-6.29h0a14,14,0,0,0-1.31,28.05Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M1060,702.78a14,14,0,0,0,1.32-28,13.88,13.88,0,0,0-7.52,1.78l2.48,6.8-5.11-4.9a14,14,0,0,0-4.53,9.69A13.33,13.33,0,0,0,1047,692,14,14,0,0,0,1060,702.78Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M1064,661.44c3.24.36,6.39,1.37,9.64,1.57s6.82-.58,8.88-3.1c1.11-1.37,1.66-3.09,2.59-4.57a10.08,10.08,0,0,1,3.54-3.33,14,14,0,1,1-26.24,9.32C1062.94,661.35,1063.47,661.39,1064,661.44Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1060,702.78a14,14,0,0,0,13.35-20,10.4,10.4,0,0,0-2.82,2.83c-1,1.51-1.61,3.25-2.78,4.64-2.19,2.57-5.92,3.41-9.31,3.25s-6.66-1.11-10-1.42c-.47,0-.94-.08-1.41-.09A14,14,0,0,0,1060,702.78Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1094.07,725.45a14,14,0,0,0,13.47-19.76,11.36,11.36,0,0,0-3,2.85c-1.09,1.54-1.77,3.31-3,4.73-2.36,2.64-6.34,3.57-9.93,3.48s-6.82-.93-10.28-1.19A14,14,0,0,0,1094.07,725.45Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1087.14,752.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-3.08,2.74c-1.34,1.63-2.21,3.47-3.76,5-2.87,2.82-7.5,4-11.62,4.09A62.35,62.35,0,0,1,1087.14,752.7Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1122.19,773.39s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65,19-4.14,19.06,29.06-2,32.39-4S1122.19,773.39,1122.19,773.39Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M1085.54,787c12.51.1,29.06-2,32.4-4,2.53-1.54,3.54-7.09,3.88-9.65l.37,0s-.7,8.93-4,11-19.89,4.08-32.39,4c-3.61,0-4.86-1.31-4.79-3.22C1081.48,786.26,1082.86,787,1085.54,787Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M791.57,415.56q-9.92-3.4-20-6.3,1.66-6.79,3.09-13.65c15.14-73.51,5.24-132.73-28.57-152.22-32.42-18.7-85.44.8-139,47.39q-7.92,6.92-15.47,14.2-5.07-4.85-10.3-9.51C525.21,245.64,469,224.65,435.18,244.2c-32.39,18.75-42,74.42-28.35,144.09q2,10.35,4.59,20.58c-7.95,2.26-15.64,4.67-23,7.24C322.63,439,280.61,475,280.61,512.29c0,38.51,45.11,77.14,113.64,100.56q8.34,2.83,16.8,5.26-2.74,11-4.88,22.18c-13,68.46-2.84,122.82,29.46,141.45C469,801,525,781.2,579.52,733.54c4.31-3.77,8.63-7.77,13-11.95q8.18,7.89,16.79,15.32c52.82,45.45,105,63.81,137.26,45.12,33.33-19.29,44.16-77.69,30.1-148.73q-1.6-8.14-3.73-16.61,5.91-1.74,11.56-3.61c71.24-23.6,117.6-61.76,117.6-100.79,0-37.43-43.38-73.62-110.5-96.73Z" transform="translate(-46 -84.41)" fill="#53c1de"/><path d="M776.12,587.88c-3.4,1.13-6.88,2.21-10.44,3.27a621.6,621.6,0,0,0-31.47-78.73,623.06,623.06,0,0,0,30.25-77.58c6.35,1.84,12.53,3.78,18.47,5.83,57.51,19.79,92.59,49.06,92.59,71.62,0,24-37.89,55.21-99.4,75.59ZM750.6,638.46c6.22,31.41,7.1,59.81,3,82-3.7,19.95-11.14,33.25-20.34,38.58-19.59,11.33-61.47-3.4-106.64-42.27q-7.77-6.69-15.63-14.25a624.23,624.23,0,0,0,52.09-66.14,620.2,620.2,0,0,0,84.17-13q1.9,7.68,3.37,15ZM492.48,757.1c-19.14,6.76-34.38,6.95-43.59,1.64-19.6-11.31-27.75-55-16.63-113.5q2-10.37,4.53-20.63a625.79,625.79,0,0,0,83.75,12.13,645.09,645.09,0,0,0,53.35,65.9q-5.79,5.61-11.84,10.91c-24.11,21.08-48.28,36-69.57,43.55ZM402.84,587.73c-30.31-10.36-55.33-23.82-72.49-38.5-15.41-13.2-23.19-26.31-23.19-36.94,0-22.63,33.74-51.5,90-71.11q10.6-3.69,21.39-6.73a637.08,637.08,0,0,0,30.29,78.48,646.29,646.29,0,0,0-30.66,79.6Q410.44,590.32,402.84,587.73Zm30.05-204.54c-11.68-59.69-3.93-104.72,15.59-116,20.79-12,66.76,5.12,115.22,48.15,3.1,2.75,6.21,5.63,9.32,8.6a635.89,635.89,0,0,0-52.93,65.52,648.42,648.42,0,0,0-82.93,12.89q-2.39-9.52-4.27-19.15ZM701,449.38q-9.11-15.74-18.89-31.08c19.83,2.51,38.82,5.83,56.66,9.91a565.54,565.54,0,0,1-19.89,53.51q-8.61-16.35-17.88-32.34ZM591.64,342.91a569.3,569.3,0,0,1,36.57,44.14q-36.71-1.73-73.45,0c12.07-15.92,24.44-30.72,36.88-44.13Zm-110,106.65q-9.15,15.87-17.55,32.14c-7.73-18.33-14.34-36.36-19.74-53.77,17.73-4,36.64-7.21,56.34-9.68Q490.77,433.69,481.62,449.56Zm19.61,158.65A564.64,564.64,0,0,1,444,599c5.49-17.71,12.25-36.13,20.15-54.86q8.43,16.29,17.61,32.16Q491.1,592.49,501.23,608.21Zm91.14,75.33C579.79,670,567.24,655,555,638.79q17.85.71,36.36.71,19,0,37.51-.84A563.94,563.94,0,0,1,592.37,683.54ZM719.08,543.19A562.82,562.82,0,0,1,740,597.85a561.35,561.35,0,0,1-58,9.89q9.85-15.63,19.08-31.63,9.38-16.26,18-32.92Zm-41,19.66q-14.12,24.52-29.81,48.1c-18.44,1.32-37.49,2-56.91,2s-38.15-.6-56.27-1.78Q519,587.67,504.7,563t-26.51-50.08q12.27-25.53,26.43-50.1h0q14.14-24.56,30.13-48c18.49-1.4,37.43-2.13,56.59-2.13s38.22.74,56.69,2.14q15.81,23.37,30,47.81t26.79,49.87q-12.45,25.62-26.71,50.3Zm54.77-296.46c20.81,12,28.9,60.4,15.83,123.87q-1.29,6.19-2.8,12.35a635.74,635.74,0,0,0-83.09-13.13,625.16,625.16,0,0,0-52.53-65.56q7-6.74,14.29-13.11c45.88-39.93,88.76-55.69,108.3-44.42Z" transform="translate(-46 -84.41)" fill="#fff"/><path d="M591.34,456.79a55.5,55.5,0,1,1-55.5,55.5,55.49,55.49,0,0,1,55.5-55.5" transform="translate(-46 -84.41)" fill="#53c1de"/><path d="M605.26,104.81a16.6,16.6,0,1,1-16.6-16.6A16.52,16.52,0,0,1,605.26,104.81Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M575.4,109a16.62,16.62,0,0,1,12.49-24.54,16.6,16.6,0,1,0,1.41,33.07A16.6,16.6,0,0,1,575.4,109Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><rect x="521.91" y="43.52" width="44.47" height="69.37" fill="#3f3d56"/><rect x="521.91" y="43.52" width="44.47" height="69.37" opacity="0.1"/><path d="M497.66,379.61s-4.75,13.05-16,14.83-17.79,4.74-17.79,4.74l26.68,17.19,14.23-1.78s1.78-18.38,7.71-22.53S497.66,379.61,497.66,379.61Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M690.34,379.61s4.75,13.05,16,14.83,17.79,4.74,17.79,4.74l-26.68,17.19-14.23-1.78s-1.78-18.38-7.71-22.53S690.34,379.61,690.34,379.61Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M560.5,264.59s-7.11,3.56-9.48,10.68c0,0-13,4.15-20.16,15.41,0,0-8.9,9.49-10.08,14.23S506,338.11,506,338.11s-13.64,44.47-20.75,49.21c0,0,22.53-4.74,26.68,17.79,0,0,5.33,0,11.26-20.75s20.16-46.25,20.16-46.25,4.74-17.78,8.89-20.75,10.67-16.6,16.6-13,45.06-.6,45.06-.6S637,314.4,637.58,321.51s4.74,7.71,5.33,13.64,22.53,52.76,22.53,52.76,4.15,13,5.34,16c0,0,13-31.42,30.24-13.63,0,0-.6-11.86-5.93-19s-28.46-62.84-28.46-62.84-2.37-8.3-4.74-10.67-20.76-21.35-27.28-21.35c0,0-3.55-8.89-7.7-10.08Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M507.14,410.44a28.89,28.89,0,0,1-28.22-3.79,56.37,56.37,0,0,0-12.59-7.3c-6.29-2.54-13.81-4.42-16.1-.17-4.15,7.71,50.39,26.68,50.39,26.68S507.74,421.71,507.14,410.44Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M680.86,410.44a28.89,28.89,0,0,0,28.22-3.79,56.37,56.37,0,0,1,12.59-7.3c6.29-2.54,13.81-4.42,16.1-.17,4.15,7.71-50.39,26.68-50.39,26.68S680.26,421.71,680.86,410.44Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M579.88,167.08c-.22,2.06-.9,4.29-2.66,5.38-1.44.9-3.26.83-4.92,1.17a11.46,11.46,0,0,0-7.82,6.77,17.51,17.51,0,0,0-.75,10.55,39.22,39.22,0,0,0,1.52,5.06c1.74,4.92,3.84,9.8,7.09,13.89a59,59,0,0,0,9.3,8.77c2.11,1.72,4.29,3.47,6.89,4.28a21.75,21.75,0,0,0,5.4.72c2.25.1,4.65.17,6.6-.95,3-1.73,3.89-5.55,5.52-8.62,1.38-2.6,3.44-4.81,4.73-7.46a29.49,29.49,0,0,0,2-6.52l2.77-12.3c1-4.47,1.92-9.51-.59-13.34a2.28,2.28,0,0,0-.74-.77,2.79,2.79,0,0,0-1.52-.15,16.44,16.44,0,0,1-9.15-2.09,3.93,3.93,0,0,1-1.15-.9,4.72,4.72,0,0,1-.7-2.12,22.2,22.2,0,0,0-1.28-4.45,3,3,0,0,0-.87-1.34,3.15,3.15,0,0,0-1.41-.47,114.47,114.47,0,0,0-12.93-1.35c-1.42-.07-3.56-.64-4.54.62S580,165.58,579.88,167.08Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M579.88,167.08c-.22,2.06-.9,4.29-2.66,5.38-1.44.9-3.26.83-4.92,1.17a11.46,11.46,0,0,0-7.82,6.77,17.51,17.51,0,0,0-.75,10.55,39.22,39.22,0,0,0,1.52,5.06c1.74,4.92,3.84,9.8,7.09,13.89a59,59,0,0,0,9.3,8.77c2.11,1.72,4.29,3.47,6.89,4.28a21.75,21.75,0,0,0,5.4.72c2.25.1,4.65.17,6.6-.95,3-1.73,3.89-5.55,5.52-8.62,1.38-2.6,3.44-4.81,4.73-7.46a29.49,29.49,0,0,0,2-6.52l2.77-12.3c1-4.47,1.92-9.51-.59-13.34a2.28,2.28,0,0,0-.74-.77,2.79,2.79,0,0,0-1.52-.15,16.44,16.44,0,0,1-9.15-2.09,3.93,3.93,0,0,1-1.15-.9,4.72,4.72,0,0,1-.7-2.12,22.2,22.2,0,0,0-1.28-4.45,3,3,0,0,0-.87-1.34,3.15,3.15,0,0,0-1.41-.47,114.47,114.47,0,0,0-12.93-1.35c-1.42-.07-3.56-.64-4.54.62S580,165.58,579.88,167.08Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M571.85,174.15a26.93,26.93,0,0,0-7.13-1.12c-5.72-.14-11.84,1.83-15.14,6.5A15.34,15.34,0,0,0,547.29,191a23.57,23.57,0,0,0,5.2,10.66,32,32,0,0,1,4,5.24c1.58,3,1.63,6.59,2.06,10,1,8.12,4.46,15.75,5.83,23.82s.19,17.42-6.18,22.55c-1.07.86-2.37,1.77-2.46,3.14-.14,2.19,2.71,3.12,4.9,3.33,6.55.62,13.27,1.23,19.63-.46,2.63-.7,5.17-1.79,7.85-2.29,6.8-1.27,13.64,1.34,20.45,2.59a90.61,90.61,0,0,0,14.91,1.21,7.94,7.94,0,0,0,3.43-.45,2.75,2.75,0,0,0,1.74-2.74,4.76,4.76,0,0,0-1.18-2c-3.44-4.25-4.49-9.9-5.43-15.29l-3.15-18.11c-1.69-9.68-3.26-20.2,1.32-28.89,3.29-6.25,9.36-10.65,12.83-16.8a9.84,9.84,0,0,0,1.55-6.28c-.52-3.09-3.31-5.3-6.17-6.59A23.21,23.21,0,0,0,611,173c.1,4.33-1,8.71-1.71,13l-1.21,7a88.83,88.83,0,0,1-2.71,12.2,12.85,12.85,0,0,1-2.17,4.42,11.43,11.43,0,0,1-3.83,2.79,22.83,22.83,0,0,1-10.14,2.32,13.54,13.54,0,0,1-4.48-.69,19,19,0,0,1-6.17-4.34,10.11,10.11,0,0,1-1.63-1.77,9.93,9.93,0,0,1-1.11-2.67,55.42,55.42,0,0,1-1.91-7.48c-.3-1.94-.4-3.91-.54-5.87C573,186.12,573,179.72,571.85,174.15Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M565.84,288.9s-2.37,31.43,12.45,36.76,1.78-26.09,1.78-26.09l-4.75-9.48Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M616.23,288.9s2.37,31.43-12.45,36.76S602,299.57,602,299.57l4.75-9.48Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M552.79,184l-4.74,7.71s4.15,26.68,4.74,31.42a62.2,62.2,0,0,0,2.38,10.08s.59,14.23.59,19.57,3,14.23,3,14.23a64.82,64.82,0,0,0,3,14.82c2.37,6.52,4.74,14.23,4.74,14.23s3-8.3,14.82,4.15a7.18,7.18,0,0,0,0-10.08s-3.55-16-3.55-24.31-6.53-48-6.53-48S567,172.7,552.79,184Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M551.61,183.37l-4.74,7.71s4.15,26.68,4.74,31.42A61.84,61.84,0,0,0,554,232.58s.59,14.23.59,19.56,3,14.23,3,14.23a64.53,64.53,0,0,0,3,14.82c2.37,6.53,4.75,14.23,4.75,14.23s3-8.3,14.82,4.15a7.18,7.18,0,0,0,0-10.07s-3.56-16-3.56-24.31-6.52-48-6.52-48S565.84,172.1,551.61,183.37Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M629.87,179.22l3,3.53s3.49,20.18-4.22,45.68l-2.37,23.12s-4.15,19.57-4.74,24.31-.59,5.33-1.78,7.11a2.29,2.29,0,0,0,0,3l-3.56,13s-5.33-6.52-16,1.78c0,0-3-4.74-.6-8.89s2.37-5.93,1.78-7.12,2.37-7.11,2.37-8.3S607.93,248,607.93,248s1.78-26.68,3.56-35.57c1.09-5.47,1.07-17.66.88-26.24-.19-8.94,10.63-13.78,17-7.5C629.52,178.85,629.7,179,629.87,179.22Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M631.65,178l3,3.53s3.49,20.19-4.22,45.68l-2.37,23.12s-4.15,19.57-4.74,24.31-.6,5.34-1.78,7.12a2.28,2.28,0,0,0,0,3L618,297.8s-5.33-6.53-16,1.77c0,0-3-4.74-.59-8.89s2.37-5.93,1.78-7.11,2.37-7.12,2.37-8.3,4.15-28.46,4.15-28.46,1.78-26.68,3.56-35.58.59-35.57.59-35.57S623.35,169.14,631.65,178Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><circle cx="545.92" cy="61.61" r="23.72" fill="#a0616a"/><path d="M604.29,110.41a16.6,16.6,0,0,1-31.09.44c9.26-3.73,18.72-.41,18.72-.41C596.65,108.78,600.75,108.93,604.29,110.41Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M591.92,111.63s-45.65-16-34.38,61.66c0,0,10.08,6.52,17.78,2.37,0,0-5.33-53.95,15.42-51.58s17.19,50.4,17.19,50.4,11.86,3.55,15.42-3S622.16,101,591.92,111.63Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M590.74,120.52c-14.24-1.62-16.2,23.27-16,39.05.17-15.69,2.81-37,16-35.49,14.81,1.69,17.24,26.66,17.41,40.8C608.32,151.9,606.9,122.37,590.74,120.52Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M557.54,169.73a159.38,159.38,0,0,1-1.77-20.53,152.12,152.12,0,0,0,1.77,24.09s10.08,6.52,17.78,2.37c0,0-.12-1.28-.26-3.43C567.39,176.1,557.54,169.73,557.54,169.73Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M623.35,168c-3.32,6.08-13.83,3.41-15.25,3-.07,2.2-.17,3.52-.17,3.52s11.86,3.55,15.42-3c.73-1.34,1.11-5.13,1-10.2C624.25,164.57,623.9,167,623.35,168Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M872.73,757.37c4.74-8.78-.64-19.54-6.82-27.37s-13.73-16-13.57-26c.23-14.35,15.45-22.81,27.62-30.42a134.77,134.77,0,0,0,24.79-19.93c3-3.05,5.87-6.31,7.62-10.21,2.52-5.6,2.45-12,2.29-18.12q-.79-30.71-3-61.34" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M934.74,562.9a22.31,22.31,0,0,0-11.16-18.32l-5,9.9.15-12a22.37,22.37,0,1,0,16,20.41Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M894.86,714.29a22.36,22.36,0,1,1,1.08-18l-14,11.37,15.37-3.57A22.25,22.25,0,0,1,894.86,714.29Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M883.81,670.86A22.37,22.37,0,0,1,876.72,627l-.12,9.22,5.06-10h.06a22.37,22.37,0,1,1,2.09,44.69Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M938.11,634.73A22.37,22.37,0,1,1,948,592.87l-4,10.83,8.13-7.8a22.37,22.37,0,0,1-14.07,38.83Z" transform="translate(-46 -84.41)" fill="#4aa84c"/><path d="M931.74,568.86c-5.17.57-10.19,2.18-15.37,2.5s-10.87-.92-14.14-5c-1.77-2.17-2.65-4.91-4.14-7.28a16,16,0,0,0-5.63-5.3,22.37,22.37,0,1,0,41.81,14.84C933.42,568.71,932.58,568.77,931.74,568.86Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M938.11,634.73a22.39,22.39,0,0,1-21.28-31.91,16.37,16.37,0,0,1,4.5,4.51c1.59,2.4,2.56,5.18,4.43,7.39,3.48,4.09,9.44,5.43,14.84,5.19s10.6-1.78,16-2.28c.75-.06,1.5-.11,2.26-.13A22.37,22.37,0,0,1,938.11,634.73Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M883.81,670.86a22.37,22.37,0,0,1-21.46-31.49,17.83,17.83,0,0,1,4.73,4.55c1.74,2.45,2.82,5.27,4.86,7.54,3.77,4.2,10.11,5.68,15.83,5.54,5.54-.12,10.87-1.48,16.38-1.9A22.36,22.36,0,0,1,883.81,670.86Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M894.86,714.29A22.37,22.37,0,0,1,854.08,696a22.27,22.27,0,0,1,4.91,4.38c2.13,2.59,3.53,5.53,6,7.94,4.57,4.49,11.95,6.34,18.52,6.51A97.1,97.1,0,0,0,894.86,714.29Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M839,747.26s17.65-.54,23-4.33,27.16-8.31,28.48-2.24,26.53,30.22,6.6,30.38-46.31-3.1-51.62-6.34S839,747.26,839,747.26Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M897.4,769c-19.93.16-46.31-3.11-51.62-6.34-4-2.47-5.65-11.3-6.19-15.38l-.59,0s1.12,14.24,6.43,17.47,31.69,6.5,51.62,6.34c5.75,0,7.74-2.09,7.63-5.12C903.88,767.78,901.69,768.92,897.4,769Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M369,127.27l-18.25,11.57,11.08-20.15a18,18,0,0,0-11-3.94h-.3a21.58,21.58,0,0,1-3.78-.28l-6.19,3.92,2.65-4.82a22.06,22.06,0,0,1-10.82-8.21l-11.07,7,7-12.72c-6.48-7.77-15.2-12.54-24.81-12.54-11.51,0-21.76,6.85-28.38,17.52a21.24,21.24,0,0,1-18.76,10.12l-.62,0c-12.71,0-23,14.41-23,32.19s10.3,32.18,23,32.18a17.2,17.2,0,0,0,8-2c8.29-4.31,19.17-4.39,27.85-.54a29,29,0,0,0,23.68.05c8.62-3.77,19.37-3.69,27.61.54a17.23,17.23,0,0,0,7.93,2c12.71,0,23-14.41,23-32.18A40.86,40.86,0,0,0,369,127.27Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M334.59,174.36a34,34,0,0,0-19.72,2.14,29,29,0,0,1-23.67-.05c-8.69-3.85-19.57-3.77-27.86.54a17.2,17.2,0,0,1-8,2c-11.29,0-20.68-11.38-22.64-26.38a21.58,21.58,0,0,0,5.64-6.08C245,135.87,255.21,129,266.72,129s21.64,6.77,28.26,17.32a21.79,21.79,0,0,0,18.76,10.31H314C323,156.64,330.8,163.85,334.59,174.36Z" transform="translate(-46 -84.41)" opacity="0.03"/><path d="M846.07,150.83,837,156.6l5.53-10a9,9,0,0,0-5.51-2h-.14a10.79,10.79,0,0,1-1.89-.14l-3.09,2L833.2,144a11,11,0,0,1-5.4-4.09l-5.52,3.5,3.49-6.34a16.17,16.17,0,0,0-12.37-6.26c-5.75,0-10.86,3.42-14.16,8.74a10.57,10.57,0,0,1-9.36,5h-.31c-6.34,0-11.48,7.19-11.48,16s5.14,16.05,11.48,16.05a8.62,8.62,0,0,0,4-1,16.56,16.56,0,0,1,13.89-.27,14.52,14.52,0,0,0,11.81,0,16.58,16.58,0,0,1,13.77.27,8.61,8.61,0,0,0,4,1c6.34,0,11.48-7.18,11.48-16.05A20.28,20.28,0,0,0,846.07,150.83Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M828.92,174.32a17,17,0,0,0-9.83,1.07,14.52,14.52,0,0,1-11.81,0,16.58,16.58,0,0,0-13.9.27,8.55,8.55,0,0,1-4,1c-5.64,0-10.32-5.67-11.3-13.15a10.93,10.93,0,0,0,2.82-3c3.3-5.32,8.42-8.73,14.16-8.73s10.79,3.37,14.09,8.63a10.85,10.85,0,0,0,9.36,5.14h.15C823.15,165.48,827,169.08,828.92,174.32Z" transform="translate(-46 -84.41)" opacity="0.03"/><path d="M250.34,300.27,265,309.55l-8.88-16.15a14.48,14.48,0,0,1,8.85-3.15h.23a17.08,17.08,0,0,0,3-.22l4.95,3.14L271,289.31a17.78,17.78,0,0,0,8.67-6.58l8.87,5.62L283,278.16c5.19-6.22,12.18-10,19.87-10,9.23,0,17.44,5.48,22.75,14a17,17,0,0,0,15,8.11h.5c10.18,0,18.43,11.54,18.43,25.78s-8.25,25.79-18.43,25.79a13.86,13.86,0,0,1-6.43-1.61,26.59,26.59,0,0,0-22.31-.43,23.28,23.28,0,0,1-19,0,26.64,26.64,0,0,0-22.12.43,13.9,13.9,0,0,1-6.35,1.57c-10.19,0-18.44-11.54-18.44-25.79A32.78,32.78,0,0,1,250.34,300.27Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M277.89,338a27.36,27.36,0,0,1,15.8,1.72,23.28,23.28,0,0,0,19,0,26.61,26.61,0,0,1,22.32.43,13.82,13.82,0,0,0,6.42,1.61c9.05,0,16.57-9.11,18.14-21.13a17.44,17.44,0,0,1-4.52-4.88c-5.31-8.54-13.52-14-22.75-14s-17.33,5.42-22.64,13.88a17.44,17.44,0,0,1-15,8.25h-.23C287.17,323.81,280.93,329.59,277.89,338Z" transform="translate(-46 -84.41)" opacity="0.03"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg id="5315dcf4-9ab7-45f5-a3d8-2e76525705db" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><title>tweetstorm</title><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" opacity="0.1"/><polygon points="135.99 403.7 347.86 352.67 347.86 752 135.99 697.65 135.99 403.7" fill="#e0e0e0"/><polygon points="135.99 401.93 347.86 350.91 347.86 752 135.99 697.65 135.99 401.93" opacity="0.17"/><polygon points="346.09 354.44 457.68 261.71 669.54 316.07 557.96 405.46 346.09 354.44" fill="#e0e0e0"/><polygon points="29.05 318.94 137.76 405.46 349.62 354.44 242.03 263.48 29.05 318.94" fill="#e0e0e0"/><polygon points="27.29 317.18 138.64 405.46 350.51 354.44 240.26 261.71 27.29 317.18" opacity="0.05"/><polygon points="135.99 403.7 135.99 697.65 347.86 752 350.72 460.27 135.99 403.7" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" opacity="0.07"/><polygon points="475.42 598.92 475.42 695.43 559.73 672.13 559.73 575.63 475.42 598.92" opacity="0.07"/><polygon points="133.22 556.22 251.91 586.17 347.31 508.52 347.31 460.82 135.44 407.58 133.22 556.22" opacity="0.1"/><polygon points="561.39 556.22 442.7 586.17 347.31 508.52 347.31 460.82 559.17 407.58 561.39 556.22" opacity="0.1"/><path d="M452.66,473.1l8.21-1.64s-6.9,7.72-8.21,8.21h0a33.05,33.05,0,0,0,0,4.93c-15.77,67.69-73.93,37.79-73.93,37.79,21.19.49,23-8.21,23-8.21-12.32-1.81-14.79-9.86-14.79-9.86a5.08,5.08,0,0,0,6.57-1.64c-13.31-3.45-11.5-16.43-11.5-16.43,2.3,2,5.91,2.79,8.05,3.12-1.48-1.81-14-16.76-6.41-24.48,0,0,9.2,16.43,33.35,17.91l1.64-.33a12.89,12.89,0,0,1-.33-3.61,17.25,17.25,0,0,1,17.25-17.25c11.5,0,14,6.57,14,6.57l8.21-4.93C457.59,463.24,456.77,471.46,452.66,473.1Z" transform="translate(-193.43 -74)" fill="#00aced"/><polygon points="135.99 403.7 27.29 493.55 239.15 546.79 347.86 460.27 135.99 403.7" fill="#e0e0e0"/><path d="M618.25,470.91l4.06-5.65s.18,8.6-.34,9.65h0a27.47,27.47,0,0,0,2.79,3c28.77,50.08-23.53,64.86-23.53,64.86,13.16-11.71,9.33-18,9.33-18C602,530.62,596,527.12,596,527.12a4.22,4.22,0,0,0,3.06-4.72c-10,5.44-16.3-3.47-16.3-3.47,2.52-.1,5.18-1.65,6.66-2.66-1.92-.26-18-2.27-17.77-11.25,0,0,14.9,4.77,30.42-8l.81-1.13a10.71,10.71,0,0,1-2.25-2,14.33,14.33,0,0,1,.71-20.26c7-6.52,12.21-3.92,12.21-3.92l2.2-7.65C615.66,462.13,619.81,467.58,618.25,470.91Z" transform="translate(-193.43 -74)" fill="#4aa84c"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" opacity="0.07"/><path d="M610.52,196.35l7.51-3.61s-4.74,9.15-5.89,9.95h0a32.88,32.88,0,0,0,1.22,4.75c1.53,69.12-61.9,54.68-61.9,54.68,20.54-4.76,20.13-13.6,20.13-13.6-12.32,1.3-16.68-5.84-16.68-5.84a5,5,0,0,0,5.93-3.21c-13.68,0-15.14-13-15.14-13,2.7,1.33,6.39,1.23,8.53,1-1.87-1.38-17.6-12.7-12.22-22,0,0,12.93,13.56,36.56,9l1.5-.72a12.82,12.82,0,0,1-1.21-3.4,17.16,17.16,0,0,1,12.36-20.89c11.08-2.84,15.08,2.88,15.08,2.88l6.7-6.78C612.83,185.63,614.07,193.75,610.52,196.35Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M267,249l8.17-1.63s-6.86,7.68-8.17,8.17h0a32.88,32.88,0,0,0,0,4.9c-15.69,67.33-73.54,37.59-73.54,37.59,21.08.49,22.88-8.17,22.88-8.17-12.26-1.8-14.71-9.81-14.71-9.81a5,5,0,0,0,6.54-1.63C194.9,275,196.7,262.12,196.7,262.12c2.29,2,5.88,2.78,8,3.11-1.47-1.8-13.89-16.67-6.37-24.35,0,0,9.15,16.34,33.18,17.81l1.63-.33a12.82,12.82,0,0,1-.33-3.6A17.16,17.16,0,0,1,250,237.61c11.44,0,13.89,6.54,13.89,6.54l8.17-4.9C271.87,239.24,271.06,247.41,267,249Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M993.24,103.71l13.33-2.67s-11.2,12.53-13.33,13.33h0a53.64,53.64,0,0,0,0,8c-25.6,109.85-120,61.32-120,61.32,34.39.8,37.33-13.33,37.33-13.33-20-2.93-24-16-24-16a8.24,8.24,0,0,0,10.66-2.67c-21.6-5.6-18.66-26.66-18.66-26.66,3.73,3.2,9.6,4.53,13.06,5.07-2.4-2.93-22.66-27.2-10.4-39.73,0,0,14.93,26.66,54.12,29.06l2.67-.53a20.92,20.92,0,0,1-.53-5.87,28,28,0,0,1,28-28c18.66,0,22.66,10.66,22.66,10.66l13.33-8C1001.24,87.71,999.91,101,993.24,103.71Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M775.38,81.73l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,763.9,74c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C778.69,75.1,778.14,80.63,775.38,81.73Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M524.71,302.58l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C528,296,527.47,301.48,524.71,302.58Z" transform="translate(-193.43 -74)" fill="#535461" opacity="0.3"/><path d="M740,199.89l5.52-1.1S740.93,204,740,204.3h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C743.36,193.26,742.8,198.78,740,199.89Z" transform="translate(-193.43 -74)" fill="#00aced" opacity="0.3"/><path d="M635.8,384.76l11.48-2.3s-9.65,10.8-11.48,11.48h0a46.21,46.21,0,0,0,0,6.89c-22.05,94.63-103.36,52.83-103.36,52.83,29.63.69,32.16-11.48,32.16-11.48-17.23-2.53-20.67-13.78-20.67-13.78a7.1,7.1,0,0,0,9.19-2.3c-18.6-4.82-16.08-23-16.08-23,3.22,2.76,8.27,3.9,11.25,4.36-2.07-2.53-19.52-23.43-9-34.22,0,0,12.86,23,46.63,25l2.3-.46a18,18,0,0,1-.46-5.05,24.11,24.11,0,0,1,24.12-24.12c16.08,0,19.52,9.19,19.52,9.19L642.92,371C642.69,371,641.54,382.47,635.8,384.76Z" transform="translate(-193.43 -74)" fill="#4aa84c"/><path d="M554.52,100.5,560,99.4s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,543,92.77c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C557.84,93.88,557.29,99.4,554.52,100.5Z" transform="translate(-193.43 -74)" fill="#4aa84c"/><path d="M385.57,223.08l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C388.88,216.45,388.33,222,385.57,223.08Z" transform="translate(-193.43 -74)" fill="#4aa84c"/><path d="M339.19,143.57l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C342.5,136.94,342,142.47,339.19,143.57Z" transform="translate(-193.43 -74)" fill="#4aa84c" opacity="0.3"/><path d="M533.54,480.37l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C536.86,473.75,536.3,479.27,533.54,480.37Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M855.77,240.7,867,238.45s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81C783.46,309,785.94,297,785.94,297c-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C862.53,227.18,861.4,238.45,855.77,240.7Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M408.54,331.25,419.8,329s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81,29.06.68,31.54-11.26,31.54-11.26-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C415.3,317.73,414.17,329,408.54,331.25Z" transform="translate(-193.43 -74)" fill="#535461"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg id="b847c0d8-de26-4ae3-b269-ef35a8ef771f" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1130" height="831.56" viewBox="0 0 1130 831.56"><defs><linearGradient id="af868219-7e5b-405b-a411-f7ffae4abd96" x1="321.68" y1="857.11" x2="321.68" y2="447.21" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient></defs><title>youtube tutorial</title><path d="M691.54,158.91C619.1,156.4,550.1,133,484.22,107.42S353.07,53.49,282.37,39.93C236.89,31.21,184.88,30,148.24,54.36c-35.27,23.46-46.66,64-52.78,101.55-4.61,28.28-7.32,58,5.3,84.51,8.77,18.37,24.34,33.82,35.11,51.42,37.45,61.26,11,136.79-29.62,196.59-19,28.06-41.13,54.82-55.82,84.69s-21.49,64.08-8.64,94.54c12.75,30.2,43.11,52.88,76,68.83,66.81,32.4,145.54,41.68,222.31,46.93C510.05,795,680.9,790,851.29,785c63.06-1.87,126.39-3.76,188.43-13.51,34.44-5.41,70-14,95-34.75,31.75-26.34,39.62-70.94,18.34-104-35.68-55.39-134.35-69.15-159.29-128.6-13.73-32.72.37-69.17,20.32-99.52,42.8-65.11,114.54-122.22,118.32-196.64,2.6-51.11-31.89-102.3-85.21-126.48-55.9-25.35-133.4-22.16-174.64,19.8C830.12,144.51,755.5,161.13,691.54,158.91Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><polygon points="664.18 755.89 469.18 753.39 469.75 748.39 479.18 665.89 650.43 665.89 663.03 748.39 663.99 754.64 664.18 755.89" fill="#d0d2d5"/><polygon points="663.99 754.64 566.68 754.64 469.18 753.39 469.75 748.39 663.03 748.39 663.99 754.64" opacity="0.1"/><rect x="436.68" y="749.64" width="258.75" height="6.25" fill="#d0d2d5"/><path d="M977.3,204.59a16.27,16.27,0,0,0-16.19-16.35H238.5a16.27,16.27,0,0,0-16.2,16.35v438h755Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M222.3,638.24v51.3a16.2,16.2,0,0,0,16.2,16.2H961.11a16.2,16.2,0,0,0,16.19-16.2v-51.3Z" transform="translate(-35 -34.22)" fill="#d0d2d5"/><rect x="218.55" y="181.52" width="696.25" height="393.75" fill="#4aa84c" opacity="0.1"/><path d="M603.55,686.27a16.89,16.89,0,0,0,13.28-6.44v0a17.21,17.21,0,0,0,1.31-1.93l-9.26-1.52,10,.08a16.85,16.85,0,0,0,.32-13.38l-13.43,7,12.39-9.1a16.87,16.87,0,1,0-27.87,18.88v0A16.87,16.87,0,0,0,603.55,686.27Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><polygon points="585.43 671.52 663.22 749.64 651.29 671.52 585.43 671.52" opacity="0.1"/><rect x="239" y="252.56" width="457" height="274" rx="2.6" fill="#fff"/><rect x="219" y="181.56" width="696" height="23" fill="#fff"/><rect x="222" y="185.56" width="20" height="14" rx="0.78" fill="#4aa84c"/><rect x="460" y="185.56" width="210" height="14" rx="0.58" fill="#4aa84c" opacity="0.3"/><path d="M698.77,228.22h-.51l-.19-.16a4.25,4.25,0,0,0,1-2.72,4.14,4.14,0,1,0-4.13,4.17,4.27,4.27,0,0,0,2.72-1l.19.16v.52l3.2,3.2,1-1Zm-3.84,0a2.89,2.89,0,1,1,2.88-2.88A2.86,2.86,0,0,1,694.93,228.22Z" transform="translate(-35 -34.22)" fill="#444053"/><circle cx="905" cy="192.56" r="7" fill="#4aa84c"/><rect x="729" y="229.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="229.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="244.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="259.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="729" y="298.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="298.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="313.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="328.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="367.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="367.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="382.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="397.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="436.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="436.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="451.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="466.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="505.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="505.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="520.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="535.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="304.92" y="325.17" width="102.83" height="5.33" fill="#4aa84c" opacity="0.1"/><rect x="314.06" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="328.53" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="343" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="357.47" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="371.94" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="386.42" y="296.99" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="314.06" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="328.53" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="343" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="357.47" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="371.94" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="386.42" y="302.32" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="314.06" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="328.53" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="343" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="357.47" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="371.94" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="386.42" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="530.37" y="338.88" width="102.83" height="5.33" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="310.7" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="316.03" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="329.74" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="530.37" y="377.72" width="102.83" height="5.33" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="349.54" width="9.9" height="28.18" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="354.87" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="539.51" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="553.98" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="568.45" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="582.93" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="597.4" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><rect x="611.87" y="368.58" width="9.9" height="3.05" fill="#4aa84c" opacity="0.1"/><path d="M403,419.66a28.45,28.45,0,0,1-2.1-3.09l14.81-2.43-16,.12a27.06,27.06,0,0,1-.52-21.38L420.64,404l-19.81-14.56a27,27,0,1,1,44.57,30.2,26.24,26.24,0,0,1,3.08,4.92l-19.22,10,20.49-6.87A27,27,0,0,1,445.4,453,27,27,0,1,1,403,453a27,27,0,0,1,0-33.37Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M451.18,436.34A26.89,26.89,0,0,1,445.4,453,27,27,0,1,1,403,453C399.37,448.43,451.18,433.31,451.18,436.34Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M428.52,503.88a2.53,2.53,0,0,1,.13.22h-9.16c.05-.07.08-.15.13-.22a8.87,8.87,0,0,1-1.18-4.51,9.26,9.26,0,0,1,.55-3.18v0c.51.08,1.14.17,1.87.25a32.1,32.1,0,0,0,6.39,0q.92-.09,1.89-.24a.09.09,0,0,0,0,.05,9,9,0,0,1,.54,3.13A8.87,8.87,0,0,1,428.52,503.88Z" transform="translate(-35 -34.22)" fill="#3f3d56" opacity="0.2"/><path d="M395.6,504.1h-51c-.11-.29-.21-.6-.3-.9a26.85,26.85,0,0,1,.59-17.64,27,27,0,0,1-9.85-31.89,25.83,25.83,0,0,1-2.91-2.33l13.42-6.69-15.26,4.84a27,27,0,0,1-6.8-20.27l23.81,4.3-23.22-8.07a27,27,0,1,1,51.49,15.7A27.35,27.35,0,0,1,380,445l-15.42,15.21,17.55-12.62a27,27,0,0,1,3.32,25.5A27,27,0,0,1,395.6,504.1Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M395.6,504.1h-51c-.11-.29-.21-.6-.3-.9a26.85,26.85,0,0,1,.59-17.64c-4.8-3.32,40.23-33.07,41.12-30.17a26.88,26.88,0,0,1-.59,17.65A27,27,0,0,1,395.6,504.1Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M626.35,467.56a26.9,26.9,0,0,1-13.51,11.36,27.4,27.4,0,0,1,.11,5.8l-21.61-1.3L612.45,488a27,27,0,0,1-3.22,8.16,26.57,26.57,0,0,1-7.2,7.9H572.61v.77h-30c.06-.26.12-.51.19-.77a27,27,0,0,1,16.45-18.31,27,27,0,0,1,17.13-28.64,27.36,27.36,0,0,1-.22-3.73l13.95,5.51-13.8-8.11A27,27,0,0,1,586.9,432.2l12.71,20.58-9.53-22.66a27,27,0,0,1,36.27,37.44Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M609.23,496.2a26.57,26.57,0,0,1-7.2,7.9H572.61v.77h-30c.06-.26.12-.51.19-.77a27,27,0,0,1,16.45-18.31c-.25-2,5.56-1.7,13.31-.4C587.75,487.94,610.26,494.48,609.23,496.2Z" transform="translate(-35 -34.22)" fill="#4aa84c" opacity="0.1"/><path d="M481.71,424.19s3.7,20-4.56,26.53,7,45.67,32.18,41.1,35.44-37.4,35.44-37.4-25.22-5.22-15.87-31.75Z" transform="translate(-35 -34.22)" fill="#ee8e9e"/><path d="M481.71,424.19s3.7,20-4.56,26.53,7,45.67,32.18,41.1,35.44-37.4,35.44-37.4-25.22-5.22-15.87-31.75Z" transform="translate(-35 -34.22)" opacity="0.1"/><circle cx="469" cy="362.9" r="41.75" fill="#ee8e9e"/><path d="M572.61,476.49v28.38H434.75V477.78a17.48,17.48,0,0,1,10.67-16.1l3.95-1.68c10-4.26,22.15-9.55,26.12-11.75a6.53,6.53,0,0,0,1.22-.79c2.17-2.17,1.74.65,1.74.65s-.06.54-.1,1.47c-.24,6.39.68,31.5,30.11,29.41,28.71-2,30-21.42,29.71-27.13a15.45,15.45,0,0,0-.13-1.58,37.09,37.09,0,0,1,5.81,1.9c6,2.22,14.86,5.78,17.23,7.46.74.52,1.64,1.06,2.62,1.61a17.23,17.23,0,0,1,3.1,2.21A17.51,17.51,0,0,1,572.61,476.49Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><path d="M543.85,452.18c-2.43,11.26-10.06,32.35-37.56,32.9-29.3.58-31-28.56-30.81-36.83a5.91,5.91,0,0,0,1.23-.79c2.18-2.17,1.74.65,1.74.65s-3.69,33.27,30,30.88S538,450.29,538,450.29C538,450.13,540.51,451,543.85,452.18Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M454.58,399.21a7.15,7.15,0,0,1,7.53,2.75c1.52,2.13,1.75,4.7,1.94,7.16,1.81.38,2.83-1.67,3-3.22.67-6.31.72-12.74,2.84-18.84s6.75-12,13.86-14.33a16.08,16.08,0,0,1,7.57-.72c1.51.25,2.93.78,4.43,1,5.2.86,10.85-1.6,15.72.11,3.06,1.08,5,3.57,6.43,6.06a13.08,13.08,0,0,0,2.5,3.63c2.07,1.86,5.31,2.34,8.28,2.92s6.21,1.59,7.48,3.88c1.14,2.07.3,4.46-.08,6.7a16.42,16.42,0,0,0,1.69,10.37c.55,1,1.67,2.21,3,1.88a2.63,2.63,0,0,0,1.42-1.15c3.41-4.78,3.32-11,7.6-15.31,1.43-1.44,3.28-2.56,4.67-4a9.08,9.08,0,0,0,2.42-8.24c-.77-3.3-3.41-6-5.54-8.9a35,35,0,0,1-5.93-12.31,2.23,2.23,0,0,1,0-1.61,4.29,4.29,0,0,1,1.52-1.24,5.74,5.74,0,0,0,1.94-7.33C547.66,346,545,344.12,542,343a44.8,44.8,0,0,0-9.37-2c-2.1.3-4.56-.89-5.21-2.57-.29-.75-.29-1.56-.58-2.31a5.3,5.3,0,0,0-4-2.8,11.7,11.7,0,0,0-5.35.38c-2,.56-4.27,1.4-6,.42-.91-.51-1.41-1.44-2.39-1.86-2-.84-4.06.86-5.49,2.26a13.36,13.36,0,0,1-4.95,3.33,7.37,7.37,0,0,1-6.14-.41c-1.37-.87-2.06-2.27-3.15-3.38a11.86,11.86,0,0,0-7.45-3,26.23,26.23,0,0,0-8.41.92,50.78,50.78,0,0,0-14.77,6.2,15.87,15.87,0,0,0-5.67,5.27,12,12,0,0,0-1.27,5.43c-.22,5.91,1.74,12.13,6.85,16.27-3.12,1.3-4.17,4.49-4.9,7.32-1.17,4.52-2.34,9.11-1.9,13.71.22,2.38.87,4.76.52,7.13a15.36,15.36,0,0,0-.46,3.41A3.27,3.27,0,0,0,454.58,399.21Z" transform="translate(-35 -34.22)" fill="#454b69"/><g opacity="0.1"><path d="M556.23,378a9.76,9.76,0,0,1-1.8,2.66c-1.39,1.46-3.24,2.59-4.67,4-4.28,4.28-4.19,10.54-7.6,15.32a2.57,2.57,0,0,1-1.42,1.14c-1.3.34-2.42-.84-3-1.88a17.2,17.2,0,0,1-1.49-4c-.07.35-.14.7-.2,1a16.42,16.42,0,0,0,1.69,10.37c.55,1,1.67,2.21,3,1.88a2.63,2.63,0,0,0,1.42-1.15c3.41-4.78,3.32-11,7.6-15.31,1.43-1.44,3.28-2.56,4.67-4a9.08,9.08,0,0,0,2.42-8.24A10.74,10.74,0,0,0,556.23,378Z" transform="translate(-35 -34.22)"/><path d="M546.91,348.4a4.19,4.19,0,0,0-1.52,1.24,2.21,2.21,0,0,0,0,1.6,33.82,33.82,0,0,0,1.51,4.56h0a5.74,5.74,0,0,0,1.94-7.33,7,7,0,0,0-.7-1.17A5.76,5.76,0,0,1,546.91,348.4Z" transform="translate(-35 -34.22)"/><path d="M458.71,357.67a18.54,18.54,0,0,1-6.55-11.59,15.62,15.62,0,0,0-.3,2.72,20.82,20.82,0,0,0,3.29,12.37A7,7,0,0,1,458.71,357.67Z" transform="translate(-35 -34.22)"/><path d="M536.08,388.94c.38-2.25,1.22-4.64.08-6.7-1.27-2.3-4.51-3.3-7.48-3.88s-6.21-1.07-8.28-2.92a13.08,13.08,0,0,1-2.5-3.63c-1.41-2.49-3.37-5-6.43-6.06-4.87-1.71-10.52.74-15.72-.11-1.5-.25-2.92-.77-4.43-1a16,16,0,0,0-7.57.72c-7.11,2.34-11.74,8.24-13.86,14.33s-2.17,12.52-2.84,18.84c-.17,1.54-1.19,3.6-3,3.22-.19-2.47-.42-5-1.94-7.17a7.15,7.15,0,0,0-7.53-2.74,3.66,3.66,0,0,1-2.11-1.35,11.59,11.59,0,0,1,0,2.76,15.36,15.36,0,0,0-.46,3.41,3.27,3.27,0,0,0,2.61,2.57,7.15,7.15,0,0,1,7.53,2.75c1.52,2.13,1.75,4.7,1.94,7.16,1.81.38,2.83-1.67,3-3.22.67-6.31.72-12.74,2.84-18.84s6.75-12,13.86-14.33a16.08,16.08,0,0,1,7.57-.72c1.51.25,2.93.78,4.43,1,5.2.86,10.85-1.6,15.72.11,3.06,1.08,5,3.57,6.43,6.06a13.08,13.08,0,0,0,2.5,3.63c2.07,1.86,5.31,2.34,8.28,2.92s6,1.52,7.33,3.64C536,389.24,536.05,389.09,536.08,388.94Z" transform="translate(-35 -34.22)"/><path d="M452.43,385.83a19,19,0,0,0-.33-5.57,24.82,24.82,0,0,0-.19,5.84c0,.5.11,1,.18,1.49C452.2,387,452.35,386.42,452.43,385.83Z" transform="translate(-35 -34.22)"/></g><path d="M403.49,545.22V527.17a.51.51,0,0,1,.51-.51h2.05a.51.51,0,0,1,.51.51v7.51l8.32-7.71a1.36,1.36,0,0,1,2.23,1v16.35a1.36,1.36,0,0,1-2.23,1l-8.32-7.66v7.47a.51.51,0,0,1-.51.51H404A.51.51,0,0,1,403.49,545.22Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M604.52,527.17v18.05a.51.51,0,0,1-.52.51h-2a.51.51,0,0,1-.51-.51v-7.51l-8.32,7.7a1.37,1.37,0,0,1-2.24-1V528a1.37,1.37,0,0,1,2.24-1l8.32,7.66v-7.46a.51.51,0,0,1,.51-.51h2A.51.51,0,0,1,604.52,527.17Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M500.61,546h-4.07a2,2,0,0,1-2-2V529.06a2,2,0,0,1,2-2h4.07a2,2,0,0,1,2,2V544A2,2,0,0,1,500.61,546Zm12.9-2V529.06a2,2,0,0,0-2-2H507.4a2,2,0,0,0-2,2V544a2,2,0,0,0,2,2h4.07A2,2,0,0,0,513.51,544Z" transform="translate(-35 -34.22)" fill="#444053"/><rect x="349" y="468.62" width="240" height="2.67" fill="#444053" opacity="0.6"/><circle cx="423.11" cy="469.95" r="6.33" fill="#444053"/><rect x="349" y="468.62" width="74.11" height="2.67" fill="#444053"/><ellipse cx="957.08" cy="758.54" rx="59.47" ry="11.44" fill="#4aa84c"/><ellipse cx="956.09" cy="753.68" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="742.6" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="731.53" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="720.45" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="709.37" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="698.29" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="687.21" rx="6.92" ry="9.06" fill="#3f3d56"/><path d="M1017,645.63a34.28,34.28,0,0,0,2.58-3.8l-18.2-3,19.68.15a33.27,33.27,0,0,0,.63-26.28L995.31,626.4l24.34-17.89a33.17,33.17,0,1,0-54.78,37.12,33.85,33.85,0,0,0-3.78,6l23.62,12.27-25.18-8.45a33.19,33.19,0,0,0,5.34,31.14,33.16,33.16,0,1,0,52.14,0,33.18,33.18,0,0,0,0-41Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><path d="M957.78,666.13a33,33,0,0,0,7.09,20.5,33.16,33.16,0,1,0,52.14,0C1021.45,681,957.78,662.41,957.78,666.13Z" transform="translate(-35 -34.22)" opacity="0.1"/><ellipse cx="290" cy="810.56" rx="99" ry="21" fill="#4aa84c" opacity="0.1"/><path d="M358.15,842.34c-2-.73-4.14-.61-6.23-.84a19.28,19.28,0,0,1-11.46-5.56,21,21,0,0,1-4.58-7c.66.24,1.32.49,2,.76-2-4.67.1-9.91,1.94-14.63q4.68-12,8.85-24.13c7-20.49,13-41.8,12.87-63.6,0-7.88-1.45-15.33-1.73-23.2-.21-5.84.69-11.67.65-17.52,0-.82,0-1.63-.06-2.45a15.53,15.53,0,0,0,5.27-12.66,30.48,30.48,0,0,0-.53-3.68,59.68,59.68,0,0,0-1.4-6.26c-.66-2.17-1.56-4.25-2.33-6.37-1.49-4.11-2.5-8.39-3.77-12.57A4.33,4.33,0,0,1,359,643a2.93,2.93,0,0,1-.64-1.31,32.41,32.41,0,0,1-1.2-8.17l.85-.38a21.27,21.27,0,0,0-.41-8.09c.48-4.29,1.23-8.61,1.69-12.88.17-1.6.1-3.61-1.37-4-.3-2.29-.42-4.61-.54-6.92q-.63-12.09-1.25-24.17c-.42-8.09-.84-16.17-1-24.27-.11-5.14-.17-10.46-1.39-15.38a18.6,18.6,0,0,0-.71-7c-1.86-5.89-7.64-10.56-13.5-10.23a26.86,26.86,0,0,0-6.39-6.46c1.17-2.62,2.57-5.32,3.72-7.44C346.24,503.25,353.1,494,353.1,483a25.43,25.43,0,0,0-2.75-11.59,12.52,12.52,0,0,0,.44-1.35,11.09,11.09,0,0,0-.45-6.49,19,19,0,0,0-1-2.32c-.26-.5-.54-1-.83-1.48L348,459c-.31-.47-.63-.92-1-1.36a33.1,33.1,0,0,0-2.28-2.74,22.56,22.56,0,0,0-3.28-2.92,14.46,14.46,0,0,0-5.4-2.49,16.46,16.46,0,0,0-3.43-.31c-.69,0-1.39,0-2.08.06-1.4.08-2.79.18-4.18.17-.46,0-.93,0-1.39-.07a50.63,50.63,0,0,1-7.24-1.51l-1.2-.25c-.41-.08-.81-.15-1.22-.2a22.89,22.89,0,0,0-3.31-.2l-1.11,0a30.68,30.68,0,0,0-3.31.34l-1.1.17a31.6,31.6,0,0,0-8.05,2.39c-.33.15-.67.32-1,.5l-.2.11c-.27.14-.54.29-.8.45l-.15.09-.85.54-.07.05c-7.94,5.34-12.63,15.46-13.82,25.5-1.33,11.27,1,22.63,3.33,33.72l2.1,10c.09.45.19.89.28,1.34a22,22,0,0,0-6.59,9.14c-2,5-2.05,10.41-1.89,15.83,0,1.1.06,2.2.17,3.3-.25,2.08-.47,4.17-.61,6.27-.63,9.7.55,19.45.24,29.17-.24,7.49-1.37,15-.82,22.44.48,6.6,2.25,13,4,19.37l2.52,9.08a2.41,2.41,0,0,0,.63,1.25,1.9,1.9,0,0,0,1.41.29A85.12,85.12,0,0,0,282.2,650a35.5,35.5,0,0,0-1.48,7.38c-.33,4.58.73,9.13,1.79,13.58q2.4,10,4.78,20.08,1.68,7.05,3.35,14.09c2.2,9.26,4.41,18.58,4.82,28.11a61.05,61.05,0,0,1-1,14.29,124.52,124.52,0,0,0-1.24,42.83,210,210,0,0,0,8.09,35.41c.81-.43,1.63-.83,2.47-1.2l-.35.65q-1.73,3-3.2,6.15a35,35,0,0,0-1.71,4.21c-1.28,4-1.48,8.26-1.66,12.47a6.1,6.1,0,0,0,.21,2.41c.55,1.51,2.13,2.28,3.6,2.7,4.32,1.23,8.81.79,13.3.21a1.61,1.61,0,0,0,.09.29c.55,1.51,2.12,2.28,3.6,2.7,6.18,1.76,12.7.1,19.07-.5s12.63-.16,18.76-1.63a8.93,8.93,0,0,0,2.6-1,8.51,8.51,0,0,0,3.28-4.55,5.83,5.83,0,0,0,.38-1.49C362,845,360.13,843.07,358.15,842.34ZM337,749.73a25.2,25.2,0,0,1-2,6.78,129.4,129.4,0,0,0-10.26,32.17,149.15,149.15,0,0,0-2.27,22.25c-.1,5.5.11,11.26-2.18,16.2l.83-.13c-.26.48-.51,1-.75,1.38l-.12.22a21.68,21.68,0,0,1-2.73-7.66c0-.09-.45-.16-1.14-.2a206.93,206.93,0,0,1-2.92-47.89,22.17,22.17,0,0,1,.8-5.75c.51-1.61,1.37-3.08,2-4.64a34.09,34.09,0,0,0,2-8.14,115.64,115.64,0,0,0,1.26-21.52c-.24-6.79,1.33-13.54,2.67-20.3.64-3.21,1.23-6.43,1.55-9.65l.06-.65a96.87,96.87,0,0,1,12.28,31.88A45.6,45.6,0,0,1,337,749.73Zm-42.8-144.52.32.28a22,22,0,0,1,2.66,2.79,3.69,3.69,0,0,1,.84,1.54c.3,1.46-.91,2.7-1.9,3.77a17,17,0,0,0-1.21,1.46Q294.59,610.13,294.23,605.21Z" transform="translate(-35 -34.22)" fill="url(#af868219-7e5b-405b-a411-f7ffae4abd96)"/><path d="M280.36,542.53l-1.1,8.49c-.37,2.88-.74,5.75-.94,8.64-.67,9.62.57,19.28.25,28.92-.26,7.42-1.44,14.83-.87,22.24.51,6.54,2.37,12.9,4.23,19.2l2.64,9a2.38,2.38,0,0,0,.66,1.24,2.33,2.33,0,0,0,1.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64A39.09,39.09,0,0,0,280.36,542.53Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><path d="M280.36,542.53l-1.1,8.49c-.37,2.88-.74,5.75-.94,8.64-.67,9.62.57,19.28.25,28.92-.26,7.42-1.44,14.83-.87,22.24.51,6.54,2.37,12.9,4.23,19.2l2.64,9a2.38,2.38,0,0,0,.66,1.24,2.33,2.33,0,0,0,1.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64A39.09,39.09,0,0,0,280.36,542.53Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M301.24,831.55a35.81,35.81,0,0,0-1.8,4.18c-1.34,3.95-1.54,8.19-1.74,12.36a6,6,0,0,0,.22,2.39c.58,1.5,2.24,2.26,3.79,2.67,6.49,1.75,13.33.11,20-.49s13.26-.16,19.7-1.61a10.06,10.06,0,0,0,2.73-.95,8.51,8.51,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6,20.6,0,0,1-18.24-17.21c-.08-.48-10.84-.19-12,.43-1.32.73-2.12,2.54-2.87,3.77Q302.78,828.43,301.24,831.55Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M301.24,831.55a35.81,35.81,0,0,0-1.8,4.18c-1.34,3.95-1.54,8.19-1.74,12.36a6,6,0,0,0,.22,2.39c.58,1.5,2.24,2.26,3.79,2.67,6.49,1.75,13.33.11,20-.49s13.26-.16,19.7-1.61a10.06,10.06,0,0,0,2.73-.95,8.51,8.51,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6,20.6,0,0,1-18.24-17.21c-.08-.48-10.84-.19-12,.43-1.32.73-2.12,2.54-2.87,3.77Q302.78,828.43,301.24,831.55Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M319.09,834.73a34,34,0,0,0-1.8,4.17c-1.35,4-1.55,8.19-1.74,12.36a5.83,5.83,0,0,0,.22,2.39c.57,1.5,2.23,2.26,3.78,2.68,6.49,1.74,13.34.1,20-.5s13.27-.16,19.7-1.61a9.62,9.62,0,0,0,2.73-1,8.47,8.47,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.19-1.7-4.1-3.78-4.82s-4.35-.6-6.54-.83a20.61,20.61,0,0,1-18.24-17.2c-.08-.48-10.84-.2-12,.42-1.33.73-2.13,2.54-2.88,3.77C321.24,830.61,320.12,832.65,319.09,834.73Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M365.62,728.5c.14,21.61-6.14,42.73-13.51,63q-4.38,12.06-9.29,23.91c-1.94,4.68-4.13,9.88-2.05,14.5-6-2.28-12.1-3.62-18.41-2.57,2.4-4.9,2.17-10.6,2.28-16A140.3,140.3,0,0,1,327,789.29a123,123,0,0,1,10.79-31.89,24.3,24.3,0,0,0,2.09-6.72c.82-5.14.18-10.42-.89-15.51a92.47,92.47,0,0,0-12.9-31.6l-.06.64a93.27,93.27,0,0,1-1.62,9.57c-1.41,6.69-3.06,13.39-2.81,20.12a108.83,108.83,0,0,1-1.32,21.33,32.43,32.43,0,0,1-2.15,8.06c-.69,1.55-1.59,3-2.13,4.61a21,21,0,0,0-.84,5.7c-.8,16.27,0,32.79,3.32,48.74-5.57-.44-11.14,1.17-16.12,3.67a198.54,198.54,0,0,1-8.5-35.1,116.62,116.62,0,0,1,1.3-42.46,56.42,56.42,0,0,0,1.05-14.15c-.43-9.45-2.75-18.69-5.06-27.87l-3.52-14q-2.5-10-5-19.91c-1.11-4.41-2.23-8.92-1.88-13.46a33.4,33.4,0,0,1,1.56-7.32,81.69,81.69,0,0,1,11.07-22.64c19.27,1.08,38.77-.72,58-2.2a3.89,3.89,0,0,1,2.72.46,3.85,3.85,0,0,1,1.1,2.48l7.23,41a103,103,0,0,1,2.05,17.3c0,5.8-.9,11.58-.68,17.37C364.1,713.31,365.58,720.69,365.62,728.5Z" transform="translate(-35 -34.22)" fill="#454b69"/><path d="M326.05,704.21a93.27,93.27,0,0,1-1.62,9.57c-4.19-7.25-8.71-14.32-12.57-21.75-1-1.91-1.94-3.85-2.89-5.79l-2.85-5.8c-.53-1.09-1.06-2.18-1.54-3.29a23.77,23.77,0,0,1-1.79-5c1.4-.26,4.86,3.52,5.9,4.51a80.64,80.64,0,0,1,6,6.64,72.81,72.81,0,0,1,6.26,8.2A39.88,39.88,0,0,1,326.05,704.21Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M342.1,505.3s-10.7,17.05-8.72,20.62-33.7-3.17-33.7-3.17,19.43-17.05,17.44-24.19S342.1,505.3,342.1,505.3Z" transform="translate(-35 -34.22)" fill="#efb7b9"/><circle cx="297.59" cy="452.05" r="24.19" fill="#efb7b9"/><path d="M342.46,523.18A24.56,24.56,0,0,0,332.29,515a36.38,36.38,0,0,0-7.23-1.78l-9.65-1.7c-2.36-.42-4.89-.81-7.09.16a11.62,11.62,0,0,0-3,2.21c-3.35,3.11-6.6,6.52-10.81,8.32-1.15.49-2.35.85-3.5,1.34-4.71,2-8.23,6.26-10.22,11-2.1,4.94-2.16,10.31-2,15.68a27.56,27.56,0,0,0,.55,5.52,35.57,35.57,0,0,0,1.83,5.06,92.57,92.57,0,0,1,3.34,10.73q3.75,14.35,6.24,29a10.87,10.87,0,0,0,1.21,4,14.36,14.36,0,0,0,3.34,3.21,20.86,20.86,0,0,1,2.79,2.77A3.62,3.62,0,0,1,299,612c.31,1.44-1,2.68-2,3.73a18.06,18.06,0,0,0-4.52,7.87,3.17,3.17,0,0,0-.72,2.17,3.8,3.8,0,0,1,.23,1.72,3.88,3.88,0,0,1-.91,1.41,5.33,5.33,0,0,0-1,4.28,67.89,67.89,0,0,0,23.68,5.54c2,.1,4,.1,6,.34,1.42.18,2.82.47,4.24.64a45.78,45.78,0,0,0,6.2.16c10.77-.22,21.85-.49,31.74-4.76.93-5.07-1.08-10.24-2.34-15.24-2-8-2.5-16.19-4-24.26-1-5.51-2.5-10.94-3.35-16.49s-1-11.3.48-16.7c1.35-4.78,1.76-9.66,3.16-14.43s2.38-9.94.8-14.66C354.69,527.48,348.62,522.85,342.46,523.18Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><path d="M354.34,473.44c1.18-4.29-1.14-8.76-3.9-12.25-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12,32.12,0,0,0-9.28.35,35.25,35.25,0,0,0-8.45,2.36c-10.3,4.57-16.33,15.83-17.73,27s1.05,22.43,3.49,33.42l2.21,9.94c2.3,10.35,4.6,20.74,5.21,31.32s-.53,21.44-4.88,31.1a66.89,66.89,0,0,0,30.73-34.79c1.56-4.09,2.72-8.34,4.46-12.36,1.49-3.46,3.4-6.74,4.72-10.27a33.36,33.36,0,0,0,2.11-12.47c-.08-3.2-.61-6.38-.52-9.58s.91-6.53,3.12-8.85c2-2.05,4.75-3,7.28-4.33a30.31,30.31,0,0,0,10.19-8.5c1.59-2.08,1.68-3,2.08-5.36S353.72,475.71,354.34,473.44Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M354.37,655.15c.25,2.49-.2,5,.34,7.47.41,1.84,1.36,3.5,1.92,5.3a25.2,25.2,0,0,1,.85,6.37c.08,1.8-.06,4-1.66,4.84-.7.37-1.54.37-2.27.69s-1.35,1.19-.93,1.87,1.14.57,1.8.7,1.37.81,1,1.36a1.14,1.14,0,0,1-.58.37,7.08,7.08,0,0,0-1.88.9,1.92,1.92,0,0,0-.77,1.83,1.13,1.13,0,0,0,1.61.74,5,5,0,0,0-.47,2c2.56,1.1,5.43-.34,7.83-1.73a29.49,29.49,0,0,0,3-1.92A15,15,0,0,0,370,673.17a29.79,29.79,0,0,0-.57-3.65,54.92,54.92,0,0,0-1.47-6.21c-.69-2.15-1.63-4.2-2.44-6.31-1.72-4.49-2.83-9.19-4.39-13.74a2.08,2.08,0,0,0-.75-1.19,2.11,2.11,0,0,0-1.11-.21,18.19,18.19,0,0,0-5.21.48c-1,.3-2.71,1-3.18,2s.28,1.84.73,2.67A22.38,22.38,0,0,1,354.37,655.15Z" transform="translate(-35 -34.22)" fill="#efb7b9"/><path d="M352.74,533.64a7.33,7.33,0,0,1,1.28,1.78c3.44,6.25,3.48,13.72,3.64,20.85.18,8,.62,16,1.06,24.05l1.31,24c.13,2.29.25,4.58.58,6.85,1.54.39,1.6,2.39,1.43,4-1.11,9.78-3.86,19.85-1,29.26a2.94,2.94,0,0,0,.67,1.3,7.81,7.81,0,0,0-4.47-.06c-1.43.3-2.81.83-4.25,1.16-1.82.41-3.88.59-5.12,2a99.24,99.24,0,0,1-3.35-12.92c-.68-4-.87-8.12-2.49-11.82-.65-1.49-1.53-2.87-2.33-4.3-4.19-7.48-6.25-15.93-8.26-24.27a35.43,35.43,0,0,1-.64-12.06,41.47,41.47,0,0,0,.5-5.55,42.64,42.64,0,0,0-.77-5.84,39.15,39.15,0,0,1,1.17-16.91c1.5-5.09,2.82-10.45,6-14.73S347.43,533.71,352.74,533.64Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M353.93,532.84a7.39,7.39,0,0,1,1.28,1.79c3.44,6.24,3.48,13.72,3.64,20.85.18,8,.62,16,1.06,24l1.31,24c.13,2.29.25,4.58.58,6.85,1.54.39,1.6,2.39,1.42,4-1.1,9.78-3.85,19.84-1,29.26a2.94,2.94,0,0,0,.67,1.3,7.81,7.81,0,0,0-4.47-.06c-1.43.3-2.81.83-4.25,1.15-1.82.42-3.88.59-5.12,2A98.21,98.21,0,0,1,345.73,635c-.68-4-.87-8.11-2.49-11.81a48.28,48.28,0,0,0-2.33-4.3c-4.2-7.48-6.25-15.94-8.26-24.28a35.42,35.42,0,0,1-.64-12.06,26,26,0,0,0-.27-11.39,39.1,39.1,0,0,1,1.17-16.9c1.5-5.09,2.82-10.45,6-14.73S348.62,532.92,353.93,532.84Z" transform="translate(-35 -34.22)" fill="#4aa84c"/><g opacity="0.1"><path d="M350.44,461.19c-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12,32.12,0,0,0-9.28.35,35.25,35.25,0,0,0-8.45,2.36,25.09,25.09,0,0,0-4.17,2.37,35.56,35.56,0,0,1,7.47-2,32,32,0,0,1,9.27-.35c3.42.44,6.71,1.67,10.15,1.94,3.87.31,7.82-.61,11.64.15,4.69.94,8.53,4.33,11.5,8.08,2.77,3.48,5.08,7.95,3.91,12.25-.62,2.26-2.06,4.24-2.45,6.57s-.49,3.28-2.09,5.36a30.38,30.38,0,0,1-7.34,6.83c.77-.36,1.56-.72,2.31-1.11a30.31,30.31,0,0,0,10.19-8.5c1.59-2.08,1.68-3,2.08-5.36s1.83-4.3,2.45-6.57C355.52,469.15,353.2,464.68,350.44,461.19Z" transform="translate(-35 -34.22)"/><path d="M332.34,498.2a10,10,0,0,1,1.35-1.17c-2.31,1.12-4.74,2.1-6.51,4-2.21,2.31-3,5.65-3.12,8.85s.45,6.38.52,9.57a33.41,33.41,0,0,1-2.11,12.48c-1.32,3.53-3.23,6.8-4.72,10.27-1.73,4-2.89,8.26-4.45,12.35a67,67,0,0,1-25.41,31.62c-.06.13-.11.27-.17.4a66.89,66.89,0,0,0,30.73-34.79c1.56-4.09,2.72-8.34,4.46-12.36,1.49-3.46,3.4-6.74,4.72-10.27a33.36,33.36,0,0,0,2.11-12.47c-.08-3.2-.61-6.38-.52-9.58S330.13,500.52,332.34,498.2Z" transform="translate(-35 -34.22)"/></g></svg>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
<html lang="en-US">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta http-equiv="refresh" content="0; url=docs/">
|
6
|
+
<script type="text/javascript">
|
7
|
+
window.location.href = 'docs/';
|
8
|
+
</script>
|
9
|
+
<title>panko-serializer</title>
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
If you are not redirected automatically, follow this <a href="docs/">link</a>.
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -9,7 +9,13 @@ static ID delegate_hash_id;
|
|
9
9
|
static ID value_before_type_cast_id;
|
10
10
|
static ID type_id;
|
11
11
|
|
12
|
-
|
12
|
+
static bool type_detection_ran = false;
|
13
|
+
static bool is_lazy_attributes_set_defined = false;
|
14
|
+
|
15
|
+
/***
|
16
|
+
* Returns ActiveModel::LazyAttributeSet or ActiveModel::LazyAttributesHash
|
17
|
+
*/
|
18
|
+
VALUE panko_read_attributes_container(VALUE object) {
|
13
19
|
volatile VALUE attributes_set, lazy_attributes_hash;
|
14
20
|
|
15
21
|
attributes_set = rb_ivar_get(object, attributes_id);
|
@@ -17,6 +23,10 @@ VALUE panko_read_lazy_attributes_hash(VALUE object) {
|
|
17
23
|
return Qnil;
|
18
24
|
}
|
19
25
|
|
26
|
+
if (is_lazy_attributes_set_defined) {
|
27
|
+
return attributes_set;
|
28
|
+
}
|
29
|
+
|
20
30
|
lazy_attributes_hash = rb_ivar_get(attributes_set, attributes_id);
|
21
31
|
return lazy_attributes_hash;
|
22
32
|
}
|
@@ -41,23 +51,32 @@ struct attributes init_context(VALUE obj) {
|
|
41
51
|
|
42
52
|
attributes_ctx.tryToReadFromAdditionalTypes = false;
|
43
53
|
|
44
|
-
volatile VALUE
|
54
|
+
volatile VALUE attributes_container = panko_read_attributes_container(obj);
|
45
55
|
|
46
|
-
if (RB_TYPE_P(
|
47
|
-
attributes_ctx.attributes_hash =
|
56
|
+
if (RB_TYPE_P(attributes_container, T_HASH)) {
|
57
|
+
attributes_ctx.attributes_hash = attributes_container;
|
48
58
|
} else {
|
49
|
-
|
50
|
-
|
59
|
+
if(is_lazy_attributes_set_defined == false) {
|
60
|
+
volatile VALUE delegate_hash =
|
61
|
+
rb_ivar_get(attributes_container, delegate_hash_id);
|
62
|
+
|
63
|
+
if (PANKO_EMPTY_HASH(delegate_hash) == false) {
|
64
|
+
attributes_ctx.attributes_hash = delegate_hash;
|
65
|
+
}
|
66
|
+
} else {
|
67
|
+
volatile VALUE attributes_hash =
|
68
|
+
rb_ivar_get(attributes_container, attributes_id);
|
51
69
|
|
52
|
-
|
53
|
-
|
70
|
+
if (PANKO_EMPTY_HASH(attributes_hash) == false) {
|
71
|
+
attributes_ctx.attributes_hash = attributes_hash;
|
72
|
+
}
|
54
73
|
}
|
55
74
|
|
56
|
-
attributes_ctx.types = rb_ivar_get(
|
57
|
-
attributes_ctx.values = rb_ivar_get(
|
75
|
+
attributes_ctx.types = rb_ivar_get(attributes_container, types_id);
|
76
|
+
attributes_ctx.values = rb_ivar_get(attributes_container, values_id);
|
58
77
|
|
59
78
|
attributes_ctx.additional_types =
|
60
|
-
rb_ivar_get(
|
79
|
+
rb_ivar_get(attributes_container, additional_types_id);
|
61
80
|
attributes_ctx.tryToReadFromAdditionalTypes =
|
62
81
|
PANKO_EMPTY_HASH(attributes_ctx.additional_types) == false;
|
63
82
|
}
|
@@ -65,7 +84,7 @@ struct attributes init_context(VALUE obj) {
|
|
65
84
|
return attributes_ctx;
|
66
85
|
}
|
67
86
|
|
68
|
-
VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute) {
|
87
|
+
VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute, VALUE* isJson) {
|
69
88
|
volatile VALUE member, value;
|
70
89
|
|
71
90
|
member = attribute->name_str;
|
@@ -101,14 +120,36 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute) {
|
|
101
120
|
}
|
102
121
|
|
103
122
|
if (!NIL_P(attribute->type) && !NIL_P(value)) {
|
104
|
-
return type_cast(attribute->type, value);
|
123
|
+
return type_cast(attribute->type, value, isJson);
|
105
124
|
}
|
106
125
|
|
107
126
|
return value;
|
108
127
|
}
|
109
128
|
|
129
|
+
VALUE detect_active_model_changes(VALUE v) {
|
130
|
+
if (type_detection_ran == true) {
|
131
|
+
return Qundef;
|
132
|
+
}
|
133
|
+
|
134
|
+
type_detection_ran = true;
|
135
|
+
|
136
|
+
volatile VALUE active_model_type =
|
137
|
+
rb_const_get_at(rb_cObject, rb_intern("ActiveModel"));
|
138
|
+
|
139
|
+
is_lazy_attributes_set_defined =
|
140
|
+
rb_const_defined(active_model_type, rb_intern("LazyAttributeSet")) > 0;
|
141
|
+
|
142
|
+
return Qundef;
|
143
|
+
}
|
144
|
+
|
110
145
|
void active_record_attributes_writer(VALUE obj, VALUE attributes,
|
111
|
-
EachAttributeFunc
|
146
|
+
EachAttributeFunc write_value, VALUE writer) {
|
147
|
+
if (type_detection_ran == false) {
|
148
|
+
// If ActiveModel can't be found it will throw error
|
149
|
+
int isErrored;
|
150
|
+
rb_protect(detect_active_model_changes, Qnil, &isErrored);
|
151
|
+
}
|
152
|
+
|
112
153
|
long i;
|
113
154
|
struct attributes attributes_ctx = init_context(obj);
|
114
155
|
volatile VALUE record_class = CLASS_OF(obj);
|
@@ -118,9 +159,10 @@ void active_record_attributes_writer(VALUE obj, VALUE attributes,
|
|
118
159
|
Attribute attribute = PANKO_ATTRIBUTE_READ(raw_attribute);
|
119
160
|
attribute_try_invalidate(attribute, record_class);
|
120
161
|
|
121
|
-
volatile VALUE
|
162
|
+
volatile VALUE isJson = Qfalse;
|
163
|
+
volatile VALUE value = read_attribute(attributes_ctx, attribute, &isJson);
|
122
164
|
|
123
|
-
|
165
|
+
write_value(writer, attr_name_for_serialization(attribute), value, isJson);
|
124
166
|
}
|
125
167
|
}
|
126
168
|
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
static bool types_initialized = false;
|
4
4
|
static VALUE ar_base_type = Qundef;
|
5
|
-
static VALUE hash_type = Qundef;
|
6
5
|
|
7
6
|
VALUE init_types(VALUE v) {
|
8
7
|
if (types_initialized == true) {
|
@@ -13,9 +12,9 @@ VALUE init_types(VALUE v) {
|
|
13
12
|
|
14
13
|
volatile VALUE ar_type =
|
15
14
|
rb_const_get_at(rb_cObject, rb_intern("ActiveRecord"));
|
16
|
-
ar_base_type = rb_const_get_at(ar_type, rb_intern("Base"));
|
17
15
|
|
18
|
-
|
16
|
+
ar_base_type = rb_const_get_at(ar_type, rb_intern("Base"));
|
17
|
+
rb_global_variable(&ar_base_type);
|
19
18
|
|
20
19
|
return Qundef;
|
21
20
|
}
|
@@ -25,14 +24,16 @@ AttributesWriter create_attributes_writer(VALUE object) {
|
|
25
24
|
int isErrored;
|
26
25
|
rb_protect(init_types, Qnil, &isErrored);
|
27
26
|
|
27
|
+
|
28
28
|
if (ar_base_type != Qundef &&
|
29
29
|
rb_obj_is_kind_of(object, ar_base_type) == Qtrue) {
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
|
31
|
+
return (AttributesWriter){
|
32
|
+
.object_type = ActiveRecord,
|
33
|
+
.write_attributes = active_record_attributes_writer};
|
33
34
|
}
|
34
35
|
|
35
|
-
if (
|
36
|
+
if (!RB_SPECIAL_CONST_P(object) && BUILTIN_TYPE(object) == T_HASH) {
|
36
37
|
return (AttributesWriter){.object_type = Hash,
|
37
38
|
.write_attributes = hash_attributes_writer};
|
38
39
|
}
|
@@ -3,6 +3,6 @@
|
|
3
3
|
#include "../serialization_descriptor/attribute.h"
|
4
4
|
#include "ruby.h"
|
5
5
|
|
6
|
-
typedef void (*EachAttributeFunc)(VALUE writer, VALUE name, VALUE value);
|
6
|
+
typedef void (*EachAttributeFunc)(VALUE writer, VALUE name, VALUE value, VALUE isJson);
|
7
7
|
|
8
8
|
VALUE attr_name_for_serialization(Attribute attribute);
|
@@ -1,14 +1,12 @@
|
|
1
1
|
#include "hash.h"
|
2
2
|
|
3
3
|
void hash_attributes_writer(VALUE obj, VALUE attributes,
|
4
|
-
EachAttributeFunc
|
4
|
+
EachAttributeFunc write_value, VALUE writer) {
|
5
5
|
long i;
|
6
6
|
for (i = 0; i < RARRAY_LEN(attributes); i++) {
|
7
7
|
volatile VALUE raw_attribute = RARRAY_AREF(attributes, i);
|
8
8
|
Attribute attribute = attribute_read(raw_attribute);
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
func(writer, attr_name_for_serialization(attribute), value);
|
10
|
+
write_value(writer, attr_name_for_serialization(attribute), rb_hash_aref(obj, attribute->name_str), Qfalse);
|
13
11
|
}
|
14
12
|
}
|
@@ -1,13 +1,12 @@
|
|
1
1
|
#include "plain.h"
|
2
2
|
|
3
3
|
void plain_attributes_writer(VALUE obj, VALUE attributes,
|
4
|
-
EachAttributeFunc
|
4
|
+
EachAttributeFunc write_value, VALUE writer) {
|
5
5
|
long i;
|
6
6
|
for (i = 0; i < RARRAY_LEN(attributes); i++) {
|
7
7
|
volatile VALUE raw_attribute = RARRAY_AREF(attributes, i);
|
8
8
|
Attribute attribute = attribute_read(raw_attribute);
|
9
|
-
volatile VALUE value = rb_funcall(obj, attribute->name_id, 0);
|
10
9
|
|
11
|
-
|
10
|
+
write_value(writer, attr_name_for_serialization(attribute), rb_funcall(obj, attribute->name_id, 0), Qfalse);
|
12
11
|
}
|
13
12
|
}
|
@@ -7,7 +7,7 @@ ID to_i_id = 0;
|
|
7
7
|
|
8
8
|
static VALUE oj_type = Qundef;
|
9
9
|
static VALUE oj_parseerror_type = Qundef;
|
10
|
-
ID
|
10
|
+
ID oj_sc_parse_id = 0;
|
11
11
|
|
12
12
|
// Caching ActiveRecord Types
|
13
13
|
static VALUE ar_string_type = Qundef;
|
@@ -212,19 +212,6 @@ bool is_json_type(VALUE type_klass) {
|
|
212
212
|
(ar_json_type != Qundef && type_klass == ar_json_type));
|
213
213
|
}
|
214
214
|
|
215
|
-
VALUE rescue_func() { return Qnil; }
|
216
|
-
|
217
|
-
VALUE parse_json(VALUE value) { return rb_funcall(oj_type, load_id, 1, value); }
|
218
|
-
|
219
|
-
VALUE cast_json_type(VALUE value) {
|
220
|
-
if (!RB_TYPE_P(value, T_STRING)) {
|
221
|
-
return value;
|
222
|
-
}
|
223
|
-
|
224
|
-
volatile VALUE result =
|
225
|
-
rb_rescue2(parse_json, value, rescue_func, Qundef, oj_parseerror_type, 0);
|
226
|
-
return result;
|
227
|
-
}
|
228
215
|
|
229
216
|
bool is_boolean_type(VALUE type_klass) { return type_klass == ar_boolean_type; }
|
230
217
|
|
@@ -287,7 +274,36 @@ VALUE cast_date_time_type(VALUE value) {
|
|
287
274
|
return Qundef;
|
288
275
|
}
|
289
276
|
|
290
|
-
VALUE
|
277
|
+
VALUE rescue_func() { return Qfalse; }
|
278
|
+
|
279
|
+
VALUE parse_json(VALUE value) { return rb_funcall(oj_type, oj_sc_parse_id, 2, rb_cObject, value); }
|
280
|
+
|
281
|
+
VALUE is_json_value(VALUE value) {
|
282
|
+
if (!RB_TYPE_P(value, T_STRING)) {
|
283
|
+
return value;
|
284
|
+
}
|
285
|
+
|
286
|
+
|
287
|
+
if(RSTRING_LEN(value) == 0) {
|
288
|
+
return Qfalse;
|
289
|
+
}
|
290
|
+
|
291
|
+
volatile VALUE result =
|
292
|
+
rb_rescue2(parse_json, value, rescue_func, Qundef, oj_parseerror_type, 0);
|
293
|
+
|
294
|
+
if(NIL_P(result)) {
|
295
|
+
return Qtrue;
|
296
|
+
}
|
297
|
+
|
298
|
+
if(result == Qfalse) {
|
299
|
+
return Qfalse;
|
300
|
+
}
|
301
|
+
|
302
|
+
// TODO: fix me!
|
303
|
+
return Qfalse;
|
304
|
+
}
|
305
|
+
|
306
|
+
VALUE type_cast(VALUE type_metadata, VALUE value, VALUE* isJson) {
|
291
307
|
if (value == Qnil || value == Qundef) {
|
292
308
|
return value;
|
293
309
|
}
|
@@ -307,6 +323,14 @@ VALUE type_cast(VALUE type_metadata, VALUE value) {
|
|
307
323
|
}
|
308
324
|
}
|
309
325
|
|
326
|
+
if(is_json_type(type_klass)) {
|
327
|
+
if(is_json_value(value) == Qfalse) {
|
328
|
+
return Qnil;
|
329
|
+
}
|
330
|
+
*isJson = Qtrue;
|
331
|
+
return value;
|
332
|
+
}
|
333
|
+
|
310
334
|
if (typeCastedValue == Qundef) {
|
311
335
|
return rb_funcall(type_metadata, deserialize_from_db_id, 1, value);
|
312
336
|
}
|
@@ -314,19 +338,44 @@ VALUE type_cast(VALUE type_metadata, VALUE value) {
|
|
314
338
|
return typeCastedValue;
|
315
339
|
}
|
316
340
|
|
317
|
-
VALUE public_type_cast(
|
318
|
-
|
341
|
+
VALUE public_type_cast(int argc, VALUE* argv, VALUE self) {
|
342
|
+
VALUE type_metadata, value, isJson;
|
343
|
+
rb_scan_args(argc, argv, "21", &type_metadata, &value, &isJson);
|
344
|
+
|
345
|
+
if (isJson == Qnil || isJson == Qundef) {
|
346
|
+
isJson = Qfalse;
|
347
|
+
}
|
348
|
+
|
349
|
+
return type_cast(type_metadata, value, &isJson);
|
319
350
|
}
|
320
351
|
|
321
352
|
void panko_init_type_cast(VALUE mPanko) {
|
322
|
-
to_s_id =
|
323
|
-
to_i_id =
|
353
|
+
to_s_id = rb_intern("to_s");
|
354
|
+
to_i_id = rb_intern("to_i");
|
324
355
|
|
325
356
|
oj_type = rb_const_get_at(rb_cObject, rb_intern("Oj"));
|
326
357
|
oj_parseerror_type = rb_const_get_at(oj_type, rb_intern("ParseError"));
|
327
|
-
|
358
|
+
oj_sc_parse_id = rb_intern("sc_parse");
|
328
359
|
|
329
|
-
|
360
|
+
|
361
|
+
// TODO: pass 3 arguments here
|
362
|
+
rb_define_singleton_method(mPanko, "_type_cast", public_type_cast, -1);
|
330
363
|
|
331
364
|
panko_init_time(mPanko);
|
365
|
+
|
366
|
+
rb_global_variable(&oj_type);
|
367
|
+
rb_global_variable(&oj_parseerror_type);
|
368
|
+
rb_global_variable(&ar_string_type);
|
369
|
+
rb_global_variable(&ar_text_type);
|
370
|
+
rb_global_variable(&ar_float_type);
|
371
|
+
rb_global_variable(&ar_integer_type);
|
372
|
+
rb_global_variable(&ar_boolean_type);
|
373
|
+
rb_global_variable(&ar_date_time_type);
|
374
|
+
rb_global_variable(&ar_time_zone_converter);
|
375
|
+
rb_global_variable(&ar_json_type);
|
376
|
+
rb_global_variable(&ar_pg_integer_type);
|
377
|
+
rb_global_variable(&ar_pg_float_type);
|
378
|
+
rb_global_variable(&ar_pg_uuid_type);
|
379
|
+
rb_global_variable(&ar_pg_json_type);
|
380
|
+
rb_global_variable(&ar_pg_date_time_type);
|
332
381
|
}
|
@@ -68,11 +68,10 @@ static struct _TypeCast type_casts[] = {
|
|
68
68
|
{is_boolean_type, cast_boolean_type},
|
69
69
|
{is_date_time_type, cast_date_time_type},
|
70
70
|
{is_float_type, cast_float_type},
|
71
|
-
{is_json_type, cast_json_type},
|
72
71
|
|
73
72
|
{NULL, NULL}};
|
74
73
|
|
75
|
-
extern VALUE type_cast(VALUE type_metadata, VALUE value);
|
74
|
+
extern VALUE type_cast(VALUE type_metadata, VALUE value, VALUE* isJson);
|
76
75
|
void panko_init_type_cast(VALUE mPanko);
|
77
76
|
|
78
77
|
// Introduced in ruby 2.4
|
@@ -5,6 +5,7 @@
|
|
5
5
|
static ID push_value_id;
|
6
6
|
static ID push_array_id;
|
7
7
|
static ID push_object_id;
|
8
|
+
static ID push_json_id;
|
8
9
|
static ID pop_id;
|
9
10
|
|
10
11
|
static ID to_a_id;
|
@@ -12,8 +13,14 @@ static ID to_a_id;
|
|
12
13
|
static ID object_id;
|
13
14
|
static ID serialization_context_id;
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
static VALUE SKIP = Qundef;
|
17
|
+
|
18
|
+
void write_value(VALUE str_writer, VALUE key, VALUE value, VALUE isJson) {
|
19
|
+
if(isJson == Qtrue) {
|
20
|
+
rb_funcall(str_writer, push_json_id, 2, value, key);
|
21
|
+
} else {
|
22
|
+
rb_funcall(str_writer, push_value_id, 2, value, key);
|
23
|
+
}
|
17
24
|
}
|
18
25
|
|
19
26
|
void serialize_method_fields(VALUE object, VALUE str_writer,
|
@@ -35,8 +42,9 @@ void serialize_method_fields(VALUE object, VALUE str_writer,
|
|
35
42
|
Attribute attribute = PANKO_ATTRIBUTE_READ(raw_attribute);
|
36
43
|
|
37
44
|
volatile VALUE result = rb_funcall(serializer, attribute->name_id, 0);
|
38
|
-
|
39
|
-
|
45
|
+
if (result != SKIP) {
|
46
|
+
write_value(str_writer, attribute->name_str, result, Qfalse);
|
47
|
+
}
|
40
48
|
}
|
41
49
|
|
42
50
|
rb_ivar_set(serializer, object_id, Qnil);
|
@@ -44,8 +52,10 @@ void serialize_method_fields(VALUE object, VALUE str_writer,
|
|
44
52
|
|
45
53
|
void serialize_fields(VALUE object, VALUE str_writer,
|
46
54
|
SerializationDescriptor descriptor) {
|
47
|
-
descriptor->attributes_writer.write_attributes(object,
|
48
|
-
|
55
|
+
descriptor->attributes_writer.write_attributes(object,
|
56
|
+
descriptor->attributes,
|
57
|
+
write_value,
|
58
|
+
str_writer);
|
49
59
|
|
50
60
|
serialize_method_fields(object, str_writer, descriptor);
|
51
61
|
}
|
@@ -60,7 +70,7 @@ void serialize_has_one_associations(VALUE object, VALUE str_writer,
|
|
60
70
|
volatile VALUE value = rb_funcall(object, association->name_id, 0);
|
61
71
|
|
62
72
|
if (NIL_P(value)) {
|
63
|
-
write_value(str_writer, association->name_str, value);
|
73
|
+
write_value(str_writer, association->name_str, value, Qfalse);
|
64
74
|
} else {
|
65
75
|
serialize_object(association->name_str, value, str_writer,
|
66
76
|
association->descriptor);
|
@@ -78,7 +88,7 @@ void serialize_has_many_associations(VALUE object, VALUE str_writer,
|
|
78
88
|
volatile VALUE value = rb_funcall(object, association->name_id, 0);
|
79
89
|
|
80
90
|
if (NIL_P(value)) {
|
81
|
-
write_value(str_writer, association->name_str, value);
|
91
|
+
write_value(str_writer, association->name_str, value, Qfalse);
|
82
92
|
} else {
|
83
93
|
serialize_objects(association->name_str, value, str_writer,
|
84
94
|
association->descriptor);
|
@@ -146,6 +156,7 @@ void Init_panko_serializer() {
|
|
146
156
|
push_value_id = rb_intern("push_value");
|
147
157
|
push_array_id = rb_intern("push_array");
|
148
158
|
push_object_id = rb_intern("push_object");
|
159
|
+
push_json_id = rb_intern("push_json");
|
149
160
|
pop_id = rb_intern("pop");
|
150
161
|
to_a_id = rb_intern("to_a");
|
151
162
|
object_id = rb_intern("@object");
|
@@ -159,6 +170,10 @@ void Init_panko_serializer() {
|
|
159
170
|
rb_define_singleton_method(mPanko, "serialize_objects", serialize_objects_api,
|
160
171
|
3);
|
161
172
|
|
173
|
+
VALUE mPankoSerializer = rb_const_get(mPanko, rb_intern("Serializer"));
|
174
|
+
SKIP = rb_const_get(mPankoSerializer, rb_intern("SKIP"));
|
175
|
+
rb_global_variable(&SKIP);
|
176
|
+
|
162
177
|
panko_init_serialization_descriptor(mPanko);
|
163
178
|
init_attributes_writer(mPanko);
|
164
179
|
panko_init_type_cast(mPanko);
|
@@ -77,6 +77,7 @@ VALUE association_decriptor_aset(VALUE self, VALUE descriptor) {
|
|
77
77
|
|
78
78
|
void panko_init_association(VALUE mPanko) {
|
79
79
|
cAssociation = rb_define_class_under(mPanko, "Association", rb_cObject);
|
80
|
+
rb_global_variable(&cAssociation);
|
80
81
|
|
81
82
|
rb_define_module_function(cAssociation, "new", association_new, -1);
|
82
83
|
|