video_info 2.6.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/unit_test.yml +39 -0
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +242 -1
  5. data/CONTRIBUTING.md +11 -0
  6. data/Gemfile +1 -1
  7. data/Guardfile +2 -2
  8. data/README.md +29 -7
  9. data/lib/video_info.rb +25 -28
  10. data/lib/video_info/provider.rb +25 -12
  11. data/lib/video_info/providers/dailymotion.rb +19 -3
  12. data/lib/video_info/providers/vimeo.rb +3 -3
  13. data/lib/video_info/providers/vimeo_api.rb +20 -11
  14. data/lib/video_info/providers/vimeo_scraper.rb +93 -23
  15. data/lib/video_info/providers/wistia.rb +2 -1
  16. data/lib/video_info/providers/youtube.rb +16 -2
  17. data/lib/video_info/providers/youtube_api.rb +42 -8
  18. data/lib/video_info/providers/youtube_scraper.rb +64 -31
  19. data/lib/video_info/providers/youtubeplaylist.rb +5 -2
  20. data/lib/video_info/providers/youtubeplaylist_api.rb +22 -1
  21. data/lib/video_info/providers/youtubeplaylist_scraper.rb +16 -3
  22. data/lib/video_info/version.rb +1 -1
  23. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_invalid_video_url/_available_/1_2_2_1_1.yml +82 -0
  24. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_valid_video/_available_/1_2_1_1_1.yml +87 -0
  25. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author/1_3_7_1.yml +91 -0
  26. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_thumbnail/1_3_9_1.yml +91 -0
  27. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_url/1_3_8_1.yml +91 -0
  28. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_date/should_show_correct_date.yml +91 -0
  29. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_description/1_3_10_1.yml +91 -0
  30. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_duration/1_3_12_1.yml +91 -0
  31. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_keywords/1_3_11_1.yml +91 -0
  32. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail/1_3_21_1.yml +91 -0
  33. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_large/1_3_18_1.yml +91 -0
  34. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_medium/1_3_17_1.yml +91 -0
  35. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_small/1_3_16_1.yml +91 -0
  36. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_title/1_3_6_1.yml +91 -0
  37. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_view_count/1_3_22_1.yml +91 -0
  38. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/1_2_3_1_1.yml +151 -0
  39. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/2_2_3_1_1.yml +68 -0
  40. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/1_2_2_1_1.yml +127 -0
  41. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/2_2_2_1_1.yml +70 -0
  42. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/1_2_1_1_1.yml +158 -0
  43. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/2_2_1_1_1.yml +68 -0
  44. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author/1_13_2_1.yml +130 -0
  45. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_thumbnail/1_13_3_1.yml +130 -0
  46. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_url/1_13_4_1.yml +132 -0
  47. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/available_/1_13_1_1.yml +130 -0
  48. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/date/1_13_7_1.yml +128 -0
  49. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/description/1_13_6_1.yml +131 -0
  50. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/duration/1_13_8_1.yml +130 -0
  51. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/height/1_13_10_1.yml +131 -0
  52. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/keywords/1_13_9_1.yml +128 -0
  53. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_large/1_13_14_1.yml +129 -0
  54. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_medium/1_13_13_1.yml +129 -0
  55. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_small/1_13_12_1.yml +129 -0
  56. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/title/1_13_5_1.yml +130 -0
  57. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/view_count/1_13_15_1.yml +129 -0
  58. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/width/1_13_11_1.yml +129 -0
  59. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/1_3_20_1.yml +158 -0
  60. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/2_3_20_1.yml +80 -0
  61. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/1_3_19_1.yml +158 -0
  62. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/2_3_19_1.yml +85 -0
  63. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/1_3_21_1.yml +159 -0
  64. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/2_3_21_1.yml +80 -0
  65. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_date/should_have_correct_upload_date.yml +240 -0
  66. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/1_3_7_1.yml +160 -0
  67. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/2_3_7_1.yml +80 -0
  68. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/1_3_9_1.yml +158 -0
  69. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/2_3_9_1.yml +85 -0
  70. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/1_3_11_1.yml +158 -0
  71. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/2_3_11_1.yml +80 -0
  72. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_keywords/should_return_a_string_list_of_keywords.yml +240 -0
  73. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/1_3_18_1.yml +236 -0
  74. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/2_3_18_1.yml +82 -0
  75. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/1_3_15_1.yml +236 -0
  76. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/2_3_15_1.yml +82 -0
  77. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/1_3_14_1.yml +235 -0
  78. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/2_3_14_1.yml +84 -0
  79. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/1_3_13_1.yml +236 -0
  80. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/2_3_13_1.yml +84 -0
  81. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/1_3_6_1.yml +159 -0
  82. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/2_3_6_1.yml +85 -0
  83. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/1_3_22_1.yml +158 -0
  84. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/2_3_22_1.yml +84 -0
  85. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/1_3_10_1.yml +156 -0
  86. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/2_3_10_1.yml +82 -0
  87. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/1_12_1_1.yml +234 -0
  88. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/2_12_1_1.yml +78 -0
  89. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/1_12_2_1.yml +233 -0
  90. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/2_12_2_1.yml +78 -0
  91. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/1_12_3_1.yml +235 -0
  92. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/2_12_3_1.yml +73 -0
  93. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/1_12_4_1.yml +234 -0
  94. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/2_12_4_1.yml +77 -0
  95. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_invalid_video/_available_/1_2_2_1_1.yml +75 -0
  96. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_valid_video/_available_/1_2_1_1_1.yml +79 -0
  97. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_duration/1_4_7_1.yml +85 -0
  98. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_height/1_4_9_1.yml +85 -0
  99. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_large/1_4_12_1.yml +86 -0
  100. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_medium/1_4_11_1.yml +86 -0
  101. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_small/1_4_10_1.yml +85 -0
  102. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_title/1_4_6_1.yml +86 -0
  103. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_width/1_4_8_1.yml +86 -0
  104. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_duration/1_3_7_1.yml +85 -0
  105. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_height/1_3_9_1.yml +87 -0
  106. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail/1_3_15_1.yml +87 -0
  107. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_large/1_3_12_1.yml +87 -0
  108. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_medium/1_3_11_1.yml +87 -0
  109. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_small/1_3_10_1.yml +85 -0
  110. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_title/1_3_6_1.yml +85 -0
  111. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_width/1_3_8_1.yml +87 -0
  112. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/1_2_2_1_1.yml +59 -0
  113. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/2_2_2_1_1.yml +114 -0
  114. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/1_2_2_11_1.yml +59 -0
  115. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/2_2_2_11_1.yml +114 -0
  116. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/1_2_2_8_1.yml +59 -0
  117. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/2_2_2_8_1.yml +114 -0
  118. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/1_2_2_10_1.yml +59 -0
  119. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/2_2_2_10_1.yml +114 -0
  120. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/1_2_2_9_1.yml +59 -0
  121. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/2_2_2_9_1.yml +114 -0
  122. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/1_2_2_7_1.yml +59 -0
  123. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/2_2_2_7_1.yml +114 -0
  124. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/1_2_2_18_1.yml +59 -0
  125. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/2_2_2_18_1.yml +114 -0
  126. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/1_2_1_1_1.yml +59 -0
  127. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/2_2_1_1_1.yml +187 -0
  128. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/1_2_3_1_1.yml +59 -0
  129. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/2_2_3_1_1.yml +114 -0
  130. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_a_video_without_description/_description/1_1_1_1.yml +59 -0
  131. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_date/should_return_date_video_was_posted.yml +249 -0
  132. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/1_17_7_1.yml +59 -0
  133. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/2_17_7_1.yml +187 -0
  134. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/1_17_9_1.yml +59 -0
  135. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/2_17_9_1.yml +187 -0
  136. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/1_17_8_1.yml +59 -0
  137. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/2_17_8_1.yml +187 -0
  138. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/1_17_6_1.yml +59 -0
  139. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/2_17_6_1.yml +187 -0
  140. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/1_17_17_1.yml +59 -0
  141. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/2_17_17_1.yml +187 -0
  142. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/1_3_6_1.yml +115 -0
  143. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/2_3_6_1.yml +187 -0
  144. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/1_3_7_1.yml +115 -0
  145. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/2_3_7_1.yml +335 -0
  146. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/1_3_8_1.yml +59 -0
  147. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/2_3_8_1.yml +335 -0
  148. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/can_be_called_twice_and_receive_the_same_value.yml +391 -0
  149. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_date/should_return_date_video_was_posted.yml +243 -0
  150. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/1_3_10_1.yml +60 -0
  151. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/2_3_10_1.yml +187 -0
  152. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/1_3_12_1.yml +59 -0
  153. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/2_3_12_1.yml +187 -0
  154. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/1_3_11_1.yml +59 -0
  155. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/2_3_11_1.yml +187 -0
  156. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/1_3_9_1.yml +59 -0
  157. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/2_3_9_1.yml +187 -0
  158. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/1_3_21_1.yml +59 -0
  159. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/2_3_21_1.yml +187 -0
  160. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/1_2_2_1_1.yml +120 -0
  161. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_list_url/_available_/1_2_3_1_1.yml +154 -0
  162. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/1_2_1_1_1.yml +154 -0
  163. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author/1_3_21_1.yml +165 -0
  164. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_thumbnail/1_3_22_1.yml +274 -0
  165. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_url/1_3_23_1.yml +274 -0
  166. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/1_3_7_1.yml +165 -0
  167. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_keywords/1_3_8_1.yml +165 -0
  168. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail/1_3_18_1.yml +165 -0
  169. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/1_3_15_1.yml +165 -0
  170. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large_2x/1_3_16_1.yml +165 -0
  171. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_maxres/1_3_17_1.yml +165 -0
  172. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/1_3_14_1.yml +165 -0
  173. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/1_3_13_1.yml +165 -0
  174. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/1_3_6_1.yml +165 -0
  175. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_videos/returns_list_of_videos_in_playlist.yml +112 -0
  176. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_that_does_not_exist_in_embed_path/_videos/1_4_2_1.yml +114 -0
  177. data/spec/lib/video_info/provider_spec.rb +42 -22
  178. data/spec/lib/video_info/providers/dailymotion_spec.rb +75 -27
  179. data/spec/lib/video_info/providers/vimeo_spec.rb +270 -174
  180. data/spec/lib/video_info/providers/wistia_spec.rb +59 -20
  181. data/spec/lib/video_info/providers/youtube_playlist_spec.rb +97 -41
  182. data/spec/lib/video_info/providers/youtube_scraper_spec.rb +14 -0
  183. data/spec/lib/video_info/providers/youtube_spec.rb +441 -384
  184. data/spec/lib/video_info_spec.rb +27 -25
  185. data/spec/spec_helper.rb +6 -1
  186. data/tmp/rspec_guard_result +25 -0
  187. data/video_info.gemspec +11 -14
  188. metadata +358 -100
  189. data/.travis.yml +0 -13
  190. data/foo.txt +0 -33
  191. data/lib/video_info/providers/vkontakte.rb +0 -170
  192. data/spec/lib/video_info/providers/vimeo_api_spec.rb +0 -242
  193. data/spec/lib/video_info/providers/vkontakte_spec.rb +0 -173
  194. data/spec/lib/video_info/providers/youtube_api_spec.rb +0 -476
  195. data/spec/lib/video_info/providers/youtube_playlist_api_spec.rb +0 -187
@@ -0,0 +1,112 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.googleapis.com/youtube/v3/playlistItems?fields=items&key=youtube_api_key_123&maxResults=50&part=snippet&playlistId=PL9hW1uS6HUftLdHI6RIsaf-iXTm09qnEr
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - VideoInfo/2.8.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - application/json; charset=UTF-8
23
+ Vary:
24
+ - Origin
25
+ - Referer
26
+ - X-Origin
27
+ Date:
28
+ - Tue, 27 Oct 2020 18:42:18 GMT
29
+ Server:
30
+ - scaffolding on HTTPServer2
31
+ Cache-Control:
32
+ - private
33
+ X-Xss-Protection:
34
+ - '0'
35
+ X-Frame-Options:
36
+ - SAMEORIGIN
37
+ X-Content-Type-Options:
38
+ - nosniff
39
+ Alt-Svc:
40
+ - h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443";
41
+ ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443";
42
+ ma=2592000; v="46,43"
43
+ Transfer-Encoding:
44
+ - chunked
45
+ body:
46
+ encoding: ASCII-8BIT
47
+ string: !binary |-
48
+ ewogICJpdGVtcyI6IFsKICAgIHsKICAgICAgImtpbmQiOiAieW91dHViZSNwbGF5bGlzdEl0ZW0iLAogICAgICAiZXRhZyI6ICJkbzh2ZWJnVnpBM1BkbEtSUlh3QWctLXJsZFUiLAogICAgICAiaWQiOiAiVUV3NWFGY3hkVk0yU0ZWbWRFeGtTRWsyVWtsellXWXRhVmhVYlRBNWNXNUZjaTR3TVRjeU1EaEdRVUU0TlRJek0wWTUiLAogICAgICAic25pcHBldCI6IHsKICAgICAgICAicHVibGlzaGVkQXQiOiAiMjAxMy0wOC0wOVQwNTowOTo1MVoiLAogICAgICAgICJjaGFubmVsSWQiOiAiVUNNRFF4bTdjVXgzeVhrZmVIYTV6SklRIiwKICAgICAgICAidGl0bGUiOiAiWW91VHViZSBDb250ZW50IElEIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiIiwKICAgICAgICAidGh1bWJuYWlscyI6IHsKICAgICAgICAgICJkZWZhdWx0IjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvOWcyVTEyU3NSbnMvZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiA5MAogICAgICAgICAgfSwKICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85ZzJVMTJTc1Jucy9tcWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMzIwLAogICAgICAgICAgICAiaGVpZ2h0IjogMTgwCiAgICAgICAgICB9LAogICAgICAgICAgImhpZ2giOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85ZzJVMTJTc1Jucy9ocWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNDgwLAogICAgICAgICAgICAiaGVpZ2h0IjogMzYwCiAgICAgICAgICB9LAogICAgICAgICAgInN0YW5kYXJkIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvOWcyVTEyU3NSbnMvc2RkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDY0MCwKICAgICAgICAgICAgImhlaWdodCI6IDQ4MAogICAgICAgICAgfSwKICAgICAgICAgICJtYXhyZXMiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85ZzJVMTJTc1Jucy9tYXhyZXNkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDEyODAsCiAgICAgICAgICAgICJoZWlnaHQiOiA3MjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjaGFubmVsVGl0bGUiOiAiVGVhbVlvdVR1YmUgW0hlbHBdIiwKICAgICAgICAicGxheWxpc3RJZCI6ICJQTDloVzF1UzZIVWZ0TGRISTZSSXNhZi1pWFRtMDlxbkVyIiwKICAgICAgICAicG9zaXRpb24iOiAwLAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICI5ZzJVMTJTc1JucyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJraW5kIjogInlvdXR1YmUjcGxheWxpc3RJdGVtIiwKICAgICAgImV0YWciOiAiaUpOaldzRmE2djhBN21iejUxUVhlNEc2NHJFIiwKICAgICAgImlkIjogIlVFdzVhRmN4ZFZNMlNGVm1kRXhrU0VrMlVrbHpZV1l0YVZoVWJUQTVjVzVGY2k1RFFVTkVSRFEyTmtJelJVUXhOVFkxIiwKICAgICAgInNuaXBwZXQiOiB7CiAgICAgICAgInB1Ymxpc2hlZEF0IjogIjIwMTUtMDQtMjJUMjE6NDg6NDNaIiwKICAgICAgICAiY2hhbm5lbElkIjogIlVDTURReG03Y1V4M3lYa2ZlSGE1ekpJUSIsCiAgICAgICAgInRpdGxlIjogIllvdVR1YmUgQ29weXJpZ2h0IEJhc2ljcyIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL09RVkhXc1RIY29jL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvT1FWSFdzVEhjb2MvbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvT1FWSFdzVEhjb2MvaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL09RVkhXc1RIY29jL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjaGFubmVsVGl0bGUiOiAiVGVhbVlvdVR1YmUgW0hlbHBdIiwKICAgICAgICAicGxheWxpc3RJZCI6ICJQTDloVzF1UzZIVWZ0TGRISTZSSXNhZi1pWFRtMDlxbkVyIiwKICAgICAgICAicG9zaXRpb24iOiAxLAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICJPUVZIV3NUSGNvYyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJraW5kIjogInlvdXR1YmUjcGxheWxpc3RJdGVtIiwKICAgICAgImV0YWciOiAibGdRaTZST1Bla3NNOWl6OFFGOVFCSThsVFhzIiwKICAgICAgImlkIjogIlVFdzVhRmN4ZFZNMlNGVm1kRXhrU0VrMlVrbHpZV1l0YVZoVWJUQTVjVzVGY2k0NU5EazFSRVpFTnpoRU16VTVNRFF6IiwKICAgICAgInNuaXBwZXQiOiB7CiAgICAgICAgInB1Ymxpc2hlZEF0IjogIjIwMjAtMDUtMjlUMTU6Mjg6NTBaIiwKICAgICAgICAiY2hhbm5lbElkIjogIlVDTURReG03Y1V4M3lYa2ZlSGE1ekpJUSIsCiAgICAgICAgInRpdGxlIjogIlRoZSBMaWZlIG9mIGEgRmxhZyIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIuKAnEZsYWdz4oCdIG9uIFlvdVR1YmUgbWFyayBjb250ZW50IHRoYXQgbWF5IHZpb2xhdGUgb3VyIENvbW11bml0eSBHdWlkZWxpbmVzLiBUaGlzIHZpZGVvIGV4cGxhaW5zIGhvdyBZb3VUdWJlIHJlY2VpdmVzIGZsYWdzLCBhY3Rpb25zIHJldmlld2VycyB0YWtlIG9uIGZsYWdzIGFuZCBvdGhlciBwcm9jZXNzZXMgYW5kIHBvbGljaWVzIHRoYXQgaGVscCB1cyBrZWVwIHRoZSBZb3VUdWJlIGNvbW11bml0eSBzYWZlLiBcblxuUmVwb3J0IGluYXBwcm9wcmlhdGUgY29udGVudCBvbiBZb3VUdWJlOiBodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS95b3V0dWJlL2Fuc3dlci8yODAyMDI3P2hsPWVuXG5MZWFybiBtb3JlIGFib3V0IHdoeSBmbGFnZ2luZyBtYXR0ZXJzOiBodHRwczovL3lvdXR1YmUuZ29vZ2xlYmxvZy5jb20vMjAxNi8wOS93aHktZmxhZ2dpbmctbWF0dGVycy5odG1sXG5HZXQgdG8ga25vdyBZb3VUdWJlJ3MgQ29tbXVuaXR5IEd1aWRlbGluZXM6IGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3l0L2Fib3V0L3BvbGljaWVzLyNjb21tdW5pdHktZ3VpZGVsaW5lc1xuUmVhZCB0aGUgWW91VHViZSBDb21tdW5pdHkgR3VpZGVsaW5lcyBlbmZvcmNlbWVudCByZXBvcnQ6IGh0dHBzOi8vdHJhbnNwYXJlbmN5cmVwb3J0Lmdvb2dsZS5jb20vXG5cblRoYW5rcyBmb3IgaGVscGluZyB1cyBrZWVwIHRoZSBZb3VUdWJlIGNvbW11bml0eSBzYWZlLiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL1dLOHFSTlNtaEVVL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvV0s4cVJOU21oRVUvbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvV0s4cVJOU21oRVUvaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL1dLOHFSTlNtaEVVL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4cmVzIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvV0s4cVJOU21oRVUvbWF4cmVzZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjgwLAogICAgICAgICAgICAiaGVpZ2h0IjogNzIwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhbm5lbFRpdGxlIjogIlRlYW1Zb3VUdWJlIFtIZWxwXSIsCiAgICAgICAgInBsYXlsaXN0SWQiOiAiUEw5aFcxdVM2SFVmdExkSEk2UklzYWYtaVhUbTA5cW5FciIsCiAgICAgICAgInBvc2l0aW9uIjogMiwKICAgICAgICAicmVzb3VyY2VJZCI6IHsKICAgICAgICAgICJraW5kIjogInlvdXR1YmUjdmlkZW8iLAogICAgICAgICAgInZpZGVvSWQiOiAiV0s4cVJOU21oRVUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAia2luZCI6ICJ5b3V0dWJlI3BsYXlsaXN0SXRlbSIsCiAgICAgICJldGFnIjogIm94d3h1QXBwZGJuWGtnRkttVjRCWmpmckVOayIsCiAgICAgICJpZCI6ICJVRXc1YUZjeGRWTTJTRlZtZEV4a1NFazJVa2x6WVdZdGFWaFViVEE1Y1c1RmNpNUdOak5EUkRSRU1EUXhPVGhDTURRMiIsCiAgICAgICJzbmlwcGV0IjogewogICAgICAgICJwdWJsaXNoZWRBdCI6ICIyMDIwLTA1LTI5VDE2OjA4OjA5WiIsCiAgICAgICAgImNoYW5uZWxJZCI6ICJVQ01EUXhtN2NVeDN5WGtmZUhhNXpKSVEiLAogICAgICAgICJ0aXRsZSI6ICIxNeWIhuOBp+WIhuOBi+OCi++8geOAjuOCs+ODn+ODpeODi+ODhuOCo+OCrOOCpOODieODqeOCpOODs+OAj1lvdVR1YmVy44GM5b+F44Ga5a6I44KL44G544GN44Or44O844OrIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAi77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkOWFrOW8j0xJTkXjgJFcbmh0dHBzOi8vcGVyYWljaGkuY29tL2xhbmRpbmdfcGFnZXMvdmlldy9zYWthaWxpbmVcbuWFqOWbveOBp+OBrllvdVR1YmVy44Kq44OV5Lya44O744OT44K444ON44K55ZCR44GR55u46KuH5Lya44Gq44Gp44CB44Os44OZ44Or44Ki44OD44OX5oOF5aCx44KS5YWI6KGM6YWN5L+h44GX44Gm44GE44G+44GZXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ57WM5Za26ICF5ZCR44GR44Kq44Oz44Op44Kk44Oz44K144Ot44Oz44CRXG5odHRwczovL2NvbW11bml0eS5jYW1wLWZpcmUuanAvcHJvamVjdHMvdmlldy8yNTE2NjZcbuWFqOWbveOBruWkmuW9qeOBqualreeoruOBruODk+OCuOODjeOCuVlvdVR1YmVy44GM5Y+C5Yqg44CC6YWS5LqV44Gu44OO44Km44OP44Km44O75a6f6Le144OH44O844K/44Gv44GT44GT44Gr5YWx5pyJ44GX44Gm44GE44G+44GZXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJBTTlPjgJFcbkZhY2Vib29rXG5odHRwczovL3d3dy5mYWNlYm9vay5jb20veW9zaGl0YWRhLnNha2FpXG5cblR3aXR0ZXJcbmh0dHBzOi8vdHdpdHRlci5jb20veW9zaGl0YWRhc2FrYWlcblxu5rCX6Lu944Gr44OV44Kp44Ot44O844GP44Gg44GV44GE44CA4oC7RkLjga/kuIDoqIDjg6Hjg4Pjgrvjg7zjgrjjgYTjgZ/jgaDjgZHjgovjgajliqnjgYvjgorjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG7ilrzjgrPjg4Hjg6njgoLjgZzjgbLjgZTopqfjgY/jgaDjgZXjgYTilrxcblxu4pGgWW91VHViZe+8huWLleeUu+OBruWIneW/g+iAheOBq+imi+OBpuOBu+OBl+OBhOOCquOCueOCueODoeWLleeUu1xu4pGh5YuV55S744Gn5L2/55So44GX44Gm44GE44KL5pKu5b2x5Zmo5p2QXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7zphZLkupXnpaXmraNcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaAgWW91VHViZeWIneW/g+iAheOBq+OCquOCueOCueODoeWLleeUu+OBvuOBqOOCgeOBvuOBl+OBn++8gVxuXG7jgJBMdi4x44CRMTDmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcVZJTEthLWh4by0tbVhGeW1VSE1uVVxuXG7jgJBMdi4y44CRNuacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9wb0toTDZ5OENfVlpFUUdjckhFMzFSXG5cbuOAkEx2LjPjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3J2RVp0YzNIVldCQUh0OEhacmx0c2Zcblxu44CQMTAw5Lq65YuV55S744Ki44OJ44OQ44Kk44K544CRXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BrRm1zdFZxT1FTOVNmZ0Y1Yk1fRDZcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaHphZLkupXjga7kvb/nlKjlmajmnZDvvIjjgqLjg57jgr7jg7PjgqLjgr3jgrfjgqjjgqTjg4jjg5fjg63jgrDjg6njg6DjgpLliKnnlKjvvIlcblxu44CQ44Kr44Oh44Op44CRUGFuYXNvbmljIEdINVxuaHR0cHM6Ly9hbXpuLnRvLzM0TkY3aUdcblxu44CQ5omL6aCD44Os44Oz44K644CRIFNVTU1JTFVYIDE1bW0vRjEuN1xuaHR0cHM6Ly9hbXpuLnRvLzJVN2xkd1Bcblxu44CQ6YeN5a6d44Os44Oz44K644CRU1VNTUlMVVggMTJtbS9GMS40XG5odHRwczovL2Ftem4udG8vMndXdnpXNFxuXG7jgJDjgrPjg7Pjg4fjgrjjgJFQYW5hc29uaWMgRE1DLUxYOS1LXG5odHRwOi8vYW16bi50by8yRjdVYk9uXG7igLvjgrnjg57jg5vjgYvjgonjgrnjg4bjg4Pjg5fjgqLjg4Pjg5fjgavkvqHmoLzjg7vmgKfog73jg7vnlLvos6pcblxu44CQ5LiJ6ISa44CRTWFuZnJvdHRvIOS4ieiEmuOCouODq+ODnzXmrrUg44OW44Op44OD44KvXG5odHRwOi8vYW16bi50by8yRkpPeFBEXG5cbuOAkOeFp+aYjuOAkVlvbmdudW8gTEVE44Op44Kk44OIIDYwMOeQg+OBrkxFROOCkuaQrei8iVxuaHR0cDovL2Ftem4udG8vMkhWaXc3UVxuXG7jgJDlpbPmgKflkJHjgZHjg6njgqTjg4jjgJHjg6rjg7PjgrDjg6njgqTjg4ggRk9TSVRBTiDlpJblvoQzNmNtLzE044Kk44Oz44OBXG5odHRwczovL2Ftem4udG8vMlZsYkV0a1xuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGi5pig5YOP44OH44Kj44Os44Kv44K/44O8IOmFkuS6leelpeato1xuXG7imIXjg5fjg63jg5XjgqPjg7zjg6tcbjE5ODDlubTnlJ/jgb7jgozjgIDnpo/kupXnnIzlh7rouqvjgIAzOeats1xu5pig5YOP5Yi25L2c5q20IDE35bm044CAODDmpa3nqK4xMDAwMOacrOS7peS4iuWItuS9nFxuXG4yMOats+OBi+OCieadseS6rOOCkuS4reW/g+OBq+ODleODquODvOaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOOBqOOBl+OBpua0u+WLleOAglxuMjbmrbPjgYvjgonjga/npo/kupXnnIzjgavjgYLjgovjgrHjg7zjg5bjg6vjg4bjg6zjg5PjgavmiYDlsZ7jgILjgqvjg6Hjg6njg57jg7PjgIHjg6rjg53jg7zjgr/jg7zjgIHoqJjogIXjgIHmmKDlg4/nt6jpm4bjgarjgannlarntYTliLbkvZwg5qWt5YuZ5YWo6Iis44KS5ouF5b2T44CCXG4zNOats+OBi+OCieOBr+S4reWwj+S8gealreOCkuWvvuixoeOBqyBZb3VUdWJl5bCC6ZaAIOaYoOWDj+ijveS9nOOBruOBu+OBi+OAgeWLleeUu+OCu+ODn+ODiuODvOOChOS8gealreOBrllvdVR1YmXjg4Hjg6Pjg7Pjg43jg6vmp4vnr4njgpLjgrXjg53jg7zjg4jjgIJcblxu6ZuG5a6i5YuV55S744Gl44GP44KK44Gr5b+F6KaB44GqIOS8geeUu+ODu+aSruW9seODu+e3qOmbhuODu+eZuuS/oeODu+apn+adkOODu+ipseOBl+aWueOCkuODiOODvOOCv+ODq+OBp+aVmeOBiOOCieOCjOOCi+WbveWGheWUr+S4gOOBruaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvFxuMjAxOeW5tDXmnIjjgYvjgonml6XmnKzjgacz5Lq655uu44GuWW91VHViZeWFrOW8j+ODk+ODh+OCquOCs+ODs+ODiOODquODk+ODpeODvOOCv+ODvOOBqOOBl+OBpua0u+WLleS4rVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKYheS8gealreWQkeOBkeWLleeUu+ODnuODvOOCseODhuOCo+ODs+OCsOWwjuWFpeebuOirh1xuaHR0cHM6Ly9nb2xkZW4tbW9ua2V5LnR2L2NvbnRhY3QuaHRtbFxu4oC75LqL5qWt55u46KuH5Lul5aSW44Gu5ZWP5ZCI44Gb44Gr44Gv5a++5b+c44GE44Gf44GX44GL44Gt44G+44GZ44Gu44Gn44GU5LqG5om/44GP44Gg44GV44GEXG7kuIDoiKznmoTjgaros6rllY/jga9Zb3VUdWJl44Gr44Kz44Oh44Oz44OI44GP44Gg44GV44GEXG5cblxuI+OBv+OCk+OBquOBjOWkluWHuuOCkuW/mOOCjOOCi+OBj+OCieOBhOiJr+OBhOWLleeUu+OCkuS9nOOCjeOBhiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL1F0d3BsU0c2VnZNL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvUXR3cGxTRzZWdk0vbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvUXR3cGxTRzZWdk0vaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL1F0d3BsU0c2VnZNL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4cmVzIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvUXR3cGxTRzZWdk0vbWF4cmVzZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjgwLAogICAgICAgICAgICAiaGVpZ2h0IjogNzIwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhbm5lbFRpdGxlIjogIlRlYW1Zb3VUdWJlIFtIZWxwXSIsCiAgICAgICAgInBsYXlsaXN0SWQiOiAiUEw5aFcxdVM2SFVmdExkSEk2UklzYWYtaVhUbTA5cW5FciIsCiAgICAgICAgInBvc2l0aW9uIjogMywKICAgICAgICAicmVzb3VyY2VJZCI6IHsKICAgICAgICAgICJraW5kIjogInlvdXR1YmUjdmlkZW8iLAogICAgICAgICAgInZpZGVvSWQiOiAiUXR3cGxTRzZWdk0iCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAia2luZCI6ICJ5b3V0dWJlI3BsYXlsaXN0SXRlbSIsCiAgICAgICJldGFnIjogIk01UDZOSlhRTkFsR0ZaTWlwSFVJVHR6SnJsdyIsCiAgICAgICJpZCI6ICJVRXc1YUZjeGRWTTJTRlZtZEV4a1NFazJVa2x6WVdZdGFWaFViVEE1Y1c1RmNpNDBOelpDTUVSRE1qVkVOMFJGUlRoQiIsCiAgICAgICJzbmlwcGV0IjogewogICAgICAgICJwdWJsaXNoZWRBdCI6ICIyMDIwLTA2LTAyVDEzOjQwOjIzWiIsCiAgICAgICAgImNoYW5uZWxJZCI6ICJVQ01EUXhtN2NVeDN5WGtmZUhhNXpKSVEiLAogICAgICAgICJ0aXRsZSI6ICLjgJDokZfkvZzmqKnkvrXlrrPjg6zjgqLjgrHjg7zjgrnjgJHmtbflpJbjgYvjgonjga7nlLPjgZfnq4vjgabvvIbomZrlgb3jga7loLHlkYoiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICLku4rlm57jga/okZfkvZzmqKnkvrXlrrPjgavplqLjgZnjgovosYbnn6XorZjjgpLntLnku4vjgZfjgb7jgZlcbuiRl+S9nOaoqeODleODquODvOOBrumfs+alveOCkuS9v+OBo+OBpuOBhOOBpua1t+WkluOBruiRl+S9nOaoqeipkOasuuWbo+S9k+OBi+OCieWgseWRiuOCkuWPl+OBkeOCi+OBk+OBqOOBjOOBguOCiuOBvuOBmeOBjOOAgeWun+OBr+ato+imj+OBrueuoeeQhuWbo+S9k+OBruOCseODvOOCueOCguOBguOCiuOBvuOBmeOBruOBp+azqOaEj+S4i+OBleOBhFxu44G+44Gf44CBWW91VHViZeOBp+OBruiRl+S9nOaoqeS+teWus+OBq+OBiuOBhOOBpuiZmuWBveOBruWgseWRiuOCkuihjOOBo+OBpuWgtOWQiOOBr+e9sOmHkeWIkeOBq+OBquOCi+WgtOWQiOOCguOBguOCi+OBruOBp+OAgeWgseWRiuODu+eUs+OBl+eri+OBpuOCkuOBmeOCi+WgtOWQiOOBr+OBjeOBoeOCk+OBqOeiuuiqjeOBl+OBvuOBl+OBn1xu44G+44Gf44CB44Gd44GG44GE44Gj44Gf44OI44Op44OW44Or44Gr5be744GN6L6844G+44KM44Gf5aC05ZCI44Gv5byB6K235aOr44Gq44Gp44Gu5bCC6ZaA5a6244Gr55u46KuH44GX44G+44GX44KH44GG77yBXG5cbuOAkOmWoumAo+WLleeUu+OAkVxuXG7jgJDop6PmsbrnrZbjgJHokZfkvZzmqKnkvrXlrrPjgafli5XnlLvjgYzliYrpmaTjgZXjgozjgb7jgZfjgZ/vvIHnlbDorbDnlLPnq4vjga7oqbPntLDjgpLop6PoqqzvvIFcbmh0dHBzOi8veW91dHUuYmUvbGF1MTRsaFpwb1Vcblxu44CQ5Y2x6Zm644CR6Z+z5qW944Gu6JGX5L2c5qip5L615a6z44Gn44Ki44Kr44Km44Oz44OI5YGc5q2i77yf5Y+O55uK5YyW54Sh5Yq577yf6JGX5L2c5qip44OV44Oq44O86Z+z5qW944Gr5r2c44KA572g44Go44GvXG5odHRwczovL3lvdXR1LmJlLzRBZzlWeTNnbHV3XG5cbuOAkOW8geitt+Wjq+OBq+iBnuOBj++9peiRl+S9nOaoqeOAkeiHquWIhuOBruWLleeUu+OBjOeEoeaWrei7oui8ieOBleOCjOOBn+OBqOOBjeOBruWvvuetluOAgOiRl+S9nOaoqeS+teWus+OBp+ijgeWIpO+8n1xuaHR0cHM6Ly95b3V0dS5iZS85WHpSTHhad3huRVxuXG5cbuOAkOODgeODo+ODl+OCv+ODvOOAkVxuMDowMCDpn7PmupDkvb/nlKjmmYLjga7okZfkvZzmqKnjg4jjg6njg5bjg6tcbjM6MjIg6JGX5L2c5qip5L615a6z44Gu6Jma5YG95aCx5ZGK44KS44GV44KM44KL44Kx44O844K5XG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ5YWs5byPTElOReOAkVxuaHR0cHM6Ly9wZXJhaWNoaS5jb20vbGFuZGluZ19wYWdlcy92aWV3L3Nha2FpbGluZVxu5YWo5Zu944Gn44GuWW91VHViZXLjgqrjg5XkvJrjg7vjg5Pjgrjjg43jgrnlkJHjgZHnm7joq4fkvJrjgarjganjgIHjg6zjg5njg6vjgqLjg4Pjg5fmg4XloLHjgpLlhYjooYzphY3kv6HjgZfjgabjgYTjgb7jgZlcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJDntYzllrbogIXlkJHjgZHjgqrjg7Pjg6njgqTjg7PjgrXjg63jg7PjgJFcbmh0dHBzOi8vY29tbXVuaXR5LmNhbXAtZmlyZS5qcC9wcm9qZWN0cy92aWV3LzI1MTY2Nlxu5YWo5Zu944Gu5aSa5b2p44Gq5qWt56iu44Gu44OT44K444ON44K5WW91VHViZXLjgYzlj4LliqDjgILphZLkupXjga7jg47jgqbjg4/jgqbjg7vlrp/ot7Xjg4fjg7zjgr/jga/jgZPjgZPjgavlhbHmnInjgZfjgabjgYTjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkFNOU+OAkVxuRmFjZWJvb2tcbmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS95b3NoaXRhZGEuc2FrYWlcblxuVHdpdHRlclxuaHR0cHM6Ly90d2l0dGVyLmNvbS95b3NoaXRhZGFzYWthaVxuXG7msJfou73jgavjg5Xjgqnjg63jg7zjgY/jgaDjgZXjgYTjgIDigLtGQuOBr+S4gOiogOODoeODg+OCu+ODvOOCuOOBhOOBn+OBoOOBkeOCi+OBqOWKqeOBi+OCiuOBvuOBmVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKWvOOCs+ODgeODqeOCguOBnOOBsuOBlOimp+OBj+OBoOOBleOBhOKWvFxuXG7ikaBZb3VUdWJl77yG5YuV55S744Gu5Yid5b+D6ICF44Gr6KaL44Gm44G744GX44GE44Kq44K544K544Oh5YuV55S7XG7ikaHli5XnlLvjgafkvb/nlKjjgZfjgabjgYTjgovmkq7lvbHlmajmnZBcbuKRouaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOmFkuS6leelpeato1xu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoCBZb3VUdWJl5Yid5b+D6ICF44Gr44Kq44K544K544Oh5YuV55S744G+44Go44KB44G+44GX44Gf77yBXG5cbuOAkEx2LjHjgJExMOacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9xVklMS2EtaHhvLS1tWEZ5bVVITW5VXG5cbuOAkEx2LjLjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BvS2hMNnk4Q19WWkVRR2NySEUzMVJcblxu44CQTHYuM+OAkTbmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcnZFWnRjM0hWV0JBSHQ4SFpybHRzZlxuXG7jgJAxMDDkurrli5XnlLvjgqLjg4njg5DjgqTjgrnjgJFcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcGtGbXN0VnFPUVM5U2ZnRjViTV9ENlxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoemFkuS6leOBruS9v+eUqOWZqOadkO+8iOOCouODnuOCvuODs+OCouOCveOCt+OCqOOCpOODiOODl+ODreOCsOODqeODoOOCkuWIqeeUqO+8iVxuXG7jgJDjgqvjg6Hjg6njgJFQYW5hc29uaWMgR0g1XG5odHRwczovL2Ftem4udG8vMzRORjdpR1xuXG7jgJDmiYvpoIPjg6zjg7PjgrrjgJEgU1VNTUlMVVggMTVtbS9GMS43XG5odHRwczovL2Ftem4udG8vMlU3bGR3UFxuXG7jgJDph43lrp3jg6zjg7PjgrrjgJFTVU1NSUxVWCAxMm1tL0YxLjRcbmh0dHBzOi8vYW16bi50by8yd1d2elc0XG5cbuOAkOOCs+ODs+ODh+OCuOOAkVBhbmFzb25pYyBETUMtTFg5LUtcbmh0dHA6Ly9hbXpuLnRvLzJGN1ViT25cbuKAu+OCueODnuODm+OBi+OCieOCueODhuODg+ODl+OCouODg+ODl+OBq+S+oeagvOODu+aAp+iDveODu+eUu+izqlxuXG7jgJDkuInohJrjgJFNYW5mcm90dG8g5LiJ6ISa44Ki44Or44OfNeautSDjg5bjg6njg4Pjgq9cbmh0dHA6Ly9hbXpuLnRvLzJGSk94UERcblxu44CQ54Wn5piO44CRWW9uZ251byBMRUTjg6njgqTjg4ggNjAw55CD44GuTEVE44KS5pCt6LyJXG5odHRwOi8vYW16bi50by8ySFZpdzdRXG5cbuOAkOWls+aAp+WQkeOBkeODqeOCpOODiOOAkeODquODs+OCsOODqeOCpOODiCBGT1NJVEFOIOWkluW+hDM2Y20vMTTjgqTjg7Pjg4Fcbmh0dHBzOi8vYW16bi50by8yVmxiRXRrXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7wg6YWS5LqV56Wl5q2jXG5cbuKYheODl+ODreODleOCo+ODvOODq1xuMTk4MOW5tOeUn+OBvuOCjOOAgOemj+S6leecjOWHuui6q+OAgDM55q2zXG7mmKDlg4/liLbkvZzmrbQgMTflubTjgIA4MOalreeorjEwMDAw5pys5Lul5LiK5Yi25L2cXG5cbjIw5q2z44GL44KJ5p2x5Lqs44KS5Lit5b+D44Gr44OV44Oq44O85pig5YOP44OH44Kj44Os44Kv44K/44O844Go44GX44Gm5rS75YuV44CCXG4yNuats+OBi+OCieOBr+emj+S6leecjOOBq+OBguOCi+OCseODvOODluODq+ODhuODrOODk+OBq+aJgOWxnuOAguOCq+ODoeODqeODnuODs+OAgeODquODneODvOOCv+ODvOOAgeiomOiAheOAgeaYoOWDj+e3qOmbhuOBquOBqeeVque1hOWItuS9nCDmpa3li5nlhajoiKzjgpLmi4XlvZPjgIJcbjM05q2z44GL44KJ44Gv5Lit5bCP5LyB5qWt44KS5a++6LGh44GrIFlvdVR1YmXlsILploAg5pig5YOP6KO95L2c44Gu44G744GL44CB5YuV55S744K744Of44OK44O844KE5LyB5qWt44GuWW91VHViZeODgeODo+ODs+ODjeODq+ani+evieOCkuOCteODneODvOODiOOAglxuXG7pm4blrqLli5XnlLvjgaXjgY/jgorjgavlv4XopoHjgaog5LyB55S744O75pKu5b2x44O757eo6ZuG44O755m65L+h44O75qmf5p2Q44O76Kmx44GX5pa544KS44OI44O844K/44Or44Gn5pWZ44GI44KJ44KM44KL5Zu95YaF5ZSv5LiA44Gu5pig5YOP44OH44Kj44Os44Kv44K/44O8XG4yMDE55bm0NeaciOOBi+OCieaXpeacrOOBpzPkurrnm67jga5Zb3VUdWJl5YWs5byP44OT44OH44Kq44Kz44Oz44OI44Oq44OT44Ol44O844K/44O844Go44GX44Gm5rS75YuV5LitXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xu4piF5LyB5qWt5ZCR44GR5YuV55S744Oe44O844Kx44OG44Kj44Oz44Kw5bCO5YWl55u46KuHXG5odHRwczovL2dvbGRlbi1tb25rZXkudHYvY29udGFjdC5odG1sXG7igLvkuovmpa3nm7joq4fku6XlpJbjga7llY/lkIjjgZvjgavjga/lr77lv5zjgYTjgZ/jgZfjgYvjga3jgb7jgZnjga7jgafjgZTkuobmib/jgY/jgaDjgZXjgYRcbuS4gOiIrOeahOOBquizquWVj+OBr1lvdVR1YmXjgavjgrPjg6Hjg7Pjg4jjgY/jgaDjgZXjgYRcblxuXG4j44G/44KT44Gq44GM5aSW5Ye644KS5b+Y44KM44KL44GP44KJ44GE6Imv44GE5YuV55S744KS5L2c44KN44GGIiwKICAgICAgICAidGh1bWJuYWlscyI6IHsKICAgICAgICAgICJkZWZhdWx0IjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvWElvR3EzOWFiTWsvZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiA5MAogICAgICAgICAgfSwKICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9YSW9HcTM5YWJNay9tcWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMzIwLAogICAgICAgICAgICAiaGVpZ2h0IjogMTgwCiAgICAgICAgICB9LAogICAgICAgICAgImhpZ2giOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9YSW9HcTM5YWJNay9ocWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNDgwLAogICAgICAgICAgICAiaGVpZ2h0IjogMzYwCiAgICAgICAgICB9LAogICAgICAgICAgInN0YW5kYXJkIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvWElvR3EzOWFiTWsvc2RkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDY0MCwKICAgICAgICAgICAgImhlaWdodCI6IDQ4MAogICAgICAgICAgfSwKICAgICAgICAgICJtYXhyZXMiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9YSW9HcTM5YWJNay9tYXhyZXNkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDEyODAsCiAgICAgICAgICAgICJoZWlnaHQiOiA3MjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjaGFubmVsVGl0bGUiOiAiVGVhbVlvdVR1YmUgW0hlbHBdIiwKICAgICAgICAicGxheWxpc3RJZCI6ICJQTDloVzF1UzZIVWZ0TGRISTZSSXNhZi1pWFRtMDlxbkVyIiwKICAgICAgICAicG9zaXRpb24iOiA0LAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICJYSW9HcTM5YWJNayIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJraW5kIjogInlvdXR1YmUjcGxheWxpc3RJdGVtIiwKICAgICAgImV0YWciOiAia3lMNXExS1BVSUZ1Vm9zOGNrRXpEYk1GTzU4IiwKICAgICAgImlkIjogIlVFdzVhRmN4ZFZNMlNGVm1kRXhrU0VrMlVrbHpZV1l0YVZoVWJUQTVjVzVGY2k1RU1FRXdSVVk1TTBSRFJUVTNOREpDIiwKICAgICAgInNuaXBwZXQiOiB7CiAgICAgICAgInB1Ymxpc2hlZEF0IjogIjIwMjAtMDYtMDJUMTM6NDA6NDBaIiwKICAgICAgICAiY2hhbm5lbElkIjogIlVDTURReG03Y1V4M3lYa2ZlSGE1ekpJUSIsCiAgICAgICAgInRpdGxlIjogIuOAkOWujOWFqOino+iqrOOAkeiRl+S9nOaoqeS+teWus+OBp+WLleeUu+OBjOW8t+WItuWJiumZpOOBleOCjOOBn+OCieW/heOBmuOChOOCi+OBueOBjeOBk+OBqO+8gSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIuWFiOaXpeOAgVlvdVR1YmVy44GL44KJ44CM5YuV55S75YmK6Zmk44CN44Gu44Oh44O844Or44GM5bGK44GN44G+44GX44GfXG7jganjgYbjgoTjgok05bm05YmN44Gr44Ki44OD44OX44GX44Gf5a2Q5L6b44Gr57W15pys44KS6Kqt44G/6IGe44GL44Gb44Gm44GE44KL5YuV55S744GM6JGX5L2c5qip5L615a6z44Gr6Kmy5b2T44GX44Gf44KJ44GX44GP44CB57W15pys5Ye654mI56S+44GL44KJ44Gu55Sz44GX56uL44Gm44Gn5YuV55S744GM5YmK6Zmk44GV44KM44G+44GX44GfXG7ku4rlm57jga/okZfkvZzmqKnkvrXlrrPjgafli5XnlLvjgYzliYrpmaTjgZXjgozjgZ/loLTlkIjjga7op6PmsbrnrZbjgpLjgYrkvJ3jgYjjgZfjgb7jgZlcblxu44CQWW91VHViZeiRl+S9nOaoqeOCu+ODs+OCv+ODvOOAkVxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vaW50bC9qYS9hYm91dC9jb3B5cmlnaHQvI3N1cHBvcnQtYW5kLXRyb3VibGVzaG9vdGluZ1xuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ5YWs5byPTElOReOAkVxuaHR0cHM6Ly9wZXJhaWNoaS5jb20vbGFuZGluZ19wYWdlcy92aWV3L3Nha2FpbGluZVxu5YWo5Zu944Gn44GuWW91VHViZXLjgqrjg5XkvJrjg7vjg5Pjgrjjg43jgrnlkJHjgZHnm7joq4fkvJrjgarjganjgIHjg6zjg5njg6vjgqLjg4Pjg5fmg4XloLHjgpLlhYjooYzphY3kv6HjgZfjgabjgYTjgb7jgZlcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJDntYzllrbogIXlkJHjgZHjgqrjg7Pjg6njgqTjg7PjgrXjg63jg7PjgJFcbmh0dHBzOi8vY29tbXVuaXR5LmNhbXAtZmlyZS5qcC9wcm9qZWN0cy92aWV3LzI1MTY2Nlxu5YWo5Zu944Gu5aSa5b2p44Gq5qWt56iu44Gu44OT44K444ON44K5WW91VHViZXLjgYzlj4LliqDjgILphZLkupXjga7jg47jgqbjg4/jgqbjg7vlrp/ot7Xjg4fjg7zjgr/jga/jgZPjgZPjgavlhbHmnInjgZfjgabjgYTjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkFNOU+OAkVxuRmFjZWJvb2tcbmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS95b3NoaXRhZGEuc2FrYWlcblxuVHdpdHRlclxuaHR0cHM6Ly90d2l0dGVyLmNvbS95b3NoaXRhZGFzYWthaVxuXG7msJfou73jgavjg5Xjgqnjg63jg7zjgY/jgaDjgZXjgYTjgIDigLtGQuOBr+S4gOiogOODoeODg+OCu+ODvOOCuOOBhOOBn+OBoOOBkeOCi+OBqOWKqeOBi+OCiuOBvuOBmVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKWvOOCs+ODgeODqeOCguOBnOOBsuOBlOimp+OBj+OBoOOBleOBhOKWvFxuXG7ikaBZb3VUdWJl77yG5YuV55S744Gu5Yid5b+D6ICF44Gr6KaL44Gm44G744GX44GE44Kq44K544K544Oh5YuV55S7XG7ikaHli5XnlLvjgafkvb/nlKjjgZfjgabjgYTjgovmkq7lvbHlmajmnZBcbuKRouaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOmFkuS6leelpeato1xu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoCBZb3VUdWJl5Yid5b+D6ICF44Gr44Kq44K544K544Oh5YuV55S744G+44Go44KB44G+44GX44Gf77yBXG5cbuOAkEx2LjHjgJExMOacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9xVklMS2EtaHhvLS1tWEZ5bVVITW5VXG5cbuOAkEx2LjLjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BvS2hMNnk4Q19WWkVRR2NySEUzMVJcblxu44CQTHYuM+OAkTbmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcnZFWnRjM0hWV0JBSHQ4SFpybHRzZlxuXG7jgJAxMDDkurrli5XnlLvjgqLjg4njg5DjgqTjgrnjgJFcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcGtGbXN0VnFPUVM5U2ZnRjViTV9ENlxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoemFkuS6leOBruS9v+eUqOWZqOadkO+8iOOCouODnuOCvuODs+OCouOCveOCt+OCqOOCpOODiOODl+ODreOCsOODqeODoOOCkuWIqeeUqO+8iVxuXG7jgJDjgqvjg6Hjg6njgJFQYW5hc29uaWMgR0g1XG5odHRwczovL2Ftem4udG8vMzRORjdpR1xuXG7jgJDmiYvpoIPjg6zjg7PjgrrjgJEgU1VNTUlMVVggMTVtbS9GMS43XG5odHRwczovL2Ftem4udG8vMlU3bGR3UFxuXG7jgJDph43lrp3jg6zjg7PjgrrjgJFTVU1NSUxVWCAxMm1tL0YxLjRcbmh0dHBzOi8vYW16bi50by8yd1d2elc0XG5cbuOAkOOCs+ODs+ODh+OCuOOAkVBhbmFzb25pYyBETUMtTFg5LUtcbmh0dHA6Ly9hbXpuLnRvLzJGN1ViT25cbuKAu+OCueODnuODm+OBi+OCieOCueODhuODg+ODl+OCouODg+ODl+OBq+S+oeagvOODu+aAp+iDveODu+eUu+izqlxuXG7jgJDkuInohJrjgJFNYW5mcm90dG8g5LiJ6ISa44Ki44Or44OfNeautSDjg5bjg6njg4Pjgq9cbmh0dHA6Ly9hbXpuLnRvLzJGSk94UERcblxu44CQ54Wn5piO44CRWW9uZ251byBMRUTjg6njgqTjg4ggNjAw55CD44GuTEVE44KS5pCt6LyJXG5odHRwOi8vYW16bi50by8ySFZpdzdRXG5cbuOAkOWls+aAp+WQkeOBkeODqeOCpOODiOOAkeODquODs+OCsOODqeOCpOODiCBGT1NJVEFOIOWkluW+hDM2Y20vMTTjgqTjg7Pjg4Fcbmh0dHBzOi8vYW16bi50by8yVmxiRXRrXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7wg6YWS5LqV56Wl5q2jXG5cbuKYheODl+ODreODleOCo+ODvOODq1xuMTk4MOW5tOeUn+OBvuOCjOOAgOemj+S6leecjOWHuui6q+OAgDM55q2zXG7mmKDlg4/liLbkvZzmrbQgMTflubTjgIA4MOalreeorjEwMDAw5pys5Lul5LiK5Yi25L2cXG5cbjIw5q2z44GL44KJ5p2x5Lqs44KS5Lit5b+D44Gr44OV44Oq44O85pig5YOP44OH44Kj44Os44Kv44K/44O844Go44GX44Gm5rS75YuV44CCXG4yNuats+OBi+OCieOBr+emj+S6leecjOOBq+OBguOCi+OCseODvOODluODq+ODhuODrOODk+OBq+aJgOWxnuOAguOCq+ODoeODqeODnuODs+OAgeODquODneODvOOCv+ODvOOAgeiomOiAheOAgeaYoOWDj+e3qOmbhuOBquOBqeeVque1hOWItuS9nCDmpa3li5nlhajoiKzjgpLmi4XlvZPjgIJcbjM05q2z44GL44KJ44Gv5Lit5bCP5LyB5qWt44KS5a++6LGh44GrIFlvdVR1YmXlsILploAg5pig5YOP6KO95L2c44Gu44G744GL44CB5YuV55S744K744Of44OK44O844KE5LyB5qWt44GuWW91VHViZeODgeODo+ODs+ODjeODq+ani+evieOCkuOCteODneODvOODiOOAglxuXG7pm4blrqLli5XnlLvjgaXjgY/jgorjgavlv4XopoHjgaog5LyB55S744O75pKu5b2x44O757eo6ZuG44O755m65L+h44O75qmf5p2Q44O76Kmx44GX5pa544KS44OI44O844K/44Or44Gn5pWZ44GI44KJ44KM44KL5Zu95YaF5ZSv5LiA44Gu5pig5YOP44OH44Kj44Os44Kv44K/44O8XG4yMDE55bm0NeaciOOBi+OCieaXpeacrOOBpzPkurrnm67jga5Zb3VUdWJl5YWs5byP44OT44OH44Kq44Kz44Oz44OI44Oq44OT44Ol44O844K/44O844Go44GX44Gm5rS75YuV5LitXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xu4piF5LyB5qWt5ZCR44GR5YuV55S744Oe44O844Kx44OG44Kj44Oz44Kw5bCO5YWl55u46KuHXG5odHRwczovL2dvbGRlbi1tb25rZXkudHYvY29udGFjdC5odG1sXG7igLvkuovmpa3nm7joq4fku6XlpJbjga7llY/lkIjjgZvjgavjga/lr77lv5zjgYTjgZ/jgZfjgYvjga3jgb7jgZnjga7jgafjgZTkuobmib/jgY/jgaDjgZXjgYRcbuS4gOiIrOeahOOBquizquWVj+OBr1lvdVR1YmXjgavjgrPjg6Hjg7Pjg4jjgY/jgaDjgZXjgYRcblxuXG4j44G/44KT44Gq44GM5aSW5Ye644KS5b+Y44KM44KL44GP44KJ44GE6Imv44GE5YuV55S744KS5L2c44KN44GGIiwKICAgICAgICAidGh1bWJuYWlscyI6IHsKICAgICAgICAgICJkZWZhdWx0IjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvbGF1MTRsaFpwb1UvZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiA5MAogICAgICAgICAgfSwKICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9sYXUxNGxoWnBvVS9tcWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMzIwLAogICAgICAgICAgICAiaGVpZ2h0IjogMTgwCiAgICAgICAgICB9LAogICAgICAgICAgImhpZ2giOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9sYXUxNGxoWnBvVS9ocWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNDgwLAogICAgICAgICAgICAiaGVpZ2h0IjogMzYwCiAgICAgICAgICB9LAogICAgICAgICAgInN0YW5kYXJkIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvbGF1MTRsaFpwb1Uvc2RkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDY0MCwKICAgICAgICAgICAgImhlaWdodCI6IDQ4MAogICAgICAgICAgfSwKICAgICAgICAgICJtYXhyZXMiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9sYXUxNGxoWnBvVS9tYXhyZXNkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDEyODAsCiAgICAgICAgICAgICJoZWlnaHQiOiA3MjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjaGFubmVsVGl0bGUiOiAiVGVhbVlvdVR1YmUgW0hlbHBdIiwKICAgICAgICAicGxheWxpc3RJZCI6ICJQTDloVzF1UzZIVWZ0TGRISTZSSXNhZi1pWFRtMDlxbkVyIiwKICAgICAgICAicG9zaXRpb24iOiA1LAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICJsYXUxNGxoWnBvVSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJraW5kIjogInlvdXR1YmUjcGxheWxpc3RJdGVtIiwKICAgICAgImV0YWciOiAiSkQ2N25vWmtwZ01Lck9QaVdPbjl1SjRUUnIwIiwKICAgICAgImlkIjogIlVFdzVhRmN4ZFZNMlNGVm1kRXhrU0VrMlVrbHpZV1l0YVZoVWJUQTVjVzVGY2k0NU9EUkROVGcwUWpBNE5rRkJOa1F5IiwKICAgICAgInNuaXBwZXQiOiB7CiAgICAgICAgInB1Ymxpc2hlZEF0IjogIjIwMjAtMDYtMDJUMTM6NDI6NThaIiwKICAgICAgICAiY2hhbm5lbElkIjogIlVDTURReG03Y1V4M3lYa2ZlSGE1ekpJUSIsCiAgICAgICAgInRpdGxlIjogIllvdVR1YmXjgqzjgqTjg4njg6njgqTjg7Plr6nmn7vkvZPliLbjgYzlpInmm7TvvIHoqqRCQU7jgZXjgozjgZ/jgonnlbDorbDnlLPjgZfnq4vjgabjgpLjgZfjgojjgYYiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICLjgrPjg63jg4rjgqbjgqPjg6vjgrnjga7mhJ/mn5Pmi6HlpKfjgpLpmLLjgZDjgZ/jgoHjgIFZb3VUdWJl44Gn44KC5b6T5qWt5ZOh44Gu6Kq/5pW044KS6KGM44GE44G+44GX44GfXG7jgZ3jga7lvbHpn7/jgafjgZPjgozjgb7jgadBSeOBqOS6uumWk+OBp+ihjOOBo+OBpuOBhOOBn+OCrOOCpOODieODqeOCpOODs+Wvqeafu+OBq+OBiuOBhOOBpuOAgUFJ44Gu5L2c5qWt6YeP44KS5aKX44KE44GX44G+44GX44GfXG7jgZPjgozjgavjgojjgorjg53jg6rjgrfjg7zpgZXlj43jgZfjgabjgYTjgarjgYTli5XnlLvjgafjgoLliYrpmaTjgZXjgozjgovjgrHjg7zjgrnjgYzlopfliqDjgZnjgovlj6/og73mgKfjgYzjgYLjgorjgb7jgZlcbuOCguOBl+iqpOOBo+OBpuWJiumZpOOBleOCjOOBn+WgtOWQiOOBr+eVsOitsOeUs+OBl+eri+OBpuOCkuihjOOBo+OBpuOBj+OBoOOBleOBhFxu5Lq66ZaT44Gr44KI44KL44OB44Kn44OD44Kv44GM6KGM44KP44KM44G+44GZ77yI5Lq65ZOh6Kq/5pW05Lit44Gu44Gf44KB44OB44Kn44OD44Kv44GM6YGF44KM44KL5aC05ZCI44GM44GC44KK44G+44GZ77yJXG5cbuOAkOaXpeacrOiqnuOAkVlvdVR1YmXlhazlvI/jg5bjg63jgrBcbmh0dHBzOi8veW91dHViZS1qcC5nb29nbGVibG9nLmNvbS8yMDIwLzAzL3lvdXR1YmUuaHRtbFxuXG7jgJDoi7Hoqp7jgJFZb3VUdWJl5YWs5byP44OW44Ot44KwXG5odHRwczovL3lvdXR1YmUtY3JlYXRvcnMuZ29vZ2xlYmxvZy5jb20vMjAyMC8wMy9wcm90ZWN0aW5nLW91ci1leHRlbmRlZC13b3JrZm9yY2UtYW5kLmh0bWxcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkOWFrOW8j0xJTkXjgJFcbmh0dHBzOi8vcGVyYWljaGkuY29tL2xhbmRpbmdfcGFnZXMvdmlldy9zYWthaWxpbmVcbuWFqOWbveOBp+OBrllvdVR1YmVy44Kq44OV5Lya44O744OT44K444ON44K55ZCR44GR55u46KuH5Lya44Gq44Gp44CB44Os44OZ44Or44Ki44OD44OX5oOF5aCx44KS5YWI6KGM6YWN5L+h44GX44Gm44GE44G+44GZXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ57WM5Za26ICF5ZCR44GR44Kq44Oz44Op44Kk44Oz44K144Ot44Oz44CRXG5odHRwczovL2NvbW11bml0eS5jYW1wLWZpcmUuanAvcHJvamVjdHMvdmlldy8yNTE2NjZcbuWFqOWbveOBruWkmuW9qeOBqualreeoruOBruODk+OCuOODjeOCuVlvdVR1YmVy44GM5Y+C5Yqg44CC6YWS5LqV44Gu44OO44Km44OP44Km44O75a6f6Le144OH44O844K/44Gv44GT44GT44Gr5YWx5pyJ44GX44Gm44GE44G+44GZXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJBTTlPjgJFcbkZhY2Vib29rXG5odHRwczovL3d3dy5mYWNlYm9vay5jb20veW9zaGl0YWRhLnNha2FpXG5cblR3aXR0ZXJcbmh0dHBzOi8vdHdpdHRlci5jb20veW9zaGl0YWRhc2FrYWlcblxu5rCX6Lu944Gr44OV44Kp44Ot44O844GP44Gg44GV44GE44CA4oC7RkLjga/kuIDoqIDjg6Hjg4Pjgrvjg7zjgrjjgYTjgZ/jgaDjgZHjgovjgajliqnjgYvjgorjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG7ilrzjgrPjg4Hjg6njgoLjgZzjgbLjgZTopqfjgY/jgaDjgZXjgYTilrxcblxu4pGgWW91VHViZe+8huWLleeUu+OBruWIneW/g+iAheOBq+imi+OBpuOBu+OBl+OBhOOCquOCueOCueODoeWLleeUu1xu4pGh5YuV55S744Gn5L2/55So44GX44Gm44GE44KL5pKu5b2x5Zmo5p2QXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7zphZLkupXnpaXmraNcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaAgWW91VHViZeWIneW/g+iAheOBq+OCquOCueOCueODoeWLleeUu+OBvuOBqOOCgeOBvuOBl+OBn++8gVxuXG7jgJBMdi4x44CRMTDmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcVZJTEthLWh4by0tbVhGeW1VSE1uVVxuXG7jgJBMdi4y44CRNuacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9wb0toTDZ5OENfVlpFUUdjckhFMzFSXG5cbuOAkEx2LjPjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3J2RVp0YzNIVldCQUh0OEhacmx0c2Zcblxu44CQMTAw5Lq65YuV55S744Ki44OJ44OQ44Kk44K544CRXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BrRm1zdFZxT1FTOVNmZ0Y1Yk1fRDZcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaHphZLkupXjga7kvb/nlKjlmajmnZDvvIjjgqLjg57jgr7jg7PjgqLjgr3jgrfjgqjjgqTjg4jjg5fjg63jgrDjg6njg6DjgpLliKnnlKjvvIlcblxu44CQ44Kr44Oh44Op44CRUGFuYXNvbmljIEdINVxuaHR0cHM6Ly9hbXpuLnRvLzM0TkY3aUdcblxu44CQ5omL6aCD44Os44Oz44K644CRIFNVTU1JTFVYIDE1bW0vRjEuN1xuaHR0cHM6Ly9hbXpuLnRvLzJVN2xkd1Bcblxu44CQ6YeN5a6d44Os44Oz44K644CRU1VNTUlMVVggMTJtbS9GMS40XG5odHRwczovL2Ftem4udG8vMndXdnpXNFxuXG7jgJDjgrPjg7Pjg4fjgrjjgJFQYW5hc29uaWMgRE1DLUxYOS1LXG5odHRwOi8vYW16bi50by8yRjdVYk9uXG7igLvjgrnjg57jg5vjgYvjgonjgrnjg4bjg4Pjg5fjgqLjg4Pjg5fjgavkvqHmoLzjg7vmgKfog73jg7vnlLvos6pcblxu44CQ5LiJ6ISa44CRTWFuZnJvdHRvIOS4ieiEmuOCouODq+ODnzXmrrUg44OW44Op44OD44KvXG5odHRwOi8vYW16bi50by8yRkpPeFBEXG5cbuOAkOeFp+aYjuOAkVlvbmdudW8gTEVE44Op44Kk44OIIDYwMOeQg+OBrkxFROOCkuaQrei8iVxuaHR0cDovL2Ftem4udG8vMkhWaXc3UVxuXG7jgJDlpbPmgKflkJHjgZHjg6njgqTjg4jjgJHjg6rjg7PjgrDjg6njgqTjg4ggRk9TSVRBTiDlpJblvoQzNmNtLzE044Kk44Oz44OBXG5odHRwczovL2Ftem4udG8vMlZsYkV0a1xuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGi5pig5YOP44OH44Kj44Os44Kv44K/44O8IOmFkuS6leelpeato1xuXG7imIXjg5fjg63jg5XjgqPjg7zjg6tcbjE5ODDlubTnlJ/jgb7jgozjgIDnpo/kupXnnIzlh7rouqvjgIAzOeats1xu5pig5YOP5Yi25L2c5q20IDE35bm044CAODDmpa3nqK4xMDAwMOacrOS7peS4iuWItuS9nFxuXG4yMOats+OBi+OCieadseS6rOOCkuS4reW/g+OBq+ODleODquODvOaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOOBqOOBl+OBpua0u+WLleOAglxuMjbmrbPjgYvjgonjga/npo/kupXnnIzjgavjgYLjgovjgrHjg7zjg5bjg6vjg4bjg6zjg5PjgavmiYDlsZ7jgILjgqvjg6Hjg6njg57jg7PjgIHjg6rjg53jg7zjgr/jg7zjgIHoqJjogIXjgIHmmKDlg4/nt6jpm4bjgarjgannlarntYTliLbkvZwg5qWt5YuZ5YWo6Iis44KS5ouF5b2T44CCXG4zNOats+OBi+OCieOBr+S4reWwj+S8gealreOCkuWvvuixoeOBqyBZb3VUdWJl5bCC6ZaAIOaYoOWDj+ijveS9nOOBruOBu+OBi+OAgeWLleeUu+OCu+ODn+ODiuODvOOChOS8gealreOBrllvdVR1YmXjg4Hjg6Pjg7Pjg43jg6vmp4vnr4njgpLjgrXjg53jg7zjg4jjgIJcblxu6ZuG5a6i5YuV55S744Gl44GP44KK44Gr5b+F6KaB44GqIOS8geeUu+ODu+aSruW9seODu+e3qOmbhuODu+eZuuS/oeODu+apn+adkOODu+ipseOBl+aWueOCkuODiOODvOOCv+ODq+OBp+aVmeOBiOOCieOCjOOCi+WbveWGheWUr+S4gOOBruaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvFxuMjAxOeW5tDXmnIjjgYvjgonml6XmnKzjgacz5Lq655uu44GuWW91VHViZeWFrOW8j+ODk+ODh+OCquOCs+ODs+ODiOODquODk+ODpeODvOOCv+ODvOOBqOOBl+OBpua0u+WLleS4rVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKYheS8gealreWQkeOBkeWLleeUu+ODnuODvOOCseODhuOCo+ODs+OCsOWwjuWFpeebuOirh1xuaHR0cHM6Ly9nb2xkZW4tbW9ua2V5LnR2L2NvbnRhY3QuaHRtbFxu4oC75LqL5qWt55u46KuH5Lul5aSW44Gu5ZWP5ZCI44Gb44Gr44Gv5a++5b+c44GE44Gf44GX44GL44Gt44G+44GZ44Gu44Gn44GU5LqG5om/44GP44Gg44GV44GEXG7kuIDoiKznmoTjgaros6rllY/jga9Zb3VUdWJl44Gr44Kz44Oh44Oz44OI44GP44Gg44GV44GEXG5cblxuI+OBv+OCk+OBquOBjOWkluWHuuOCkuW/mOOCjOOCi+OBj+OCieOBhOiJr+OBhOWLleeUu+OCkuS9nOOCjeOBhiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0FzcVRBa0xLYjRNL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvQXNxVEFrTEtiNE0vbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvQXNxVEFrTEtiNE0vaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0FzcVRBa0xLYjRNL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4cmVzIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvQXNxVEFrTEtiNE0vbWF4cmVzZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjgwLAogICAgICAgICAgICAiaGVpZ2h0IjogNzIwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhbm5lbFRpdGxlIjogIlRlYW1Zb3VUdWJlIFtIZWxwXSIsCiAgICAgICAgInBsYXlsaXN0SWQiOiAiUEw5aFcxdVM2SFVmdExkSEk2UklzYWYtaVhUbTA5cW5FciIsCiAgICAgICAgInBvc2l0aW9uIjogNiwKICAgICAgICAicmVzb3VyY2VJZCI6IHsKICAgICAgICAgICJraW5kIjogInlvdXR1YmUjdmlkZW8iLAogICAgICAgICAgInZpZGVvSWQiOiAiQXNxVEFrTEtiNE0iCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAia2luZCI6ICJ5b3V0dWJlI3BsYXlsaXN0SXRlbSIsCiAgICAgICJldGFnIjogIjdhVElvcHY2RlBuQXh1d3F4cW9KV0NwSTRDbyIsCiAgICAgICJpZCI6ICJVRXc1YUZjeGRWTTJTRlZtZEV4a1NFazJVa2x6WVdZdGFWaFViVEE1Y1c1RmNpNHpNRGc1TWtRNU1FVkRNRU0xTlRnMiIsCiAgICAgICJzbmlwcGV0IjogewogICAgICAgICJwdWJsaXNoZWRBdCI6ICIyMDIwLTA2LTAyVDEzOjQzOjA3WiIsCiAgICAgICAgImNoYW5uZWxJZCI6ICJVQ01EUXhtN2NVeDN5WGtmZUhhNXpKSVEiLAogICAgICAgICJ0aXRsZSI6ICLliJ3lv4PogIVZb3VUdWJlcuOChOOCiuOBjOOBoeimj+e0hOmBleWPjeOAkOebuOS6kueZu+mMsuODu+ODl+ODrOOCvOODs+ODiOS8geeUu+ODu+OBguOBhOOBleOBpOWRqOOCiuOAkSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIuS7iuWbnuOBr+WIneW/g+iAhVlvdVR1YmVy44GM44KE44KK44GM44Gh44Gq6KaP57SE6YGV5Y+N44KS77yT44Gk57S55LuL44GX44G+44GZXG7jg7vjg4Hjg6Pjg7Pjg43jg6vnm7jkupLnmbvpjLLvvIhzdWI0c3Vi77yJXG7jg7vjg5fjg6zjgrzjg7Pjg4jkvIHnlLvvvIjlv5zli5/mnaHku7bjgavjg4Hjg6Pjg7Pjg43jg6vnmbvpjLLjg7voqZXkvqHjg7vjgrPjg6Hjg7Pjg4jjgYzlkKvjgb7jgozjgabjgYTjgovjgoLjga5cbuODu+OBguOBhOOBleOBpOWRqOOCiu+8iOOCs+ODoeODs+ODiOOCueODkeODoOOBqOWIpOaWreOBleOCjOOCi+WgtOWQiO+8iVxuXG7jganjgozjgoLmsJfou73jgavjgoTjgaPjgabjgZfjgb7jgYTjgZ3jgYbjgarooYzngrrjgafjgZnjgYzjgIFZb3VUdWJl44Gn44Gv44CM44K544OR44Og44CB5qy6556e6KGM54K644CB6KmQ5qy644CN44Gr44GC44Gf44KL44Go44GX44Gm5oKq6LOq44Gq44Om44O844K244O844Gr44Gv44Oa44OK44Or44OG44Kj44GM6Kqy44Gb44KJ44KM44G+44GZXG7jgZPjga7jg5rjg7zjgrjjga7jgqTjg7Pjgrvjg7Pjg4bjgqPjg5bjgrnjg5Hjg6Djg7vjgrPjg6Hjg7Pjg4jjgrnjg5Hjg6DjgavoqbLlvZPjgZfjgb7jgZlcbmh0dHBzOi8vc3VwcG9ydC5nb29nbGUuY29tL3lvdXR1YmUvYW5zd2VyLzI4MDE5NzM/aGw9amFcblxu44GT44Gu6KaP57SE44Gv5Y+O55uK5YyW44Gu5a+p5p+744KE44Ki44Kr44Km44Oz44OI5YGc5q2i44Gq44GpWW91VHViZXLjga7mtLvli5XjgavjgoLlvbHpn7/jgpLlj4rjgbzjgZnlj6/og73mgKfjgYzpq5jjgYTjgafjgZlcbuOBl+OBo+OBi+OCiuOBqOOCrOOCpOODieODqeOCpOODs+ODu+ODneODquOCt+ODvOOCkueiuuiqjeOBl+OBpuOBiuOBjeOBvuOBl+OCh+OBhlxuXG7jgJDjg4Hjg6Pjg5fjgr/jg7zjgJFcbjA6MDAg55u45LqS55m76Yyy44Gv44KC44GG44KE44KB44KI44GGXG40OjA1IOimj+e0hOmBleWPjeOBqOOBquOCi+ODl+ODrOOCvOODs+ODiOS8geeUu+OBruS+i1xuNTowNSDjgYLjgYTjgZXjgaTlkajjgorjga/opo/ntITpgZXlj43jgafjgYLjgorov7fmg5HooYzngrpcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkOWFrOW8j0xJTkXjgJFcbmh0dHBzOi8vcGVyYWljaGkuY29tL2xhbmRpbmdfcGFnZXMvdmlldy9zYWthaWxpbmVcbuWFqOWbveOBp+OBrllvdVR1YmVy44Kq44OV5Lya44O744OT44K444ON44K55ZCR44GR55u46KuH5Lya44Gq44Gp44CB44Os44OZ44Or44Ki44OD44OX5oOF5aCx44KS5YWI6KGM6YWN5L+h44GX44Gm44GE44G+44GZXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ57WM5Za26ICF5ZCR44GR44Kq44Oz44Op44Kk44Oz44K144Ot44Oz44CRXG5odHRwczovL2NvbW11bml0eS5jYW1wLWZpcmUuanAvcHJvamVjdHMvdmlldy8yNTE2NjZcbuWFqOWbveOBruWkmuW9qeOBqualreeoruOBruODk+OCuOODjeOCuVlvdVR1YmVy44GM5Y+C5Yqg44CC6YWS5LqV44Gu44OO44Km44OP44Km44O75a6f6Le144OH44O844K/44Gv44GT44GT44Gr5YWx5pyJ44GX44Gm44GE44G+44GZXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJBTTlPjgJFcbkZhY2Vib29rXG5odHRwczovL3d3dy5mYWNlYm9vay5jb20veW9zaGl0YWRhLnNha2FpXG5cblR3aXR0ZXJcbmh0dHBzOi8vdHdpdHRlci5jb20veW9zaGl0YWRhc2FrYWlcblxu5rCX6Lu944Gr44OV44Kp44Ot44O844GP44Gg44GV44GE44CA4oC7RkLjga/kuIDoqIDjg6Hjg4Pjgrvjg7zjgrjjgYTjgZ/jgaDjgZHjgovjgajliqnjgYvjgorjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG7ilrzjgrPjg4Hjg6njgoLjgZzjgbLjgZTopqfjgY/jgaDjgZXjgYTilrxcblxu4pGgWW91VHViZe+8huWLleeUu+OBruWIneW/g+iAheOBq+imi+OBpuOBu+OBl+OBhOOCquOCueOCueODoeWLleeUu1xu4pGh5YuV55S744Gn5L2/55So44GX44Gm44GE44KL5pKu5b2x5Zmo5p2QXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7zphZLkupXnpaXmraNcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaAgWW91VHViZeWIneW/g+iAheOBq+OCquOCueOCueODoeWLleeUu+OBvuOBqOOCgeOBvuOBl+OBn++8gVxuXG7jgJBMdi4x44CRMTDmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcVZJTEthLWh4by0tbVhGeW1VSE1uVVxuXG7jgJBMdi4y44CRNuacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9wb0toTDZ5OENfVlpFUUdjckhFMzFSXG5cbuOAkEx2LjPjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3J2RVp0YzNIVldCQUh0OEhacmx0c2Zcblxu44CQMTAw5Lq65YuV55S744Ki44OJ44OQ44Kk44K544CRXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BrRm1zdFZxT1FTOVNmZ0Y1Yk1fRDZcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaHphZLkupXjga7kvb/nlKjlmajmnZDvvIjjgqLjg57jgr7jg7PjgqLjgr3jgrfjgqjjgqTjg4jjg5fjg63jgrDjg6njg6DjgpLliKnnlKjvvIlcblxu44CQ44Kr44Oh44Op44CRUGFuYXNvbmljIEdINVxuaHR0cHM6Ly9hbXpuLnRvLzM0TkY3aUdcblxu44CQ5omL6aCD44Os44Oz44K644CRIFNVTU1JTFVYIDE1bW0vRjEuN1xuaHR0cHM6Ly9hbXpuLnRvLzJVN2xkd1Bcblxu44CQ6YeN5a6d44Os44Oz44K644CRU1VNTUlMVVggMTJtbS9GMS40XG5odHRwczovL2Ftem4udG8vMndXdnpXNFxuXG7jgJDjgrPjg7Pjg4fjgrjjgJFQYW5hc29uaWMgRE1DLUxYOS1LXG5odHRwOi8vYW16bi50by8yRjdVYk9uXG7igLvjgrnjg57jg5vjgYvjgonjgrnjg4bjg4Pjg5fjgqLjg4Pjg5fjgavkvqHmoLzjg7vmgKfog73jg7vnlLvos6pcblxu44CQ5LiJ6ISa44CRTWFuZnJvdHRvIOS4ieiEmuOCouODq+ODnzXmrrUg44OW44Op44OD44KvXG5odHRwOi8vYW16bi50by8yRkpPeFBEXG5cbuOAkOeFp+aYjuOAkVlvbmdudW8gTEVE44Op44Kk44OIIDYwMOeQg+OBrkxFROOCkuaQrei8iVxuaHR0cDovL2Ftem4udG8vMkhWaXc3UVxuXG7jgJDlpbPmgKflkJHjgZHjg6njgqTjg4jjgJHjg6rjg7PjgrDjg6njgqTjg4ggRk9TSVRBTiDlpJblvoQzNmNtLzE044Kk44Oz44OBXG5odHRwczovL2Ftem4udG8vMlZsYkV0a1xuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGi5pig5YOP44OH44Kj44Os44Kv44K/44O8IOmFkuS6leelpeato1xuXG7imIXjg5fjg63jg5XjgqPjg7zjg6tcbjE5ODDlubTnlJ/jgb7jgozjgIDnpo/kupXnnIzlh7rouqvjgIAzOeats1xu5pig5YOP5Yi25L2c5q20IDE35bm044CAODDmpa3nqK4xMDAwMOacrOS7peS4iuWItuS9nFxuXG4yMOats+OBi+OCieadseS6rOOCkuS4reW/g+OBq+ODleODquODvOaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOOBqOOBl+OBpua0u+WLleOAglxuMjbmrbPjgYvjgonjga/npo/kupXnnIzjgavjgYLjgovjgrHjg7zjg5bjg6vjg4bjg6zjg5PjgavmiYDlsZ7jgILjgqvjg6Hjg6njg57jg7PjgIHjg6rjg53jg7zjgr/jg7zjgIHoqJjogIXjgIHmmKDlg4/nt6jpm4bjgarjgannlarntYTliLbkvZwg5qWt5YuZ5YWo6Iis44KS5ouF5b2T44CCXG4zNOats+OBi+OCieOBr+S4reWwj+S8gealreOCkuWvvuixoeOBqyBZb3VUdWJl5bCC6ZaAIOaYoOWDj+ijveS9nOOBruOBu+OBi+OAgeWLleeUu+OCu+ODn+ODiuODvOOChOS8gealreOBrllvdVR1YmXjg4Hjg6Pjg7Pjg43jg6vmp4vnr4njgpLjgrXjg53jg7zjg4jjgIJcblxu6ZuG5a6i5YuV55S744Gl44GP44KK44Gr5b+F6KaB44GqIOS8geeUu+ODu+aSruW9seODu+e3qOmbhuODu+eZuuS/oeODu+apn+adkOODu+ipseOBl+aWueOCkuODiOODvOOCv+ODq+OBp+aVmeOBiOOCieOCjOOCi+WbveWGheWUr+S4gOOBruaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvFxuMjAxOeW5tDXmnIjjgYvjgonml6XmnKzjgacz5Lq655uu44GuWW91VHViZeWFrOW8j+ODk+ODh+OCquOCs+ODs+ODiOODquODk+ODpeODvOOCv+ODvOOBqOOBl+OBpua0u+WLleS4rVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKYheS8gealreWQkeOBkeWLleeUu+ODnuODvOOCseODhuOCo+ODs+OCsOWwjuWFpeebuOirh1xuaHR0cHM6Ly9nb2xkZW4tbW9ua2V5LnR2L2NvbnRhY3QuaHRtbFxu4oC75LqL5qWt55u46KuH5Lul5aSW44Gu5ZWP5ZCI44Gb44Gr44Gv5a++5b+c44GE44Gf44GX44GL44Gt44G+44GZ44Gu44Gn44GU5LqG5om/44GP44Gg44GV44GEXG7kuIDoiKznmoTjgaros6rllY/jga9Zb3VUdWJl44Gr44Kz44Oh44Oz44OI44GP44Gg44GV44GEXG5cblxuI+OBv+OCk+OBquOBjOWkluWHuuOCkuW/mOOCjOOCi+OBj+OCieOBhOiJr+OBhOWLleeUu+OCkuS9nOOCjeOBhiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL2VLa3YxQ19PLVFJL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvZUtrdjFDX08tUUkvbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvZUtrdjFDX08tUUkvaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL2VLa3YxQ19PLVFJL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4cmVzIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvZUtrdjFDX08tUUkvbWF4cmVzZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjgwLAogICAgICAgICAgICAiaGVpZ2h0IjogNzIwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhbm5lbFRpdGxlIjogIlRlYW1Zb3VUdWJlIFtIZWxwXSIsCiAgICAgICAgInBsYXlsaXN0SWQiOiAiUEw5aFcxdVM2SFVmdExkSEk2UklzYWYtaVhUbTA5cW5FciIsCiAgICAgICAgInBvc2l0aW9uIjogNywKICAgICAgICAicmVzb3VyY2VJZCI6IHsKICAgICAgICAgICJraW5kIjogInlvdXR1YmUjdmlkZW8iLAogICAgICAgICAgInZpZGVvSWQiOiAiZUtrdjFDX08tUUkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAia2luZCI6ICJ5b3V0dWJlI3BsYXlsaXN0SXRlbSIsCiAgICAgICJldGFnIjogImdxZEFuVU9VNkxERjMxZ3lBSDFnaXkyV0x0MCIsCiAgICAgICJpZCI6ICJVRXc1YUZjeGRWTTJTRlZtZEV4a1NFazJVa2x6WVdZdGFWaFViVEE1Y1c1RmNpNDFNemsyUVRBeE1Ua3pORGs0TURoRiIsCiAgICAgICJzbmlwcGV0IjogewogICAgICAgICJwdWJsaXNoZWRBdCI6ICIyMDIwLTA2LTAyVDEzOjQ0OjA4WiIsCiAgICAgICAgImNoYW5uZWxJZCI6ICJVQ01EUXhtN2NVeDN5WGtmZUhhNXpKSVEiLAogICAgICAgICJ0aXRsZSI6ICJZb3VUdWJl44GM56aB5q2i44GZ44KL5ZWG55So5Yip55So77yI6KaW6IG0VVJM44KS6LKp5aOy44O75pyJ5paZ44K744Of44OK44O844KS6ZmQ5a6a5YWs6ZaL77yJIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAi4oC744GT44Gu5YuV55S744GvMjAxOeW5tDTmnIjjgavmipXnqL/jgZfjgZ/li5XnlLvjgpLlho3nt6jpm4bjgZfjgZ/jgoLjga7jgafjgZlcblxu5LuK5Zue44GvWW91VHViZeOBjOemgeatouOBl+OBpuOBhOOCi++8kuOBpOOBruWVhueUqOWIqeeUqOOBq+OBpOOBhOOBpue0ueS7i+OBl+OBvuOBmVxu44CM44Ki44Kv44K744K55qip44Gu6LKp5aOy44CNXG7jg7vmnInmlpnkvJrlk6Hjgavjga7jgb/li5XnlLvjgpLphY3kv6FcbuODu+imluiBtFVSTOOCkuiyqeWjslxu44O744K744Of44OK44O844KS6ZmQ5a6a5YWs6ZaLXG7jg7vmnInmlpnjgqrjg7Pjg6njgqTjg7PjgrXjg63jg7PlhoXjgafjga7li5XnlLvlhazplotcblxu54m544GrWW91VHViZeOCkuODk+OCuOODjeOCueOBq+WIqeeUqOOBl+OBpuOBhOOCi+OCs+ODs+OCteODq+OCv+ODs+ODiOOAgeOCs+ODvOODgeOAgeOCu+ODqeODlOOCueODiOOAgeOCu+ODn+ODiuODvOism+W4q+OBruaWueOBr+OBpOOBhOOBpOOBhOOChOOBo+OBpuOBl+OBvuOBhOOBjOOBoeOBquOBruOBp+awl+OCkuOBpOOBkeOBpuOBj+OBoOOBleOBhO+8gVxuXG4yMDIw5bm0IOePvuWcqOOBr+ODgeOCp+ODg+OCr+OBjOWOs+OBl+OBj+OBguOCiuOBvuOBm+OCk+OBjOOAgeWkluWHuuOBjOimj+WItuOBleOCjOOBpuOBhOOCi+aYqOS7iuOBrueKtuazgeOBruS4reOAgeOCquODs+ODqeOCpOODs+OCteODvOODk+OCueOCkuOBr+OBmOOCgeOCi+e1jOWWtuiAheOCguWkmuOBhOOBqOaAneOBhOOBvuOBmVxu44Or44O844Or6YGV5Y+N6ICF44GM5aKX44GI44CBWW91VHViZeOBruWIqeeUqOeSsOWig+OBjOaCquOBj+OBquOCi+OBqOimj+e0hOOCguaUueato+OBleOCjOWPluOCiue3oOOBvuOCiuOBjOWni+OBvuOCi+OBk+OBqOOCguWNgeWIhuiAg+OBiOOCieOCjOOBvuOBmVxu44Gd44Gu5aC05ZCI44CB5YuV55S744Gu5YmK6Zmk44CB44OB44Oj44Oz44ON44Or44Gu5YGc5q2i44Gq44Gp5Y6z44GX44GE44Oa44OK44Or44OG44Kj44GM6Kqy44Gb44KJ44KM44KL44GL44KC44GX44KM44G+44Gb44KTXG5cbllvdVR1YmXjga7jg5Pjgrjjg43jgrnmtLvnlKjjgpLogIPjgYjjgabjgYTjgovmlrnjga/lv4XjgZrliKnnlKjopo/ntITjgavnm67jgpLpgJrjgZfjgabmraPjgZfjgY9Zb3VUdWJl44KS5Yip55So44GX44KH44GX44KH44GG77yBXG5cbllvdVR1YmXliKnnlKjopo/ntIRcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3N0YXRpYz90ZW1wbGF0ZT10ZXJtcyZobD1qYSZnbD1KUFxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ5YWs5byPTElOReOAkVxuaHR0cHM6Ly9wZXJhaWNoaS5jb20vbGFuZGluZ19wYWdlcy92aWV3L3Nha2FpbGluZVxu5YWo5Zu944Gn44GuWW91VHViZXLjgqrjg5XkvJrjg7vjg5Pjgrjjg43jgrnlkJHjgZHnm7joq4fkvJrjgarjganjgIHjg6zjg5njg6vjgqLjg4Pjg5fmg4XloLHjgpLlhYjooYzphY3kv6HjgZfjgabjgYTjgb7jgZlcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJDntYzllrbogIXlkJHjgZHjgqrjg7Pjg6njgqTjg7PjgrXjg63jg7PjgJFcbmh0dHBzOi8vY29tbXVuaXR5LmNhbXAtZmlyZS5qcC9wcm9qZWN0cy92aWV3LzI1MTY2Nlxu5YWo5Zu944Gu5aSa5b2p44Gq5qWt56iu44Gu44OT44K444ON44K5WW91VHViZXLjgYzlj4LliqDjgILphZLkupXjga7jg47jgqbjg4/jgqbjg7vlrp/ot7Xjg4fjg7zjgr/jga/jgZPjgZPjgavlhbHmnInjgZfjgabjgYTjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkFNOU+OAkVxuRmFjZWJvb2tcbmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS95b3NoaXRhZGEuc2FrYWlcblxuVHdpdHRlclxuaHR0cHM6Ly90d2l0dGVyLmNvbS95b3NoaXRhZGFzYWthaVxuXG7msJfou73jgavjg5Xjgqnjg63jg7zjgY/jgaDjgZXjgYTjgIDigLtGQuOBr+S4gOiogOODoeODg+OCu+ODvOOCuOOBhOOBn+OBoOOBkeOCi+OBqOWKqeOBi+OCiuOBvuOBmVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cbuKWvOOCs+ODgeODqeOCguOBnOOBsuOBlOimp+OBj+OBoOOBleOBhOKWvFxuXG7ikaBZb3VUdWJl77yG5YuV55S744Gu5Yid5b+D6ICF44Gr6KaL44Gm44G744GX44GE44Kq44K544K544Oh5YuV55S7XG7ikaHli5XnlLvjgafkvb/nlKjjgZfjgabjgYTjgovmkq7lvbHlmajmnZBcbuKRouaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOmFkuS6leelpeato1xu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoCBZb3VUdWJl5Yid5b+D6ICF44Gr44Kq44K544K544Oh5YuV55S744G+44Go44KB44G+44GX44Gf77yBXG5cbuOAkEx2LjHjgJExMOacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9xVklMS2EtaHhvLS1tWEZ5bVVITW5VXG5cbuOAkEx2LjLjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BvS2hMNnk4Q19WWkVRR2NySEUzMVJcblxu44CQTHYuM+OAkTbmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcnZFWnRjM0hWV0JBSHQ4SFpybHRzZlxuXG7jgJAxMDDkurrli5XnlLvjgqLjg4njg5DjgqTjgrnjgJFcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcGtGbXN0VnFPUVM5U2ZnRjViTV9ENlxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRoemFkuS6leOBruS9v+eUqOWZqOadkO+8iOOCouODnuOCvuODs+OCouOCveOCt+OCqOOCpOODiOODl+ODreOCsOODqeODoOOCkuWIqeeUqO+8iVxuXG7jgJDjgqvjg6Hjg6njgJFQYW5hc29uaWMgR0g1XG5odHRwczovL2Ftem4udG8vMzRORjdpR1xuXG7jgJDmiYvpoIPjg6zjg7PjgrrjgJEgU1VNTUlMVVggMTVtbS9GMS43XG5odHRwczovL2Ftem4udG8vMlU3bGR3UFxuXG7jgJDph43lrp3jg6zjg7PjgrrjgJFTVU1NSUxVWCAxMm1tL0YxLjRcbmh0dHBzOi8vYW16bi50by8yd1d2elc0XG5cbuOAkOOCs+ODs+ODh+OCuOOAkVBhbmFzb25pYyBETUMtTFg5LUtcbmh0dHA6Ly9hbXpuLnRvLzJGN1ViT25cbuKAu+OCueODnuODm+OBi+OCieOCueODhuODg+ODl+OCouODg+ODl+OBq+S+oeagvOODu+aAp+iDveODu+eUu+izqlxuXG7jgJDkuInohJrjgJFNYW5mcm90dG8g5LiJ6ISa44Ki44Or44OfNeautSDjg5bjg6njg4Pjgq9cbmh0dHA6Ly9hbXpuLnRvLzJGSk94UERcblxu44CQ54Wn5piO44CRWW9uZ251byBMRUTjg6njgqTjg4ggNjAw55CD44GuTEVE44KS5pCt6LyJXG5odHRwOi8vYW16bi50by8ySFZpdzdRXG5cbuOAkOWls+aAp+WQkeOBkeODqeOCpOODiOOAkeODquODs+OCsOODqeOCpOODiCBGT1NJVEFOIOWkluW+hDM2Y20vMTTjgqTjg7Pjg4Fcbmh0dHBzOi8vYW16bi50by8yVmxiRXRrXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7wg6YWS5LqV56Wl5q2jXG5cbuKYheODl+ODreODleOCo+ODvOODq1xuMTk4MOW5tOeUn+OBvuOCjOOAgOemj+S6leecjOWHuui6q+OAgDM55q2zXG7mmKDlg4/liLbkvZzmrbQgMTflubTjgIA4MOalreeorjEwMDAw5pys5Lul5LiK5Yi25L2cXG5cbjIw5q2z44GL44KJ5p2x5Lqs44KS5Lit5b+D44Gr44OV44Oq44O85pig5YOP44OH44Kj44Os44Kv44K/44O844Go44GX44Gm5rS75YuV44CCXG4yNuats+OBi+OCieOBr+emj+S6leecjOOBq+OBguOCi+OCseODvOODluODq+ODhuODrOODk+OBq+aJgOWxnuOAguOCq+ODoeODqeODnuODs+OAgeODquODneODvOOCv+ODvOOAgeiomOiAheOAgeaYoOWDj+e3qOmbhuOBquOBqeeVque1hOWItuS9nCDmpa3li5nlhajoiKzjgpLmi4XlvZPjgIJcbjM05q2z44GL44KJ44Gv5Lit5bCP5LyB5qWt44KS5a++6LGh44GrIFlvdVR1YmXlsILploAg5pig5YOP6KO95L2c44Gu44G744GL44CB5YuV55S744K744Of44OK44O844KE5LyB5qWt44GuWW91VHViZeODgeODo+ODs+ODjeODq+ani+evieOCkuOCteODneODvOODiOOAglxuXG7pm4blrqLli5XnlLvjgaXjgY/jgorjgavlv4XopoHjgaog5LyB55S744O75pKu5b2x44O757eo6ZuG44O755m65L+h44O75qmf5p2Q44O76Kmx44GX5pa544KS44OI44O844K/44Or44Gn5pWZ44GI44KJ44KM44KL5Zu95YaF5ZSv5LiA44Gu5pig5YOP44OH44Kj44Os44Kv44K/44O8XG4yMDE55bm0NeaciOOBi+OCieaXpeacrOOBpzPkurrnm67jga5Zb3VUdWJl5YWs5byP44OT44OH44Kq44Kz44Oz44OI44Oq44OT44Ol44O844K/44O844Go44GX44Gm5rS75YuV5LitXG5cbuKYheS8gealreWQkeOBkeWLleeUu+ODnuODvOOCseODhuOCo+ODs+OCsOWwjuWFpeebuOirh1xuaHR0cHM6Ly9nb2xkZW4tbW9ua2V5LnR2L2NvbnRhY3QuaHRtbFxu4oC75LqL5qWt55u46KuH5Lul5aSW44Gu5ZWP5ZCI44Gb44Gr44Gv5a++5b+c44GE44Gf44GX44GL44Gt44G+44GZ44Gu44Gn44GU5LqG5om/44GP44Gg44GV44GEXG7kuIDoiKznmoTjgaros6rllY/jga9Zb3VUdWJl44Gr44Kz44Oh44Oz44OI44GP44Gg44GV44GEXG5cblxuI+OBv+OCk+OBquOBjOWkluWHuuOCkuW/mOOCjOOCi+OBj+OCieOBhOiJr+OBhOWLleeUu+OCkuS9nOOCjeOBhiIsCiAgICAgICAgInRodW1ibmFpbHMiOiB7CiAgICAgICAgICAiZGVmYXVsdCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0s2ODFJTFNYeVVZL2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTIwLAogICAgICAgICAgICAiaGVpZ2h0IjogOTAKICAgICAgICAgIH0sCiAgICAgICAgICAibWVkaXVtIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvSzY4MUlMU1h5VVkvbXFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDMyMCwKICAgICAgICAgICAgImhlaWdodCI6IDE4MAogICAgICAgICAgfSwKICAgICAgICAgICJoaWdoIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvSzY4MUlMU1h5VVkvaHFkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDQ4MCwKICAgICAgICAgICAgImhlaWdodCI6IDM2MAogICAgICAgICAgfSwKICAgICAgICAgICJzdGFuZGFyZCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0s2ODFJTFNYeVVZL3NkZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA2NDAsCiAgICAgICAgICAgICJoZWlnaHQiOiA0ODAKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4cmVzIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvSzY4MUlMU1h5VVkvbWF4cmVzZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjgwLAogICAgICAgICAgICAiaGVpZ2h0IjogNzIwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhbm5lbFRpdGxlIjogIlRlYW1Zb3VUdWJlIFtIZWxwXSIsCiAgICAgICAgInBsYXlsaXN0SWQiOiAiUEw5aFcxdVM2SFVmdExkSEk2UklzYWYtaVhUbTA5cW5FciIsCiAgICAgICAgInBvc2l0aW9uIjogOCwKICAgICAgICAicmVzb3VyY2VJZCI6IHsKICAgICAgICAgICJraW5kIjogInlvdXR1YmUjdmlkZW8iLAogICAgICAgICAgInZpZGVvSWQiOiAiSzY4MUlMU1h5VVkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAia2luZCI6ICJ5b3V0dWJlI3BsYXlsaXN0SXRlbSIsCiAgICAgICJldGFnIjogInNULWtlU3F5Tzc1Ri1kSGVnVExmV2U1SXZXQSIsCiAgICAgICJpZCI6ICJVRXc1YUZjeGRWTTJTRlZtZEV4a1NFazJVa2x6WVdZdGFWaFViVEE1Y1c1RmNpNUVRVUUxTlRGRFJqY3dNRGcwTkVNeiIsCiAgICAgICJzbmlwcGV0IjogewogICAgICAgICJwdWJsaXNoZWRBdCI6ICIyMDIwLTA5LTE2VDExOjAxOjIyWiIsCiAgICAgICAgImNoYW5uZWxJZCI6ICJVQ01EUXhtN2NVeDN5WGtmZUhhNXpKSVEiLAogICAgICAgICJ0aXRsZSI6ICJZb3VUdWJlcijnp4Ep44GM6JGX5L2c5qip5L615a6z44Gr44Gq44KJ44Gq44GE44Gf44KB44Gr5rOo5oSP44GX44Gm44GE44KLMuOBpOOBruODneOCpOODs+ODiCIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJDlhazlvI9MSU5F44CRXG5odHRwczovL3BlcmFpY2hpLmNvbS9sYW5kaW5nX3BhZ2VzL3ZpZXcvc2FrYWlsaW5lXG7lhajlm73jgafjga5Zb3VUdWJlcuOCquODleS8muODu+ODk+OCuOODjeOCueWQkeOBkeebuOirh+S8muOBquOBqeOAgeODrOODmeODq+OCouODg+ODl+aDheWgseOCkuWFiOihjOmFjeS/oeOBl+OBpuOBhOOBvuOBmVxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkOe1jOWWtuiAheWQkeOBkeOCquODs+ODqeOCpOODs+OCteODreODs+OAkVxuaHR0cHM6Ly9jb21tdW5pdHkuY2FtcC1maXJlLmpwL3Byb2plY3RzL3ZpZXcvMjUxNjY2XG7lhajlm73jga7lpJrlvanjgarmpa3nqK7jga7jg5Pjgrjjg43jgrlZb3VUdWJlcuOBjOWPguWKoOOAgumFkuS6leOBruODjuOCpuODj+OCpuODu+Wun+i3teODh+ODvOOCv+OBr+OBk+OBk+OBq+WFseacieOBl+OBpuOBhOOBvuOBmVxuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQU05T44CRXG5GYWNlYm9va1xuaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3lvc2hpdGFkYS5zYWthaVxuXG5Ud2l0dGVyXG5odHRwczovL3R3aXR0ZXIuY29tL3lvc2hpdGFkYXNha2FpXG5cbuawl+i7veOBq+ODleOCqeODreODvOOBj+OBoOOBleOBhOOAgOKAu0ZC44Gv5LiA6KiA44Oh44OD44K744O844K444GE44Gf44Gg44GR44KL44Go5Yqp44GL44KK44G+44GZXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xu4pa844Kz44OB44Op44KC44Gc44Gy44GU6Kan44GP44Gg44GV44GE4pa8XG5cbuKRoFlvdVR1YmXvvIbli5XnlLvjga7liJ3lv4PogIXjgavopovjgabjgbvjgZfjgYTjgqrjgrnjgrnjg6Hli5XnlLtcbuKRoeWLleeUu+OBp+S9v+eUqOOBl+OBpuOBhOOCi+aSruW9seWZqOadkFxu4pGi5pig5YOP44OH44Kj44Os44Kv44K/44O86YWS5LqV56Wl5q2jXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGgIFlvdVR1YmXliJ3lv4PogIXjgavjgqrjgrnjgrnjg6Hli5XnlLvjgb7jgajjgoHjgb7jgZfjgZ/vvIFcblxu44CQTHYuMeOAkTEw5pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3FWSUxLYS1oeG8tLW1YRnltVUhNblVcblxu44CQTHYuMuOAkTbmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcG9LaEw2eThDX1ZaRVFHY3JIRTMxUlxuXG7jgJBMdi4z44CRNuacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9ydkVadGMzSFZXQkFIdDhIWnJsdHNmXG5cbuOAkDEwMOS6uuWLleeUu+OCouODieODkOOCpOOCueOAkVxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9wa0Ztc3RWcU9RUzlTZmdGNWJNX0Q2XG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGh6YWS5LqV44Gu5L2/55So5Zmo5p2Q77yI44Ki44Oe44K+44Oz44Ki44K944K344Ko44Kk44OI44OX44Ot44Kw44Op44Og44KS5Yip55So77yJXG5cbuOAkOOCq+ODoeODqeOAkVBhbmFzb25pYyBHSDVcbmh0dHBzOi8vYW16bi50by8zNE5GN2lHXG5cbuOAkOaJi+mgg+ODrOODs+OCuuOAkSBTVU1NSUxVWCAxNW1tL0YxLjdcbmh0dHBzOi8vYW16bi50by8yVTdsZHdQXG5cbuOAkOmHjeWuneODrOODs+OCuuOAkVNVTU1JTFVYIDEybW0vRjEuNFxuaHR0cHM6Ly9hbXpuLnRvLzJ3V3Z6VzRcblxu44CQ44Kz44Oz44OH44K444CRUGFuYXNvbmljIERNQy1MWDktS1xuaHR0cDovL2Ftem4udG8vMkY3VWJPblxu4oC744K544Oe44Ob44GL44KJ44K544OG44OD44OX44Ki44OD44OX44Gr5L6h5qC844O75oCn6IO944O755S76LOqXG5cbuOAkOS4ieiEmuOAkU1hbmZyb3R0byDkuInohJrjgqLjg6vjg5815q61IOODluODqeODg+OCr1xuaHR0cDovL2Ftem4udG8vMkZKT3hQRFxuXG7jgJDnhafmmI7jgJFZb25nbnVvIExFROODqeOCpOODiCA2MDDnkIPjga5MRUTjgpLmkK3ovIlcbmh0dHA6Ly9hbXpuLnRvLzJIVml3N1Fcblxu44CQ5aWz5oCn5ZCR44GR44Op44Kk44OI44CR44Oq44Oz44Kw44Op44Kk44OIIEZPU0lUQU4g5aSW5b6EMzZjbS8xNOOCpOODs+ODgVxuaHR0cHM6Ly9hbXpuLnRvLzJWbGJFdGtcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuKRouaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvCDphZLkupXnpaXmraNcblxu4piF44OX44Ot44OV44Kj44O844OrXG4xOTgw5bm055Sf44G+44KM44CA56aP5LqV55yM5Ye66Lqr44CAMznmrbNcbuaYoOWDj+WItuS9nOattCAxN+W5tOOAgDgw5qWt56iuMTAwMDDmnKzku6XkuIrliLbkvZxcblxuMjDmrbPjgYvjgonmnbHkuqzjgpLkuK3lv4Pjgavjg5Xjg6rjg7zmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7zjgajjgZfjgabmtLvli5XjgIJcbjI25q2z44GL44KJ44Gv56aP5LqV55yM44Gr44GC44KL44Kx44O844OW44Or44OG44Os44OT44Gr5omA5bGe44CC44Kr44Oh44Op44Oe44Oz44CB44Oq44Od44O844K/44O844CB6KiY6ICF44CB5pig5YOP57eo6ZuG44Gq44Gp55Wq57WE5Yi25L2cIOalreWLmeWFqOiIrOOCkuaLheW9k+OAglxuMzTmrbPjgYvjgonjga/kuK3lsI/kvIHmpa3jgpLlr77osaHjgasgWW91VHViZeWwgumWgCDmmKDlg4/oo73kvZzjga7jgbvjgYvjgIHli5XnlLvjgrvjg5/jg4rjg7zjgoTkvIHmpa3jga5Zb3VUdWJl44OB44Oj44Oz44ON44Or5qeL56+J44KS44K144Od44O844OI44CCXG5cbumbhuWuouWLleeUu+OBpeOBj+OCiuOBq+W/heimgeOBqiDkvIHnlLvjg7vmkq7lvbHjg7vnt6jpm4bjg7vnmbrkv6Hjg7vmqZ/mnZDjg7voqbHjgZfmlrnjgpLjg4jjg7zjgr/jg6vjgafmlZnjgYjjgonjgozjgovlm73lhoXllK/kuIDjga7mmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7xcbjIwMTnlubQ15pyI44GL44KJ5pel5pys44GnM+S6uuebruOBrllvdVR1YmXlhazlvI/jg5Pjg4fjgqrjgrPjg7Pjg4jjg6rjg5Pjg6Xjg7zjgr/jg7zjgajjgZfjgabmtLvli5XkuK1cblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG7imIXkvIHmpa3lkJHjgZHli5XnlLvjg57jg7zjgrHjg4bjgqPjg7PjgrDlsI7lhaXnm7joq4dcbmh0dHBzOi8vZ29sZGVuLW1vbmtleS50di9jb250YWN0Lmh0bWxcbuKAu+S6i+alreebuOirh+S7peWkluOBruWVj+WQiOOBm+OBq+OBr+WvvuW/nOOBhOOBn+OBl+OBi+OBreOBvuOBmeOBruOBp+OBlOS6huaJv+OBj+OBoOOBleOBhFxu5LiA6Iis55qE44Gq6LOq5ZWP44GvWW91VHViZeOBq+OCs+ODoeODs+ODiOOBj+OBoOOBleOBhFxuXG5cbiPjgb/jgpPjgarjgYzlpJblh7rjgpLlv5jjgozjgovjgY/jgonjgYToia/jgYTli5XnlLvjgpLkvZzjgo3jgYYiLAogICAgICAgICJ0aHVtYm5haWxzIjogewogICAgICAgICAgImRlZmF1bHQiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9tVGROaTlNcWl1OC9kZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDEyMCwKICAgICAgICAgICAgImhlaWdodCI6IDkwCiAgICAgICAgICB9LAogICAgICAgICAgIm1lZGl1bSI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL21UZE5pOU1xaXU4L21xZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAzMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiAxODAKICAgICAgICAgIH0sCiAgICAgICAgICAiaGlnaCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL21UZE5pOU1xaXU4L2hxZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA0ODAsCiAgICAgICAgICAgICJoZWlnaHQiOiAzNjAKICAgICAgICAgIH0sCiAgICAgICAgICAic3RhbmRhcmQiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9tVGROaTlNcWl1OC9zZGRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNjQwLAogICAgICAgICAgICAiaGVpZ2h0IjogNDgwCiAgICAgICAgICB9LAogICAgICAgICAgIm1heHJlcyI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL21UZE5pOU1xaXU4L21heHJlc2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTI4MCwKICAgICAgICAgICAgImhlaWdodCI6IDcyMAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNoYW5uZWxUaXRsZSI6ICJUZWFtWW91VHViZSBbSGVscF0iLAogICAgICAgICJwbGF5bGlzdElkIjogIlBMOWhXMXVTNkhVZnRMZEhJNlJJc2FmLWlYVG0wOXFuRXIiLAogICAgICAgICJwb3NpdGlvbiI6IDksCiAgICAgICAgInJlc291cmNlSWQiOiB7CiAgICAgICAgICAia2luZCI6ICJ5b3V0dWJlI3ZpZGVvIiwKICAgICAgICAgICJ2aWRlb0lkIjogIm1UZE5pOU1xaXU4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImtpbmQiOiAieW91dHViZSNwbGF5bGlzdEl0ZW0iLAogICAgICAiZXRhZyI6ICJfY0pWNGk5SmM2d0tUYUVKYk9HVUxOUHFvYkEiLAogICAgICAiaWQiOiAiVUV3NWFGY3hkVk0yU0ZWbWRFeGtTRWsyVWtsellXWXRhVmhVYlRBNWNXNUZjaTQxUVRZMVEwVXhNVFZDT0Rjek5UaEUiLAogICAgICAic25pcHBldCI6IHsKICAgICAgICAicHVibGlzaGVkQXQiOiAiMjAyMC0wOS0xNlQxMToxMTozMloiLAogICAgICAgICJjaGFubmVsSWQiOiAiVUNNRFF4bTdjVXgzeVhrZmVIYTV6SklRIiwKICAgICAgICAidGl0bGUiOiAi44CQ6YGV5Y+N44CR44OB44Oj44Oz44ON44Or55m76Yyy6ICF44KS6LO85YWl44GZ44KL44Go5pyA5oKq44Gq5LqL5oWL44GM5b6F44Gj44Gm44GE44KLIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAi5LuK5Zue44GvWW91VHViZeOBruimj+e0hOmBleWPjeOBqOOBleOCjOOBpuOBhOOCi+ODgeODo+ODs+ODjeODq+eZu+mMsuiAheODu+imluiBtOWbnuaVsOOCkuizvOWFpeOBl+OBn+OBk+OBqOOBp+OBqeOCk+OBquOBk+OBqOOBjOi1t+OBk+OCi+OBruOBi+OCkuOBiuS8neOBiOOBl+OBvuOBmVxuXG4wOjAw44CA44OB44Oj44Oz44ON44Or55m76Yyy6ICF44O76KaW6IG05Zue5pWw44Gu6LO85YWl44Gv6KaP57SE6YGV5Y+N77yBXG4yOjEz44CA55m76Yyy6ICF44O76KaW6IG05Zue5pWw44GM6LO85YWl44Gn44GN44KL5aC05omAXG4yOjU344CA6LKp5aOy5qWt6ICF44Gv44Gp44GG44KE44Gj44Gm6KaW6IG044OH44O844K/44KS5LiN5q2j5pON5L2c44GX44Gm44GE44KL77yfXG40OjUz44CA6LO85YWl6ICF44GM6JC944Gh44KL6ZeHXG43OjE444CA44OB44Oj44Oz44ON44Or55m76Yyy6ICF44GM5oCl44Gr5rib44KL44Gu44Gv44GT44KM44GM5Y6f5Zug77yfXG44OjI544CAQUnjgoLjganjgpPjganjgpPlvLfljJbjgZXjgozopo/ntITpgZXlj43jgoLljrPjgZfjgY/lh6bnvbBcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG5cbuOAkOWFrOW8j0xJTkXjgJFcbmh0dHBzOi8vcGVyYWljaGkuY29tL2xhbmRpbmdfcGFnZXMvdmlldy9zYWthaWxpbmVcbuWFqOWbveOBp+OBrllvdVR1YmVy44Kq44OV5Lya44O744OT44K444ON44K55ZCR44GR55u46KuH5Lya44Gq44Gp44CB44Os44OZ44Or44Ki44OD44OX5oOF5aCx44KS5YWI6KGM6YWN5L+h44GX44Gm44GE44G+44GZXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu44CQ57WM5Za26ICF5ZCR44GR44Kq44Oz44Op44Kk44Oz44K144Ot44Oz44CRXG5odHRwczovL2NvbW11bml0eS5jYW1wLWZpcmUuanAvcHJvamVjdHMvdmlldy8yNTE2NjZcbuWFqOWbveOBruWkmuW9qeOBqualreeoruOBruODk+OCuOODjeOCuVlvdVR1YmVy44GM5Y+C5Yqg44CC6YWS5LqV44Gu44OO44Km44OP44Km44O75a6f6Le144OH44O844K/44Gv44GT44GT44Gr5YWx5pyJ44GX44Gm44GE44G+44GZXG5cbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7jgJBTTlPjgJFcbkZhY2Vib29rXG5odHRwczovL3d3dy5mYWNlYm9vay5jb20veW9zaGl0YWRhLnNha2FpXG5cblR3aXR0ZXJcbmh0dHBzOi8vdHdpdHRlci5jb20veW9zaGl0YWRhc2FrYWlcblxu5rCX6Lu944Gr44OV44Kp44Ot44O844GP44Gg44GV44GE44CA4oC7RkLjga/kuIDoqIDjg6Hjg4Pjgrvjg7zjgrjjgYTjgZ/jgaDjgZHjgovjgajliqnjgYvjgorjgb7jgZlcblxu77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/77y/XG7ilrzjgrPjg4Hjg6njgoLjgZzjgbLjgZTopqfjgY/jgaDjgZXjgYTilrxcblxu4pGgWW91VHViZe+8huWLleeUu+OBruWIneW/g+iAheOBq+imi+OBpuOBu+OBl+OBhOOCquOCueOCueODoeWLleeUu1xu4pGh5YuV55S744Gn5L2/55So44GX44Gm44GE44KL5pKu5b2x5Zmo5p2QXG7ikaLmmKDlg4/jg4fjgqPjg6zjgq/jgr/jg7zphZLkupXnpaXmraNcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaAgWW91VHViZeWIneW/g+iAheOBq+OCquOCueOCueODoeWLleeUu+OBvuOBqOOCgeOBvuOBl+OBn++8gVxuXG7jgJBMdi4x44CRMTDmnKxcbmh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UEw2QV9Cb21Ba1FPcVZJTEthLWh4by0tbVhGeW1VSE1uVVxuXG7jgJBMdi4y44CRNuacrFxuaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDZBX0JvbUFrUU9wb0toTDZ5OENfVlpFUUdjckhFMzFSXG5cbuOAkEx2LjPjgJE25pysXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3J2RVp0YzNIVldCQUh0OEhacmx0c2Zcblxu44CQMTAw5Lq65YuV55S744Ki44OJ44OQ44Kk44K544CRXG5odHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNkFfQm9tQWtRT3BrRm1zdFZxT1FTOVNmZ0Y1Yk1fRDZcbu+8v++8v++8v++8v++8v++8v++8v++8v++8v++8v1xuXG7ikaHphZLkupXjga7kvb/nlKjlmajmnZDvvIjjgqLjg57jgr7jg7PjgqLjgr3jgrfjgqjjgqTjg4jjg5fjg63jgrDjg6njg6DjgpLliKnnlKjvvIlcblxu44CQ44Kr44Oh44Op44CRUGFuYXNvbmljIEdINVxuaHR0cHM6Ly9hbXpuLnRvLzM0TkY3aUdcblxu44CQ5omL6aCD44Os44Oz44K644CRIFNVTU1JTFVYIDE1bW0vRjEuN1xuaHR0cHM6Ly9hbXpuLnRvLzJVN2xkd1Bcblxu44CQ6YeN5a6d44Os44Oz44K644CRU1VNTUlMVVggMTJtbS9GMS40XG5odHRwczovL2Ftem4udG8vMndXdnpXNFxuXG7jgJDjgrPjg7Pjg4fjgrjjgJFQYW5hc29uaWMgRE1DLUxYOS1LXG5odHRwOi8vYW16bi50by8yRjdVYk9uXG7igLvjgrnjg57jg5vjgYvjgonjgrnjg4bjg4Pjg5fjgqLjg4Pjg5fjgavkvqHmoLzjg7vmgKfog73jg7vnlLvos6pcblxu44CQ5LiJ6ISa44CRTWFuZnJvdHRvIOS4ieiEmuOCouODq+ODnzXmrrUg44OW44Op44OD44KvXG5odHRwOi8vYW16bi50by8yRkpPeFBEXG5cbuOAkOeFp+aYjuOAkVlvbmdudW8gTEVE44Op44Kk44OIIDYwMOeQg+OBrkxFROOCkuaQrei8iVxuaHR0cDovL2Ftem4udG8vMkhWaXc3UVxuXG7jgJDlpbPmgKflkJHjgZHjg6njgqTjg4jjgJHjg6rjg7PjgrDjg6njgqTjg4ggRk9TSVRBTiDlpJblvoQzNmNtLzE044Kk44Oz44OBXG5odHRwczovL2Ftem4udG8vMlZsYkV0a1xuXG7vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL/vvL9cblxu4pGi5pig5YOP44OH44Kj44Os44Kv44K/44O8IOmFkuS6leelpeato1xuXG7imIXjg5fjg63jg5XjgqPjg7zjg6tcbjE5ODDlubTnlJ/jgb7jgozjgIDnpo/kupXnnIzlh7rouqvjgIAzOeats1xu5pig5YOP5Yi25L2c5q20IDE35bm044CAODDmpa3nqK4xMDAwMOacrOS7peS4iuWItuS9nFxuXG4yMOats+OBi+OCieadseS6rOOCkuS4reW/g+OBq+ODleODquODvOaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvOOBqOOBl+OBpua0u+WLleOAglxuMjbmrbPjgYvjgonjga/npo/kupXnnIzjgavjgYLjgovjgrHjg7zjg5bjg6vjg4bjg6zjg5PjgavmiYDlsZ7jgILjgqvjg6Hjg6njg57jg7PjgIHjg6rjg53jg7zjgr/jg7zjgIHoqJjogIXjgIHmmKDlg4/nt6jpm4bjgarjgannlarntYTliLbkvZwg5qWt5YuZ5YWo6Iis44KS5ouF5b2T44CCXG4zNOats+OBi+OCieOBr+S4reWwj+S8gealreOCkuWvvuixoeOBqyBZb3VUdWJl5bCC6ZaAIOaYoOWDj+ijveS9nOOBruOBu+OBi+OAgeWLleeUu+OCu+ODn+ODiuODvOOChOS8gealreOBrllvdVR1YmXjg4Hjg6Pjg7Pjg43jg6vmp4vnr4njgpLjgrXjg53jg7zjg4jjgIJcblxu6ZuG5a6i5YuV55S744Gl44GP44KK44Gr5b+F6KaB44GqIOS8geeUu+ODu+aSruW9seODu+e3qOmbhuODu+eZuuS/oeODu+apn+adkOODu+ipseOBl+aWueOCkuODiOODvOOCv+ODq+OBp+aVmeOBiOOCieOCjOOCi+WbveWGheWUr+S4gOOBruaYoOWDj+ODh+OCo+ODrOOCr+OCv+ODvFxuMjAxOeW5tDXmnIjjgYvjgonml6XmnKzjgacz5Lq655uu44GuWW91VHViZeWFrOW8j+ODk+ODh+OCquOCs+ODs+ODiOODquODk+ODpeODvOOCv+ODvOOBqOOBl+OBpua0u+WLleS4rVxuXG7imIXkvIHmpa3lkJHjgZHli5XnlLvjg57jg7zjgrHjg4bjgqPjg7PjgrDlsI7lhaXnm7joq4dcbmh0dHBzOi8vZ29sZGVuLW1vbmtleS50di9jb250YWN0Lmh0bWxcbuKAu+S6i+alreebuOirh+S7peWkluOBruWVj+WQiOOBm+OBq+OBr+WvvuW/nOOBhOOBn+OBl+OBi+OBreOBvuOBmeOBruOBp+OBlOS6huaJv+OBj+OBoOOBleOBhFxu5LiA6Iis55qE44Gq6LOq5ZWP44GvWW91VHViZeOBq+OCs+ODoeODs+ODiOOBj+OBoOOBleOBhFxuXG5cbiPjgb/jgpPjgarjgYzlpJblh7rjgpLlv5jjgozjgovjgY/jgonjgYToia/jgYTli5XnlLvjgpLkvZzjgo3jgYYiLAogICAgICAgICJ0aHVtYm5haWxzIjogewogICAgICAgICAgImRlZmF1bHQiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9IdnBsWTlCUEtHOC9kZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDEyMCwKICAgICAgICAgICAgImhlaWdodCI6IDkwCiAgICAgICAgICB9LAogICAgICAgICAgIm1lZGl1bSI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0h2cGxZOUJQS0c4L21xZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAzMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiAxODAKICAgICAgICAgIH0sCiAgICAgICAgICAiaGlnaCI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0h2cGxZOUJQS0c4L2hxZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiA0ODAsCiAgICAgICAgICAgICJoZWlnaHQiOiAzNjAKICAgICAgICAgIH0sCiAgICAgICAgICAic3RhbmRhcmQiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9IdnBsWTlCUEtHOC9zZGRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNjQwLAogICAgICAgICAgICAiaGVpZ2h0IjogNDgwCiAgICAgICAgICB9LAogICAgICAgICAgIm1heHJlcyI6IHsKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpL0h2cGxZOUJQS0c4L21heHJlc2RlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMTI4MCwKICAgICAgICAgICAgImhlaWdodCI6IDcyMAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNoYW5uZWxUaXRsZSI6ICJUZWFtWW91VHViZSBbSGVscF0iLAogICAgICAgICJwbGF5bGlzdElkIjogIlBMOWhXMXVTNkhVZnRMZEhJNlJJc2FmLWlYVG0wOXFuRXIiLAogICAgICAgICJwb3NpdGlvbiI6IDEwLAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICJIdnBsWTlCUEtHOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJraW5kIjogInlvdXR1YmUjcGxheWxpc3RJdGVtIiwKICAgICAgImV0YWciOiAiclAyYmlTdlJ5NkZSVnpQMFRVWEprbkN6M3VJIiwKICAgICAgImlkIjogIlVFdzVhRmN4ZFZNMlNGVm1kRXhrU0VrMlVrbHpZV1l0YVZoVWJUQTVjVzVGY2k0eU1VUXlRVFF6TWpSRE56TXlRVE15IiwKICAgICAgInNuaXBwZXQiOiB7CiAgICAgICAgInB1Ymxpc2hlZEF0IjogIjIwMjAtMDktMjhUMDU6MzU6NTJaIiwKICAgICAgICAiY2hhbm5lbElkIjogIlVDTURReG03Y1V4M3lYa2ZlSGE1ekpJUSIsCiAgICAgICAgInRpdGxlIjogIuOAkFlvdVR1YmXjga7mlrDmg4XloLHvvIHjgJHjgIzlubTpvaLliLbpmZDjgI3jgbjjga7lj5bjgorntYTjgb/jgavjgaTjgYTjgaYiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb3VUdWJlKOODpuODvOODgeODpeODvOODlinjgavjga/lubTpvaLliLbpmZDjga7jgYLjgovli5XnlLvjgYzjgYLjgorjgb7jgZnjgYzjgIHlubTpvaLliLbpmZDjgavplqLjgZnjgovlpInmm7TngrnjgoRcbuips+OBl+OBhOioreWumuaWueazleOBquOBqeaWsOOBl+OBhOaDheWgseOCkue0ueS7i+OBl+OBvuOBmeOAglxu44OR44K944Kz44Oz44KE44K544Oe44Ob44Gu5pON5L2c44KE6Kit5a6a44Gr44Gk44GE44Gm6ZaL6Kit44GX44Gm44GE44G+44GZ44CC44OB44Oj44Oz44ON44Or55m76Yyy5piv6Z2e44GK6aGY44GE44GX44G+44GZ4pmqXG7ih5JodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsL1VDRjRjN1VrSXVzRnNmZ2R4Y0szTF9Bdz9zdWJfY29uZmlybWF0aW9uPTFcblxu55uu5qyhXG4wOjAw44CA5bm06b2i5Yi26ZmQ44Gr6Zai44GZ44KL5aSJ5pu054K5XG4xOjE244CA6KaW6IG06ICF5YG044Gu5aSJ5pu054K5XG4zOjE244CA5oqV56i/6ICF5YG044Gu5aSJ5pu054K544Go6Kit5a6a5pa55rOVXG44OjE144CAWW91VHViZeOBq+OCiOOCi+iHquWLleOBp+OBruW5tOm9ouWItumZkOOBruioreWumuOBq+OBpOOBhOOBplxuOTozNOOAgOW5tOm9ouWItumZkOOBq+OCiOOCi+ODgeODo+ODs+ODjeODq+OBuOOBruW9semfv1xuMTA6MjAg5a2Q44Gp44KC5ZCR44GR44Kz44Oz44OG44Oz44OE44Go44Gu6YGV44GEXG4xMTozOCDjgb7jgajjgoHjgIDjgIBcblxuXG7jgJDjgYrjgrnjgrnjg6Hli5XnlLvjg7vplqLpgKPli5XnlLvjgJFcblxu44CQWW91dHViZeODpuODvOODgeODpeODvOODlu+8ieOAkeWtkOOBqeOCguWQkeOBkeWLleeUu+OBq+mWouOBmeOCi+imj+e0hOOBq+OBpOOBhOOBplxuaHR0cHM6Ly95b3V0dS5iZS83eEdqVmRPUG9Cc1xuXG7jgJBZb3VUdWJl5L2/44GE5pa544CR44OV44Kj44O844OJ44OQ44OD44Kv44Gu6YCB44KK5pa544Go44K144Od44O844OI44Gr44Gk44GE44GmXG5odHRwczovL3lvdXR1LmJlL2JLT05oLTZjc1JzXG5cbuOAkFlvdVR1YmXjg6bjg7zjg4Hjg6Xjg7zjg5bjgJHlj47nm4rjga7mlrDjgZfjgYTmjIfmqJnjgIxSUE3jgI3jgajjga/vvJ9cbmh0dHBzOi8veW91dHUuYmUvVlo4eHR3aXNMTVlcblxuWW91VHViZeaLheW9k+iAheOBq+iBnuOBj+OAjDIwMjDlubTjgYvjgonjga7lrZDkvpvlkJHjgZHli5XnlLvjga7opo/liLblpInmm7TjgI1cbmh0dHBzOi8veW91dHUuYmUvNG85VGJHZjZxMWtcblxuWW91VHViZeWtkOS+m+WQkeOBkeaLheW9k+ekvuWToeOBq+iBnuOBhOOBn+azqOaEj+S6i+mgheOChOODgeODo+ODs+ODjeODq+ODu+WLleeUu+OBuOOBruW9semfv1xuaHR0cHM6Ly95b3V0dS5iZS9mSGtBNG5lbmhTb1xuXG5cbuino+iqrOODmuODvOOCuFxu4oaT4oaT4oaTXG5Zb3VUdWJlKOODpuODvOODgeODpeODvOODlinjg7vlubTpvaLliLbpmZDjga7li5XnlLvjgavlr77jgZnjgovmlrDjgZfjgYTlj5bjgorntYTjgb/jgajjga/vvJ9cbmh0dHBzOi8vcGpveS5uZXQvP3A9Mjc0NjBcblxu5YuV55S744OV44Kh44OzXG7ihpJodHRwOi8vcGpveS5uZXQvXG5cbiNZb3V0dWJlI+W5tOm9ouWItumZkCNZb3VUdWJl44Kz44Oz44OI44Oq44OT44Ol44O844K/44O844OL44Ol44O844K5IiwKICAgICAgICAidGh1bWJuYWlscyI6IHsKICAgICAgICAgICJkZWZhdWx0IjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvcUFWd3BCWjFIWUEvZGVmYXVsdC5qcGciLAogICAgICAgICAgICAid2lkdGgiOiAxMjAsCiAgICAgICAgICAgICJoZWlnaHQiOiA5MAogICAgICAgICAgfSwKICAgICAgICAgICJtZWRpdW0iOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9xQVZ3cEJaMUhZQS9tcWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogMzIwLAogICAgICAgICAgICAiaGVpZ2h0IjogMTgwCiAgICAgICAgICB9LAogICAgICAgICAgImhpZ2giOiB7CiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9xQVZ3cEJaMUhZQS9ocWRlZmF1bHQuanBnIiwKICAgICAgICAgICAgIndpZHRoIjogNDgwLAogICAgICAgICAgICAiaGVpZ2h0IjogMzYwCiAgICAgICAgICB9LAogICAgICAgICAgInN0YW5kYXJkIjogewogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvcUFWd3BCWjFIWUEvc2RkZWZhdWx0LmpwZyIsCiAgICAgICAgICAgICJ3aWR0aCI6IDY0MCwKICAgICAgICAgICAgImhlaWdodCI6IDQ4MAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNoYW5uZWxUaXRsZSI6ICJUZWFtWW91VHViZSBbSGVscF0iLAogICAgICAgICJwbGF5bGlzdElkIjogIlBMOWhXMXVTNkhVZnRMZEhJNlJJc2FmLWlYVG0wOXFuRXIiLAogICAgICAgICJwb3NpdGlvbiI6IDExLAogICAgICAgICJyZXNvdXJjZUlkIjogewogICAgICAgICAgImtpbmQiOiAieW91dHViZSN2aWRlbyIsCiAgICAgICAgICAidmlkZW9JZCI6ICJxQVZ3cEJaMUhZQSIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdCn0K
49
+ http_version:
50
+ recorded_at: Tue, 27 Oct 2020 18:42:18 GMT
51
+ - request:
52
+ method: get
53
+ uri: https://www.googleapis.com/youtube/v3/playlistItems?fields=items&key=%3Cyoutube_api_key_123%3E&maxResults=50&part=snippet&playlistId=PL9hW1uS6HUftLdHI6RIsaf-iXTm09qnEr
54
+ body:
55
+ encoding: US-ASCII
56
+ string: ''
57
+ headers:
58
+ User-Agent:
59
+ - VideoInfo/2.8.0
60
+ Accept-Encoding:
61
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
62
+ Accept:
63
+ - "*/*"
64
+ response:
65
+ status:
66
+ code: 400
67
+ message: Bad Request
68
+ headers:
69
+ Vary:
70
+ - Origin
71
+ - Referer
72
+ - X-Origin
73
+ Content-Type:
74
+ - application/json; charset=UTF-8
75
+ Date:
76
+ - Tue, 27 Oct 2020 18:44:53 GMT
77
+ Server:
78
+ - scaffolding on HTTPServer2
79
+ Cache-Control:
80
+ - private
81
+ X-Xss-Protection:
82
+ - '0'
83
+ X-Frame-Options:
84
+ - SAMEORIGIN
85
+ X-Content-Type-Options:
86
+ - nosniff
87
+ Alt-Svc:
88
+ - h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443";
89
+ ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443";
90
+ ma=2592000; v="46,43"
91
+ Transfer-Encoding:
92
+ - chunked
93
+ body:
94
+ encoding: ASCII-8BIT
95
+ string: |
96
+ {
97
+ "error": {
98
+ "code": 400,
99
+ "message": "API key not valid. Please pass a valid API key.",
100
+ "errors": [
101
+ {
102
+ "message": "API key not valid. Please pass a valid API key.",
103
+ "domain": "global",
104
+ "reason": "badRequest"
105
+ }
106
+ ],
107
+ "status": "INVALID_ARGUMENT"
108
+ }
109
+ }
110
+ http_version:
111
+ recorded_at: Tue, 27 Oct 2020 18:44:53 GMT
112
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,114 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.googleapis.com/youtube/v3/playlistItems?fields=items&key=youtube_api_key_123&maxResults=50&part=snippet&playlistId=PL0E8117603D70E10A
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - VideoInfo/2.8.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - application/json; charset=UTF-8
23
+ Vary:
24
+ - Origin
25
+ - Referer
26
+ - X-Origin
27
+ Date:
28
+ - Tue, 27 Oct 2020 18:42:21 GMT
29
+ Server:
30
+ - scaffolding on HTTPServer2
31
+ Cache-Control:
32
+ - private
33
+ X-Xss-Protection:
34
+ - '0'
35
+ X-Frame-Options:
36
+ - SAMEORIGIN
37
+ X-Content-Type-Options:
38
+ - nosniff
39
+ Alt-Svc:
40
+ - h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443";
41
+ ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443";
42
+ ma=2592000; v="46,43"
43
+ Transfer-Encoding:
44
+ - chunked
45
+ body:
46
+ encoding: ASCII-8BIT
47
+ string: |
48
+ {
49
+ "items": []
50
+ }
51
+ http_version:
52
+ recorded_at: Tue, 27 Oct 2020 18:42:21 GMT
53
+ - request:
54
+ method: get
55
+ uri: https://www.googleapis.com/youtube/v3/playlistItems?fields=items&key=%3Cyoutube_api_key_123%3E&maxResults=50&part=snippet&playlistId=PL0E8117603D70E10A
56
+ body:
57
+ encoding: US-ASCII
58
+ string: ''
59
+ headers:
60
+ User-Agent:
61
+ - VideoInfo/2.8.0
62
+ Accept-Encoding:
63
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
64
+ Accept:
65
+ - "*/*"
66
+ response:
67
+ status:
68
+ code: 400
69
+ message: Bad Request
70
+ headers:
71
+ Vary:
72
+ - Origin
73
+ - Referer
74
+ - X-Origin
75
+ Content-Type:
76
+ - application/json; charset=UTF-8
77
+ Date:
78
+ - Tue, 27 Oct 2020 18:44:54 GMT
79
+ Server:
80
+ - scaffolding on HTTPServer2
81
+ Cache-Control:
82
+ - private
83
+ X-Xss-Protection:
84
+ - '0'
85
+ X-Frame-Options:
86
+ - SAMEORIGIN
87
+ X-Content-Type-Options:
88
+ - nosniff
89
+ Alt-Svc:
90
+ - h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443";
91
+ ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443";
92
+ ma=2592000; v="46,43"
93
+ Transfer-Encoding:
94
+ - chunked
95
+ body:
96
+ encoding: ASCII-8BIT
97
+ string: |
98
+ {
99
+ "error": {
100
+ "code": 400,
101
+ "message": "API key not valid. Please pass a valid API key.",
102
+ "errors": [
103
+ {
104
+ "message": "API key not valid. Please pass a valid API key.",
105
+ "domain": "global",
106
+ "reason": "badRequest"
107
+ }
108
+ ],
109
+ "status": "INVALID_ARGUMENT"
110
+ }
111
+ }
112
+ http_version:
113
+ recorded_at: Tue, 27 Oct 2020 18:44:55 GMT
114
+ recorded_with: VCR 3.0.3
@@ -3,58 +3,78 @@ require 'spec_helper'
3
3
  describe VideoInfo::Provider do
4
4
  class ProviderFu < VideoInfo::Provider
5
5
  def _url_regex
6
- /foo\/(\d)/
6
+ %r{foo\/(\d)}
7
7
  end
8
8
 
9
9
  def embed_url
10
- "//foo.com"
10
+ '//foo.com'
11
11
  end
12
12
 
13
13
  def _default_url_attributes; {} end
14
+
14
15
  def _default_iframe_attributes; {} end
15
16
  end
16
17
  let(:url) { 'url' }
17
- let(:options) { { } }
18
+ let(:options) { {} }
18
19
  let(:provider) { ProviderFu.new('foo/1', options) }
19
20
 
20
- describe "initialize" do
21
+ describe 'initialize' do
22
+ it 'should raise error if #_url_regex is not implemented' do
23
+ error_msg = 'Provider class must implement #_url_regex private method'
24
+ expected = expect { VideoInfo::Provider.new(url) }
25
+ expected.to raise_error(NotImplementedError, error_msg)
26
+ end
21
27
 
22
- it { expect { VideoInfo::Provider.new(url) }.to raise_error(NotImplementedError, 'Provider class must implement #_url_regex private method') }
23
- it { expect { provider.data }.to raise_error(NotImplementedError, 'Provider class must implement #_api_url private method') }
28
+ it 'should raise error if #_api_url is not implemented' do
29
+ api_url_error_msg = 'Provider class must implement ' \
30
+ '#_api_url private method'
31
+ expected = expect { provider.data }
32
+ expected.to raise_error(NotImplementedError, api_url_error_msg)
33
+ end
24
34
 
25
- it "sets default user_agent options" do
26
- expect(provider.options).to eq({ 'User-Agent' => "VideoInfo/#{VideoInfo::VERSION}" })
35
+ it 'sets default user_agent options' do
36
+ user_agent_hash = { 'User-Agent' => "VideoInfo/#{VideoInfo::VERSION}" }
37
+ expect(provider.options).to eq(user_agent_hash)
27
38
  end
28
39
 
29
- context "with custom User-Agent options" do
40
+ context 'with custom User-Agent options' do
30
41
  let(:options) { { 'User-Agent' => 'Test User Agent / 1.0' } }
31
42
 
32
- it "sets the option" do
33
- expect(provider.options).to eq({ 'User-Agent' => 'Test User Agent / 1.0' })
43
+ it 'sets the option' do
44
+ expect(provider.options).to eq('User-Agent' => 'Test User Agent / 1.0')
34
45
  end
35
46
  end
36
47
 
37
- context "with Referer options" do
48
+ context 'with Referer options' do
38
49
  let(:options) { { referer: 'http://google.com' } }
39
50
 
40
- it "sets the option" do
41
- expect(provider.options).to include({ 'Referer' => 'http://google.com' })
51
+ it 'sets the option' do
52
+ expect(provider.options).to include('Referer' => 'http://google.com')
42
53
  end
43
54
  end
44
55
  end
45
56
 
46
- describe "embed_code" do
47
- it "supports url_attributes option" do
48
- expect(provider.embed_code(url_attributes: { foo: 'bar' })).to eq '<iframe src="//foo.com?foo=bar" frameborder="0"></iframe>'
57
+ describe 'embed_code' do
58
+ it 'supports url_attributes option' do
59
+ embed_str = '<iframe src="//foo.com?foo=bar" frameborder="0"></iframe>'
60
+ expected = expect(provider.embed_code(url_attributes: { foo: 'bar' }))
61
+ expected.to eq embed_str
49
62
  end
50
63
 
51
- it "supports url_attributes option" do
52
- expect(provider.embed_code(iframe_attributes: { foo: 'bar' })).to eq '<iframe src="//foo.com" frameborder="0" foo="bar"></iframe>'
64
+ it 'supports url_attributes option' do
65
+ embed_str = '<iframe src="//foo.com" frameborder="0" foo="bar"></iframe>'
66
+ expected = expect(provider.embed_code(iframe_attributes: { foo: 'bar' }))
67
+ expected.to eq embed_str
53
68
  end
54
69
  end
55
70
 
56
- describe ".usable?" do
57
- it { expect { VideoInfo::Provider.usable?('url') }.to raise_error(NotImplementedError, 'Provider class must implement .usable? public method') }
71
+ describe '.usable?' do
72
+ it 'should raise eror if not usable' do
73
+ error_msg = 'Provider class must implement .usable? public method'
74
+ expected = expect do
75
+ VideoInfo::Provider.usable?('url')
76
+ end
77
+ expected.to raise_error(NotImplementedError, error_msg)
78
+ end
58
79
  end
59
-
60
80
  end
@@ -2,29 +2,28 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe VideoInfo::Providers::Dailymotion do
5
-
6
- describe ".usable?" do
5
+ describe '.usable?' do
7
6
  subject { VideoInfo::Providers::Dailymotion.usable?(url) }
8
7
 
9
- context "with dailymotion url" do
8
+ context 'with dailymotion url' do
10
9
  let(:url) { 'http://www.dailymotion.com/video/x7lni3' }
11
10
  it { is_expected.to be_truthy }
12
11
  end
13
12
 
14
- context "with dai.ly url" do
13
+ context 'with dai.ly url' do
15
14
  let(:url) { 'http://dai.ly/video/x7lni3' }
16
15
  it { is_expected.to be_truthy }
17
16
  end
18
17
 
19
- context "with other url" do
18
+ context 'with other url' do
20
19
  let(:url) { 'http://www.youtube.com/x7lni3' }
21
20
  it { is_expected.to be_falsey }
22
21
  end
23
22
  end
24
23
 
25
- describe "#available?" do
26
- context "with valid video", :vcr do
27
- subject { VideoInfo.new('http://www.dailymotion.com/video/x7lni3') }
24
+ describe '#available?' do
25
+ context 'with valid video', :vcr do
26
+ subject { VideoInfo.new('http://www.dailymotion.com/video/x7lni3'.freeze) }
28
27
 
29
28
  describe '#available?' do
30
29
  subject { super().available? }
@@ -32,7 +31,7 @@ describe VideoInfo::Providers::Dailymotion do
32
31
  end
33
32
  end
34
33
 
35
- context "with 'This video does not exist or has been deleted.", :vcr do
34
+ context 'with invalid video url', :vcr do
36
35
  subject { VideoInfo.new('http://www.dailymotion.com/video/inValIdiD') }
37
36
 
38
37
  describe '#available?' do
@@ -42,7 +41,7 @@ describe VideoInfo::Providers::Dailymotion do
42
41
  end
43
42
  end
44
43
 
45
- context "with video x7lni3", :vcr do
44
+ context 'with video x7lni3', :vcr do
46
45
  subject { VideoInfo.new('http://www.dailymotion.com/video/x7lni3') }
47
46
 
48
47
  describe '#provider' do
@@ -67,7 +66,9 @@ describe VideoInfo::Providers::Dailymotion do
67
66
 
68
67
  describe '#embed_code' do
69
68
  subject { super().embed_code }
70
- it { is_expected.to eq '<iframe src="//www.dailymotion.com/embed/video/x7lni3?autoplay=0" frameborder="0"></iframe>' }
69
+ embed_code = '<iframe src="//www.dailymotion.com/embed/video/x7lni3?' \
70
+ 'autoplay=0" frameborder="0"></iframe>'
71
+ it { is_expected.to eq embed_code }
71
72
  end
72
73
 
73
74
  describe '#title' do
@@ -75,19 +76,40 @@ describe VideoInfo::Providers::Dailymotion do
75
76
  it { is_expected.to eq 'Mario Kart (Rémi Gaillard)' }
76
77
  end
77
78
 
79
+ describe '#author' do
80
+ subject { super().author }
81
+ it { is_expected.to eq 'Rémi Gaillard' }
82
+ end
83
+
84
+ describe '#author_url' do
85
+ subject { super().author_url }
86
+ it { is_expected.to eq 'https://www.dailymotion.com/nqtv' }
87
+ end
88
+
89
+ describe '#author_thumbnail' do
90
+ subject { super().author_thumbnail }
91
+ it { is_expected.to match /https:\/\/s[12].dmcdn.net\/u\/US931VO3V-24wNr1\/60x60/ }
92
+ end
93
+
78
94
  describe '#description' do
79
95
  subject { super().description }
80
- it { is_expected.to eq 'Super Rémi Kart est un jeu vidéo de course développé et édité par N\'Importe Quoi TV. Sa principale originalité vient de sa réalité...<br />L\'aventure continue sur www.nimportequi.com' }
96
+ description_text = 'Super Rémi Kart est un jeu vidéo de course ' \
97
+ 'développé et édité par N\'Importe Quoi TV. ' \
98
+ 'Sa principale originalité vient de sa réalité' \
99
+ '...<br />L\'aventure continue sur www.nimportequi.com'
100
+ it { is_expected.to eq description_text }
81
101
  end
82
102
 
83
103
  describe '#keywords' do
84
104
  subject { super().keywords }
85
- it { is_expected.to eq ["rémi","remi","gaillard","imposteur","imposture","mario","bros","kart","nintendo","jeux"] }
105
+ keywords_list = %w(rémi remi gaillard imposteur imposture
106
+ mario bros kart nintendo jeux)
107
+ it { is_expected.to eq keywords_list }
86
108
  end
87
109
 
88
110
  describe '#duration' do
89
111
  subject { super().duration }
90
- it { is_expected.to eq 136}
112
+ it { is_expected.to eq 136 }
91
113
  end
92
114
 
93
115
  describe '#width' do
@@ -102,45 +124,72 @@ describe VideoInfo::Providers::Dailymotion do
102
124
 
103
125
  describe '#date' do
104
126
  subject { super().date }
105
- it { is_expected.to eq Time.parse('2008-12-03 16:29:31 UTC', Time.now.utc) }
127
+ it 'should show correct date' do
128
+ is_expected.to eq Time.parse('2008-12-03 16:29:31 UTC', Time.now.utc)
129
+ end
106
130
  end
107
131
 
108
132
  describe '#thumbnail_small' do
109
133
  subject { super().thumbnail_small }
110
- it { is_expected.to eq 'http://s2.dmcdn.net/BgWxI/x60-kbf.jpg' }
134
+ it { is_expected.to match /https:\/\/s[12].dmcdn.net\/v\/mj4x1VaO59OF6TK6\/x60/ }
111
135
  end
112
136
 
113
137
  describe '#thumbnail_medium' do
114
138
  subject { super().thumbnail_medium }
115
- it { is_expected.to eq 'http://s2.dmcdn.net/BgWxI/x240-b83.jpg' }
139
+ it { is_expected.to match /https:\/\/s[12].dmcdn.net\/v\/mj4x1VaO59Vm42lt\/x240/ }
116
140
  end
117
141
 
118
142
  describe '#thumbnail_large' do
119
143
  subject { super().thumbnail_large }
120
- it { is_expected.to eq 'http://s2.dmcdn.net/BgWxI/x720-YcV.jpg' }
144
+ it { is_expected.to match /https:\/\/s[12].dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720/ }
145
+ end
146
+
147
+ describe '#thumbnail_large_2x' do
148
+ subject { super().thumbnail_large_2x }
149
+ it { is_expected.to be_nil }
150
+ end
151
+
152
+ describe '#thumbnail_maxres' do
153
+ subject { super().thumbnail_maxres }
154
+ it { is_expected.to be_nil }
155
+ end
156
+
157
+ describe '#thumbnail' do
158
+ subject { super().thumbnail }
159
+ it { is_expected.to match /https:\/\/s[12].dmcdn.net\/v\/mj4x1VaO59VyFzJt\/x720/ }
121
160
  end
122
161
 
123
162
  describe '#view_count' do
124
163
  subject { super().view_count }
125
- it { is_expected.to be > 10000000 }
164
+ it { is_expected.to be > 10_000_000 }
126
165
  end
127
166
  end
128
167
 
129
- context "with video x7lni3 and url_attributes", :vcr do
168
+ context 'with video x7lni3 and url_attributes', :vcr do
130
169
  subject { VideoInfo.new('http://www.dailymotion.com/video/x7lni3') }
131
170
 
132
- it { expect(subject.embed_code(url_attributes: { autoplay: 1 })).to match(/autoplay=1/) }
171
+ it do
172
+ embed_code = subject.embed_code(url_attributes: { autoplay: 1 })
173
+ expect(embed_code).to match(/autoplay=1/)
174
+ end
133
175
  end
134
176
 
135
- context "with video x7lni3 and iframe_attributes", :vcr do
177
+ context 'with video x7lni3 and iframe_attributes', :vcr do
136
178
  subject { VideoInfo.new('http://www.dailymotion.com/video/x7lni3') }
137
179
 
138
- it { expect(subject.embed_code(iframe_attributes: { width: 800, height: 600 })).to match(/width="800"/) }
139
- it { expect(subject.embed_code(iframe_attributes: { width: 800, height: 600 })).to match(/height="600"/) }
180
+ it 'should properly apply dimensions attributes' do
181
+ dimensions = { width: 800, height: 600 }
182
+ embed_code = subject.embed_code(iframe_attributes: dimensions)
183
+ expect(embed_code).to match(/width="800"/)
184
+ expect(embed_code).to match(/height="600"/)
185
+ end
140
186
  end
141
187
 
142
- context "with video x7lni3 in text", :vcr do
143
- subject { VideoInfo.new('<a href="http://www.dailymotion.com/video/x7lni3">http://www.dailymotion.com/video/x7lni3</a>') }
188
+ context 'with video x7lni3 in text', :vcr do
189
+ url_in_text = '<a href="http://www.dailymotion.com/video/x7lni3">' \
190
+ 'http://www.dailymotion.com/video/x7lni3</a>'
191
+
192
+ subject { VideoInfo.new(url_in_text) }
144
193
 
145
194
  describe '#provider' do
146
195
  subject { super().provider }
@@ -152,5 +201,4 @@ describe VideoInfo::Providers::Dailymotion do
152
201
  it { is_expected.to eq 'x7lni3' }
153
202
  end
154
203
  end
155
-
156
204
  end