diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..3daa3326 --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,30 @@ +require 'httparty' +require 'dotenv' +require_relative 'recipient' +require 'table_print' + +class Channel < Recipient + attr_reader :name, :slack_id, :topic, :member_count + + def initialize(name, slack_id, topic, member_count) + super(name, slack_id) + @topic = topic + @member_count = member_count + end + + def self.endpoint_path + return 'conversations.list' + end + + def self.response_key + return 'channels' + end + + def self.from_response_hash(record_hash) + return Channel.new(record_hash['name'], record_hash['id'], record_hash['topic']['value'], record_hash['num_members']) + end + + def to_details + return "-- Details --\nName: #{name}, Slack ID: #{slack_id}, Topic: #{topic}, Member Count: #{member_count.to_s}" + end +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..892c1d79 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,39 @@ +require 'dotenv' + +class Recipient + class InvalidAPIError < StandardError; end + + attr_reader :name, :slack_id + + def initialize(name, slack_id) + @name = name + @slack_id = slack_id + end + + def self.run_get_request(path) + sleep(0.5) + base_url = 'https://slack.com/api/' + method_url = base_url + path + + response = HTTParty.get(method_url, query: { + token: ENV['SLACK_TOKEN'], + format: 'json' + } + ) + + unless response.code == 200 + raise InvalidAPIError, "Error! Status code: #{response.code}" + end + + unless response["ok"] + raise InvalidAPIError, "#{response["error"]}" + end + + return response + end + + def self.list_all + response = self.run_get_request(endpoint_path) + return response[response_key].map { |record_hash| from_response_hash(record_hash) } + end +end \ No newline at end of file diff --git a/lib/slack.rb b/lib/slack.rb index 8a0b659b..c795ced1 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,10 +1,80 @@ -#!/usr/bin/env ruby +require 'httparty' +require 'dotenv' +require 'awesome_print' +require 'table_print' +require_relative 'user' +require_relative 'channel' +require_relative 'workspace' +Dotenv.load + +def driver(workspace) + + while true + puts "\nChoose: list users | list channels | select user | select channel | show details | send message | quit" + + user_input = gets.chomp + + exit if user_input.downcase == 'quit' + + case user_input + when 'list users' + tp User.list_all, 'name', 'slack_id', 'real_name' + when'list channels' + tp Channel.list_all, 'name', 'slack_id', 'topic', 'member_count' + when 'select user' + print 'Which user would you like to select? ' + user_to_select = gets.chomp + if workspace.user_doesnt_exist?(user_to_select) + puts "Invalid user name. What would you like to do?" + driver(workspace) + elsif workspace.select_user(user_to_select) + print "Successfully selected #{workspace.return_selected.name}!" + end + when 'select channel' + print 'Which channel would you like to select? ' + channel_to_select = gets.chomp + if workspace.channel_doesnt_exist?(channel_to_select) + puts "Invalid channel name. What would you like to do?" + driver(workspace) + elsif workspace.select_channel(channel_to_select) + print "Successfully selected #{workspace.return_selected.name}!" + end + when 'show details' + if workspace.no_selection? # would like to refactor this for DRY + puts "Nothing was selected!" + driver(workspace) + else + print workspace.to_details + end + when 'send message' + if workspace.no_selection? + puts "Nothing was selected!" + driver(workspace) + else + puts "What would you like to say?" + user_response = gets.chomp + selected_slack_id = workspace.return_selected.slack_id + workspace.send_message(selected_slack_id, user_response) + end + else + puts "Invalid entry!" + end + end +end def main - puts "Welcome to the Ada Slack CLI!" + + unless ENV["SLACK_TOKEN"] + puts "Could not load API key" + exit + end + workspace = Workspace.new + puts "Welcome to the Ada Slack CLI! 'quit' to quit" + puts "There are #{User.list_all.length} users." + puts "There are #{Channel.list_all.length} channels." - # TODO project + driver(workspace) puts "Thank you for using the Ada Slack CLI" end diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..f03a0f51 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,30 @@ +require 'httparty' +require 'dotenv' +require_relative 'recipient' +require 'table_print' +Dotenv.load + +class User < Recipient + attr_reader :name, :slack_id, :real_name + + def initialize(name, slack_id, real_name) + super(name, slack_id) + @real_name = real_name + end + + def self.endpoint_path + return 'users.list' + end + + def self.response_key + return 'members' + end + + def self.from_response_hash(record_hash) + return User.new(record_hash['name'], record_hash['id'], record_hash['real_name']) + end + + def to_details + return "-- Details -- \nName: #{name}, Slack ID: #{slack_id}, Real Name: #{real_name}" + end +end diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..8e12a315 --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,92 @@ +require 'httparty' +require 'dotenv' +require 'awesome_print' +require 'table_print' +require_relative 'user' +require_relative 'channel' +require_relative 'recipient' +Dotenv.load + +class Workspace < Recipient + class InvalidAPIError < StandardError; end + + attr_reader :users, :channels, :selected + + def initialize + @users = User.list_all + @channels = Channel.list_all + @selected = nil + + validate_user?(@users) + validate_channel?(@channels) + end + + def validate_user?(users) + raise ArgumentError.new, "Sorry! Users couldn't be loaded" if users.nil? + raise ArgumentError.new, "Sorry! There are 0 users" if users.length.zero? + end + + def validate_channel?(channels) + raise ArgumentError.new, "Sorry! channels couldn't be loaded" if channels.nil? + raise ArgumentError.new, "Sorry! There are 0 channels" if channels.length.zero? + end + + def select_user(user_to_select) + if @users.any? { |user| user.name == user_to_select } + @selected = @users.find { |user| user.name == user_to_select } + elsif @users.any? { |user| user.slack_id == user_to_select } + @selected = @users.find { |user| user.slack_id == user_to_select } + end + return @selected + end + + def select_channel(channel_to_select) + if @channels.any? { |channel| channel.name == channel_to_select } + @selected = @channels.find { |channel| channel.name == channel_to_select } + elsif @channels.any? { |channel| channel.slack_id == channel_to_select } + @selected = @channels.find { |channel| channel.slack_id == channel_to_select } + end + return @selected + end + + def return_selected + return @selected + end + + def to_details + return @selected.to_details + end + + def no_selection? + @selected.nil? + end + + def send_message(selected_slack_id, user_response) + url = "https://slack.com/api/chat.postMessage" + + response = HTTParty.post(url, + headers: { 'Content-Type' => 'application/x-www-form-urlencoded' }, + body: { + token: ENV["SLACK_TOKEN"], + channel: selected_slack_id, + text: user_response + }) + + unless response.code == 200 + raise InvalidAPIError, "Error! Status code: #{response.code}" + end + + unless response["ok"] + raise InvalidAPIError, "Your message #{user_response} did not go through. Error: #{response["error"]}" + end + return true + end + + def channel_doesnt_exist?(channel_to_select) + return true unless (@channels.any? { |channel| channel.name == channel_to_select || channel.slack_id == channel_to_select }) + end + + def user_doesnt_exist?(user_to_select) + return true unless (@users.any? { |user| user.name == user_to_select || user.slack_id == user_to_select }) + end +end \ No newline at end of file diff --git a/response.json b/response.json new file mode 100644 index 00000000..ce6e32d1 --- /dev/null +++ b/response.json @@ -0,0 +1 @@ +{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602023807,"response_metadata":{"next_cursor":""}} \ No newline at end of file diff --git a/test/cassettes/bad_path.yml b/test/cassettes/bad_path.yml new file mode 100644 index 00000000..96615f5a --- /dev/null +++ b/test/cassettes/bad_path.yml @@ -0,0 +1,343 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:20:24 GMT + Server: + - Apache + X-Slack-Req-Id: + - e216af6ff865fb742fd57b31e290c096 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-z9nf,haproxy-edge-pdx-herk + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602267624,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:20:24 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:20:25 GMT + Server: + - Apache + X-Slack-Req-Id: + - b49a722566588de63b880447674445db + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-yo7l,haproxy-edge-pdx-74gg + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:20:25 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:20:27 GMT + Server: + - Apache + X-Slack-Req-Id: + - 11cbc5fdcb7c2119c87ac5b9b3df2334 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-hwvv,haproxy-edge-pdx-k9dj + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:20:27 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:20:28 GMT + Server: + - Apache + X-Slack-Req-Id: + - 3778f42059b8a3efe5e98611a6c0d9c1 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-npun,haproxy-edge-pdx-23kb + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:20:29 GMT +- request: + method: get + uri: https://slack.com/api/bad_path?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 404 + message: Not Found + headers: + Date: + - Fri, 09 Oct 2020 18:22:35 GMT + Server: + - Apache + X-Xss-Protection: + - '0' + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + X-Slack-Backend: + - r + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Vary: + - Accept-Encoding + Pragma: + - no-cache + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Robots-Tag: + - noindex,nofollow + Set-Cookie: + - b=2vhinijajotjchn15j9ooes4c; expires=Wed, 09-Oct-2030 18:22:35 GMT; Max-Age=315532800; + path=/; domain=.slack.com; secure; SameSite=None + - x=2vhinijajotjchn15j9ooes4c.1602267755; expires=Fri, 09-Oct-2020 18:37:35 + GMT; Max-Age=900; path=/; domain=.slack.com; secure; SameSite=None + Transfer-Encoding: + - chunked + Content-Type: + - text/html; charset=utf-8 + X-Via: + - haproxy-www-mki5,haproxy-edge-pdx-8rbg + body: + encoding: ASCII-8BIT + string: !binary |- + PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4tVVMiIGNsYXNzPSIiPjxoZWFkPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC93ZWJwYWNrLm1hbmlmZXN0LmZmOGE2MzFkMzMzYzM5MmQ2Yzc5Lm1pbi5qcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxzY3JpcHQ+d2luZG93LnRzX2VuZHBvaW50X3VybCA9ICJodHRwczpcL1wvc2xhY2suY29tXC9iZWFjb25cL3RpbWluZyI7KGZ1bmN0aW9uKGUpIHsKCXZhciBuPURhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlLHI9ZS5wZXJmb3JtYW5jZXx8e30sdD1bXSxhPXt9LGk9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoLGk9W107YT5yO3IrKyl0W3JdW2VdPT1uJiZpLnB1c2godFtyXSk7cmV0dXJuIGl9LG89ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHIsYT10Lmxlbmd0aDthLS07KXI9dFthXSxyLmVudHJ5VHlwZSE9ZXx8dm9pZCAwIT09biYmci5uYW1lIT1ufHx0LnNwbGljZShhLDEpfTtyLm5vd3x8KHIubm93PXIud2Via2l0Tm93fHxyLm1vek5vd3x8ci5tc05vd3x8ZnVuY3Rpb24oKXtyZXR1cm4oRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGUpLW59KSxyLm1hcmt8fChyLm1hcms9ci53ZWJraXRNYXJrfHxmdW5jdGlvbihlKXt2YXIgbj17bmFtZTplLGVudHJ5VHlwZToibWFyayIsc3RhcnRUaW1lOnIubm93KCksZHVyYXRpb246MH07dC5wdXNoKG4pLGFbZV09bn0pLHIubWVhc3VyZXx8KHIubWVhc3VyZT1yLndlYmtpdE1lYXN1cmV8fGZ1bmN0aW9uKGUsbixyKXtuPWFbbl0uc3RhcnRUaW1lLHI9YVtyXS5zdGFydFRpbWUsdC5wdXNoKHtuYW1lOmUsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bixkdXJhdGlvbjpyLW59KX0pLHIuZ2V0RW50cmllc0J5VHlwZXx8KHIuZ2V0RW50cmllc0J5VHlwZT1yLndlYmtpdEdldEVudHJpZXNCeVR5cGV8fGZ1bmN0aW9uKGUpe3JldHVybiBpKCJlbnRyeVR5cGUiLGUpfSksci5nZXRFbnRyaWVzQnlOYW1lfHwoci5nZXRFbnRyaWVzQnlOYW1lPXIud2Via2l0R2V0RW50cmllc0J5TmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGkoIm5hbWUiLGUpfSksci5jbGVhck1hcmtzfHwoci5jbGVhck1hcmtzPXIud2Via2l0Q2xlYXJNYXJrc3x8ZnVuY3Rpb24oZSl7bygibWFyayIsZSl9KSxyLmNsZWFyTWVhc3VyZXN8fChyLmNsZWFyTWVhc3VyZXM9ci53ZWJraXRDbGVhck1lYXN1cmVzfHxmdW5jdGlvbihlKXtvKCJtZWFzdXJlIixlKX0pLGUucGVyZm9ybWFuY2U9ciwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiYoZGVmaW5lLmFtZHx8ZGVmaW5lLmFqcykmJmRlZmluZSgicGVyZm9ybWFuY2UiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lCn0pKHdpbmRvdyk7PC9zY3JpcHQ+PHNjcmlwdD4KCihmdW5jdGlvbiAoKSB7CgkKCXdpbmRvdy5UU01hcmsgPSBmdW5jdGlvbiAobWFya19sYWJlbCkgewoJCWlmICghd2luZG93LnBlcmZvcm1hbmNlIHx8ICF3aW5kb3cucGVyZm9ybWFuY2UubWFyaykgcmV0dXJuOwoJCXBlcmZvcm1hbmNlLm1hcmsobWFya19sYWJlbCk7Cgl9OwoJd2luZG93LlRTTWFyaygnc3RhcnRfbG9hZCcpOwoKCQoJd2luZG93LlRTTWVhc3VyZUFuZEJlYWNvbiA9IGZ1bmN0aW9uIChtZWFzdXJlX2xhYmVsLCBzdGFydF9tYXJrX2xhYmVsKSB7CgkJaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UgfHwgIXdpbmRvdy5wZXJmb3JtYW5jZS5tYXJrIHx8ICF3aW5kb3cucGVyZm9ybWFuY2UubWVhc3VyZSkgewoJCQlyZXR1cm47CgkJfQoKCQlwZXJmb3JtYW5jZS5tYXJrKHN0YXJ0X21hcmtfbGFiZWwgKyAnX2VuZCcpOwoKCQl0cnkgewoJCQlwZXJmb3JtYW5jZS5tZWFzdXJlKG1lYXN1cmVfbGFiZWwsIHN0YXJ0X21hcmtfbGFiZWwsIHN0YXJ0X21hcmtfbGFiZWwgKyAnX2VuZCcpOwoJCQl3aW5kb3cuVFNCZWFjb24obWVhc3VyZV9sYWJlbCwgcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShtZWFzdXJlX2xhYmVsKVswXS5kdXJhdGlvbik7CgkJfSBjYXRjaCAoZSkgewoJCQkKCQl9Cgl9OwoKCQoJaWYgKCdzZW5kQmVhY29uJyBpbiBuYXZpZ2F0b3IpIHsKCQl3aW5kb3cuVFNCZWFjb24gPSBmdW5jdGlvbiAobGFiZWwsIHZhbHVlKSB7CgkJCXZhciBlbmRwb2ludF91cmwgPSB3aW5kb3cudHNfZW5kcG9pbnRfdXJsIHx8ICdodHRwczovL3NsYWNrLmNvbS9iZWFjb24vdGltaW5nJzsKCQkJbmF2aWdhdG9yLnNlbmRCZWFjb24oCgkJCQllbmRwb2ludF91cmwgKyAnP2RhdGE9JyArIGVuY29kZVVSSUNvbXBvbmVudChsYWJlbCArICc6JyArIHZhbHVlKSwKCQkJCScnCgkJCSk7CgkJfTsKCX0gZWxzZSB7CgkJd2luZG93LlRTQmVhY29uID0gZnVuY3Rpb24gKGxhYmVsLCB2YWx1ZSkgewoJCQl2YXIgZW5kcG9pbnRfdXJsID0gd2luZG93LnRzX2VuZHBvaW50X3VybCB8fCAnaHR0cHM6Ly9zbGFjay5jb20vYmVhY29uL3RpbWluZyc7CgkJCW5ldyBJbWFnZSgpLnNyYyA9IGVuZHBvaW50X3VybCArICc/ZGF0YT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsICsgJzonICsgdmFsdWUpOwoJCX07Cgl9Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+d2luZG93LlRTTWFyaygnc3RlcF9sb2FkJyk7PC9zY3JpcHQ+PG5vc2NyaXB0PjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD0vYXBpL2JhZF9wYXRoP3Rva2VuPTxTTEFDS19UT0tFTj4mYW1wO2Zvcm1hdD1qc29uJmFtcDtub2pzbW9kZT0xIj48L25vc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgc2FmZV9ob3N0cyA9IFsnYXBwLm9wdGltaXplbHkuY29tJywgJ3RpbnlzcGVjay5kZXYuc2xhY2suY29tJ107CgppZiAoc2VsZiAhPT0gdG9wICYmIHNhZmVfaG9zdHMuaW5kZXhPZih0b3AubG9jYXRpb24uaG9zdCkgPT09IC0xKSB7Cgl3aW5kb3cuZG9jdW1lbnQud3JpdGUoCgkJJ1x1MDAzQ3N0eWxlPmJvZHkgKiB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVx1MDAzQy9zdHlsZT5cdTAwM0NhIGhyZWY9IiMiIG9uY2xpY2s9JyArCgkJCScidG9wLmxvY2F0aW9uLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWYiIHN0eWxlPSJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7cGFkZGluZzoxMHB4Ij5HbyB0byBTbGFjay5jb21cdTAwM0MvYT4nCgkpOwp9CgooZnVuY3Rpb24oKSB7Cgl2YXIgdGltZXI7CglpZiAoc2VsZiAhPT0gdG9wICYmIHNhZmVfaG9zdHMuaW5kZXhPZih0b3AubG9jYXRpb24uaG9zdCkgPT09IC0xKSB7CgkJdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CgkJCWlmICh3aW5kb3cpIHsKCQkJCXRyeSB7CgkJCQkJdmFyIHBhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJyk7CgkJCQkJdmFyIGNsaWVudEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaWVudC11aScpOwoJCQkJCXZhciBzZWN0aW9uRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbmF2LCBoZWFkZXIsIHNlY3Rpb24nKTsKCgkJCQkJcGFnZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGFnZUVsKTsKCQkJCQljbGllbnRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsaWVudEVsKTsKCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHNlY3Rpb25FbHMubGVuZ3RoOyBpKyspIHsKCQkJCQkJc2VjdGlvbkVsc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlY3Rpb25FbHNbaV0pOwoJCQkJCX0KCQkJCQl3aW5kb3cuVFMgPSBudWxsOwoJCQkJCXdpbmRvdy5URCA9IG51bGw7CgkJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIpOwoJCQkJfSBjYXRjaCAoZSkge30JCgkJCX0KCQl9LCAyMDApOwoJfQp9KSgpOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4Kd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CndpbmRvdy5kYXRhTGF5ZXIucHVzaCh7CgknZ3RtLnN0YXJ0JzogRGF0ZS5ub3coKSwKCSdldmVudCcgOiAnZ3RtLmpzJywKCSdzZWN1cmVfcGFnZScgOiBmYWxzZSwKfSk7CnZhciBmaXJzdFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKdmFyIHRoaXNTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKdGhpc1NjcmlwdC5hc3luYyA9IHRydWU7CnRoaXNTY3JpcHQuc3JjID0gJy8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD1HVE0tS0gyTFBLJzsKZmlyc3RTY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1NjcmlwdCwgZmlyc3RTY3JpcHQpOwo8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbihlKSB7Cgl2YXIgZ3RtRGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTsKCXZhciBndG1UYWdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKltkYXRhLWd0bS1jbGlja10nKTsKCXZhciBndG1DbGlja0hhbmRsZXIgPSBmdW5jdGlvbihjKSB7CgkJdmFyIGd0bV9ldmVudHMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1ndG0tY2xpY2snKTsKCQlpZiAoIWd0bV9ldmVudHMpIHJldHVybjsKCQl2YXIgZ3RtX2V2ZW50c19hcnIgPSBndG1fZXZlbnRzLnNwbGl0KCIsIik7CgkJZm9yKHZhciBlPTA7IGUgPCBndG1fZXZlbnRzX2Fyci5sZW5ndGg7IGUrKykgewoJCQl2YXIgZXYgPSBndG1fZXZlbnRzX2FycltlXS50cmltKCk7CgkJCWd0bURhdGFMYXllci5wdXNoKHsgJ2V2ZW50JzogZXYgfSk7CgkJfQoJfTsKCWZvcih2YXIgZz0wOyBnIDwgZ3RtVGFncy5sZW5ndGg7IGcrKyl7CgkJdmFyIGVsZW0gPSBndG1UYWdzW2ddOwoJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBndG1DbGlja0hhbmRsZXIpOwoJfQp9KTsKPC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgooZnVuY3Rpb24oZSxjLGIsZixkLGcsYSl7ZS5TbGFja0JlYWNvbk9iamVjdD1kOwplW2RdPWVbZF18fGZ1bmN0aW9uKCl7KGVbZF0ucT1lW2RdLnF8fFtdKS5wdXNoKFsxKm5ldyBEYXRlKCksYXJndW1lbnRzXSl9OwplW2RdLmw9MSpuZXcgRGF0ZSgpO2c9Yy5jcmVhdGVFbGVtZW50KGIpO2E9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXTsKZy5hc3luYz0xO2cuc3JjPWY7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLGEpCn0pKHdpbmRvdyxkb2N1bWVudCwic2NyaXB0IiwiaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L3NsYWNrX2JlYWNvbi5iZWRjMTJjMTZmMjc5NTE5OTI2ZC5taW4uanMiLCJzYiIpOwp3aW5kb3cuc2IoJ3NldCcsICd0b2tlbicsICczMzA3ZjQzNjk2M2UwMmQ0ZjllYjg1Y2U1MTU5NzQ0YycpOwp3aW5kb3cuc2IoJ3RyYWNrJywgJ3BhZ2V2aWV3Jyk7Cjwvc2NyaXB0PjxtZXRhIG5hbWU9InJlZmVycmVyIiBjb250ZW50PSJuby1yZWZlcnJlciI+PG1ldGEgbmFtZT0ic3VwZXJmaXNoIiBjb250ZW50PSJub2Zpc2giPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgVFNfbGFzdF9sb2dfZGF0ZSA9IG51bGw7CnZhciBUU01ha2VMb2dEYXRlID0gZnVuY3Rpb24oKSB7Cgl2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CgoJdmFyIHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7Cgl2YXIgbW8gPSBkYXRlLmdldE1vbnRoKCkrMTsKCXZhciBkID0gZGF0ZS5nZXREYXRlKCk7CgoJdmFyIHRpbWUgPSB7CgkgIGg6IGRhdGUuZ2V0SG91cnMoKSwKCSAgbWk6IGRhdGUuZ2V0TWludXRlcygpLAoJICBzOiBkYXRlLmdldFNlY29uZHMoKSwKCSAgbXM6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKCX07CgoJT2JqZWN0LmtleXModGltZSkubWFwKGZ1bmN0aW9uKG1vbWVudCwgaW5kZXgpIHsKCQlpZiAobW9tZW50ID09ICdtcycpIHsKCQkJaWYgKHRpbWVbbW9tZW50XSA8IDEwKSB7CgkJCQl0aW1lW21vbWVudF0gPSB0aW1lW21vbWVudF0rJzAwJzsKCQkJfSBlbHNlIGlmICh0aW1lW21vbWVudF0gPCAxMDApIHsKCQkJCXRpbWVbbW9tZW50XSA9IHRpbWVbbW9tZW50XSsnMCc7CgkJCX0KCQl9IGVsc2UgaWYgKHRpbWVbbW9tZW50XSA8IDEwKSB7CgkJCXRpbWVbbW9tZW50XSA9ICcwJyArIHRpbWVbbW9tZW50XTsKCQl9Cgl9KTsKCgl2YXIgc3RyID0geSArICcvJyArIG1vICsgJy8nICsgZCArICcgJyArIHRpbWUuaCArICc6JyArIHRpbWUubWkgKyAnOicgKyB0aW1lLnMgKyAnLicgKyB0aW1lLm1zOwoJaWYgKFRTX2xhc3RfbG9nX2RhdGUpIHsKCQl2YXIgZGlmZiA9IGRhdGUtVFNfbGFzdF9sb2dfZGF0ZTsKCQkvL3N0cis9ICcgKCcrZGlmZisnbXMpJzsKCX0KCVRTX2xhc3RfbG9nX2RhdGUgPSBkYXRlOwoJcmV0dXJuIHN0cisnICc7Cn0KCnZhciBwYXJzZURlZXBMaW5rUmVxdWVzdCA9IGZ1bmN0aW9uKGNvZGUpIHsKCXZhciBtID0gY29kZS5tYXRjaCgvImlkIjoiKFtDREddW0EtWjAtOV17OCx9KSIvKTsKCXZhciBpZCA9IG0gPyBtWzFdIDogbnVsbDsKCgltID0gY29kZS5tYXRjaCgvInRlYW0iOiIoVFtBLVowLTldezgsfSkiLyk7Cgl2YXIgdGVhbSA9IG0gPyBtWzFdIDogbnVsbDsKCgltID0gY29kZS5tYXRjaCgvIm1lc3NhZ2UiOiIoWzAtOV0rXC5bMC05XSspIi8pOwoJdmFyIG1lc3NhZ2UgPSBtID8gbVsxXSA6IG51bGw7CgoJcmV0dXJuIHsgaWQ6IGlkLCB0ZWFtOiB0ZWFtLCBtZXNzYWdlOiBtZXNzYWdlIH07Cn0KCmlmICgncmVuZGVyZXJFdmFsQXN5bmMnIGluIHdpbmRvdykgewoJdmFyIG9yaWdSZW5kZXJlckV2YWxBc3luYyA9IHdpbmRvdy5yZW5kZXJlckV2YWxBc3luYzsKCXdpbmRvdy5yZW5kZXJlckV2YWxBc3luYyA9IGZ1bmN0aW9uKGJsb2IpIHsKCQl0cnkgewoJCQl2YXIgZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IoYmxvYikpKTsKCQkJaWYgKGRhdGEuY29kZS5tYXRjaCgvaGFuZGxlRGVlcExpbmsvKSkgewoJCQkJdmFyIHJlcXVlc3QgPSBwYXJzZURlZXBMaW5rUmVxdWVzdChkYXRhLmNvZGUpOwoJCQkJaWYgKCFyZXF1ZXN0LmlkIHx8ICFyZXF1ZXN0LnRlYW0gfHwgIXJlcXVlc3QubWVzc2FnZSkgcmV0dXJuOwoKCQkJCXJlcXVlc3QuY21kID0gJ2NoYW5uZWwnOwoJCQkJVFNTU0IuaGFuZGxlRGVlcExpbmtXaXRoQXJncyhKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSk7CgkJCQlyZXR1cm47CgkJCX0gZWxzZSB7CgkJCQlvcmlnUmVuZGVyZXJFdmFsQXN5bmMoYmxvYik7CgkJCX0KCQl9IGNhdGNoIChlKSB7CgkJfQoJfQp9PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciBUU1NTQiA9IHsKCWNhbGw6IGZ1bmN0aW9uKCkgewoJCXJldHVybiBmYWxzZTsKCX0KfTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKCXZhciB3YXNfVFMgPSB3aW5kb3cuVFM7CglkZWxldGUgd2luZG93LlRTOwoJaWYgKHdhc19UUykgd2luZG93LlRTID0gd2FzX1RTOwp9KTs8L3NjcmlwdD48dGl0bGU+VGhlcmUncyBiZWVuIGEgZ2xpdGNo4oCmIHwgU2xhY2s8L3RpdGxlPjxsaW5rIGhyZWY9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS8zMmU2MC9zdHlsZS9yb2xsdXAtc2xhY2tfa2l0X2xlZ2FjeV9hZGFwdGVycy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48bGluayBocmVmPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYzExMmIvc3R5bGUvcm9sbHVwLXBsYXN0aWMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PGxpbmsgaHJlZj0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L21vZGVybi52ZW5kb3IuYzdhNjE4My5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PGxpbmsgaHJlZj0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L2FwcGxpY2F0aW9uLjE4YjBhODkubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxsaW5rIGhyZWY9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS80ZWQyOWEvc3R5bGUvcm9sbHVwLXNsYWNrX2tpdF9oZWxwZXJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0ic2xhY2tfa2l0X2hlbHBlcnNfc3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48bGluayBocmVmPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vMGM5NzQvc3R5bGUvNDA0LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxsaW5rIGhyZWY9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS81NzAwYS9zdHlsZS9zdGlja3lfbmF2LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxsaW5rIGhyZWY9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS8yZDU3Ny9zdHlsZS9mb290ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PGxpbmsgaHJlZj0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzdhOWE3OC9zdHlsZS9saWJzL2xhdG8tMi1jb21wcmVzc2VkLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIj48bWV0YSBwcm9wZXJ0eT0ib2c6c2l0ZV9uYW1lIiBjb250ZW50PSJTbGFjayI+PG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJUaGVyZSdzIGJlZW4gYSBnbGl0Y2jigKYiPjxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy80MDQvNDA0LW1ldGEtdGh1bWIuanBnIj48bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlJ3JlIG5vdCBxdWl0ZSBzdXJlIHdoYXQgd2VudCB3cm9uZy4gWW91IGNhbiBnbyBiYWNrLCBvciB0cnkgbG9va2luZyBvbiBvdXIgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vZ2V0LnNsYWNrLmhlbHAmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90OyZndDtIZWxwIENlbnRlciZsdDsvYSZndDsgaWYgeW91IG5lZWQgYSBoYW5kLiI+PG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cHM6Ly9zbGFjay5jb20vYXBpL2JhZF9wYXRoIj48bGluayBpZD0iZmF2aWNvbiIgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvbWFya2V0aW5nL2ltZy9tZXRhL2Zhdmljb24tMzIucG5nIiBzaXplcz0iMTZ4MTYgMzJ4MzIgNDh4NDgiIHR5cGU9ImltYWdlL3BuZyI+PC9oZWFkPjxib2R5IGNsYXNzPSIgZGVwcmVjYXRlZCI+PHNjcmlwdD52YXIgdyA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7CmlmICh3ID4gMTQ0MCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmNsYXNzTGlzdC5hZGQoJ3dpZGVzY3JlZW4nKTs8L3NjcmlwdD48bmF2IGNsYXNzPSJ0b3AgcGVyc2lzdGVudCI+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vIiBjbGFzcz0ibG9nbyIgZGF0YS1xYT0ibG9nbyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bG9nbyIgYXJpYS1sYWJlbD0iU2xhY2sgaG9tZXBhZ2UiPjwvYT48dWw+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2lzIiBkYXRhLXFhPSJwcm9kdWN0IiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1uYXZfcHJvZHVjdCI+UHJvZHVjdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS9wcmljaW5nP3VpX3N0ZXA9NTUmYW1wO3VpX2VsZW1lbnQ9NSIgZGF0YS1xYT0icHJpY2luZyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X3ByaWNpbmciPlByaWNpbmc8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9nZXQuc2xhY2suaGVscC9oYy9lbi11cyIgZGF0YS1xYT0ic3VwcG9ydCIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X3N1cHBvcnQiPlN1cHBvcnQ8L2E+PC9saT48bGkgY2xhc3M9Im1vYmlsZV9idG4gZG93bmxvYWRfc2xhY2siPjxhIGhyZWY9Ii9nZXQiIGRhdGEtcWE9ImRvd25sb2FkX3NsYWNrIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1uYXZfZG93bmxvYWQiPkRvd25sb2FkIFNsYWNrPC9hPjwvbGk+PGxpPjxhIGRhdGEtZ3RtLWNsaWNrPSJTaWduVXAsb3B0b3V0X25hdl9jcmVhdGVfdGVhbSIgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vY3JlYXRlIiBjbGFzcz0iIiBkYXRhLXFhPSJjcmVhdGVfdGVhbSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X2NyZWF0ZV90ZWFtIj5DcmVhdGUgYSBuZXcgd29ya3NwYWNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2dldC1zdGFydGVkIy9maW5kIiBkYXRhLWd0bS1jbGljaz0ib3B0b3V0X25hdl9maW5kX3RlYW0iIGRhdGEtcWE9ImZpbmRfdGVhbSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X2ZpbmRfdGVhbSI+RmluZCB5b3VyIHdvcmtzcGFjZTwvYT48L2xpPjxsaSBjbGFzcz0ic2lnbl9pbiBoaWRlX29uX21vYmlsZSI+PGEgZGF0YS1ndG0tY2xpY2s9Im9wdG91dF9uYXZfc2lnbmluIiBocmVmPSJodHRwczovL3NsYWNrLmNvbS9zaWduaW4iIGNsYXNzPSJidG5fc3RpY2t5IGJ0bl9maWxsZWQiIGRhdGEtcWE9InNpZ25faW4iIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9zaWduX2luIj5TaWduIGluPC9hPjwvbGk+PGxpIGNsYXNzPSJtb2JpbGVfYnRuIG1vYmlsZV9tZW51X2J0biI+PGEgaHJlZj0iIyIgY2xhc3M9ImJ0bl9zdGlja3kiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9tb2JpbGVfbWVudV9idG4iPk1lbnU8L2E+PC9saT48L3VsPjwvbmF2PjxuYXYgY2xhc3M9Im1vYmlsZV9tZW51IGxvYWRpbmcgbWVudV9zY3JvbGwiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2IGNsYXNzPSJtb2JpbGVfbWVudV93cmFwcGVyIj48ZGl2IGNsYXNzPSJtb2JpbGVfbWVudV9oZWFkZXIiPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tLyIgY2xhc3M9ImxvZ28iIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9sb2dvIj48L2E+PGEgaHJlZj0iIyIgY2xhc3M9ImNsb3NlIiBhcmlhLWxhYmVsPSJjbG9zZSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X21lbnVfY2xvc2UiPjx0cy1pY29uIGNsYXNzPSJ0c19pY29uIHRzX2ljb25fdGltZXMiPjwvdHMtaWNvbj48L2E+PC9kaXY+PHVsPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS9pcyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X3Byb2R1Y3QiPlByb2R1Y3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vcHJpY2luZz91aV9zdGVwPTU1JmFtcDt1aV9lbGVtZW50PTUiIGNsYXNzPSJtb2JpbGVfbmF2X3ByaWNpbmciIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9wcmljaW5nIj5QcmljaW5nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2V0LnNsYWNrLmhlbHAvaGMvZW4tdXMiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9zdXBwb3J0Ij5TdXBwb3J0PC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9nZXQiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PW5hdl9kb3dubG9hZCI+RG93bmxvYWQgPHNwYW4gY2xhc3M9Im9wdGlvbmFsX2Rlc2t0b3BfbmF2X21lc3NhZ2UiPnRoZSBTbGFjayBhcHA8L3NwYW4+PC9hPjwvbGk+PC91bD48dWwgY2xhc3M9Im1vYmlsZV9tZW51X2Zvb3RlciI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL3NpZ25pbiIgZGF0YS1ndG0tY2xpY2s9Im9wdG91dF9uYXZfc2lnbmluIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9bmF2X3NpZ25faW4iPjx0cy1pY29uIGNsYXNzPSJ0c19pY29uIHNtYWxsIGZsb2F0X25vbmUgdGVhbV9pY29uIHRzX2ljb25fcGx1cyBkZWZhdWx0IHNpZ251cF9pY29uIj48L3RzLWljb24+PHNwYW4gY2xhc3M9InN3aXRjaGVyX2xhYmVsIj5TaWduIGluPC9zcGFuPjwvYT48L2xpPjxsaT48YSBkYXRhLWd0bS1jbGljaz0iU2lnblVwLG9wdG91dF9uYXZfY3JlYXRlX3RlYW0iIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2dldC1zdGFydGVkIy9jcmVhdGUiIGNsYXNzPSIiIHRhcmdldD0iX2JsYW5rIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1uYXZfY3JlYXRlX3RlYW0iPjx0cy1pY29uIGNsYXNzPSJ0c19pY29uIHNtYWxsIGZsb2F0X25vbmUgdGVhbV9pY29uIGMtaWNvbi0tc2xhY2sgZGVmYXVsdCBzaWdudXBfaWNvbiI+PC90cy1pY29uPjxzcGFuIGNsYXNzPSJzd2l0Y2hlcl9sYWJlbCI+Q3JlYXRlIGEgbmV3IHdvcmtzcGFjZTwvc3Bhbj48L2E+PC9saT48L3VsPjwvZGl2PjwvbmF2PjxkaXYgaWQ9InBhZ2UiIGNsYXNzPSIiPjxkaXYgaWQ9InBhZ2VfY29udGVudHMiIGRhdGEtcWE9InBhZ2VfY29udGVudHMiIGNsYXNzPSIiPjxkaXYgaWQ9InByZWxvYWQiPjwvZGl2PjxkaXYgaWQ9ImNvbnRlbnQiIGRhdGEtYmFja2dyb3VuZD0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy80MDQvbWFycmFrZXNoLW1lYWRvdy04MC5qcGciPjxpbWcgaWQ9ImJhY2tncm91bmQiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3Ij48ZGl2IGlkPSJzcHJpdGUtd3JhcHBlciI+PGRpdiBjbGFzcz0ic3ByaXRlIHBpZ2d5IHBpZ2d5X2NoZXdpbmciPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBjaGlja2VuIGNoaWNrZW5fd2Fsa19sciI+PGRpdiBjbGFzcz0ic3ViX3Nwcml0ZSI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic3ByaXRlIGNoaWNrZW4gY2hpY2tlbl9wZWNrXzJ4IGZsaXBwZWQiPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBwaWdneSBwaWdneV93YWxrIHBpZ2d5X3dhbGtfbHIiPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBjaGlja2VuIGNoaWNrZW5fd2Fsa19ybCBmbGlwcGVkIj48ZGl2IGNsYXNzPSJzdWJfc3ByaXRlIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzcHJpdGUgcGlnZ3kgcGlnZ3lfd2FsayBmbGlwcGVkIHBpZ2d5X3dhbGtfcmwiPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBidXR0ZXJmbHkgYnV0dGVyZmx5X2FuZ2xlIGJ1dHRlcmZseV9hbmdsZV9sciI+PC9kaXY+PGRpdiBjbGFzcz0ic3ByaXRlIGJ1dHRlcmZseSBidXR0ZXJmbHlfYW5nbGVfMSBidXR0ZXJmbHlfYW5nbGVfMV9sciI+PC9kaXY+PGRpdiBjbGFzcz0ic3ByaXRlIGJ1dHRlcmZseSBidXR0ZXJmbHlfcm9va2VkIGJ1dHRlcmZseV9yb29rZWRfbHIiPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBidXR0ZXJmbHkgYnV0dGVyZmx5X3NpZGUgYnV0dGVyZmx5X3NpZGVfbHIiPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBidXR0ZXJmbHkgYnV0dGVyZmx5X2FuZ2xlIGZsaXBwZWQgYnV0dGVyZmx5X2FuZ2xlX3JsIGJvdHRvbSI+PC9kaXY+PGRpdiBjbGFzcz0ic3ByaXRlIGJ1dHRlcmZseSBidXR0ZXJmbHlfYW5nbGVfMSBmbGlwcGVkIGJ1dHRlcmZseV9hbmdsZV8xX3JsIGJvdHRvbSI+PC9kaXY+PGRpdiBjbGFzcz0ic3ByaXRlIGJ1dHRlcmZseSBidXR0ZXJmbHlfcm9va2VkIGZsaXBwZWQgYnV0dGVyZmx5X3Jvb2tlZF9ybCBib3R0b20iPjwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZSBidXR0ZXJmbHkgYnV0dGVyZmx5X3NpZGUgZmxpcHBlZCBidXR0ZXJmbHlfc2lkZV9ybCBib3R0b20iPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImxvYWRlciI+PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIiBjbGFzcz0idWlsLWhlYXJ0Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0xMDAgaGVpZ2h0PTEwMCBmaWxsPSJub25lIiBjbGFzcz0iYmsiPjwvcmVjdD48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCA1MCkiPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MCAtNTApIj48cGF0aCBkPSJNOTAsMzAuMmMwLTExLTktMjAuMS0yMC0yMC4xcy0yMCw5LjEtMjAsMjAuMmMwLDAuMiwwLTAuMywwLDAuN0g1MGMwLTEsMC0wLjYsMC0wLjhjMC0xMS05LTIwLjEtMjAtMjAuMXMtMjAsOS4xLTIwLDIwLjIgYzAsMC4yLDAtMC4zLDAsMC43aDBjMC4zLDIwLDMwLDM5LjUsNDAsNTVjMTAtMTUuNSwzOS43LTM1LDQwLTU1aDBDOTAsMzAsOTAsMzAuNCw5MCwzMC4yeiIgZmlsbD0iI2YwMiI+PC9wYXRoPjwvZz48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InNjYWxlIiBmcm9tPSIxLjMiIHRvPSIwLjkiIGR1cj0iMXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBjYWxjTW9kZT0ic3BsaW5lIiB2YWx1ZXM9IjEuMzswLjk7MS4xOzAuOSIga2V5VGltZXM9IjA7MC4zOzAuMzAxOzEiIGtleVNwbGluZXM9IjAgMC43NSAwLjI1IDE7MCAxIDAgMTswIC43NSAuMjUgMSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvZz48L2c+PC9zdmc+PC9kaXY+PGRpdiBjbGFzcz0iY2FyZCI+PGgxPjxpIGNsYXNzPSJ0c19pY29uIHRzX2ljb25fd2FybmluZyBtdXN0YXJkX3llbGxvdyI+PC9pPlRoZXJl4oCZcyBiZWVuIGEgZ2xpdGNo4oCmPC9oMT48cD5XZeKAmXJlIG5vdCBxdWl0ZSBzdXJlIHdoYXQgd2VudCB3cm9uZy4gWW91IGNhbiBnbyBiYWNrLCBvciB0cnkgbG9va2luZyBvbiBvdXIgPGEgaHJlZj0iaHR0cDovL2dldC5zbGFjay5oZWxwL2hjL2VuLXVzIiB0YXJnZXQ9Il9ibGFuayI+SGVscCBDZW50ZXI8L2E+IGlmIHlvdSBuZWVkIGEgaGFuZC48L3A+PC9kaXY+PG5vc2NyaXB0PjxzdHlsZT4jbG9hZGVyIHsKCQkJCQkJZGlzcGxheTogbm9uZTsKCQkJCQl9PC9zdHlsZT48L25vc2NyaXB0PjxzY3JpcHQ+Ci8vIGZpcmUgNDA0CndpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwp3aW5kb3cuZGF0YUxheWVyLnB1c2goewoJJ2V2ZW50JyA6ICdFcnJvcjQwNCcsCn0pOwoKKGZ1bmN0aW9uKCkgewoJLy8gcXVpY2sgaGFjazogOC1iaXQgYWxwaGEtZnJpZW5kbHkgbG9nbwoJdmFyIGxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVhZGVyX2xvZ28nKTsKCXZhciBhbHRfc3JjID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUEFBQUFCSUNBTUFBQUQvRW9pNEFBQUMrbEJNVkVVQUFBQW9GU2NxSWpFb0pUTXJMRFFyTWpnMU1EazdNemdxT0QwOU5Uby9PRDFDT2o5RVBFRkZQVU5JUFVoTlBFbTlIeWxKUVViUEYxeE1SRWxpUFZGZFAxQ3dKMXE4S1NwUFIwek1JVmZMSVZ1Uk0xU3JLMWt3VWs2TE5saUdPRmNzVlZIQkxTZFRTay9QSmw1VlRWSXpXRS9OSzA2L05DalJLMlpaVVZiQ055ck5NMFV5WUZWY1ZGblBOa3hmVmx3dVpsclFOV2hoV0Y3SlBqWmtXMkhVT25ISlJUZkZTQ3BuWDJScVltZHNaR25WUkhYSVVTaHVaV3R4YUc3TVZUTEpXQ3gxYkhGTGVXNGFqSFI0Y0hYYVVvTjBjblpnZ0RWZWdEczdoMnQ4YzNremkyNGhrSGhvZ2plQWRuemJXb1o3ZVgxMGhqWWptSGg3aGpqU2NDeUhmb1EwbUhsL2lUUXVtb0NGaURWNGkwR0RnWVdHaVRiUWRDMUhsWHpnWm81OGowV0hoWWxBblhpSmg0dmdiWkxVZVQ4dHBYN1VmQ3Ara2s0Nm8zM2diNW1NaW80K3BvMmprVFhmZFp1UWpwTFdoQ3VTa0pTbmxEQTRyb2F1bERJNXI0ZVZrNWM4c1lsRHJaK0hvR2ZqZjZPWmxwcURvbTVCdFkyY21aN2pocWVDcVgrZm5hR0Fxb2JjbVM3T25pdFN1Wkdpb0tUVm5pNVF2WnZtajYybG82ZmdvU3VwcHFwZndKOW52YXJlcGpib2w3TnN2Ykd0cXE5MnZiTnl2cm13cmJMaXFrSnR3NlJwd2NodndjS3lyN1J3eHFicm9icHR4Y3poc1U2MnRMaHZ4ODU2eDg5K3lxemx0Vm02dUx6c3FjQit5OVRudUdLK3U4RGt1bUtJejdqdXNjYmx2V3ZCdjhPUHp0TEV3Y2JKdzhLVjFMN3F3M2Z2dXN6SXhzck14OFdYMWRuTXljN3R4NEh1eVltajJzWFJ6TXJ4d3RQUHpkR2oyZC9VenMzVDBOWGowWi9zMEpTbzN1VFkwdEd4Mzh6enk5clgxTm52MUo2eTMrYmMxOVhvMkt5NDRlSzg0dERiMk56eDJLZmYyZGp6MDkrODV0cmwzYnpmM09IejNMSGozdHpGNXVubTROL0k2dURJNmV6bDR1ZjM0cjNxNU9QNTRPcnA1dXY1NXNmVTdmTFY3K2I1Nk0vdDZ1L3c2dW5iOE8vNjZQRDc3ZHJoOCt6dzd2TDM4TnZtOC9UMjhPL3c4dS81Ny9YMjgvajA5dlB1K1BQNjl1Zis5dTd6K1B2ODl2WDYrZS80K3ZmOCtmNzIrLzcvK3ZuNi9QbjgvdnZlZ3YxdUFBQUFBWFJTVGxNQVFPYllaZ0FBQ2dkSlJFRlVlQUhsMmdWNEUya2V4L0gvNm50cHNhYnJ2cVVyU0E2SHRseDdHOXpkWWQwWHlYYWwyU080MHhUM0xtbHdEMXE1V3lTNHV4L2RYbkhiU29xVWFVbWU1NmFaeVp2L1pON0pOSkFUNk9meGZiRHZ6aTl2TTVOQUtibWdMTG0wZkpKNTB2cnJVRWE0MXB2ZEpwMkNzbUc3MmVOM0tBditNRk1wVGlnRDlwcTkvaE9qdHZkdHA0K0ppVzJYQ2NHUTFTb21PaW82Sm00SVBMQ2xLSGdWQkY4VUVTUkRNQXdub3FLZ0JFKzZCMEZYbHdpbVFqQ1lpQ2dYSHRUZnpmL1pUZGNnZ2lRSWh2aEFnbDNIMXkxWWQ5d0ZVcitiNVp1K2UyN2Zqb001RUJRNkloZ0R3V0Fnb2l1ZzZ1SUVZNGtKRjBIQ09jbG4wM2ZQcEZ2YzB1OUNFRlFoZ3VFUURIMUxIM3hqc0ZFdzJLZDR2Ums1d05kU1M0SlJIRWtFUTRJYm5BMHFuT09NSGhPVU5qMzJwKzZmV0xBZDhQQWlnaHI4T1JGbGdvcC9HcjJPc3piTjF6WnYwYUx0ZEF0Mk4zakJwdUFHbndVVjYxRHdBdDlOODdVOStkb1NneXpZQlhob0wvMW5naytEaWdVb2VEQUgySW1mK29pMXZGNFc3Rnp3Z2hPQ0czd1NWS3d3c2pkZGZDNTlUdHNXWHMybjRlQWNlR2poUkJBZjNPQ2pvT0k0RGw3Z3JaM0haMzJDZ2lXYlhnM0JDemI4bDRNNUk4WjVhM25EVUMvZTlQd2NlSGhoUVEzdVMwVDdRZjFGakJ3U2F3VUttNTUvRllJWTNEZTR3WHNnZ0UzLy9HMC92aGI1cGdYeU40dmJ2QjEzSVFCTys1aFdkU1BLaDFXSmJqWjhZNkY2OE9XTjFobEp5YmFkdWFEczhoN2IxTVFaaS9ZN0dNRTdBY3UySFhYS05qMVlyUDJxVStQR2plZmdYdm1tNTZXZks0WUFPTVpFRUVTanR4WDVDWGJaRGQ1ZnJ2dlV6djRmYUlna0hyWGo5L2dOdG9ZUUVobzMzTTVKTjAxcmViK2dYTm1tWmJWcVVsOGl2c0tuT3NHdFBCRjhEaUl1MGZkWFI2V0JMMXNWSWxWamtWTVN2Qlc4WmhCUitlR1NUZE5hWGcrTDBxYTcvN1FOQXBSSVdHcGNsZ1IvQ29KbGtVVE81QVRzWkRTUnEzc1UzeTJoV1V3bFZGZWdpaStrdDJtTXpMWmdJOFRhemorTU1wdVhRbUNzaEMyQkVjeDFKVXdkQUVrclIxaEMwd0RpNWNGSmFDb0Y5T2Z0bHZrV1N3OGN6TmgwNS81OGJZbDdFSWpMb1lUTktnOTIxQ1lLeGdDVnJDRnNzUUFKUkxTWk1hKzY0dW1XdzllVytBWDF5amJka2EvMU9BS0I2RTNZd2psNWNDcFJkQmhFeXI5bWhqd1k5OWJJZ3hLdUhmUXlvbDdwT2IzazRBa3pFdENtdVZCYU9QeG9RVkhlenFseGtqdCt6eng3QTQvVEVSWTg2aXRoUklHT1E4KzBOb0xiR05SN0U5eG9yMnpUdERZSHdEa1RGOThHZGJJTFV1VUtIYmtwakpDd0FrWXdiUFc4SHBzbHBxNWRsaUFlVHZpR0QvK25pRStURmlVUGFWTGVjMUZSY0laUzd3V2F5OXowa2gwNTZGbGV3SnZHbTBvRnI0SXhzY3RBR3R3VlBaUUtINU1MZ3YweHhHTzQ3NkNyMkVEZ3RNV0pyd2tjek82RkxTaDR0blRUZk8xVkY0ak80K0NGRC9KWXJRQ1l5cU5nWWRTaFF4eEFjYkZFRk9kemdmWDREOXlvcStJQTNoQWlTbFBvaFNVb1dMcnBpZDVhZUloTjk1V09UQzBZenBxdUFKWkZSS0djTUhsUlZCRmduSkEvSEFVemUyR2VoYm5wVGwvOS9LdWY1OU43SCtDemdQSlc5V0E1ZEUxUEF6cUZOWm4rLzdaVTNGczdGNEI1aFdmVFdpUHZGbUNYbUp1Ky82OTg4RzhSb1NJVE5oY0VIdHdiVDZRdXdXZWNISzFjaTNycjVvSFhRUXZXZzlieWRnSG1rbS82MnR5bWxiWGFXdVA5Tmp0Q0NGYWxRNks5U0QyWXk5NXYzMytXazd3bXJBQzV4R096eWhFWlFhZ29CeURGODFIdnZDbmYvbWlrZkRiOUQrbW04K2UyMTRvYVhndnNqVWVvZmhIbkwzaG4zeG9hY1JNZHJIbDkwWnV0blVRVXdnRlRFcEVKZFlERVZWck0zd1E1QnhzUjVVMlAvTEw5SzFxdmh2ZEJXVzQ0a1F0TDRwU0MwMm9UTmhQQUd2cXFCSlZnWkJGSTVXeHgzK0NldVl1ZTVmbmQ5TWd1RFY2czlLNFdXd3grN0FrakREV3ltY0VjSG9Uc1ppTVp2VzFtbWtya1FvK0NqK0tjbkdMMFBON3Zwa2QreU5meTZtaXg5dUJQWmpSaGVDbExmQUNBZzdrWW9oeU1MbUFUMVdBa0loY1UrZDAwcmVWVjFXTDExSTVxMWt4alhTaFlQSGE3RW1YeEFGYTFLenlEc01RNWdjbi9wZ3RYL3BXdnBTU2JiZ2hxOXBpaU5jU0hUUmFjSVpsQVZMUGV2V00wK0FxbkVaRU8ySklWeHlIamY5T0ZHNzZvcksyUGVxV2IvZzVLb1REREZCTXF1d0VLdzdlSFVjU2o5cGlUNHBuWEFmMnI5eE9SSmxmOVljTlV0RzliUUpzdUtxbmxWVU85MGsxdmdsTGk3SitXOXg3VnZzSFp0R2VxQ3p5V29WTzZrRjd2TmFwdmM1SUE5TVNqZkdhcE44M1h2aTltdll3bmpUZjlCUVFndHgzeDROQW5ENS9pVitCVVZvTUp2OC9VcXdVUEI0RExZY1NqTGxlcVRjL2FOSUN2cGVvd04xMTU4bjBJU0RNaXlrYkJuNk52YUx6a1pCMjhRL0R0SDdFREpwdERNOStGeDRNQzEyajZQTDdsNjArK1FHTmxtMzVQUEsvR1h3UC8xdlMyb2dCOEQ1ZUhQajNzaTg1b1BTQUdmTTMyZUkrMEs0RHNUeXlBRWphZlk2b0pvVGI2My9UUHJkOTY4b2tubm5oT0svRzJ6NmJyRFQwR2F2WnIrRUZ0QkNTT0NFTEFKOWh6UGxVQkwwY0VlbXVKNzRjalQ0T0hNMGxEWWpqZ3JjWDdsNDQ2d3FHNGFiNzJIYjYyeExPMFZiN3ArcWhXbVV1NHdZbFpVeVM3aFl2RzN3QXc0SnUvYlBBb2lDTWVpZTY1RUNyRUlQd3licEhPUFdJbmZpQmlraC9iWFlITjlkRTdUejFCdmFiRi9reHIzLzdnK3hSUWhVY1cxalVwOWZSUjIvQXErQnpGd2VpbmFBMEhDRElpaWZTWHU2SUlvbXRuK0ZSZkRwMENHZWdGTHh0MUtqQWNHMXF2QXEyVmIvbzlkKzJMSDN4djV2MFJ5RmNMNWNyZnhNRUpBSEJUUTBSaEp2dnB6TFZEcWhBQk9ycXp5aE1sVm9ETitBVXZHM1V1bzVhUGVoTUh5emY5NGwrK05ndTJnenFPS0VxVWY2bWxIZkVqR2Yza1lXb0hzRlVXakgvOXB5Q3hxYUVROVlyNCttVnVtcStsU3JWcFBWR2c1K1RmMDhvdVI1UlpXVGNJU0VRbU9zWEhBTldCc0I4YkRLQlZrazAvcjZVcWY3eXlNTVdNbEdiVG5JRXdSVGxZMzhTemFlUWRzdnRhV3dpek54c0FqdUw1aUhKZkloNVZPS0FtYTZrM1dKdCtwZjNLZlB6OWVKVk5JeHVqaUp5QkE0Rk8raSswK1Y1alU2YjAvVEIrV28zMXZnbTgwK2lFbzFMeHB6RWUrZWdKaG16VGZPM2lmSEM3am9OVG9IVHNUVFErYzdhRFJ3MmZkNU5YV2tsMmtBcVhpV2d0ZmpPakl4TFJXOEV0RXdmTEhoV0h4NldCeDJLYUs5OTAwN241UUtVODBQUHB3bFJEM1hEeEFOWVB6d1N2NU5vMWREcGRqYWpUNEhFMm9hNUd1R015YkFaZTN5Yk45UHBtVGJwZUFleDBZbXlvZU5wSEoyV0R5Tms3TGlhYUYzY1lFSzVKM1E0bTY5WTgxaXRZdHVrL05ib0dtR1RUbHlBUXpzdjdqMlk3WEtDT3k5cC85RElIYWh4Wk96ZWVkVURncE1GbzA4L1UvTXhvdkFIWWRXbndJMnV5RnF2NEJPL3BtdDJNSlg0RERHOTZraE1lV2RjcTQrQlhuM2k2ZWplRnJ4T2ZNbFByNFJFMkhqK1RHL3FSRVpGdTJyblFMSnA1Qng1bEE4WGFXZ04zdS9DM2lXV2J2cmRRN0wwRWo3WmozeldzMVhUZ3B2dkF1NGlESjRDVTg4akNTZWFVN1U1NG5JeG1iUnB4d21OR3N1bmo4UGlUYlBvUWxBRjQweGVoRFBqTlNJMkdzb0FialIvSGx3VVhCNHU5SzZDTXVQR3JlOCs3WEZCbTNMcHg0NVlUSGl2L0JvdVlTSzlZVFRUbkFBQUFBRWxGVGtTdVFtQ0MnOwoJaWYgKGxvZ28pIHsKCQlsb2dvID0gbG9nby5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbMF07CgkJaWYgKCFsb2dvKSByZXR1cm47CgkJbG9nby5zcmMgPSBhbHRfc3JjOwoJfQp9KCkpOwo8L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJvdmVybGF5Ij48L2Rpdj48L2Rpdj48Zm9vdGVyIGRhdGEtcWE9ImZvb3RlciI+PHNlY3Rpb24gY2xhc3M9ImxpbmtzIj48ZGl2IGNsYXNzPSJncmlkIj48ZGl2IGNsYXNzPSJjb2wgc3Bhbl8xX29mXzQgbmF2X2NvbCI+PHVsPjxsaSBjbGFzcz0iY2F0XzEiPlVzaW5nIFNsYWNrPC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vaXMiIGRhdGEtcWE9InByb2R1Y3RfZm9vdGVyIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfcHJvZHVjdCI+UHJvZHVjdDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS9lbnRlcnByaXNlIiBkYXRhLXFhPSJlbnRlcnByaXNlX2Zvb3RlciIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX2VudGVycHJpc2UiPkVudGVycHJpc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vcHJpY2luZz91aV9zdGVwPTI4JmFtcDt1aV9lbGVtZW50PTUiIGRhdGEtcWE9InByaWNpbmdfZm9vdGVyIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfcHJpY2luZyI+UHJpY2luZzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2dldC5zbGFjay5oZWxwL2hjL2VuLXVzIiBkYXRhLXFhPSJzdXBwb3J0X2Zvb3RlciIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX3N1cHBvcnQiPlN1cHBvcnQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZ3VpZGVzIiBkYXRhLXFhPSJnZXR0aW5nX3N0YXJ0ZWQiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9nZXR0aW5nX3N0YXJ0ZWQiPlNsYWNrIEd1aWRlczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS9hcHBzIiBkYXRhLXFhPSJhcHBfZGlyZWN0b3J5IiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfYXBwX2RpcmVjdG9yeSI+QXBwIERpcmVjdG9yeTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2FwaS5zbGFjay5jb20vIiBkYXRhLXFhPSJhcGkiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9hcGkiPkFQSTwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iY29sIHNwYW5fMV9vZl80IG5hdl9jb2wiPjx1bD48bGkgY2xhc3M9ImNhdF8yIj5TbGFjayA8dHMtaWNvbiBjbGFzcz0idHNfaWNvbl9oZWFydCI+PC90cy1pY29uPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2pvYnMiIGRhdGEtcWE9ImpvYnMiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9qb2JzIj5Kb2JzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2N1c3RvbWVycyIgZGF0YS1xYT0iY3VzdG9tZXJzIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfY3VzdG9tZXJzIj5DdXN0b21lcnM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZGV2ZWxvcGVycyIgZGF0YS1xYT0iZGV2ZWxvcGVycyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX2RldmVsb3BlcnMiPkRldmVsb3BlcnM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZXZlbnRzIiBkYXRhLXFhPSJldmVudHMiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9ldmVudHMiPkV2ZW50czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNraHEuY29tLyIgZGF0YS1xYT0iYmxvZ19mb290ZXIiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9ibG9nIj5CbG9nPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJjb2wgc3Bhbl8xX29mXzQgbmF2X2NvbCI+PHVsPjxsaSBjbGFzcz0iY2F0XzMiPkxlZ2FsPC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vcHJpdmFjeS1wb2xpY3kiIGRhdGEtcWE9InByaXZhY3kiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9wcml2YWN5Ij5Qcml2YWN5PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL3NlY3VyaXR5IiBkYXRhLXFhPSJzZWN1cml0eSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX3NlY3VyaXR5Ij5TZWN1cml0eTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS90ZXJtcy1vZi1zZXJ2aWNlIiBkYXRhLXFhPSJ0b3MiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl90b3MiPlRlcm1zIG9mIFNlcnZpY2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vcG9saWNpZXMiIGRhdGEtcWE9InBvbGljaWVzIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfcG9saWNpZXMiPlBvbGljaWVzPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJjb2wgc3Bhbl8xX29mXzQgbmF2X2NvbCI+PHVsPjxsaSBjbGFzcz0iY2F0XzQiPkhhbmR5IExpbmtzPC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZG93bmxvYWRzIiBkYXRhLXFhPSJkb3dubG9hZHMiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9kb3dubG9hZHMiPkRvd25sb2FkIGRlc2t0b3AgYXBwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2Rvd25sb2FkcyIgZGF0YS1xYT0iZG93bmxvYWRzX21vYmlsZSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX2Rvd25sb2Fkc19tb2JpbGUiPkRvd25sb2FkIG1vYmlsZSBhcHA8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vYnJhbmQtZ3VpZGVsaW5lcyIgZGF0YS1xYT0iYnJhbmRfZ3VpZGVsaW5lcyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX2JyYW5kX2d1aWRlbGluZXMiPkJyYW5kIEd1aWRlbGluZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFja2F0d29yay5jb20iIGRhdGEtcWE9InNsYWNrX2F0X3dvcmsiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9zbGFja19hdF93b3JrIj5TbGFjayBhdCBXb3JrPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc3RhdHVzLnNsYWNrLmNvbS8iIGRhdGEtcWE9InN0YXR1cyIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX3N0YXR1cyI+U3RhdHVzPC9hPjwvbGk+PC91bD48L2Rpdj48L2Rpdj48L3NlY3Rpb24+PGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxzZWN0aW9uPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tIiBhcmlhLWxhYmVsPSJTbGFjayBob21lcGFnZSIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX3NsYWNrX2ljb24iPjx0cy1pY29uIGNsYXNzPSJjLWljb24tLXNsYWNrIiBhcmlhLWhpZGRlbj48L3RzLWljb24+PC9hPjx1bD48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vaGVscC9jb250YWN0IiBkYXRhLXFhPSJjb250YWN0X3VzIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfY29udGFjdF91cyI+Q29udGFjdCBVczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL1NsYWNrSFEiIGRhdGEtcWE9InNsYWNrX3R3aXR0ZXIiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9zbGFja190d2l0dGVyIiBhcmlhLWxhYmVsPSJTbGFjayBvbiBUd2l0dGVyIj48dHMtaWNvbiBjbGFzcz0idHNfaWNvbl90d2l0dGVyIiBhcmlhLWhpZGRlbj48L3RzLWljb24+PC9hPjwvbGk+PGxpIGNsYXNzPSJ5dCI+PGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC9VQ1kzWUVDZ2VCY0xDeklyRkxQNGdibHciIGRhdGEtcWE9InNsYWNrX3lvdXR1YmUiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9zbGFja195b3V0dWJlIiBhcmlhLWxhYmVsPSJTbGFjayBvbiBZb3VUdWJlIj48dHMtaWNvbiBjbGFzcz0idHNfaWNvbl95b3V0dWJlIiBhcmlhLWhpZGRlbj48L3RzLWljb24+PC9hPjwvbGk+PC91bD48L3NlY3Rpb24+PC9kaXY+PC9mb290ZXI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovKioKICogQSBwbGFjZWhvbGRlciBmdW5jdGlvbiB0aGF0IHRoZSBidWlsZCBzY3JpcHQgdXNlcyB0bwogKiByZXBsYWNlIGZpbGUgcGF0aHMgd2l0aCB0aGVpciBDRE4gdmVyc2lvbnMuCiAqCiAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlX3BhdGggLSBGaWxlIHBhdGgKICogQHJldHVybnMge1N0cmluZ30KICovCmZ1bmN0aW9uIHZ2dihmaWxlX3BhdGgpIHsKCQkgdmFyIHZ2dl93YXJuaW5nID0gJ1lvdSBjYW5ub3QgdXNlIHZ2diBvbiBkeW5hbWljIHZhbHVlcy4gUGxlYXNlIG1ha2Ugc3VyZSB5b3Ugb25seSBwYXNzIGluIHN0YXRpYyBmaWxlIHBhdGhzLic7IGlmICh3aW5kb3cuVFMgJiYgd2luZG93LlRTLndhcm4pIHsgd2luZG93LlRTLndhcm4odnZ2X3dhcm5pbmcpOyB9IGVsc2UgeyBjb25zb2xlLndhcm4odnZ2X3dhcm5pbmcpOyB9IAoJcmV0dXJuIGZpbGVfcGF0aDsKfQoKdmFyIGNkbl91cmwgPSAiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb20iOwp2YXIgdnZ2X2Fic191cmwgPSAiaHR0cHM6XC9cL3NsYWNrLmNvbVwvIjsKdmFyIGluY19qc19zZXR1cF9kYXRhID0gewoJZW1vamlfc2hlZXRzOiB7CgkJYXBwbGU6ICdodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2Vtb2ppXzIwMTdfMTJfMDYvc2hlZXRfYXBwbGVfNjRfaW5kZXhlZF8yNTYucG5nJywKCQlnb29nbGU6ICdodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2Vtb2ppXzIwMTdfMTJfMDYvc2hlZXRfZ29vZ2xlXzY0X2luZGV4ZWRfMjU2LnBuZycsCgl9LAp9Owo8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CS8vIGNvbW1vbiBib290X2RhdGEKCXZhciBib290X2RhdGEgPSB7ImFwaV91cmwiOiJcL2FwaVwvIiwiYXBwIjoid2ViIiwidXNlcl9pZCI6bnVsbCwidGVhbV9pZCI6IlQwMDAwMDAwMCIsInZpc2l0b3JfdWlkIjoiMnZoaW5pamFqb3RqY2huMTVqOW9vZXM0YyIsIm5vX2xvZ2luIjp0cnVlLCJ2ZXJzaW9uX3RzIjoiMTYwMjI2NTE4NCIsInZlcnNpb25fdWlkIjoiODRlZTZiOTU4YjdiNjQ3YjcwZTVkYzk4YmNkNjJkODRlMTc4NWY0MyIsImNhY2hlX3ZlcnNpb24iOiJ2MjEtbm9tYWQiLCJjYWNoZV90c192ZXJzaW9uIjoidjItYnVubnkiLCJyZWRpcl9kb21haW4iOiJzbGFjay1yZWRpci5uZXQiLCJzaWduaW5fdXJsIjoiaHR0cHM6XC9cL3NsYWNrLmNvbVwvc2lnbmluIiwiYWJzX3Jvb3RfdXJsIjoiaHR0cHM6XC9cL3NsYWNrLmNvbVwvIiwidGVhbV91cmwiOiIiLCJpbWFnZV9wcm94eV91cmwiOiJodHRwczpcL1wvc2xhY2staW1ncy5jb21cLyIsImJlYWNvbl90aW1pbmdfdXJsIjoiaHR0cHM6XC9cL3NsYWNrLmNvbVwvYmVhY29uXC90aW1pbmciLCJiZWFjb25fZXJyb3JfdXJsIjoiaHR0cHM6XC9cL3NsYWNrLmNvbVwvYmVhY29uXC9lcnJvciIsImNsb2dfdXJsIjoiY2xvZ1wvdHJhY2tcLyIsImFwaV90b2tlbiI6IiIsInZ2dl9wYXRocyI6eyJsel9zdHJpbmciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvYnYxLThcL2x6LXN0cmluZy0xLjQuNC53b3JrZXIuOGRlMWIwMGQ2NzBmZjNkYzcwNmEwLmpzIiwiY29kZW1pcnJvciI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC9idjEtOFwvY29kZW1pcnJvci5taW4uNTI2ZjkzNjkyNGVlZjE4ZjAwYmIubWluLmpzIiwiY29kZW1pcnJvcl9hZGRvbl9zaW1wbGUiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvYnYxLThcL2NvZGVtaXJyb3Jfc2ltcGxlLjliYzc2YmIzMjYwYTVlZDBlNWRjLm1pbi5qcyIsImNvZGVtaXJyb3JfbG9hZCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC9idjEtOFwvY29kZW1pcnJvcl9sb2FkLmYxYTM3ZjRlNDg2YjJjMjIxMDViLm1pbi5qcyIsImNvZGVtaXJyb3JfZmlsZXMiOnsiamF2YXNjcmlwdCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC9idjEtOFwvY29kZW1pcnJvcl9sYW5nX2phdmFzY3JpcHQuYjI5NWVmODc2ZWVkYWZlODNiMzkubWluLmpzIn19LCJub3RpZmljYXRpb25fc291bmRzIjpbeyJ2YWx1ZSI6ImIyLm1wMyIsImxhYmVsIjoiRGluZyIsInVybCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC83ZTkxXC9zb3VuZHNcL3B1c2hcL2IyLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYjIub2dnIn0seyJ2YWx1ZSI6ImFuaW1hbF9zdGljay5tcDMiLCJsYWJlbCI6IkJvaW5nIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvYW5pbWFsX3N0aWNrLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYW5pbWFsX3N0aWNrLm9nZyJ9LHsidmFsdWUiOiJiZWVuX3RyZWUubXAzIiwibGFiZWwiOiJEcm9wIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvYmVlbl90cmVlLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYmVlbl90cmVlLm9nZyJ9LHsidmFsdWUiOiJjb21wbGV0ZV9xdWVzdF9yZXF1aXJlbWVudC5tcDMiLCJsYWJlbCI6IlRhLWRhIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvY29tcGxldGVfcXVlc3RfcmVxdWlyZW1lbnQubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9jb21wbGV0ZV9xdWVzdF9yZXF1aXJlbWVudC5vZ2cifSx7InZhbHVlIjoiY29uZmlybV9kZWxpdmVyeS5tcDMiLCJsYWJlbCI6IlBsaW5rIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvY29uZmlybV9kZWxpdmVyeS5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2NvbmZpcm1fZGVsaXZlcnkub2dnIn0seyJ2YWx1ZSI6ImZsaXR0ZXJidWcubXAzIiwibGFiZWwiOiJXb3ciLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9mbGl0dGVyYnVnLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvZmxpdHRlcmJ1Zy5vZ2cifSx7InZhbHVlIjoiaGVyZV95b3VfZ29fbGlnaHRlci5tcDMiLCJsYWJlbCI6IkhlcmUgeW91IGdvIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvaGVyZV95b3VfZ29fbGlnaHRlci5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2hlcmVfeW91X2dvX2xpZ2h0ZXIub2dnIn0seyJ2YWx1ZSI6ImhpX2Zsb3dlcnNfaGl0Lm1wMyIsImxhYmVsIjoiSGkiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9oaV9mbG93ZXJzX2hpdC5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2hpX2Zsb3dlcnNfaGl0Lm9nZyJ9LHsidmFsdWUiOiJrbm9ja19icnVzaC5tcDMiLCJsYWJlbCI6Iktub2NrIEJydXNoIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwva25vY2tfYnJ1c2gubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9rbm9ja19icnVzaC5vZ2cifSx7InZhbHVlIjoic2F2ZV9hbmRfY2hlY2tvdXQubXAzIiwibGFiZWwiOiJXaG9hISIsInVybCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC83ZTkxXC9zb3VuZHNcL3B1c2hcL3NhdmVfYW5kX2NoZWNrb3V0Lm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvc2F2ZV9hbmRfY2hlY2tvdXQub2dnIn0seyJ2YWx1ZSI6Iml0ZW1fcGlja3VwLm1wMyIsImxhYmVsIjoiWW9pbmsiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9pdGVtX3BpY2t1cC5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2l0ZW1fcGlja3VwLm9nZyJ9LHsidmFsdWUiOiJodW1tdXMubXAzIiwibGFiZWwiOiJIdW1tdXMiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2ZhOVwvc291bmRzXC9wdXNoXC9odW1tdXMubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9odW1tdXMub2dnIn0seyJ2YWx1ZSI6Im5vbmUiLCJsYWJlbCI6Ik5vbmUifV0sImFsZXJ0X3NvdW5kcyI6W3sidmFsdWUiOiJmcm9nLm1wMyIsImxhYmVsIjoiRnJvZyIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcL2EzNGFcL3NvdW5kc1wvZnJvZy5tcDMifV0sImNhbGxfc291bmRzIjpbeyJ2YWx1ZSI6ImNhbGxcL2FsZXJ0X3YyLm1wMyIsImxhYmVsIjoiQWxlcnQiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL2FsZXJ0X3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC9pbmNvbWluZ19yaW5nX3YyLm1wMyIsImxhYmVsIjoiSW5jb21pbmcgcmluZyIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwvaW5jb21pbmdfcmluZ192Mi5tcDMifSx7InZhbHVlIjoiY2FsbFwvb3V0Z29pbmdfcmluZ192Mi5tcDMiLCJsYWJlbCI6Ik91dGdvaW5nIHJpbmciLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL291dGdvaW5nX3JpbmdfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3BvcF92Mi5tcDMiLCJsYWJlbCI6IkluY29taW5nIHJlYWN0aW9uIiwidXJsIjoiaHR0cHM6XC9cL3NsYWNrLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldFwvMDhmN1wvc291bmRzXC9jYWxsXC9wb3BfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3RoZXlfbGVmdF9jYWxsX3YyLm1wMyIsImxhYmVsIjoiVGhleSBsZWZ0IGNhbGwiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL3RoZXlfbGVmdF9jYWxsX3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC95b3VfbGVmdF9jYWxsX3YyLm1wMyIsImxhYmVsIjoiWW91IGxlZnQgY2FsbCIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwveW91X2xlZnRfY2FsbF92Mi5tcDMifSx7InZhbHVlIjoiY2FsbFwvdGhleV9qb2luZWRfY2FsbF92Mi5tcDMiLCJsYWJlbCI6IlRoZXkgam9pbmVkIGNhbGwiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL3RoZXlfam9pbmVkX2NhbGxfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3lvdV9qb2luZWRfY2FsbF92Mi5tcDMiLCJsYWJlbCI6IllvdSBqb2luZWQgY2FsbCIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwveW91X2pvaW5lZF9jYWxsX3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC9jb25maXJtYXRpb25fdjIubXAzIiwibGFiZWwiOiJDb25maXJtYXRpb24iLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL2NvbmZpcm1hdGlvbl92Mi5tcDMifV0sImNhbGxfc291bmRzX3ZlcnNpb24iOiJ2MiIsImltZyI6eyJhcHBfaWNvbiI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC84MDU4OFwvaW1nXC9zbGFja19ncm93bF9pY29uX3ZvZ3VlLnBuZyJ9LCJwYWdlX25lZWRzX2VudGVycHJpc2UiOmZhbHNlLCJwYWdlX25lZWRzX2N1c3RvbV9lbW9qaSI6ZmFsc2UsImlzX2RlcHJlY2F0ZWRfd2ViY2xpZW50X2Jyb3dzZXIiOmZhbHNlLCJpc191bnN1cHBvcnRlZF93ZWJjbGllbnRfYnJvd3NlciI6dHJ1ZSwiZGVmYXVsdF90eiI6IkFtZXJpY2FcL0xvc19BbmdlbGVzIiwiZmVhdHVyZV9kaXNwbGF5X2VtYWlsX2FkZHJlc3Nlc190b19yYWRpbyI6ZmFsc2UsImZlYXR1cmVfaWNvbl9idXR0b25fYXJpYV9sYWJlbF9pMThuIjpmYWxzZSwiZmVhdHVyZV9hbHRfY2hhbm5lbHNfcmVkdWNlciI6ZmFsc2UsImZlYXR1cmVfanNmXzE2MTkiOnRydWUsImZlYXR1cmVfZGVza3RvcF9sYXp5X2xvYWRfZW1vamkiOmZhbHNlLCJmZWF0dXJlX2VkdV84OF9nYSI6ZmFsc2UsImZlYXR1cmVfZXhwb3J0X3ByZWZfdG9fZGlzYWJsZSI6ZmFsc2UsImZlYXR1cmVfYWRkX21lbWJlcl9zdGF0c19hcGkiOmZhbHNlLCJmZWF0dXJlX21lbWJlcl9hbmFseXRpY3NfcGVybWlzc2lvbnMiOmZhbHNlLCJmZWF0dXJlX2J1bGtfdXNlcl9yZWFjdGl2YXRpb25fZ3JpZCI6dHJ1ZSwiZmVhdHVyZV9idWlsZGVyX211bHRpc3RlcF9jb2xsYWJvcmF0b3JzX21vZGFsIjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX2FsbG93X2N1c3RvbV90aW1lX3NjaGVkdWxlZF90cmlnZ2VyIjp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfc2NoZWR1bGVkX3RyaWdnZXIiOnRydWUsImZlYXR1cmVfYnVpbGRlcl9tZXNzYWdlX2J1dHRvbl9oZWxwZXJfdGV4dCI6ZmFsc2UsImZlYXR1cmVfYnVpbGRlcl9jcmVhdGlvbl9vcmdfcG9saWN5Ijp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfZXh0ZW5zaW9ucyI6dHJ1ZSwiZmVhdHVyZV9idWlsZGVyX2V4dGVuc2lvbl9zdGVwc19wcmVmIjp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfYWNjZXNzX2Vycm9yX2NvbnRlbnQiOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfcGFnaW5hdGVfd29ya2Zsb3dzX2xpc3QiOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfc3RlcF9saWJyYXJ5Ijp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfdGVhbV9hcHBzX3RyYW5zbGF0aW9ucyI6ZmFsc2UsImZlYXR1cmVfYnVpbGRlcl9hcHBzX2NvbGxlY3Rpb25fbGluayI6ZmFsc2UsImZlYXR1cmVfYXBwc19jYW5fc3VibWl0X3dpdGhfd29ya2Zsb3dfc3RlcHMiOnRydWUsImZlYXR1cmVfYnVpbGRlcl9mZWVkYmFja19idXR0b24iOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfbWVzc2FnZV9zdGVwX3JpY2hfdGV4dCI6dHJ1ZSwiZmVhdHVyZV9jaGltZV9hY2Nlc3NfY2hlY2siOnRydWUsImZlYXR1cmVfYXBwX3ZpZXdzX3YxIjp0cnVlLCJmZWF0dXJlX2F1ZGl0X2xvZ3NfdmlldyI6ZmFsc2UsImZlYXR1cmVfYXVkaXRfbG9nc192aWV3X3dvcmtzcGFjZSI6ZmFsc2UsImZlYXR1cmVfb3JnX3RlYW1zX2luX2xvY2FsX2NvbmZpZyI6dHJ1ZSwiZmVhdHVyZV9kYXRhX2xvY2F0aW9uX25ld190cmFuc2xhdGlvbnMiOmZhbHNlLCJmZWF0dXJlX2RlZmF1bHRfYnJvd3Nlcl9jb250cm9sX3YyIjp0cnVlLCJmZWF0dXJlX2FjY2Vzc2libGVfc2VsZWN0cyI6dHJ1ZSwiZmVhdHVyZV9zZWxlY3Rfb25fdGFiIjp0cnVlLCJmZWF0dXJlX3Byb25vdW5zX2luX3Byb2ZpbGUiOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfZGlzYWJsZV9nbG9iYWxfdHJpZ2dlcnMiOnRydWUsImZlYXR1cmVfd29ya2Zsb3dfYnVpbGRlcl9lbmFibGVkX29yZ19zZXR0aW5nIjp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfY2FuX2FjY2VzcyI6ZmFsc2UsImZlYXR1cmVfYWx3YXlzX3Nob3dfYXJjaGl2ZV9jaGFubmVsX29wdGlvbiI6dHJ1ZSwiZmVhdHVyZV9vcmdfZGFzaGJvYXJkX2dhbnRyeV9hY2Nlc3MiOmZhbHNlLCJmZWF0dXJlX29yZ19kYXNoX2dhbnRyeV9yZWRpcmVjdCI6ZmFsc2UsImZlYXR1cmVfb3JnX2Rhc2hib2FyZF9nYW50cnlfYXBwc19taWdyYXRpb24iOmZhbHNlLCJmZWF0dXJlX2luZm9fYmFycmllcnMiOmZhbHNlLCJmZWF0dXJlX2RheTJfc2hhcmVfbW9kYWwiOmZhbHNlLCJmZWF0dXJlX2dyYW51bGFyX2RuZCI6ZmFsc2UsImZlYXR1cmVfY3VzdG9tX2RuZF90cmFuc2xhdGlvbnMiOmZhbHNlLCJmZWF0dXJlX2luZm9ybWF0aXZlX2Fubm91bmNlX29ubHlfZm9vdGVyX3RyYW5zbGF0aW9ucyI6ZmFsc2UsImZlYXR1cmVfY29udGV4dF9iYXJfdHpfaXNzdWVzIjpmYWxzZSwiZmVhdHVyZV9uZXd4cF80NDAxIjp0cnVlLCJmZWF0dXJlX25ld3hwXzQyODEiOnRydWUsImZlYXR1cmVfbmV3eHBfMzg0OCI6dHJ1ZSwiZmVhdHVyZV9kYXkxX2NvbnZvIjp0cnVlLCJmZWF0dXJlX2RheTFfY29tZnlfc2lkZWJhcl9jb3B5IjpmYWxzZSwiZmVhdHVyZV9kYXkxX2NyZWF0b3JfbGFuZGluZ19jb3B5IjpmYWxzZSwiZmVhdHVyZV9jaGFubmVsX2Jyb3dzZXJfZGF5MSI6dHJ1ZSwiZmVhdHVyZV9iYW5uZXJfYXBwX3JlY3MiOnRydWUsImZlYXR1cmVfY29weV9qb2luZXJfZmxvdyI6dHJ1ZSwiZmVhdHVyZV9hcHByb3ZlZF9vcmdzIjpmYWxzZSwiZmVhdHVyZV9uZXd4cF8zMjc5Ijp0cnVlLCJmZWF0dXJlX25ld3hwXzQxNjAiOnRydWUsImZlYXR1cmVfbmV3eHBfNDE1MyI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF80MjAyIjp0cnVlLCJmZWF0dXJlX25ld3hwXzQzMTMiOmZhbHNlLCJmZWF0dXJlX3RpbnlzcGVjayI6ZmFsc2UsImZlYXR1cmVfcXJfY29kZV9pbnZpdGUiOmZhbHNlLCJmZWF0dXJlX2dlbmVyYXRlX2xpZ2h0d2VpZ2h0X2RtX2xpbmsiOmZhbHNlLCJmZWF0dXJlX2Nvbm5lY3RfZG1fZWFybHlfYWNjZXNzIjp0cnVlLCJmZWF0dXJlX29sdWdfZXNjX2NoYW5uZWxzX3dvcmsiOnRydWUsImZlYXR1cmVfb2x1Z19yZW1vdmVfcmVxdWlyZWRfd29ya3NwYWNlX3NldHRpbmciOmZhbHNlLCJmZWF0dXJlX2RhdGFfdGFibGVfaW5fb3JnX2xldmVsX3VzZXJfZ3JvdXBzIjpmYWxzZSwiZmVhdHVyZV9vcmdfc2V0dGluZ3NfbTExbiI6ZmFsc2UsImZlYXR1cmVfZGVwcmVjYXRlX2dldF9tZW1iZXJfYnlfbmFtZSI6ZmFsc2UsImZlYXR1cmVfdW5rbm93bl9maWxlcyI6dHJ1ZSwiZmVhdHVyZV91bmtub3duX21lc3NhZ2VzIjp0cnVlLCJmZWF0dXJlX2FkZF9tZXNzYWdlX3BlcmYiOmZhbHNlLCJmZWF0dXJlX2ZpeF9jdXN0b21fZW1vamlfZXJyb3JzIjp0cnVlLCJmZWF0dXJlX21vZGVybl9kZWxldGVfZmlsZSI6dHJ1ZSwiZmVhdHVyZV9jb3B5X2NoYW5uZWxfbGluayI6dHJ1ZSwiZmVhdHVyZV9jb2xsYXBzZV9yZWFjdGlvbnMiOmZhbHNlLCJmZWF0dXJlX2lhX3N0YXR1c19idXR0b24iOnRydWUsImZlYXR1cmVfZnVsbF9wcm9maWxlX2xpbmsiOnRydWUsImZlYXR1cmVfcHJpbnRfcGRmIjpmYWxzZSwiZmVhdHVyZV9zYWZhcmkxMF9kZXByZWNhdGlvbiI6dHJ1ZSwiZmVhdHVyZV9zYWZhcmkxMF9kZXByZWNhdGlvbl9tb2RhbCI6dHJ1ZSwiZmVhdHVyZV9zYWZhcmkxMF9kZXByZWNhdGlvbl9ibG9jayI6ZmFsc2UsImZlYXR1cmVfZGVza3RvcDQ2MF9kZXByZWNhdGlvbiI6ZmFsc2UsImZlYXR1cmVfZGVza3RvcDQ2MF9kZXByZWNhdGlvbl9ibG9jayI6ZmFsc2UsImZlYXR1cmVfZW1haWxfd29ya2Zsb3ciOmZhbHNlLCJmZWF0dXJlX3dpZGVyX3JlYWN0aW9uX3RpcCI6ZmFsc2UsImZlYXR1cmVfZmlsZV9waWNrZXJfc2VhcmNoIjpmYWxzZSwiZmVhdHVyZV9zb3J0X2J5X3JlY2VuY3lfcG9zdF92MSI6ZmFsc2UsImZlYXR1cmVfc2VuZF9mYWlsZWRfdG9hc3QiOmZhbHNlLCJmZWF0dXJlX2F1ZGlvX3BsYXllciI6ZmFsc2UsImZlYXR1cmVfZWFnZXJseV9tYXJrX2Jyb2FkY2FzdHMiOmZhbHNlLCJmZWF0dXJlX3Nob3dfcmVwbGllc19pbW1lZGlhdGVseSI6ZmFsc2UsImZlYXR1cmVfY29tcG9zZXJfZXNjYXBlX2hhdGNoIjpmYWxzZSwiZmVhdHVyZV9jb21wb3Nlcl9lbWFpbF9jbGFzc2lmaWNhdGlvbiI6ZmFsc2UsImZlYXR1cmVfYW1hem9uX2ExMXlfY3VzdG9tX3N0YXR1c19lbW9qaSI6dHJ1ZSwiZmVhdHVyZV9ieWVfc2xhY2tib3RfaGVscCI6dHJ1ZSwiZmVhdHVyZV9hbGxfZG1fbXV0ZV9ib3RzIjp0cnVlLCJmZWF0dXJlX2ZpbGVfdGhyZWFkcyI6dHJ1ZSwiZmVhdHVyZV9icm9hZGNhc3RfaW5kaWNhdG9yIjp0cnVlLCJmZWF0dXJlX25ld19yZXBsaWVzX2FmdGVyX2JjYXN0Ijp0cnVlLCJmZWF0dXJlX3NvbmljX2Vtb2ppIjp0cnVlLCJmZWF0dXJlX2Vtb2ppXzEyIjpmYWxzZSwiZmVhdHVyZV9lbWFpbF9pbmdlc3Rpb24iOmZhbHNlLCJmZWF0dXJlX2F0dGFjaG1lbnRzX2lubGluZSI6ZmFsc2UsImZlYXR1cmVfZml4X2ZpbGVzIjp0cnVlLCJmZWF0dXJlX2FhYV9hZG1pbl9hcGlzIjp0cnVlLCJmZWF0dXJlX3JlbW92ZV9hY3Rpb25zX2Zyb21fc2lkZWJhciI6ZmFsc2UsImZlYXR1cmVfc2hvcnRjdXRzX3YyX2VkdWNhdGlvbiI6dHJ1ZSwiZmVhdHVyZV9wYWRfMTUzNCI6ZmFsc2UsImZlYXR1cmVfc2hvcnRjdXRzX21lbnVfY2xlYW51cF9pMThuIjpmYWxzZSwiZmVhdHVyZV9hcHBfbGF1bmNoZXJfYWRkX2ljb24iOmZhbHNlLCJmZWF0dXJlX2FwcF9sYXVuY2hlcl9iYW5uZXJzIjpmYWxzZSwiZmVhdHVyZV9hcHBfbGF1bmNoZXJfc2VhcmNoX3BhZ2luYXRpb24iOmZhbHNlLCJmZWF0dXJlX2NoYW5uZWxfc2lkZWJhcl9kcmFmdHNfc2VjdGlvbiI6dHJ1ZSwiZmVhdHVyZV9uYXZpZ2F0ZV9oaXN0b3J5Ijp0cnVlLCJmZWF0dXJlX2kxOG5fZHJhZnRzIjpmYWxzZSwiZmVhdHVyZV9jb21wb3Nlcl91cmFfbXBkbSI6ZmFsc2UsImZlYXR1cmVfcmVjZW50X3N0YXR1c19kZWxldGUiOmZhbHNlLCJmZWF0dXJlX2NvbXBvc2VfZmxvdyI6ZmFsc2UsImZlYXR1cmVfY29tcG9zZV9mbG93X3h3cyI6dHJ1ZSwiZmVhdHVyZV9mYXN0ZXJfY291bnRfYWxsX3VucmVhZHMiOnRydWUsImZlYXR1cmVfc29uaWNfdXNlcl9ncm91cHMiOmZhbHNlLCJmZWF0dXJlX2NoYW5uZWxfc2VsZWN0b3JfZm9yX3RlYW1fZ3Vlc3RzX3VwZGF0ZSI6ZmFsc2UsImZlYXR1cmVfc2tfZGF0YV90YWJsZV9hMTF5IjpmYWxzZSwiZmVhdHVyZV9za19kYXRhX3RhYmxlX3Bpbm5lZF9yb3dzX2FuZF9jb2x1bW5zIjpmYWxzZSwiZmVhdHVyZV9kZXNrdG9wX3N5bXB0b21fZXZlbnRzIjpmYWxzZSwiZmVhdHVyZV9kYXRhX3Jlc2lkZW5jeV9kZWJ1Z2dpbmciOmZhbHNlLCJmZWF0dXJlX25ld19zdWJ0ZWFtX2xpbmtlZF9jaGFubmVsX2xpbWl0Ijp0cnVlLCJmZWF0dXJlX3N1YnRlYW1fdXNlcl9saW1pdCI6dHJ1ZSwiZmVhdHVyZV9lbnRfYWRtaW5fYXBwcm92ZWRfYXBwc192MiI6dHJ1ZSwiZmVhdHVyZV9kYXNoYm9hcmRfc29ydGFibGVfbGlzdHMiOmZhbHNlLCJmZWF0dXJlX3NrX2xvYWRpbmdfYnV0dG9uX21vdGlvbnMiOnRydWUsImZlYXR1cmVfc2tfYmFzZV9pY29uIjpmYWxzZSwiZmVhdHVyZV9za19iYXNpY19zZWxlY3RfYXJpYWxhYmVsIjpmYWxzZSwiZmVhdHVyZV9za19yZXF1aXJlZF9hcmlhbGFiZWwiOmZhbHNlLCJmZWF0dXJlX2NlX2VuZ19jb25uZWN0X2RtcyI6dHJ1ZSwiZmVhdHVyZV9jZV9lbmdfc2VhcmNoX2RlbW8iOmZhbHNlLCJmZWF0dXJlX2NlX2VuZ19oZWxwX3ZpdGVzcyI6ZmFsc2UsImZlYXR1cmVfY2VfZW5nX3ZlcmlmaWVkX3RpY2tldHMiOmZhbHNlLCJmZWF0dXJlX2FwcF9kaXJfcGhvZW5peCI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX211bHRpX29yZyI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX211bHRpX29yZ19tcGltIjp0cnVlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19tdWx0aV9vcmdfbXBpbV9mZSI6dHJ1ZSwiZmVhdHVyZV9jaGF0X21waW1fb3Blbl9yZWZhY3Rvcl9mZV9jb3B5Ijp0cnVlLCJmZWF0dXJlX2ZpbmRfYW5fYWRtaW5fZGlzY29ubmVjdF9leHBsYWluZXIiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19tdWx0aV9vcmdfaW52aXRlc19iZSI6ZmFsc2UsImZlYXR1cmVfc2xhY2tfY29ubmVjdF9pbnZpdGVfdW5mdXJsX2NvcHkiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19sZWdhY3lfcmVjb25uZWN0Ijp0cnVlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19tdWx0aV9vcmdfcWFfbGltaXRfb3ZlcnJpZGUiOmZhbHNlLCJmZWF0dXJlX211bHRpX3dvcmtzcGFjZV9zaGFyZWRfY2hhbm5lbHNfYmUiOmZhbHNlLCJmZWF0dXJlX2VzY190b19td3NjX3Byb3RvdHlwZV9iZSI6ZmFsc2UsImZlYXR1cmVfbXdzY194d3NfdG9fZXNjIjpmYWxzZSwiZmVhdHVyZV9yZXZva2VfZXNjX2ludml0ZXNfZmUiOmZhbHNlLCJmZWF0dXJlX213c2NfZXNjX3RvX3h3cyI6ZmFsc2UsImZlYXR1cmVfcmVtb3ZlX2RvdWJsZV9yaW5ncyI6ZmFsc2UsImZlYXR1cmVfcmVtb3ZlX2RvdWJsZV9kaWFtb25kcyI6ZmFsc2UsImZlYXR1cmVfY2hhbm5lbHNfdmlld19pbl9tc2MiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19lbW9qaV9kZWxpZ2h0Ijp0cnVlLCJmZWF0dXJlX2NyZWF0ZV9wcml2YXRlX2NfY2hhbm5lbHMiOmZhbHNlLCJmZWF0dXJlX2dkcHJfdXNlcl9qb2luX3RvcyI6dHJ1ZSwiZmVhdHVyZV91c2VyX2ludml0ZV90b3NfYXByaWxfMjAxOCI6dHJ1ZSwiZmVhdHVyZV9ub19tb3JlX2dldF9vcmlnaW5hdGluZ190ZWFtX2ZlIjp0cnVlLCJmZWF0dXJlX3JvbGVzX2FyZV9mcmVzaF9waGFzZV8xIjpmYWxzZSwiZmVhdHVyZV9jaGFubmVsX21nbXRfbWVzc2FnZV9jb3VudCI6ZmFsc2UsImZlYXR1cmVfYW9wc18zMzIwX3JldHVybl91c2VyX2lkc19hbmRfZXJyb3Jfc3RyaW5ncyI6dHJ1ZSwiZmVhdHVyZV9mdW5uZWxfY2FrZSI6ZmFsc2UsImZlYXR1cmVfbmV1ZV90eXBlIjpmYWxzZSwiZmVhdHVyZV9jdXN0X2FjcV9pMThuX3R3ZWFrcyI6ZmFsc2UsImZlYXR1cmVfZXhwb3J0c19jb3B5X3VwZGF0ZXMiOnRydWUsImZlYXR1cmVfd2hpdGVsaXN0X3plbmRlc2tfY2hhdF93aWRnZXQiOmZhbHNlLCJmZWF0dXJlX2NvbW1lbmRhdGlvbnNfc3B5Ijp0cnVlLCJmZWF0dXJlX3h3c19pMThuIjpmYWxzZSwiZmVhdHVyZV91c2VfaW1ncHJveHlfcmVzaXppbmciOnRydWUsImZlYXR1cmVfc2hhcmVfbWVudGlvbl9jb21tZW50X2NsZWFudXAiOmZhbHNlLCJmZWF0dXJlX2JvYXJkc19pMThuIjpmYWxzZSwiZmVhdHVyZV9kaXNhYmxlX2JrX2luX3RocmVhZCI6ZmFsc2UsImZlYXR1cmVfbmV3X2xvY2FsZV90b2FzdCI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2V4cG9ydHMiOmZhbHNlLCJmZWF0dXJlX2RvY3NfbWVudGlvbnNfYW5kX2NoYW5uZWxzIjpmYWxzZSwiZmVhdHVyZV9jYWxsc19zdXJ2ZXlfcmVxdWVzdF9yZXNwb25zZSI6dHJ1ZSwiZmVhdHVyZV90b2tlbl9pcF93aGl0ZWxpc3QiOnRydWUsImZlYXR1cmVfc2lkZWJhcl90aGVtZV91bmRvIjp0cnVlLCJmZWF0dXJlX2FsbG93X2ludHJhX3dvcmRfZm9ybWF0dGluZyI6dHJ1ZSwiZmVhdHVyZV9pMThuX2NoYW5uZWxzX3ZhbGlkYXRlX2Vtb2ppIjp0cnVlLCJmZWF0dXJlX2Z3X2VuZ19ub3JtYWxpemF0aW9uIjp0cnVlLCJmZWF0dXJlX3NsaW1fc2Nyb2xsYmFyIjpmYWxzZSwiZmVhdHVyZV9wcmltYXJ5X3NlYXJjaCI6ZmFsc2UsImZlYXR1cmVfbW9kZXJuX3NvdW5kcyI6ZmFsc2UsImZlYXR1cmVfcXVpY2tfY29weV9jb2RlX2Jsb2NrcyI6dHJ1ZSwiZmVhdHVyZV9zdGVlcGxlX2NodXJjaCI6dHJ1ZSwiZmVhdHVyZV9zdGVlcGxlX2NodXJjaF9saW5rIjp0cnVlLCJmZWF0dXJlX3N0ZWVwbGVfY2h1cmNoX2V4dCI6dHJ1ZSwiZmVhdHVyZV9zdHJvbGxlcnNfdG9fcGVyY2giOnRydWUsImZlYXR1cmVfZmlsZV9icm93c2VyX3YyIjpmYWxzZSwiZmVhdHVyZV9wZW9wbGVfc2VhcmNoIjpmYWxzZSwiZmVhdHVyZV9yZWFjdF9tZXNzYWdlcyI6dHJ1ZSwiZmVhdHVyZV9lZGdlX3VwbG9hZF9wcm94eV9jaGVjayI6ZmFsc2UsImZlYXR1cmVfdW5yZWFkX2NvdW50c19kZWxheSI6dHJ1ZSwiZmVhdHVyZV9sZWdhY3lfZmlsZV91cGxvYWRfYW5hbHl0aWNzIjp0cnVlLCJmZWF0dXJlX21wZG1fbGltaXRfY2hhbm5lbF9jcmVhdGlvbiI6ZmFsc2UsImZlYXR1cmVfc25pcHBldF9tb2Rlc19pMThuIjpmYWxzZSwiZmVhdHVyZV9la21fbWVzc2FnZV9yZXZvY2F0aW9uX3BvbGxpbmdfdGVzdCI6ZmFsc2UsImZlYXR1cmVfdGVhbV9hZG1pbnNfbGlzdF9hcGkiOnRydWUsImZlYXR1cmVfbW92ZWRfZGV0YWlscyI6ZmFsc2UsImZlYXR1cmVfYWx0X21lbWJlcnNfcmVkdWNlciI6ZmFsc2UsImZlYXR1cmVfbXNfbGF0ZXN0Ijp0cnVlLCJmZWF0dXJlX2d1ZXN0c191c2VfZW50aXRsZW1lbnRzIjp0cnVlLCJmZWF0dXJlX3Jvb21zX2pvaW5fYXBpIjp0cnVlLCJmZWF0dXJlX3Jvb21zX2pvaW5fdXJsIjpmYWxzZSwiZmVhdHVyZV9jYWxsc19zaXBfaW50ZWdyYXRpb25fbGFiZWxzIjpmYWxzZSwiZmVhdHVyZV90YXNrc192MV9jb3B5IjpmYWxzZSwiZmVhdHVyZV9jYWxsc19jb252ZXJzYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9jdXN0b21fc3RhdHVzX2NhbGVuZGFyX3N5bmNfY29weSI6dHJ1ZSwiZmVhdHVyZV9jdXN0b21fc3RhdHVzX2NhbGVuZGFyX3N5bmMiOmZhbHNlLCJmZWF0dXJlX21hc2tfdW5kb2N1bWVudGVkX2Vycm9ycyI6ZmFsc2UsImZlYXR1cmVfYXBwX2FjdGlvbnNfYWRtaW5fcGFnZXMiOnRydWUsImZlYXR1cmVfYXBwX3ZpZXdzX3JlbWluZGVycyI6dHJ1ZSwiZmVhdHVyZV9yZW1pbmRlcnNfb3JnX3NoYXJkIjpmYWxzZSwiZmVhdHVyZV9yZW1pbmRlcnNfZ3JpZF9taWdyYXRpb25zX29yZ19zaGFyZCI6dHJ1ZSwiZmVhdHVyZV9ibG9ja3NfcmVtaW5kZXJzX2xpc3QiOmZhbHNlLCJmZWF0dXJlX21lc3NhZ2VfYmxvY2tzIjpmYWxzZSwiZmVhdHVyZV9zaWxlbmNlX2FwcF9kbXMiOmZhbHNlLCJmZWF0dXJlX3NldF90el9hdXRvbWF0aWNhbGx5Ijp0cnVlLCJmZWF0dXJlX2NvbmZpcm1fY2xlYXJfYWxsX3VucmVhZHNfcHJlZiI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19tb3VudHMiOnRydWUsImZlYXR1cmVfYXR0YWNobWVudHNfdjIiOnRydWUsImZlYXR1cmVfYmxvY2tfa2l0X2V4cGFuZGFibGVfYmxvY2siOmZhbHNlLCJmZWF0dXJlX2dyb3VwX2Jsb2NrIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfZGVlcF9saW5rcyI6dHJ1ZSwiZmVhdHVyZV9zaG93X2Jsb2NrX2tpdF9pbl9zaGFyZV9kaWFsb2dzIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfdXNlcl9ibG9jayI6ZmFsc2UsImZlYXR1cmVfYmxvY2tfa2l0X3JhZGlvX2J1dHRvbnMiOnRydWUsImZlYXR1cmVfbXJrZHduX29uX3JhZGlvX2J1dHRvbiI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19raXRfdGFibGUiOmZhbHNlLCJmZWF0dXJlX2NoZWNrYm94ZXNfcmFkaW9zX2luX21lc3NhZ2VzIjp0cnVlLCJmZWF0dXJlX2lucHV0X2Jsb2NrX3B0aV93ZmJfZGlzcGF0Y2hfYWN0aW9uIjpmYWxzZSwiZmVhdHVyZV9pbnB1dF9ibG9ja3NfZW1pdF9hY3Rpb25zIjp0cnVlLCJmZWF0dXJlX2Jsb2NrX2tpdF9mdWxsX2FjdGlvbnNfc3RhdGUiOnRydWUsImZlYXR1cmVfaW5wdXRfYmxvY2tzX2luX2FwcF9ob21lIjp0cnVlLCJmZWF0dXJlX2lucHV0X2Jsb2Nrc19pbl9tZXNzYWdlcyI6ZmFsc2UsImZlYXR1cmVfYmxvY2tfa2l0X2Z1bGxfdmlld19zdGF0ZSI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19raXRfYWN0aW9uX3NlY3Rpb25faW5fdmlld19zdGF0ZSI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19raXRfc3RhdGVfaW5fYmxvY2tzX2FjdGlvbnMiOnRydWUsImZlYXR1cmVfYmxvY2tfa2l0X2VtcHR5X3N0YXRlX3RyYW5zbGF0aW9uX2Zvcl92aWV3X3N0YXRlIjp0cnVlLCJmZWF0dXJlX211bHRpc2VsZWN0c19pbl9hY3Rpb25zX2Jsb2NrIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfcmFuZ2VfZGF0ZXBpY2tlciI6ZmFsc2UsImZlYXR1cmVfZGVsZXRlX2FwcF9ob21lc19hc3NvY2lhdGVkX3dpdGhfZGVsZXRlZF9zZXJ2aWNlIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfdGltZXBpY2tlciI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19raXRfdGltZXBpY2tlcl9yZW1pbmQiOnRydWUsImZlYXR1cmVfYmxvY2tfa2l0X2RhdGVwaWNrZXJfaW5wdXQiOnRydWUsImZlYXR1cmVfYmxvY2tfa2l0X2FwcF9iZXRhIjp0cnVlLCJmZWF0dXJlX2FkZF9hcHBfaG9tZV90ZWFtX25hbWUiOmZhbHNlLCJmZWF0dXJlX2JlYWNvbl9qc19lcnJvcnMiOmZhbHNlLCJmZWF0dXJlX2JlYWNvbl9qc19hZG1pbl9lcnJvcnMiOmZhbHNlLCJmZWF0dXJlX3VzZXJfYXBwX2Rpc2FibGVfc3BlZWRfYnVtcCI6dHJ1ZSwiZmVhdHVyZV90cmFjdG9yX3NoYXJlZF9pbnZpdGVfbGluayI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF8yMTE5Ijp0cnVlLCJmZWF0dXJlX3RyYWN0b3JfYmFja3VwX2NoYW5uZWxuYW1lX2NvcHkiOnRydWUsImZlYXR1cmVfZGVncmFkZWRfcnRtX2Fsd2F5c19mYWlscyI6ZmFsc2UsImZlYXR1cmVfYXBwc19tYW5hZ2VfcGVybWlzc2lvbnNfc2NvcGVfY2hhbmdlcyI6dHJ1ZSwiZmVhdHVyZV9yZW1pbmRlcl9jcm9zc193b3Jrc3BhY2UiOnRydWUsImZlYXR1cmVfcDJwIjpmYWxzZSwiZmVhdHVyZV9jbGFzc2ljX25hdiI6ZmFsc2UsImZlYXR1cmVfbmV3X3JlYWN0aW9ucyI6dHJ1ZSwiZmVhdHVyZV9wYWdlc19leGFtcGxlIjpmYWxzZSwiZmVhdHVyZV9zb25pY19waW5zIjpmYWxzZSwiZmVhdHVyZV9zb25pY192aWRlb19wbGFjZWhvbGRlciI6dHJ1ZSwiZmVhdHVyZV9pYXAxIjpmYWxzZSwiZmVhdHVyZV9pYV9nYSI6dHJ1ZSwiZmVhdHVyZV9pYV9kZWJ1Z19vZmYiOmZhbHNlLCJmZWF0dXJlX2lhX2kxOG4iOnRydWUsImZlYXR1cmVfaWFfdGhlbWVzIjp0cnVlLCJmZWF0dXJlX2lhX21lbWJlcl9wcm9maWxlIjp0cnVlLCJmZWF0dXJlX3dvcmtzcGFjZV9zY2ltX21hbmFnZW1lbnQiOmZhbHNlLCJmZWF0dXJlX3VuaWZpZWRfbWVtYmVyIjpmYWxzZSwiZmVhdHVyZV90dXJuX21wZG1fbm90aWZzX29uIjp0cnVlLCJmZWF0dXJlX2Rlc2t0b3BfcmVsb2FkX29uX2dlbmVyaWNfZXJyb3IiOnRydWUsImZlYXR1cmVfZGVza3RvcF9leHRlbmRfYXBwX21lbnUiOmZhbHNlLCJmZWF0dXJlX2Rlc2t0b3BfcmVzdGFydF9zZXJ2aWNlX3dvcmtlciI6ZmFsc2UsImZlYXR1cmVfZGVza3RvcF9zeXN0ZW1fbm90aWZpY2F0aW9uX3BsYXliYWNrIjpmYWxzZSwiZmVhdHVyZV9hMTF5X2R5c2xleGljIjpmYWxzZSwiZmVhdHVyZV9kb2xvcmVzIjpmYWxzZSwiZmVhdHVyZV9kZXNrdG9wX2ZvcmNlX3Byb2R1Y3Rpb25fY2hhbm5lbCI6ZmFsc2UsImZlYXR1cmVfZGVza3RvcF9sb2dzX3VwbG9hZCI6ZmFsc2UsImZlYXR1cmVfbWFjb3NfZGlzYWJsZV9odyI6dHJ1ZSwiZmVhdHVyZV9hdF9oZXJlX3dhcm5pbmciOmZhbHNlLCJmZWF0dXJlX2JvdHNfbm90X21lbWJlcnMiOnRydWUsImZlYXR1cmVfd3RhX3N0b3BfY3JlYXRpb24iOnRydWUsImZlYXR1cmVfbTExbl9jaGFubmVsX2RldGFpbHMiOmZhbHNlLCJmZWF0dXJlX3BsYXRmb3JtX2RlcHJlY2F0aW9uc19mZSI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2FjdGlvbnMiOnRydWUsImZlYXR1cmVfc2hvcnRjdXRzX3Byb21wdCI6dHJ1ZSwiZmVhdHVyZV9uZXdfY29sb3JfcGlja2VyX3N0cmluZ3MiOmZhbHNlLCJmZWF0dXJlX2FjY2Vzc2libGVfZGlhbG9ncyI6dHJ1ZSwiZmVhdHVyZV9hY2Nlc3NpYmxlX2Vtb2ppX3NraW5fdG9uZV9waWNrZXIiOnRydWUsImZlYXR1cmVfY2FsbHNfY2xpcGJvYXJkX2Jyb2FkY2FzdGluZ19vcHRpbiI6dHJ1ZSwiZmVhdHVyZV9zY3JlZW5fc2hhcmVfbmVlZHNfYWVybyI6ZmFsc2UsImZlYXR1cmVfYWNjZXNzaWJsZV9mc19kaWFsb2dzIjp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfaGVhZGVyX2xhYmVscyI6ZmFsc2UsImZlYXR1cmVfdHJhcF9rYl93aXRoaW5fZnNfbW9kYWxzIjp0cnVlLCJmZWF0dXJlX21vZGVybl9pbWFnZV92aWV3ZXIiOnRydWUsImZlYXR1cmVfZW1vamlfYnlfaWQiOnRydWUsImZlYXR1cmVfbWNfbWlncmF0aW9uX2Jhbm5lciI6dHJ1ZSwiZmVhdHVyZV9hcmlhX2FwcGxpY2F0aW9uX21vZGUiOmZhbHNlLCJmZWF0dXJlX3VwZGF0ZV9tdWx0aXdvcmtzcGFjZV9jaGFubmVsX21vZGFsIjp0cnVlLCJmZWF0dXJlX21vZGVybl9yZXF1ZXN0X3dvcmtzcGFjZV9kaWFsb2ciOmZhbHNlLCJmZWF0dXJlX3dvcmtzcGFjZV9hcHBzX21hbmFnZV9nYW50cnkiOmZhbHNlLCJmZWF0dXJlX3dvcmtzcGFjZV9hcHBzX21hbmFnZV9nYW50cnlfdjJfcjEiOnRydWUsImZlYXR1cmVfYXBwX2FkbWluX2J1dHRvbnNfc3BlZWRidW1wIjp0cnVlLCJmZWF0dXJlX2FwcF9hZG1pbl9idXR0b25zX3NwZWVkYnVtcF92MiI6ZmFsc2UsImZlYXR1cmVfbW9kZXJuX3Byb2ZpbGVfZmxleHBhbmUiOmZhbHNlLCJmZWF0dXJlX3NjZ19jb252ZXJzaW9uX2NoYW5uZWxzIjp0cnVlLCJmZWF0dXJlX2VudGVycHJpc2VfcmV0ZW50aW9uX2FsbG93X292ZXJyaWRlX29uX29yZ19sZXZlbF9jaGFubmVscyI6ZmFsc2UsImZlYXR1cmVfZW50ZXJwcmlzZV9yZXRlbnRpb25fYWRtaW5fcmV0ZW50aW9uX2J5X2NjbSI6ZmFsc2UsImZlYXR1cmVfZXhwb3J0c19maWx0ZXIiOnRydWUsImZlYXR1cmVfdHJhY2tfdGltZV9zcGVudCI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2ludml0ZV90b2tlbml6YXRpb24iOnRydWUsImZlYXR1cmVfaW1wb3J0c19jYW5jZWwiOnRydWUsImZlYXR1cmVfZW1haWxfd29ya29iamVjdF91aSI6ZmFsc2UsImZlYXR1cmVfZW1haWxfbm90aWZ5IjpmYWxzZSwiZmVhdHVyZV9lbWFpbF9mb3JjZV9kb3dubG9hZCI6dHJ1ZSwiZmVhdHVyZV9vZmZpY2VfZGlyZWN0b3J5IjpmYWxzZSwiZmVhdHVyZV9jYWxlbmRhcl9zaW1wbGVfYWdlbmRhX3ZpZXciOmZhbHNlLCJmZWF0dXJlX3RlYW1fdGhlbWVzIjpmYWxzZSwiZmVhdHVyZV91bmZ1cmxfbWV0YWRhdGEiOmZhbHNlLCJmZWF0dXJlX3BhcGVyY2xpcF9jb2FjaG1hcmtfZXhwZXJpbWVudHMiOnRydWUsImZlYXR1cmVfcGx1c19tZW51X2FkZF9hcHBzX2xpbmsiOmZhbHNlLCJmZWF0dXJlX3JlbmFtZV9jaGFubmVsX2Rpc2FibGVfZmVlZGJhY2tfaTE4biI6ZmFsc2UsImZlYXR1cmVfcmVjZW50X2ZpbGVzX29tbmlwaWNrZXIiOmZhbHNlLCJmZWF0dXJlX3JlY2VudF9kZXNrdG9wX2ZpbGVzIjpmYWxzZSwiZmVhdHVyZV9lbWFpbF9maWxlX3VuZnVybF9mb3JtYXQiOnRydWUsImZlYXR1cmVfbGlua19wcm90b2NvbF9iZXRhIjpmYWxzZSwiZmVhdHVyZV9zdHJpcGVfbGlnaHRfbGVnYWN5X3B1cmNoYXNlX21vZGUiOmZhbHNlLCJmZWF0dXJlX2NoZWNrb3V0X2ZvcmNlX2ludG9fbGVnYWN5IjpmYWxzZSwiZmVhdHVyZV9zb25pY19wbGFjZWhvbGRlcl9sYWJlbHMiOmZhbHNlLCJmZWF0dXJlX3NvbmljX2VzY19jcmVhdGlvbiI6ZmFsc2UsImZlYXR1cmVfZGFuZ2Vyb3VzbHlfZ3VhcmRfaWFfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9pYV9jb250ZXh0X21lbnVzIjpmYWxzZSwiZmVhdHVyZV9pYV9sYXlvdXQiOmZhbHNlLCJmZWF0dXJlX21pc2NfaWFfYTExeV90cmFuc2xhdGlvbnMiOmZhbHNlLCJmZWF0dXJlX3RocmVhZGVkX2NhbGxfYmxvY2siOmZhbHNlLCJmZWF0dXJlX2VuYWJsZV9yZWFkX3RpbWVfdmFsaWRhdGlvbnNfZm9yX3Nob3J0Y3V0cyI6ZmFsc2UsImZlYXR1cmVfbWVzc2FnZV9hY3Rpb25zX2luX2FwcF9hY3Rpb25zX2ZyYW1ld29ya19jbGllbnQiOnRydWUsImZlYXR1cmVfbWVzc2FnZV9hY3Rpb25zX2luX2FwcF9hY3Rpb25zX2ZyYW1ld29ya19kZXZlbG9wZXIiOnRydWUsImZlYXR1cmVfc2xhY2tfbWVzc2FnZV9hdHRhY2htZW50X3Rvb2x0aXAiOmZhbHNlLCJmZWF0dXJlX2VudGVycHJpc2VfbW9iaWxlX2RldmljZV9jaGVjayI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF80NDAyIjp0cnVlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19jdXN0b21fZW1vamlzX3VybCI6ZmFsc2UsImZlYXR1cmVfbmV3X2NvcHlfZm9yX2lkZW50aXR5X2Jhc2ljIjpmYWxzZSwiZmVhdHVyZV9zb25pY19sZWF2ZV93b3Jrc3BhY2VfZGlhbG9nIjpmYWxzZSwiZmVhdHVyZV9zaGFyZWRfY2hhbm5lbHNfbmV3X3VzZXJfdHJpYWwiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2ludml0ZXJfdHJpYWwiOmZhbHNlLCJmZWF0dXJlX3NjX2ludml0ZV9qb2luX3BlbmRpbmdfY2hhbm5lbF9hY3Rpb24iOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19tdWx0aV9lbWFpbF9pbnZpdGUiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzXzkwX2RheV90cmlhbCI6dHJ1ZSwiZmVhdHVyZV9zaGFyZWRfY2hhbm5lbHNfOTBfZGF5X3RyaWFsX2ludml0ZXIiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19kYXkxX2NyZWF0b3IiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19oYXBwaWVyX3BhdGhzIjpmYWxzZSwiZmVhdHVyZV9sYXRlX3BheW1lbnRfc3VjY2Vzc19ub3RpZmljYXRpb24iOmZhbHNlLCJmZWF0dXJlX2F1c3RyYWxpYV90YXhfY2hhbmdlX25vdGlmaWNhdGlvbiI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxfaW52aXRlc192MiI6dHJ1ZSwiZmVhdHVyZV9iZXR0ZXJfaW52aXRlc19jYWxsX3YyX2FwaSI6dHJ1ZSwiZmVhdHVyZV9zaGFyZWRfY2hhbm5lbHNfaW52aXRlX2NyZWF0ZV9lZHVjYXRpb24iOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2ludml0ZV9lbWFpbF9ib3VuY2Vfbm90aWZpY2F0aW9uIjp0cnVlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19pbnZpdGVfZW1haWxfcmVtaW5kZXIiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2NvbnRlbnQiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX3RyaWFsX2VkdSI6dHJ1ZSwiZmVhdHVyZV91c2VyX2ludml0ZV9lbWFpbF9ib3VuY2Vfbm90aWZpY2F0aW9uX3RyYW5zbGF0aW9uIjp0cnVlLCJmZWF0dXJlX3BhaWRfb25ib2FyZGluZ19wYWdldXBkYXRlIjp0cnVlLCJmZWF0dXJlX3RyYWNlX3dlYmFwcF9pbml0Ijp0cnVlLCJmZWF0dXJlX3RyYWNlX2pxX2luaXQiOnRydWUsImZlYXR1cmVfdHJpYWxfZW5kX2wxMG4iOnRydWUsImZlYXR1cmVfdHJpYWxfZW5kaW5nX2VtYWlsX3VwZGF0ZXMiOnRydWUsImZlYXR1cmVfd29ya3NwYWNlX21lbnVfcGxhbl9pbmZvIjp0cnVlLCJmZWF0dXJlX3BhcnRuZXJfdGVybXNfaTE4biI6ZmFsc2UsImZlYXR1cmVfcGFydG5lcl9mYXFfaTE4biI6dHJ1ZSwiZmVhdHVyZV9oaWdobGlnaHRfcGFpZF9mZWF0dXJlcyI6ZmFsc2UsImZlYXR1cmVfdHJpYWxfZXhwaXJhdGlvbl9kYXRlX2kxOG4iOnRydWUsImZlYXR1cmVfc3RyaXBlX2NvbXBsZXRlbHlfZG93bl9iYW5uZXIiOmZhbHNlLCJmZWF0dXJlX2ZhaXJfYmlsbGluZ19kZXRhaWxfaW52b2ljZV9zdGF0ZW1lbnRzIjpmYWxzZSwiZmVhdHVyZV9jaGVja291dF96aXBfYXV0b2NvbXBsZXRlX3RyYW5zbGF0aW9ucyI6dHJ1ZSwiZmVhdHVyZV9iaWxsaW5nX21lbWJlcl9lbWFpbF91cGRhdGVzIjpmYWxzZSwiZmVhdHVyZV9mYWlyX2JpbGxpbmdfYmFja2VuZF9yZWZhY3RvciI6dHJ1ZSwiZmVhdHVyZV91YWVfdGF4X2lkX2NvbGxlY3Rpb24iOnRydWUsImZlYXR1cmVfY2hpbGVfdGF4X2lkX2NvbGxlY3Rpb24iOnRydWUsImZlYXR1cmVfa3NhX3RheF9pZF9jb2xsZWN0aW9uIjp0cnVlLCJmZWF0dXJlX2luZG9uZXNpYV90YXhfY2hhbmdlX25vdGlmaWNhdGlvbiI6ZmFsc2UsImZlYXR1cmVfaW5kb25lc2lhX3RheF9hc3Nlc3NtZW50IjpmYWxzZSwiZmVhdHVyZV9jYXBpdGFsaXplX3NpbmdsZV9jaGFubmVsX3N0YXR1cyI6dHJ1ZSwiZmVhdHVyZV9lbnRlcnByaXNlX2FuYWx5dGljc18yMDE5X3EzX2VuaGFuY2VtZW50cyI6ZmFsc2UsImZlYXR1cmVfbW9kZXJuaXplX29yZ19kYXNoX2NoYXJ0cyI6dHJ1ZSwiZmVhdHVyZV9tb2Rlcm5pemVfb3JnX3RlYW1fYW5hbHl0aWNzIjpmYWxzZSwiZmVhdHVyZV9tZXNzYWdlc19mcm9tX2FwcHNfYW5hbHl0aWNzIjpmYWxzZSwiZmVhdHVyZV9vcmdfbGV2ZWxfYXBwcyI6ZmFsc2UsImZlYXR1cmVfb3JnX2xldmVsX2FwcHNfY3VzdG9tIjpmYWxzZSwiZmVhdHVyZV9vcmdfbGV2ZWxfYXBwc19hZG1pbl9iZXRhIjpmYWxzZSwiZmVhdHVyZV9zc29fdmFsaWRhdGVfYXVkaWVuY2UiOnRydWUsImZlYXR1cmVfY2hhbm5lbF9zZWN0aW9ucyI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX3NlY3Rpb25zX3NpZGViYXJfYmVoYXZpb3JfdWkiOmZhbHNlLCJmZWF0dXJlX2FuYWx5dGljc19zY2ltX2ZpZWxkc19wYWlkIjpmYWxzZSwiZmVhdHVyZV9nb29nbGVfZGlyZWN0b3J5X2ludml0ZXMiOmZhbHNlLCJmZWF0dXJlX21pZ3JhdGVfZ29vZ2xlX2RpcmVjdG9yeV9hcGlzIjp0cnVlLCJmZWF0dXJlX3NlYXJjaF9yZXN1bHRzX3ZpcnR1YWxpemVkIjpmYWxzZSwiZmVhdHVyZV9zaG93X2VtYWlsX2ZvcndhcmRlZF9ieSI6ZmFsc2UsImZlYXR1cmVfbmV3X2Vub3VnaF9wZXJpb2RpY19yZWxvYWRzIjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX3dvcmtmbG93X2FjdGl2aXR5Ijp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfZXhwb3J0X2Zvcm1fY3N2X2FkbWluIjp0cnVlLCJmZWF0dXJlX2hlYWRlcl9ibG9jayI6dHJ1ZSwiZmVhdHVyZV9oZWFkZXJfYmxvY2tfYmtiIjp0cnVlLCJmZWF0dXJlX3JhdGVfbGltaXRfYXBwX2NyZWF0aW9uIjp0cnVlLCJmZWF0dXJlX2dpcGh5X3Nob3J0Y3V0IjpmYWxzZSwiZmVhdHVyZV9kb3dubG9hZF9maW5kZXJfdXBkYXRlIjp0cnVlLCJmZWF0dXJlX3NoYXJlX21vZGFsX2RpYWxvZyI6ZmFsc2UsImZlYXR1cmVfb25lZHJpdmVfZXJyb3JfdHJhbnNsYXRpb25zIjp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfc2lkZWJhcl9zdW1tYXJ5IjpmYWxzZSwiZmVhdHVyZV9icm93c2VyX3BpY2tlciI6ZmFsc2UsImZlYXR1cmVfZWR1XzEwMSI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF80Njg4Ijp0cnVlLCJmZWF0dXJlX2FwcF9kaXJfZ3Jhbl9ib3Rfc3VibWl0Ijp0cnVlLCJmZWF0dXJlX2FwcF9kaXJfd29ya2Zsb3dfc3RlcHMiOnRydWUsImZlYXR1cmVfYXBwX2Rpcl93b3JrZmxvd19zdGVwc19wcm9tbyI6dHJ1ZSwiZmVhdHVyZV9hcHBfbGlzdGluZ19yZWZyZXNoIjp0cnVlLCJmZWF0dXJlX2FwcF9saXN0aW5nX3JlZnJlc2hfc2NvcGVzIjp0cnVlLCJmZWF0dXJlX2FwcF9saXN0aW5nX3JlZnJlc2hfb3JnX2RlcGxveXMiOmZhbHNlLCJmZWF0dXJlX2FwcF9saXN0aW5nX3JlZnJlc2hfcHRfMiI6dHJ1ZSwiZmVhdHVyZV9oY191cGRhdGVkX3RpdGxlIjpmYWxzZSwiZmVhdHVyZV9wYXJzZWNfbWV0aG9kcyI6ZmFsc2UsImZlYXR1cmVfc291bF9zZWFyY2hlcnMiOmZhbHNlLCJmZWF0dXJlX3NuZF9xdWVyeV9yZWZpbmVtZW50cyI6dHJ1ZSwiZmVhdHVyZV9lbWFpbF9jbGFzc2lmaWNhdGlvbiI6dHJ1ZSwiZmVhdHVyZV9wcmltYXJ5X293bmVyX2NvbnNpc3RlbnRfcm9sZXMiOnRydWUsImZlYXR1cmVfaW52aXRlX3RvX2NoYW5uZWxfYnlfZW1haWxfdWkiOnRydWUsImZlYXR1cmVfZWR1XzExMCI6dHJ1ZSwiZmVhdHVyZV9zaXdzX2xpbmtzIjpmYWxzZSwiZmVhdHVyZV9sb2NhbGVfaXRfSVQiOmZhbHNlLCJmZWF0dXJlX2xvY2FsZV9rb19LUiI6dHJ1ZSwiZmVhdHVyZV9sb2NhbGVfcnVfUlUiOmZhbHNlLCJmZWF0dXJlX2xvY2FsZV96aF9DTiI6ZmFsc2UsImZlYXR1cmVfbG9jYWxlX3poX1RXIjpmYWxzZSwiZmVhdHVyZV9zZWFyY2hfZmlsdGVyX2ZpbGVfYXR0YWNobWVudHMiOmZhbHNlLCJmZWF0dXJlX21wZG1fYXVkaWVuY2VfZXhwYW5zaW9uIjp0cnVlLCJmZWF0dXJlX25ld3hwXzQzMTIiOmZhbHNlLCJmZWF0dXJlX2NlX2VuZ19zZWFyY2hfemVuZGVza19hcGkiOmZhbHNlLCJmZWF0dXJlX2JrX2Vycm9yX21lc3NhZ2luZyI6dHJ1ZSwiZmVhdHVyZV9sYXJnZV9lbW9qaV9pbl90b29sdGlwIjp0cnVlLCJmZWF0dXJlX25ld3hwXzM3OTUiOmZhbHNlLCJmZWF0dXJlX25ld19ub3RpZmljYXRpb25zX3N0cmluZyI6ZmFsc2UsImZlYXR1cmVfYXBwc19ldmVudF9hdXRob3JpemF0aW9uc19saXN0X2VuZHBvaW50X2E3ZTUxZiI6dHJ1ZSwiZmVhdHVyZV9ndWFyZF9jaGFubmVsX2RldGFpbHNfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV92ZXJpZmllZF9vcmdzX2ZlIjpmYWxzZSwiZmVhdHVyZV9yZWZpbmVfeW91cl9zZWFyY2hfaTE4biI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF80NTk3Ijp0cnVlLCJmZWF0dXJlX2ZpbGVfYWN0aW9uc19maXgiOmZhbHNlLCJmZWF0dXJlX2lubGluZV9mZWVkYmFjayI6ZmFsc2UsImZlYXR1cmVfZWR1XzE4MiI6dHJ1ZSwiZmVhdHVyZV9jcmVkaXRfYmFubmVyX2Jhc2ljX3RyYW5zbGF0aW9ucyI6ZmFsc2UsImZlYXR1cmVfaWRyX2JhY2tmaWxscyI6ZmFsc2UsImZlYXR1cmVfZWR1XzE4NyI6dHJ1ZSwiZmVhdHVyZV9hZGRfdG9fY2hhbm5lbF9wcm90b3R5cGUiOmZhbHNlLCJmZWF0dXJlX3N0cmlwZV9oYWNrX21pZ3JhdGlvbiI6ZmFsc2UsImZlYXR1cmVfcGFpZF9iZW5lZml0c19hbGVydF90cmFuc2xhdGlvbnMiOnRydWUsImZlYXR1cmVfcGxhbl9iZW5lZml0c19kYXlfb25lX3RyaWFsX2hlYWRlcl91cGRhdGVfaTE4biI6dHJ1ZSwiZmVhdHVyZV90cmlhbF9hd2FyZW5lc3NfdHJhbnNsYXRpb25zIjp0cnVlLCJmZWF0dXJlX2NhbGxzX2xvY2F0aW9uX3dhcm5pbmdfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9lc2Nfd2hvX2Nhbl9yZXF1ZXN0X3ByZWYiOmZhbHNlLCJmZWF0dXJlX3NpZGViYXJfdHJpYWxfYmFkZ2VfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9mZWF0dXJlX2NvbnRleHRfbWVudV9rZXlib2FyZF9zaG9ydGN1dCI6ZmFsc2UsImZlYXR1cmVfZWR1XzE5NiI6ZmFsc2UsImZlYXR1cmVfaW50ZXJhY3RpdmVfc2VwYXJhdG9ycyI6ZmFsc2UsImZlYXR1cmVfc2VhcmNoX2FyaWFfaW5pdGlhbF9zdGF0ZSI6ZmFsc2UsImZlYXR1cmVfZnJlZV90cmlhbF9jaGF0IjpmYWxzZSwiZmVhdHVyZV91a192YXRfaG1yY192YWxpZGF0aW9uIjpmYWxzZSwiY2xpZW50X2xvZ3MiOnsiMCI6eyJudW1iZXJzIjpbIjAiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiMiI6eyJudW1iZXJzIjpbIjIiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNCI6eyJudW1iZXJzIjpbIjQiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNSI6eyJudW1iZXJzIjpbIjUiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiMjMiOnsibnVtYmVycyI6WyIyMyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJzb3VuZHMiOnsibmFtZSI6InNvdW5kcyIsIm51bWJlcnMiOlsiMzciXX0sIjM3Ijp7Im5hbWUiOiJzb3VuZHMiLCJudW1iZXJzIjpbIjM3Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwiNDciOnsibnVtYmVycyI6WyI0NyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI0OCI6eyJudW1iZXJzIjpbIjQ4Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIk1lc3NhZ2UgSGlzdG9yeSI6eyJuYW1lIjoiTWVzc2FnZSBIaXN0b3J5IiwibnVtYmVycyI6WyI1OCJdfSwiNTgiOnsibmFtZSI6Ik1lc3NhZ2UgSGlzdG9yeSIsIm51bWJlcnMiOlsiNTgiXSwidXNlcl9mYWNpbmciOnRydWV9LCI2NyI6eyJudW1iZXJzIjpbIjY3Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjcyIjp7Im51bWJlcnMiOlsiNzIiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNzMiOnsibnVtYmVycyI6WyI3MyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI4MiI6eyJudW1iZXJzIjpbIjgyIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjg4Ijp7Im51bWJlcnMiOlsiODgiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiOTEiOnsibnVtYmVycyI6WyI5MSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI5MyI6eyJudW1iZXJzIjpbIjkzIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjk2Ijp7Im51bWJlcnMiOlsiOTYiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiOTkiOnsibnVtYmVycyI6WyI5OSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJDaGFubmVsIE1hcmtpbmcgKE1TKSI6eyJuYW1lIjoiQ2hhbm5lbCBNYXJraW5nIChNUykiLCJudW1iZXJzIjpbIjE0MSJdfSwiMTQxIjp7Im5hbWUiOiJDaGFubmVsIE1hcmtpbmcgKE1TKSIsIm51bWJlcnMiOlsiMTQxIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwiQ2hhbm5lbCBNYXJraW5nIChDbGllbnQpIjp7Im5hbWUiOiJDaGFubmVsIE1hcmtpbmcgKENsaWVudCkiLCJudW1iZXJzIjpbIjE0MiJdfSwiMTQyIjp7Im5hbWUiOiJDaGFubmVsIE1hcmtpbmcgKENsaWVudCkiLCJudW1iZXJzIjpbIjE0MiJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIkNsb3NlIE9sZCBJTXMgKENsaWVudCkiOnsibmFtZSI6IkNsb3NlIE9sZCBJTXMgKENsaWVudCkiLCJudW1iZXJzIjpbIjIyMSJdfSwiMjIxIjp7Im5hbWUiOiJDbG9zZSBPbGQgSU1zIChDbGllbnQpIiwibnVtYmVycyI6WyIyMjEiXSwidXNlcl9mYWNpbmciOnRydWV9LCIzNjUiOnsibnVtYmVycyI6WyIzNjUiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiMzg5Ijp7Im51bWJlcnMiOlsiMzg5Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjQzOCI6eyJudW1iZXJzIjpbIjQzOCJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI0NDQiOnsibnVtYmVycyI6WyI0NDQiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNDgxIjp7Im51bWJlcnMiOlsiNDgxIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjQ4OCI6eyJudW1iZXJzIjpbIjQ4OCJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI1MjkiOnsibnVtYmVycyI6WyI1MjkiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNTUyIjp7Im51bWJlcnMiOlsiNTUyIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sImRhc2hib2FyZCI6eyJuYW1lIjoiZGFzaGJvYXJkIiwibnVtYmVycyI6WyI2NjYiXX0sIjY2NiI6eyJuYW1lIjoiZGFzaGJvYXJkIiwibnVtYmVycyI6WyI2NjYiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNjY3Ijp7Im51bWJlcnMiOlsiNjY3Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjc3MyI6eyJudW1iZXJzIjpbIjc3MyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI3NzciOnsibnVtYmVycyI6WyI3NzciXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNzk0Ijp7Im51bWJlcnMiOlsiNzk0Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIkNsaWVudCBSZXNwb25zaXZlbmVzcyI6eyJuYW1lIjoiQ2xpZW50IFJlc3BvbnNpdmVuZXNzIiwidXNlcl9mYWNpbmciOmZhbHNlLCJudW1iZXJzIjpbIjgwOCJdfSwiODA4Ijp7Im5hbWUiOiJDbGllbnQgUmVzcG9uc2l2ZW5lc3MiLCJ1c2VyX2ZhY2luZyI6ZmFsc2UsIm51bWJlcnMiOlsiODA4Il19LCJNZXNzYWdlIFBhbmUgU2Nyb2xsaW5nIjp7Im5hbWUiOiJNZXNzYWdlIFBhbmUgU2Nyb2xsaW5nIiwibnVtYmVycyI6WyI4ODgiXX0sIjg4OCI6eyJuYW1lIjoiTWVzc2FnZSBQYW5lIFNjcm9sbGluZyIsIm51bWJlcnMiOlsiODg4Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwiVW5yZWFkIGJhbm5lciBhbmQgZGl2aWRlciI6eyJuYW1lIjoiVW5yZWFkIGJhbm5lciBhbmQgZGl2aWRlciIsIm51bWJlcnMiOlsiOTk5Il19LCI5OTkiOnsibmFtZSI6IlVucmVhZCBiYW5uZXIgYW5kIGRpdmlkZXIiLCJudW1iZXJzIjpbIjk5OSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIjEwMDAiOnsibnVtYmVycyI6WyIxMDAwIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIkR1cGxpY2F0ZSBiYWRnZXMgKGRlc2t0b3AgYXBwIGljb25zKSI6eyJuYW1lIjoiRHVwbGljYXRlIGJhZGdlcyAoZGVza3RvcCBhcHAgaWNvbnMpIiwibnVtYmVycyI6WyIxNzAxIl19LCIxNzAxIjp7Im5hbWUiOiJEdXBsaWNhdGUgYmFkZ2VzIChkZXNrdG9wIGFwcCBpY29ucykiLCJudW1iZXJzIjpbIjE3MDEiXSwidXNlcl9mYWNpbmciOnRydWV9LCJNZW1iZXJzIjp7Im5hbWUiOiJNZW1iZXJzIiwibnVtYmVycyI6WyIxOTc1Il19LCIxOTc1Ijp7Im5hbWUiOiJNZW1iZXJzIiwibnVtYmVycyI6WyIxOTc1Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwibGF6eSBsb2FkaW5nIjp7Im5hbWUiOiJsYXp5IGxvYWRpbmciLCJudW1iZXJzIjpbIjE5ODkiXX0sIjE5ODkiOnsibmFtZSI6ImxhenkgbG9hZGluZyIsIm51bWJlcnMiOlsiMTk4OSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sInRoaW5fY2hhbm5lbF9tZW1iZXJzaGlwIjp7Im5hbWUiOiJ0aGluX2NoYW5uZWxfbWVtYmVyc2hpcCIsIm51bWJlcnMiOlsiMTk5MCJdfSwiMTk5MCI6eyJuYW1lIjoidGhpbl9jaGFubmVsX21lbWJlcnNoaXAiLCJudW1iZXJzIjpbIjE5OTAiXSwidXNlcl9mYWNpbmciOnRydWV9LCJzdGF0cyI6eyJuYW1lIjoic3RhdHMiLCJudW1iZXJzIjpbIjE5OTEiXX0sIjE5OTEiOnsibmFtZSI6InN0YXRzIiwibnVtYmVycyI6WyIxOTkxIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwibXMiOnsibmFtZSI6Im1zIiwibnVtYmVycyI6WyIxOTk2Il19LCIxOTk2Ijp7Im5hbWUiOiJtcyIsIm51bWJlcnMiOlsiMTk5NiJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sInNoYXJlZF9jaGFubmVsc19jb25uZWN0aW9uIjp7Im5hbWUiOiJzaGFyZWRfY2hhbm5lbHNfY29ubmVjdGlvbiIsIm51bWJlcnMiOlsiMTk5OSJdfSwiMTk5OSI6eyJuYW1lIjoic2hhcmVkX2NoYW5uZWxzX2Nvbm5lY3Rpb24iLCJudW1iZXJzIjpbIjE5OTkiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiZG5kIjp7Im5hbWUiOiJkbmQiLCJudW1iZXJzIjpbIjIwMDIiXX0sIjIwMDIiOnsibmFtZSI6ImRuZCIsIm51bWJlcnMiOlsiMjAwMiJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIjIwMDMiOnsibnVtYmVycyI6WyIyMDAzIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIlRocmVhZHMiOnsibmFtZSI6IlRocmVhZHMiLCJudW1iZXJzIjpbIjIwMDQiXX0sIjIwMDQiOnsibmFtZSI6IlRocmVhZHMiLCJudW1iZXJzIjpbIjIwMDQiXSwidXNlcl9mYWNpbmciOnRydWV9LCIyMDA1Ijp7Im51bWJlcnMiOlsiMjAwNSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJSZWFjdGlvbnMiOnsibmFtZSI6IlJlYWN0aW9ucyIsIm51bWJlcnMiOlsiMjAwNiJdfSwiMjAwNiI6eyJuYW1lIjoiUmVhY3Rpb25zIiwibnVtYmVycyI6WyIyMDA2Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwiVFNTU0IuZm9jdXNUYWJBbmRTd2l0Y2hUb0NoYW5uZWwiOnsibmFtZSI6IlRTU1NCLmZvY3VzVGFiQW5kU3dpdGNoVG9DaGFubmVsIiwibnVtYmVycyI6WyIyMDA3Il19LCIyMDA3Ijp7Im5hbWUiOiJUU1NTQi5mb2N1c1RhYkFuZFN3aXRjaFRvQ2hhbm5lbCIsIm51bWJlcnMiOlsiMjAwNyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJQcmVzZW5jZSBEZXRlY3Rpb24iOnsibmFtZSI6IlByZXNlbmNlIERldGVjdGlvbiIsIm51bWJlcnMiOlsiMjAxNyJdfSwiMjAxNyI6eyJuYW1lIjoiUHJlc2VuY2UgRGV0ZWN0aW9uIiwibnVtYmVycyI6WyIyMDE3Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwibWNfc2licyI6eyJuYW1lIjoibWNfc2licyIsIm51bWJlcnMiOlsiOTk5OSJdfSwiOTk5OSI6eyJuYW1lIjoibWNfc2licyIsIm51bWJlcnMiOlsiOTk5OSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJNZW1iZXIgc2VhcmNoaW5nIjp7Im5hbWUiOiJNZW1iZXIgc2VhcmNoaW5nIiwibnVtYmVycyI6WyI5MDIxMSJdfSwiOTAyMTEiOnsibmFtZSI6Ik1lbWJlciBzZWFyY2hpbmciLCJudW1iZXJzIjpbIjkwMjExIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwiOTg3NjUiOnsibnVtYmVycyI6WyI5ODc2NSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI4Njc1MzA5Ijp7Im51bWJlcnMiOlsiODY3NTMwOSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9fX07Cglib290X2RhdGEuc3RhcnRfbXMgPSBEYXRlLm5vdygpOwo8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgvcm9sbHVwLWNvcmVfcmVxdWlyZWRfbGlicy4xZGViNzdmNDdjZDUyMWYyY2EyNS5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgvbW9kZXJuLnZlbmRvci4zNWUwZDJmMzRjMjU5ZjgzZjMwZC5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgvYXBwbGljYXRpb24uY2JjOGIzNjY3N2E4Y2FkZjY3Y2EubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L3JvbGx1cC1jb3JlX3JlcXVpcmVkX3RzLjg4ZDExZDg0YWRkMmUyNjBkMDYyLm1pbi5qcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC9UUy53ZWIuNTUzZjZkYmRjNDZlMmYwNjYzZmYubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L3NpZ25hbHMuZjY0MTYwYjViY2ZjNmY5YjkzMmYubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L3JvbGx1cC1jb3JlX3dlYi5mYzhmYTEwMmI1MTM4NGQ3NDAwMy5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgvcm9sbHVwLXNlY29uZGFyeV9hX3JlcXVpcmVkLjczODhmYTliY2I0MDUzZTI0ZGRhLm1pbi5qcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC9yb2xsdXAtc2Vjb25kYXJ5X2JfcmVxdWlyZWQuODM0ZTFmM2Q3OGUyOGEzNjJjMWQubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlRTLmJvb3QoYm9vdF9kYXRhKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgvVFMud2ViLl80MDQuYWRlNWUxZGE0OTUwMTQ0YzZkODQubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L3N0aWNreV9uYXYuYjU4MThiMmRkNDRlNmFlMDAwNDQubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04L2Zvb3Rlci5mMTViM2NiZjQ2ODc3MTQ3ZjA2Ni5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ym9vdF9kYXRhLm5vX2xvZ2luID0gdHJ1ZTs8L3NjcmlwdD48c3R5bGU+LmNvbG9yXzlmNjllNzpub3QoLm51Yykge2NvbG9yOiM5RjY5RTc7fS5jb2xvcl80YmJlMmU6bm90KC5udWMpIHtjb2xvcjojNEJCRTJFO30uY29sb3JfZTczOTJkOm5vdCgubnVjKSB7Y29sb3I6I0U3MzkyRDt9LmNvbG9yXzNjOTg5Zjpub3QoLm51Yykge2NvbG9yOiMzQzk4OUY7fS5jb2xvcl82NzRiMWI6bm90KC5udWMpIHtjb2xvcjojNjc0QjFCO30uY29sb3JfZTk2Njk5Om5vdCgubnVjKSB7Y29sb3I6I0U5NjY5OTt9LmNvbG9yX2UwYTcyOTpub3QoLm51Yykge2NvbG9yOiNFMEE3Mjk7fS5jb2xvcl82ODRiNmM6bm90KC5udWMpIHtjb2xvcjojNjg0QjZDO30uY29sb3JfNWI4OWQ1Om5vdCgubnVjKSB7Y29sb3I6IzVCODlENTt9LmNvbG9yXzJiNjgzNjpub3QoLm51Yykge2NvbG9yOiMyQjY4MzY7fS5jb2xvcl85OWE5NDk6bm90KC5udWMpIHtjb2xvcjojOTlBOTQ5O30uY29sb3JfZGYzZGMwOm5vdCgubnVjKSB7Y29sb3I6I0RGM0RDMDt9LmNvbG9yXzRjYzA5MTpub3QoLm51Yykge2NvbG9yOiM0Q0MwOTE7fS5jb2xvcl85YjNiNDU6bm90KC5udWMpIHtjb2xvcjojOUIzQjQ1O30uY29sb3JfZDU4MjQ3Om5vdCgubnVjKSB7Y29sb3I6I0Q1ODI0Nzt9LmNvbG9yX2JiODZiNzpub3QoLm51Yykge2NvbG9yOiNCQjg2Qjc7fS5jb2xvcl81YTQ1OTI6bm90KC5udWMpIHtjb2xvcjojNUE0NTkyO30uY29sb3JfZGIzMTUwOm5vdCgubnVjKSB7Y29sb3I6I0RCMzE1MDt9LmNvbG9yXzIzNWU1Yjpub3QoLm51Yykge2NvbG9yOiMyMzVFNUI7fS5jb2xvcl85ZTM5OTc6bm90KC5udWMpIHtjb2xvcjojOUUzOTk3O30uY29sb3JfNTNiNzU5Om5vdCgubnVjKSB7Y29sb3I6IzUzQjc1OTt9LmNvbG9yX2MzODZkZjpub3QoLm51Yykge2NvbG9yOiNDMzg2REY7fS5jb2xvcl8zODVhODY6bm90KC5udWMpIHtjb2xvcjojMzg1QTg2O30uY29sb3JfYTYzMDI0Om5vdCgubnVjKSB7Y29sb3I6I0E2MzAyNDt9LmNvbG9yXzU4NzBkZDpub3QoLm51Yykge2NvbG9yOiM1ODcwREQ7fS5jb2xvcl9lYTI5Nzc6bm90KC5udWMpIHtjb2xvcjojRUEyOTc3O30uY29sb3JfNTBhMGNmOm5vdCgubnVjKSB7Y29sb3I6IzUwQTBDRjt9LmNvbG9yX2Q1NWFlZjpub3QoLm51Yykge2NvbG9yOiNENTVBRUY7fS5jb2xvcl9kMTcwN2Q6bm90KC5udWMpIHtjb2xvcjojRDE3MDdEO30uY29sb3JfNDM3NjFiOm5vdCgubnVjKSB7Y29sb3I6IzQzNzYxQjt9LmNvbG9yX2UwNmI1Njpub3QoLm51Yykge2NvbG9yOiNFMDZCNTY7fS5jb2xvcl84ZjRhMmI6bm90KC5udWMpIHtjb2xvcjojOEY0QTJCO30uY29sb3JfOTAyZDU5Om5vdCgubnVjKSB7Y29sb3I6IzkwMkQ1OTt9LmNvbG9yX2RlNWYyNDpub3QoLm51Yykge2NvbG9yOiNERTVGMjQ7fS5jb2xvcl9hMmE1ZGM6bm90KC5udWMpIHtjb2xvcjojQTJBNURDO30uY29sb3JfODI3MzI3Om5vdCgubnVjKSB7Y29sb3I6IzgyNzMyNzt9LmNvbG9yXzNjOGM2OTpub3QoLm51Yykge2NvbG9yOiMzQzhDNjk7fS5jb2xvcl84ZDRiODQ6bm90KC5udWMpIHtjb2xvcjojOEQ0Qjg0O30uY29sb3JfODRiMjJmOm5vdCgubnVjKSB7Y29sb3I6Izg0QjIyRjt9LmNvbG9yXzRlYzBkNjpub3QoLm51Yykge2NvbG9yOiM0RUMwRDY7fS5jb2xvcl9lMjNmOTk6bm90KC5udWMpIHtjb2xvcjojRTIzRjk5O30uY29sb3JfZTQ3NWRmOm5vdCgubnVjKSB7Y29sb3I6I0U0NzVERjt9LmNvbG9yXzYxOWE0Zjpub3QoLm51Yykge2NvbG9yOiM2MTlBNEY7fS5jb2xvcl9hNzJmNzk6bm90KC5udWMpIHtjb2xvcjojQTcyRjc5O30uY29sb3JfN2Q0MTRjOm5vdCgubnVjKSB7Y29sb3I6IzdENDE0Qzt9LmNvbG9yX2FiYTcyNzpub3QoLm51Yykge2NvbG9yOiNBQkE3Mjc7fS5jb2xvcl85NjVkMWI6bm90KC5udWMpIHtjb2xvcjojOTY1RDFCO30uY29sb3JfNGQ1ZTI2Om5vdCgubnVjKSB7Y29sb3I6IzRENUUyNjt9LmNvbG9yX2RkODUyNzpub3QoLm51Yykge2NvbG9yOiNERDg1Mjc7fS5jb2xvcl9iZDkzMzY6bm90KC5udWMpIHtjb2xvcjojQkQ5MzM2O30uY29sb3JfZTg1ZDcyOm5vdCgubnVjKSB7Y29sb3I6I0U4NUQ3Mjt9LmNvbG9yX2RjN2RiYjpub3QoLm51Yykge2NvbG9yOiNEQzdEQkI7fS5jb2xvcl9iYzM2NjM6bm90KC5udWMpIHtjb2xvcjojQkMzNjYzO30uY29sb3JfOWQ4ZWVlOm5vdCgubnVjKSB7Y29sb3I6IzlEOEVFRTt9LmNvbG9yXzg0NjliYzpub3QoLm51Yykge2NvbG9yOiM4NDY5QkM7fS5jb2xvcl83Mzc2OWQ6bm90KC5udWMpIHtjb2xvcjojNzM3NjlEO30uY29sb3JfYjE0Y2JjOm5vdCgubnVjKSB7Y29sb3I6I0IxNENCQzt9PC9zdHlsZT4KCjwhLS0gc2xhY2std3d3LWhodm0tbWFpbi1pYWQteWpoZy8gMjAyMC0xMC0wOSAxMToyMjozNS8gdjg0ZWU2Yjk1OGI3YjY0N2I3MGU1ZGM5OGJjZDYyZDg0ZTE3ODVmNDMvIEI6SCAtLT4KCjwvYm9keT48L2h0bWw+ + recorded_at: Fri, 09 Oct 2020 18:22:36 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/empty_channel_array.yml b/test/cassettes/empty_channel_array.yml new file mode 100644 index 00000000..3d840d44 --- /dev/null +++ b/test/cassettes/empty_channel_array.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:23 GMT + Server: + - Apache + X-Slack-Req-Id: + - 01726ebae49af9ba89bf016c6918056b + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1282' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-5dq3,haproxy-edge-pdx-68eo + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602286943,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:23 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:24 GMT + Server: + - Apache + X-Slack-Req-Id: + - 3e2ad0c43c8a1146507cf96853c65546 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-imdb,haproxy-edge-pdx-333x + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:24 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/empty_user_array.yml b/test/cassettes/empty_user_array.yml new file mode 100644 index 00000000..e43c88a8 --- /dev/null +++ b/test/cassettes/empty_user_array.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:22 GMT + Server: + - Apache + X-Slack-Req-Id: + - e0de0d0e48a78bc09caa0fd946c6e2a9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1282' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-invn,haproxy-edge-pdx-8rbg + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602286942,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:22 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:23 GMT + Server: + - Apache + X-Slack-Req-Id: + - 1b3dd7ab9d160e11fd763439318acc89 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-l1tq,haproxy-edge-pdx-gxzc + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:23 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/list_all.yml b/test/cassettes/list_all.yml new file mode 100644 index 00000000..41942454 --- /dev/null +++ b/test/cassettes/list_all.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:43 GMT + Server: + - Apache + X-Slack-Req-Id: + - c1c6326dbbf6d66284d04fc098e5151e + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-i59g,haproxy-edge-pdx-1g64 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:43 GMT +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:50 GMT + Server: + - Apache + X-Slack-Req-Id: + - db0f4b0db801cf7a8e2619bd4193cb31 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-cv6x,haproxy-edge-pdx-f5k6 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602265670,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:50 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/nil_channels.yml b/test/cassettes/nil_channels.yml new file mode 100644 index 00000000..a1e5f49c --- /dev/null +++ b/test/cassettes/nil_channels.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:27 GMT + Server: + - Apache + X-Slack-Req-Id: + - f5894a6081788f1c25eb9ae21742ad1d + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1282' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-uz5t,haproxy-edge-pdx-hsew + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602286947,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:27 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:28 GMT + Server: + - Apache + X-Slack-Req-Id: + - 13b68e16094324dbdeee1d7aafde6c58 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-pyc5,haproxy-edge-pdx-jpry + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:28 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/nil_users.yml b/test/cassettes/nil_users.yml new file mode 100644 index 00000000..08c834b1 --- /dev/null +++ b/test/cassettes/nil_users.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:29 GMT + Server: + - Apache + X-Slack-Req-Id: + - d1b6138739617214fe5e7793c5c2ec99 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1282' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-pqd0,haproxy-edge-pdx-jpry + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602286949,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:29 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:42:30 GMT + Server: + - Apache + X-Slack-Req-Id: + - ad0a1673d3e98fb13f733285871afd43 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-3qgr,haproxy-edge-pdx-rqgu + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:42:31 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/not_authed.yml b/test/cassettes/not_authed.yml new file mode 100644 index 00000000..98cad39c --- /dev/null +++ b/test/cassettes/not_authed.yml @@ -0,0 +1,129 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:43 GMT + Server: + - Apache + X-Slack-Req-Id: + - c1c6326dbbf6d66284d04fc098e5151e + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-i59g,haproxy-edge-pdx-1g64 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"not_authed"}' + recorded_at: Fri, 09 Oct 2020 17:47:43 GMT +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:50 GMT + Server: + - Apache + X-Slack-Req-Id: + - db0f4b0db801cf7a8e2619bd4193cb31 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-cv6x,haproxy-edge-pdx-f5k6 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"not_authed"}' + recorded_at: Fri, 09 Oct 2020 17:47:50 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/send_message.yml b/test/cassettes/send_message.yml new file mode 100644 index 00000000..6990fad3 --- /dev/null +++ b/test/cassettes/send_message.yml @@ -0,0 +1,541 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:55:50 GMT + Server: + - Apache + X-Slack-Req-Id: + - c48df6d4c2ca05efb8e5f428667abd15 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-j9ms,haproxy-edge-pdx-4kzi + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602269750,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:55:50 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 18:55:51 GMT + Server: + - Apache + X-Slack-Req-Id: + - c45e66445d859ed3d03f9d6eb351b05e + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-zmc8,haproxy-edge-pdx-8ea4 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 18:55:51 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=27253&text=hi + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 19:02:48 GMT + Server: + - Apache + X-Slack-Req-Id: + - db6317f833e45304ae1dd0e73f4b1a47 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-swz0,haproxy-edge-pdx-4yzm + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 19:02:48 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=12362&text=hi + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 19:06:48 GMT + Server: + - Apache + X-Slack-Req-Id: + - 689a9a2bb4a0414fa6dafd89888a49f2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-qbdl,haproxy-edge-pdx-h682 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 19:06:48 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=C01BXHENHDK&text=hi + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 22:36:21 GMT + Server: + - Apache + X-Slack-Req-Id: + - f1d2cb520371abf6d4e68edcfb961225 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '334' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-zmc8,haproxy-edge-pdx-1x0h + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BXHENHDK","ts":"1602282981.000300","message":{"bot_id":"B01CHM89XUL","type":"message","text":"hi","user":"U01CD92U2SD","ts":"1602282981.000300","team":"T01C6RMKV0U","bot_profile":{"id":"B01CHM89XUL","deleted":false,"name":"Earth + - Anya - API Project","updated":1602276471,"app_id":"A01C0S92KBM","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6RMKV0U"}}}' + recorded_at: Fri, 09 Oct 2020 22:36:21 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=D12362&text=hi + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 22:39:03 GMT + Server: + - Apache + X-Slack-Req-Id: + - 12ad22c72e45f87b5a559a24e56cf309 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-xp7r,haproxy-edge-pdx-3vri + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 22:39:03 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=C01BXHENHDK&text=HI%21%20ist%203%3A45 + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 22:45:46 GMT + Server: + - Apache + X-Slack-Req-Id: + - b4e36982264d5b4890ca147d98246426 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '343' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-9kiv,haproxy-edge-pdx-k9dj + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BXHENHDK","ts":"1602283546.000400","message":{"bot_id":"B01CHM89XUL","type":"message","text":"HI! + ist 3:45","user":"U01CD92U2SD","ts":"1602283546.000400","team":"T01C6RMKV0U","bot_profile":{"id":"B01CHM89XUL","deleted":false,"name":"Earth + - Anya - API Project","updated":1602276471,"app_id":"A01C0S92KBM","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6RMKV0U"}}}' + recorded_at: Fri, 09 Oct 2020 22:45:46 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=C01BXHENHDK&text=HI%21 + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 22:57:27 GMT + Server: + - Apache + X-Slack-Req-Id: + - 876169a0d5b6ee8c14717a7e530b3688 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '336' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-grrn,haproxy-edge-pdx-f5k6 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BXHENHDK","ts":"1602284247.000500","message":{"bot_id":"B01CHM89XUL","type":"message","text":"HI!","user":"U01CD92U2SD","ts":"1602284247.000500","team":"T01C6RMKV0U","bot_profile":{"id":"B01CHM89XUL","deleted":false,"name":"Earth + - Anya - API Project","updated":1602276471,"app_id":"A01C0S92KBM","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6RMKV0U"}}}' + recorded_at: Fri, 09 Oct 2020 22:57:27 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/validates_existing_channel.yml b/test/cassettes/validates_existing_channel.yml new file mode 100644 index 00000000..26ca9f2b --- /dev/null +++ b/test/cassettes/validates_existing_channel.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:24:32 GMT + Server: + - Apache + X-Slack-Req-Id: + - 7f3b01f9cba606a749aaf4bd4ef7558f + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-oqmd,haproxy-edge-pdx-1350 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602285872,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:24:32 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:24:33 GMT + Server: + - Apache + X-Slack-Req-Id: + - 2147ecb155ece9371bb608da9422e840 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-rqf6,haproxy-edge-pdx-hsew + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:24:33 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/validates_existing_user.yml b/test/cassettes/validates_existing_user.yml new file mode 100644 index 00000000..a3d3018b --- /dev/null +++ b/test/cassettes/validates_existing_user.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:11:11 GMT + Server: + - Apache + X-Slack-Req-Id: + - 4bc179a031d5f853519125489f434a13 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-9c0q,haproxy-edge-pdx-vd1y + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759,"has_2fa":false},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602285072,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:11:12 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 23:11:12 GMT + Server: + - Apache + X-Slack-Req-Id: + - 2ea96b0bf1421f0c02ca98a8dcd4ff2a + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-sres,haproxy-edge-pdx-68eo + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 23:11:12 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/workspace.yml b/test/cassettes/workspace.yml new file mode 100644 index 00000000..2299c776 --- /dev/null +++ b/test/cassettes/workspace.yml @@ -0,0 +1,287 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:45 GMT + Server: + - Apache + X-Slack-Req-Id: + - b799d2dafc2c2977a630757dd44f70c2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1281' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-cyj4,haproxy-edge-pdx-rshi + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6RMKV0U","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"U01C0LNKLEN","team_id":"T01C6RMKV0U","name":"earth_emily_api_proje","deleted":false,"color":"e7392d","real_name":"Earth + - Emily - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Emily - API Project","real_name_normalized":"Earth - Emily - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gef282f65beb","api_app_id":"A01C0SBD2SF","always_active":false,"bot_id":"B01CD9S36V7","image_24":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ef282f65beb64d7cf4cbcc11029a2a0a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948016},{"id":"U01CD92U2SD","team_id":"T01C6RMKV0U","name":"annatokar","deleted":false,"color":"9f69e7","real_name":"annatokar","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"annatokar","real_name_normalized":"annatokar","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g532f6d35c40","image_24":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/532f6d35c4031ef0dab63b53f23e95ae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946759},{"id":"U01CD9539FT","team_id":"T01C6RMKV0U","name":"emnagai89","deleted":false,"color":"4bbe2e","real_name":"Emily + Nagai","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Nagai","real_name_normalized":"Emily Nagai","display_name":"Emily Nagai","display_name_normalized":"Emily + Nagai","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"27eeeb533273","image_original":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-10-05\/1405593945349_27eeeb533273919ad28c_1024.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601946934,"has_2fa":false},{"id":"U01CD9SBB9P","team_id":"T01C6RMKV0U","name":"earth_anya_api_projec","deleted":false,"color":"3c989f","real_name":"Earth + - Anya - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Earth + - Anya - API Project","real_name_normalized":"Earth - Anya - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4befea1e0e7","api_app_id":"A01C0S92KBM","always_active":false,"bot_id":"B01BKUB286T","image_24":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4befea1e0e71664dc4271a1dd0d3136d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png","status_text_canonical":"","team":"T01C6RMKV0U"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1601948031}],"cache_ts":1602265665,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:45 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:46 GMT + Server: + - Apache + X-Slack-Req-Id: + - 4954e3e51218a81314b760470c18fd41 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-cn1z,haproxy-edge-pdx-rf66 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:46 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:48 GMT + Server: + - Apache + X-Slack-Req-Id: + - b0c2a6f9cee8d042b7857a815d486629 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-miae,haproxy-edge-pdx-fil8 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:48 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?format=json&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 09 Oct 2020 17:47:49 GMT + Server: + - Apache + X-Slack-Req-Id: + - 02ff1d56c8e2b735ec4ac5aeaac43514 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '674' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-xozz,haproxy-edge-pdx-23kb + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BXHENHDK","name":"slack-cli","is_channel":true,"is_group":false,"is_im":false,"created":1601946873,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"slack-cli","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01CD92U2SD","last_set":1601946873},"previous_names":[],"num_members":2},{"id":"C01C0S2T0E7","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601946759,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Yay + teamwork!!","creator":"U01CD92U2SD","last_set":1602113294},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01CD92U2SD","last_set":1601946759},"previous_names":[],"num_members":2},{"id":"C01C6RML5CL","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601946760,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01CD92U2SD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6RMKV0U"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01CD92U2SD","last_set":1601946760},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 17:47:49 GMT +recorded_with: VCR 6.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..443ae483 --- /dev/null +++ b/test/channel_test.rb @@ -0,0 +1,35 @@ +require_relative 'test_helper' + +describe "Channel class" do + describe "Channel instantiation" do + before do + @channel = Channel.new("Slackbot Workspace", "12362", "Random", 5) + end + it "is an instance of Channel class" do + expect(@channel).must_be_instance_of Channel + end + + it "has attributes: name, slack_id, and real_name" do + expect(@channel.name).must_equal "Slackbot Workspace" + expect(@channel.slack_id).must_equal "12362" + expect(@channel.topic).must_equal "Random" + expect(@channel.member_count).must_equal 5 + end + end + + describe 'Channel.list_all' do + it "prints out an array of users" do + VCR.use_cassette("list_all") do + @channel = Channel.list_all + expect(@channel).must_be_kind_of Array + end + end + end + + it "has the correct number of users" do + VCR.use_cassette("list_all") do + array = Channel.list_all.length + expect(array).must_equal 3 + end + end +end \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..b2cefb0d --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,22 @@ +require_relative 'test_helper' + +describe "Recipient class" do + + describe "run_get_request" do + it "raises an error a an invalid path" do + VCR.use_cassette("bad path") do + expect { + Recipient.run_get_request("bad_path") + }.must_raise Recipient::InvalidAPIError + end + end + + it "raises an error for a false 'ok' request" do + VCR.use_cassette("not_authed") do + expect { + workspace = Workspace.new + }.must_raise Recipient::InvalidAPIError + end + end + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 1fcf2bab..41a80eba 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,19 +3,20 @@ add_filter 'test/' end +require_relative '../lib/user' +require_relative '../lib/channel' +require_relative '../lib/recipient' +require_relative '../lib/workspace' require 'minitest' require 'minitest/autorun' require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' +require 'dotenv' +Dotenv.load Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new -VCR.configure do |config| - config.cassette_library_dir = "test/cassettes" - config.hook_into :webmock -end - VCR.configure do |config| config.cassette_library_dir = "test/cassettes" # folder where casettes will be located config.hook_into :webmock # tie into this other tool called webmock @@ -25,5 +26,9 @@ } # Don't leave our token lying around in a cassette file. - + config.filter_sensitive_data("") do + ENV["SLACK_TOKEN"] + end end + + diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..2c23ae21 --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,37 @@ +require_relative 'test_helper' + +describe "User class" do + describe "User instantiation" do + before do + @user = User.new("Slackbot", "27253", "Slackbot Lovelace") + end + + it "is an instance of User class" do + expect(@user).must_be_instance_of User + end + + it "has attributes: name, slack_id, and real_name" do + expect(@user.name).must_equal "Slackbot" + expect(@user.slack_id).must_equal "27253" + expect(@user.real_name).must_equal "Slackbot Lovelace" + end + end + + describe 'User.list_all' do + it "prints out an array of users" do + VCR.use_cassette("list_all") do + @users = User.list_all + + expect(@users).must_be_kind_of Array + end + end + + it "has the correct number of users" do + VCR.use_cassette("list_all") do + array = User.list_all.length + + expect(array).must_equal 5 + end + end + end +end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..0cf127cb --- /dev/null +++ b/test/workspace_test.rb @@ -0,0 +1,80 @@ +require_relative 'test_helper' + +describe "Workspace class" do + describe "Workspace instantiation" do + it "validates for empty user array" do + VCR.use_cassette("empty user array") do + workspace = Workspace.new + expect { + workspace.validate_user?([]) + }.must_raise ArgumentError + end + end + + it "validates for empty channel array" do + VCR.use_cassette("empty channel array") do + workspace = Workspace.new + expect { + workspace.validate_channel?([]) + }.must_raise ArgumentError + end + end + + it "validates for nil users" do + VCR.use_cassette("nil users") do + workspace = Workspace.new + expect { + workspace.validate_user?(nil) + }.must_raise ArgumentError + end + end + + it "validates for nil channels" do + VCR.use_cassette("nil channels") do + workspace = Workspace.new + expect { + workspace.validate_channel?(nil) + }.must_raise ArgumentError + end + end + + it "validates for existing user" do + VCR.use_cassette("validates existing user") do + workspace = Workspace.new + not_existing_user_name = workspace.user_doesnt_exist?("not existing") + existing_user_name = workspace.user_doesnt_exist?("slackbot") + not_existing_user_id = workspace.user_doesnt_exist?("bad id") + existing_user_id = workspace.user_doesnt_exist?("USLACKBOT") + expect(not_existing_user_name).must_equal true + expect(existing_user_name).must_be_nil + expect(not_existing_user_id).must_equal true + expect(existing_user_id).must_be_nil + end + end + + it "validates for existing channel" do + VCR.use_cassette("validates existing channel") do + workspace = Workspace.new + not_existing_channel_name = workspace.channel_doesnt_exist?("not existing") + existing_channel_name = workspace.channel_doesnt_exist?("slack-cli") + not_existing_channel_id = workspace.channel_doesnt_exist?("bad id") + existing_channel_id = workspace.channel_doesnt_exist?("C01BXHENHDK") + expect(not_existing_channel_name).must_equal true + expect(existing_channel_name).must_be_nil + expect(not_existing_channel_id).must_equal true + expect(existing_channel_id).must_be_nil + end + end + end + + describe "send_message" do + it "can send a message" do + VCR.use_cassette("send message") do + workspace = Workspace.new + valid_id = "C01BXHENHDK" + message = workspace.send_message(valid_id, "HI!") + expect(message).must_equal true + end + end + end +end \ No newline at end of file