From 92e712528c4feccd0e1d6e7b86947b488dd59d18 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:35:50 -0700 Subject: [PATCH 01/24] Channel class and Slack_cli modulo and getting info (list_all method) --- lib/channel.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib/channel.rb diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..077e93cf --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,42 @@ +require_relative 'recipient' +require "httparty" + +module Slack_cli + class Channel < Recipient + attr_reader :topic, :member_count + + def initialize(id:, name:, topic:, member_count:) + super(id: id, name: name) + + @topic = topic + @member_count = member_count + end + + private + # Get all the channels from Slack API. + # For each channel it creates an intance of channel. + def self.list_all + + channels = [] + + base_url = "https://slack.com/api/" + post_url = "#{base_url}channels.list" + params = { token: ENV["SLACK_API_TOKEN"] } + + response = get(post_url, params) + + response["channels"].each do |channel| + channels << new( + id: channel["id"], + name: channel["name"], + topic: channel["topic"]["value"], + member_count: channel["num_members"] + ) + end + return channels + end + end +end +# p Slack_cli::Channel.list_all +# # a = Channel.new(id: 1, name: "name", topic: "s", member_count: 1) +# # p a \ No newline at end of file From 322af90c3dded83283d370e881dcb1e78e39d420 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:37:06 -0700 Subject: [PATCH 02/24] Recipient class and get method to call the Slack API --- lib/recipient.rb | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 lib/recipient.rb diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..c032e203 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,37 @@ +require "httparty" +require "awesome_print" +require "dotenv" +Dotenv.load + +module Slack_cli + class Recipient + attr_reader :id, :name + + def initialize(id:, name:) + @id = id + @name = name + end + # Given the URL and params(KEY) get the response from the API. + + def self.get(url,params) + resp = HTTParty.get(url, query: params) + if resp.code == 200 && resp.parsed_response["ok"] + return resp + end + return false + end + + def self.list_all + raise NotImplementedError, 'Implement me in a child class!' + end + + def details + raise NotImplementedError, 'Implement me in a child class!' + end + end +end +# base_url = "https://slack.com/api/" +# post_url = "#{base_url}channels.list" +# params = { token: ENV["SLACK_API_TOKEN"] } + +# Recipient.get(post_url, params) \ No newline at end of file From 4dff683fb6e7c89bcd245da7855cd0831b33c70d Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:38:30 -0700 Subject: [PATCH 03/24] User class and list_all abstract method to get the info of all users --- lib/user.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lib/user.rb diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..3d9c372a --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,44 @@ +require_relative 'recipient' +require "httparty" + +module Slack_cli + class User < Recipient + attr_reader :real_name, :status_text, :status_emoji + + def initialize(id:, name:, real_name:, status_text:, status_emoji:) + super(id: id, name: name) + + @real_name = real_name + @status_text = status_text + @status_emoji = status_emoji + end + + private + + # Get all the users from Slack API. + # For each list_all creates an intance of channel. + def self.list_all + + users = [] + + base_url = "https://slack.com/api/" + post_url = "#{base_url}users.list" + params = { token: ENV["SLACK_API_TOKEN"] } + + response = get(post_url, params) + + response["members"].each do |user| + users << new( + id: user["id"], + name: user["name"], + real_name: user["real_name"], + status_text: user["profile"]["status_text"], + status_emoji: user["profile"]["status_emoji"] + ) + end + return users + end + end +end + +# p Slack_cli::User.list_all \ No newline at end of file From 51797a14b8d5fb165478c3f5785a861a56be7a39 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:39:21 -0700 Subject: [PATCH 04/24] Encapsulated everything in a Slack_cli modulo --- lib/workspace.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lib/workspace.rb diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..2bf67c23 --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,11 @@ + +module Slack_cli + class Workspace + attr_reader :users, :channels + + def initialize + @users = [] + @channels = [] + end + end +end From 079e2a52fb35be7d7bb9fa51da444228a40b9eb5 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:40:37 -0700 Subject: [PATCH 05/24] Initialize test and correct info about channels --- test/channel_test.rb | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/channel_test.rb diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..8f63f363 --- /dev/null +++ b/test/channel_test.rb @@ -0,0 +1,41 @@ +# channel_test.rb +require_relative 'test_helper' + +describe "Channel" do + + before do + @channel = Slack_cli::Channel.new( + id: 54, + name: "Test Channel", + topic: "Test Topic", + member_count: 5 + ) + end + + it "is an instance of Channel" do + expect(@channel).must_be_kind_of Slack_cli::Channel + end + + + it "can get the list of channels" do + VCR.use_cassette("channel-channels") do + + base_url = "https://slack.com/api/" + post_url = "#{base_url}channels.list" + params = { token: ENV["SLACK_API_TOKEN"] } + + response = Slack_cli::Channel.get(post_url, params) + + count = response["channels"].select do |channel| + channel["name"] + end + + channels = Slack_cli::Channel.list_all + general = channels[0].name + + expect(channels).must_be_kind_of Array + expect(channels.length).must_equal count.length + expect(general).must_equal count[0]["name"] + end + end +end \ No newline at end of file From f179ef512135063da37b667c9d7e72467ba67a91 Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:41:25 -0700 Subject: [PATCH 06/24] Initilize test and get method test --- test/recipient_test.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/recipient_test.rb diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..8a4d0dcd --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,30 @@ +# Recipient_test.rb +require_relative 'test_helper' + + +describe "Recipient" do + + before do + @recipient = Slack_cli::Recipient.new( + id: 1, + name: "Test Test", + ) + end + + it "is an instance of Channel" do + expect(@recipient).must_be_kind_of Slack_cli::Recipient + end + + it "can get a valid information from the API" do + VCR.use_cassette("recipient-recipients") do + + base_url = "https://slack.com/api/" + post_url = "#{base_url}channels.list" + params = { token: ENV["SLACK_API_TOKEN"] } + + resp = Slack_cli::Recipient.get(base_url, params) + + expect(resp.code == 200 && resp.parsed_response["ok"]).must_equal "ok" + end + end +end \ No newline at end of file From 6f1d615820f270f5c51e10e2a70b9038bba03eaa Mon Sep 17 00:00:00 2001 From: Vera Date: Fri, 13 Mar 2020 00:43:29 -0700 Subject: [PATCH 07/24] filter_sensitive_data and require relatives --- test/test_helper.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/test_helper.rb b/test/test_helper.rb index 1fcf2bab..26d722d0 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,11 +3,17 @@ add_filter 'test/' end +require 'dotenv' +Dotenv.load + require 'minitest' require 'minitest/autorun' require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' +require_relative '../lib/workspace' +require_relative '../lib/recipient' +require_relative '../lib/channel' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new @@ -23,7 +29,10 @@ :record => :new_episodes, # record new data when we don't have it yet :match_requests_on => [:method, :uri, :body], # The http method, URI and body of a request all need to match } - # Don't leave our token lying around in a cassette file. + config.filter_sensitive_data("") do + ENV["SLACK_API_TOKEN"] + end + end From 98ff673bb89adf6a3f76338b91c11d69f260bd27 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:43:18 -0700 Subject: [PATCH 08/24] Details method added --- lib/channel.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/channel.rb b/lib/channel.rb index 077e93cf..3c406929 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -12,6 +12,10 @@ def initialize(id:, name:, topic:, member_count:) @member_count = member_count end + def details + tp self, "id", "name", "topic", "member_count" + end + private # Get all the channels from Slack API. # For each channel it creates an intance of channel. From c0af31b500bb0c4f5ba3fced6566065262d806f6 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:44:22 -0700 Subject: [PATCH 09/24] Raises and SlackApi class error when API call fails --- lib/recipient.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index c032e203..64b3d1cc 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,5 +1,6 @@ require "httparty" require "awesome_print" + require "dotenv" Dotenv.load @@ -11,14 +12,14 @@ def initialize(id:, name:) @id = id @name = name end - # Given the URL and params(KEY) get the response from the API. + # Given the URL and params(KEY) get the response from the API. def self.get(url,params) resp = HTTParty.get(url, query: params) if resp.code == 200 && resp.parsed_response["ok"] return resp end - return false + raise SlackAPIError, "We encountered a problem: #{resp["error"]}" end def self.list_all @@ -30,8 +31,6 @@ def details end end end -# base_url = "https://slack.com/api/" -# post_url = "#{base_url}channels.list" -# params = { token: ENV["SLACK_API_TOKEN"] } -# Recipient.get(post_url, params) \ No newline at end of file +class SlackAPIError < Exception +end From 8198b96a43e1d49902b8b4017d6b295b230cb54b Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:45:49 -0700 Subject: [PATCH 10/24] CLI using tty-prompt gem and get_user and selector methods --- lib/slack.rb | 73 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 8a0b659b..769f3510 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,12 +1,75 @@ #!/usr/bin/env ruby +# menu choice Ruby gem. +require "tty-prompt" +@prompt = TTY::Prompt.new -def main - puts "Welcome to the Ada Slack CLI!" - workspace = Workspace.new +require "dotenv" +require "httparty" +require "awesome_print" +require "table_print" - # TODO project +require_relative 'workspace' +Dotenv.load - puts "Thank you for using the Ada Slack CLI" +# Promt gem @promt -> Using the gem +def get_user_input + user_input = @prompt.select('What do you want to do:') do |menu| + # Each menu is assign to the varibale user_input > Depends of the user choise. + menu.choice "List of users" + menu.choice "List of channels" + menu.choice "Select Channel" + menu.choice "Select User" + menu.choice "Details" + menu.choice "Exit" + end + return user_input +end +# To handle the user_input and display the tables. +def selector(user_input) + case user_input + when "List of users" + # tp = To print the intances in a table. + tp @workspace.users, :name, :real_name, :id + when "List of channels" + tp @workspace.channels, :name, :topic, :member_count, :id + when "Select Channel" + print "Please enter the channel name or ID: " + user_selection = @workspace.select_channel + if user_selection == nil + puts "Invalid" + else + puts "#{user_selection} Has been chose" + end + when "Select User" + print "Please enter the channel name or ID: " + user_selection = @workspace.select_user + if user_selection == nil + puts "Invalid" + else + puts "#{user_selection} Has been chose" + end + when "Details" + if @workspace.selected == nil + puts "Invalid entry" + else + @workspace.show_details + user_input = nil + end + when "Exit" + exit + end +end + +def main + puts "Welcome to the Ada Slack CLI!" + # Creates a new intance of workspace. + @workspace = Slack_cli::Workspace.new + + user_input = nil + while true + user_input = get_user_input + selector(user_input) + end end main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From 3602c3be3442b46d472e1bdd7656bc24f93d7dee Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:46:22 -0700 Subject: [PATCH 11/24] Detail method added --- lib/user.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index 3d9c372a..53baa9fc 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -13,14 +13,17 @@ def initialize(id:, name:, real_name:, status_text:, status_emoji:) @status_emoji = status_emoji end + def details + tp self, "id", "name", "real_name", "status_text", "status_emoji" + end + private # Get all the users from Slack API. - # For each list_all creates an intance of channel. + # For each list_all creates an intance of user. def self.list_all users = [] - base_url = "https://slack.com/api/" post_url = "#{base_url}users.list" params = { token: ENV["SLACK_API_TOKEN"] } From 06ff7f3d3aeb0570a753cc992c516291b9f3b9f4 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:47:01 -0700 Subject: [PATCH 12/24] Select_user and channel methods, show details added --- lib/workspace.rb | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 2bf67c23..8aae394a 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,11 +1,48 @@ +# worksapce.rb +require_relative "user" +require_relative "channel" module Slack_cli class Workspace - attr_reader :users, :channels + attr_reader :users, :channels, :selected def initialize - @users = [] - @channels = [] + @users = Slack_cli::User.list_all + @channels = Slack_cli::Channel.list_all + @selected = nil end + + def select_channel + user_input = gets.chomp + channels.each do |channel| + if user_input == channel.name || user_input == channel.id + @selected = channel + return @selected.name + end + end + return @selected = nil + end + + def select_user + + user_input = gets.chomp + + users.each do |user| + if user_input == user.real_name || user_input == user.id + @selected = user + return @selected.name + end + end + return @selected = nil + end + + def show_details + @selected.details + end + + def send_message + end + end end + From ccebbcc8bd4e6f4eb81630a9759239d3ffa5f4bc Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:47:40 -0700 Subject: [PATCH 13/24] re-do test for list of channels --- test/channel_test.rb | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/test/channel_test.rb b/test/channel_test.rb index 8f63f363..7eb7122d 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -1,5 +1,6 @@ # channel_test.rb require_relative 'test_helper' +require_relative "../lib/channel" describe "Channel" do @@ -18,24 +19,18 @@ it "can get the list of channels" do - VCR.use_cassette("channel-channels") do + response = [] - base_url = "https://slack.com/api/" - post_url = "#{base_url}channels.list" - params = { token: ENV["SLACK_API_TOKEN"] } - - response = Slack_cli::Channel.get(post_url, params) + VCR.use_cassette("channels-list-endpoint") do + response = Slack_cli::Channel.list_all + end - count = response["channels"].select do |channel| - channel["name"] - end - - channels = Slack_cli::Channel.list_all - general = channels[0].name + expect(response).must_be_kind_of Array + expect(response.length).must_be :>, 0 - expect(channels).must_be_kind_of Array - expect(channels.length).must_equal count.length - expect(general).must_equal count[0]["name"] + response.each do |resp| + expect(resp).must_be_kind_of Slack_cli::Channel end + end end \ No newline at end of file From b3f96cd7f2c3191e52effd45f329624726121e62 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:48:41 -0700 Subject: [PATCH 14/24] It raises an NotImplementedError when details and list_all invoke directly --- test/recipient_test.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 8a4d0dcd..48a96fe7 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -1,5 +1,6 @@ # Recipient_test.rb require_relative 'test_helper' +require_relative '../lib/recipient' describe "Recipient" do @@ -27,4 +28,12 @@ expect(resp.code == 200 && resp.parsed_response["ok"]).must_equal "ok" end end + + it "raises an error if invoked list_all directly (without subclassing)" do + expect { Slack_cli::Recipient.list_all }.must_raise NotImplementedError + end + + it "raises an error if invoked details directly (without subclassing)" do + expect { @recipient.details }.must_raise NotImplementedError + end end \ No newline at end of file From d8ee7dfe801bf606fb8299cb8a6d049d415d8bb9 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:49:19 -0700 Subject: [PATCH 15/24] Update the require --- test/test_helper.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/test_helper.rb b/test/test_helper.rb index 26d722d0..23065381 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,9 +11,6 @@ require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' -require_relative '../lib/workspace' -require_relative '../lib/recipient' -require_relative '../lib/channel' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 7aa0a5f9ed2cbc04a366a78f46dc58f3407e5561 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:50:53 -0700 Subject: [PATCH 16/24] User instantiation, user_list and valid users test methods --- test/user_test.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/user_test.rb diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..c9eb8ddd --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,44 @@ +require_relative "test_helper" +require_relative "../lib/user" + +describe "User class" do + describe "User instantiation" do + + before do + base_url = "https://slack.com/api/" + @post_url = "#{base_url}users.list" + @params = { token: ENV["SLACK_API_TOKEN"] } + end + + it "can get the list of users" do + result = {} + VCR.use_cassette("users-list-endpoint") do + result = Slack_cli::User.get(@post_url, @params) + end + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true + end + + it "throws an argument error when a call fails" do + VCR.use_cassette("users-list-endpoint") do + expect{Slack_cli::User.get("https://slack.com/api/bogus.list",@params)}.must_raise SlackAPIError + end + end + + it "List of valid users" do + response = [] + + VCR.use_cassette("users-list-endpoint") do + response = Slack_cli::User.list_all + end + + expect(response).must_be_kind_of Array + expect(response.length).must_be :>, 0 + + response.each do |resp| + expect(resp).must_be_kind_of Slack_cli::User + end + + end + end +end From 24e50139c0357723534279d3c858cd66eefd7699 Mon Sep 17 00:00:00 2001 From: Vera Date: Sun, 15 Mar 2020 22:52:23 -0700 Subject: [PATCH 17/24] Workspace instantiation,select_user and channel tests methods,and nil case escenarios --- test/workspace_test.rb | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/workspace_test.rb diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..5889853f --- /dev/null +++ b/test/workspace_test.rb @@ -0,0 +1,96 @@ +require_relative "test_helper" +require_relative "../lib/workspace" +require 'table_print' + +describe "Workspace class" do + describe "Workspace instantiation" do + it "creates an instance of Workspace" do + VCR.use_cassette("Workspace initialized") do + expect(Slack_cli::Workspace.new).must_be_instance_of Slack_cli::Workspace + end + end + end + + describe "Select an specific user" do + it "select_user" do + VCR.use_cassette("workspace-select-User") do + @workspace = Slack_cli::Workspace.new + end + # Override the gets method to test with a hard code user, insted of asking the user. + def @workspace.gets + "Vera" + end + @selected = @workspace.select_user + + expect(@workspace.selected).must_be_instance_of Slack_cli::User + expect(@workspace.selected.name).must_equal "lizeth.veraro" + end + + it "selected equals to nil when user does not exist" do + VCR.use_cassette("workspace-select-User") do + @workspace = Slack_cli::Workspace.new + end + # Override the gets method to test with a hard code user, insted of asking the user. + def @workspace.gets + "UserNil" + end + @selected = @workspace.select_user + + # expect(@workspace.selected).must_be_instance_of Slack_cli::User + assert_nil(@workspace.selected) + end + end + + describe "Select an specific channel" do + it "select_channel" do + VCR.use_cassette("workspace-select-channel") do + @workspace = Slack_cli::Workspace.new + end + # Override the gets method to test with a hard code user, insted of asking the user. + def @workspace.gets + "general" + end + @selected = @workspace.select_channel + + expect(@workspace.selected).must_be_instance_of Slack_cli::Channel + expect(@workspace.selected.name).must_equal "general" + end + + it "selected equals to nil when channel does not exist" do + VCR.use_cassette("workspace-select-channel") do + @workspace = Slack_cli::Workspace.new + end + # Override the gets method to test with a hard code user, insted of asking the user. + def @workspace.gets + "ChannelNil" + end + @selected = @workspace.select_channel + + assert_nil(@workspace.selected) + end + + it "show_details - Based on the selected User/Channel" do + VCR.use_cassette("workspace-select-channel") do + @workspace = Slack_cli::Workspace.new + end + # Takes general but it work with user names too. + def @workspace.gets + "general" + end + @selected = @workspace.select_channel + expect(@workspace.show_details).must_be_kind_of TablePrint::Returnable + expect(@workspace.selected.name).must_equal "general" + end + end + + describe "Show details" do + it "show_details - Based on the selected User/Channel" do + VCR.use_cassette("workspace-select-User") do + @workspace = Slack_cli::Workspace.new + end + + + end + end +end + From 44baec025712ffeba0a8e4243c868b653b2bdcc2 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 14:40:57 -0700 Subject: [PATCH 18/24] send_message method added --- lib/recipient.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/recipient.rb b/lib/recipient.rb index 64b3d1cc..97f74d98 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -22,6 +22,23 @@ def self.get(url,params) raise SlackAPIError, "We encountered a problem: #{resp["error"]}" end + def send_message(channel) + message = gets.chomp + base_url = "https://slack.com/api/" + post_url = "#{base_url}/chat.postMessage" + + resp = HTTParty.post(post_url,{ + headers: { 'Content-Type'=> 'application/x-www-form-urlencoded', + 'charset' => 'utf-8' }, + body:{ + token: ENV["SLACK_API_TOKEN"], + channel: channel, + text: message + } + }) + return resp.code == 200 && resp.parsed_response["ok"] + end + def self.list_all raise NotImplementedError, 'Implement me in a child class!' end From fe7fee33320acf9cc0db991ccd037d09416f45f7 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 14:41:48 -0700 Subject: [PATCH 19/24] Send_message menu choice added, and method --- lib/slack.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/slack.rb b/lib/slack.rb index 769f3510..c6057250 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -20,6 +20,7 @@ def get_user_input menu.choice "Select Channel" menu.choice "Select User" menu.choice "Details" + menu.choice "Send message" menu.choice "Exit" end return user_input @@ -55,6 +56,13 @@ def selector(user_input) @workspace.show_details user_input = nil end + when "Send message" + if @workspace.selected == nil + puts "Invalid entry" + else + @workspace.selected.send_message(@workspace.selected.name) + user_input = nil + end when "Exit" exit end From 243654c353ada77e8ea423575773c183058f6160 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 14:42:53 -0700 Subject: [PATCH 20/24] Require recipient to use send_message method, send_method added --- lib/workspace.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 8aae394a..65d34ca5 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,6 +1,7 @@ # worksapce.rb require_relative "user" require_relative "channel" +require_relative "recipient" module Slack_cli class Workspace @@ -41,8 +42,8 @@ def show_details end def send_message + @selected.send_message(channel) end - end end From 248b9cd95f080ae5062cef9eb47bedf53e53d9f2 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 14:43:57 -0700 Subject: [PATCH 21/24] typos fixed recipient, send valid message test --- test/recipient_test.rb | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 48a96fe7..27084fbf 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -12,12 +12,12 @@ ) end - it "is an instance of Channel" do + it "is an instance of Recipient" do expect(@recipient).must_be_kind_of Slack_cli::Recipient end it "can get a valid information from the API" do - VCR.use_cassette("recipient-recipients") do + VCR.use_cassette("recipient-recipients-endpoint") do base_url = "https://slack.com/api/" post_url = "#{base_url}channels.list" @@ -36,4 +36,18 @@ it "raises an error if invoked details directly (without subclassing)" do expect { @recipient.details }.must_raise NotImplementedError end + + + it "can send a valid message" do + + VCR.use_cassette("recipient-recipients-endpoint") do + @recipient = Slack_cli::Recipient.new(id: "CV5GLCW12", name: "general") + def @recipient.gets + "Test" + end + response = @recipient.send_message("general") + expect(response).must_equal true + end + + end end \ No newline at end of file From a8337b58ff772776c80a9f72581571e15ffefa58 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 14:44:59 -0700 Subject: [PATCH 22/24] send message tests --- test/workspace_test.rb | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5889853f..b575e5b9 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -5,7 +5,7 @@ describe "Workspace class" do describe "Workspace instantiation" do it "creates an instance of Workspace" do - VCR.use_cassette("Workspace initialized") do + VCR.use_cassette("workspace-initialized") do expect(Slack_cli::Workspace.new).must_be_instance_of Slack_cli::Workspace end end @@ -13,7 +13,7 @@ describe "Select an specific user" do it "select_user" do - VCR.use_cassette("workspace-select-User") do + VCR.use_cassette("workspace-select-user") do @workspace = Slack_cli::Workspace.new end # Override the gets method to test with a hard code user, insted of asking the user. @@ -27,7 +27,7 @@ def @workspace.gets end it "selected equals to nil when user does not exist" do - VCR.use_cassette("workspace-select-User") do + VCR.use_cassette("workspace-select-user") do @workspace = Slack_cli::Workspace.new end # Override the gets method to test with a hard code user, insted of asking the user. @@ -81,16 +81,22 @@ def @workspace.gets expect(@workspace.show_details).must_be_kind_of TablePrint::Returnable expect(@workspace.selected.name).must_equal "general" end - end - describe "Show details" do - it "show_details - Based on the selected User/Channel" do - VCR.use_cassette("workspace-select-User") do + it "send message - Based on the selected Channel" do + VCR.use_cassette("workspace-select-channel") do @workspace = Slack_cli::Workspace.new - end - + def @workspace.gets + "general" + end + + @selected = @workspace.select_channel + + expect(@workspace.selected.send_message(@selected)).must_equal true + end + end + end end From 5d6751b1162f893dba554fb673a9e655e46c8d34 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 16 Mar 2020 15:58:56 -0700 Subject: [PATCH 23/24] Deletin puts and colorized added --- lib/channel.rb | 5 +- lib/recipient.rb | 2 +- lib/slack.rb | 29 +- lib/user.rb | 3 +- lib/workspace.rb | 2 +- test/cassettes/channels-list-endpoint.yml | 84 ++++++ .../recipient-recipients-endpoint.yml | 246 +++++++++++++++++ test/cassettes/users-list-endpoint.yml | 155 +++++++++++ test/cassettes/workspace-initialized.yml | 172 ++++++++++++ test/cassettes/workspace-select-channel.yml | 251 ++++++++++++++++++ test/cassettes/workspace-select-user.yml | 172 ++++++++++++ .../workspace-sendmessage-channel.yml | 251 ++++++++++++++++++ .../workspace-showdetails-channel.yml | 172 ++++++++++++ test/workspace_test.rb | 4 +- 14 files changed, 1532 insertions(+), 16 deletions(-) create mode 100644 test/cassettes/channels-list-endpoint.yml create mode 100644 test/cassettes/recipient-recipients-endpoint.yml create mode 100644 test/cassettes/users-list-endpoint.yml create mode 100644 test/cassettes/workspace-initialized.yml create mode 100644 test/cassettes/workspace-select-channel.yml create mode 100644 test/cassettes/workspace-select-user.yml create mode 100644 test/cassettes/workspace-sendmessage-channel.yml create mode 100644 test/cassettes/workspace-showdetails-channel.yml diff --git a/lib/channel.rb b/lib/channel.rb index 3c406929..5f4b3e48 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -40,7 +40,4 @@ def self.list_all return channels end end -end -# p Slack_cli::Channel.list_all -# # a = Channel.new(id: 1, name: "name", topic: "s", member_count: 1) -# # p a \ No newline at end of file +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index 97f74d98..9b225672 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -21,7 +21,7 @@ def self.get(url,params) end raise SlackAPIError, "We encountered a problem: #{resp["error"]}" end - + # Takes channel as a parameter and text from the user. def send_message(channel) message = gets.chomp base_url = "https://slack.com/api/" diff --git a/lib/slack.rb b/lib/slack.rb index c6057250..196b0876 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -3,6 +3,8 @@ require "tty-prompt" @prompt = TTY::Prompt.new +require 'colorize' + require "dotenv" require "httparty" require "awesome_print" @@ -25,45 +27,60 @@ def get_user_input end return user_input end -# To handle the user_input and display the tables. + +# To handle the user_input, display the tables,show_details and send messages. def selector(user_input) case user_input when "List of users" # tp = To print the intances in a table. + puts "\n" tp @workspace.users, :name, :real_name, :id + puts "\n" when "List of channels" + puts "\n" tp @workspace.channels, :name, :topic, :member_count, :id + puts "\n" when "Select Channel" print "Please enter the channel name or ID: " user_selection = @workspace.select_channel if user_selection == nil - puts "Invalid" + puts "Invalid entry - the channel does not exist.".red else - puts "#{user_selection} Has been chose" + puts "#{user_selection} Has been chose".blue end + puts "\n" when "Select User" print "Please enter the channel name or ID: " user_selection = @workspace.select_user if user_selection == nil - puts "Invalid" + puts "Invalid entry - the user does not exist.".red else - puts "#{user_selection} Has been chose" + puts "#{user_selection} Has been chose".blue end + puts "\n" when "Details" + if @workspace.selected == nil - puts "Invalid entry" + puts "\n" + puts "Invalid entry - You selected an invalid channel or User." else + puts "\n" @workspace.show_details user_input = nil end + when "Send message" if @workspace.selected == nil + puts "\n" puts "Invalid entry" else + puts "\n" @workspace.selected.send_message(@workspace.selected.name) + puts "Your message has been sent".blue user_input = nil end when "Exit" + puts "Bye!! Thank you for using Ada slack CLI".yellow exit end end diff --git a/lib/user.rb b/lib/user.rb index 53baa9fc..82a9b154 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -13,6 +13,7 @@ def initialize(id:, name:, real_name:, status_text:, status_emoji:) @status_emoji = status_emoji end + # Table print the details. def details tp self, "id", "name", "real_name", "status_text", "status_emoji" end @@ -43,5 +44,3 @@ def self.list_all end end end - -# p Slack_cli::User.list_all \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 65d34ca5..ebd61fe2 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -40,7 +40,7 @@ def select_user def show_details @selected.details end - + # Based on the channel selected. def send_message @selected.send_message(channel) end diff --git a/test/cassettes/channels-list-endpoint.yml b/test/cassettes/channels-list-endpoint.yml new file mode 100644 index 00000000..1742d137 --- /dev/null +++ b/test/cassettes/channels-list-endpoint.yml @@ -0,0 +1,84 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '600' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:16 GMT + Server: + - Apache + X-Slack-Req-Id: + - a1bc58e3dcf465f999e4e83d5114590f + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-2nvs + X-Cache: + - Miss from cloudfront + Via: + - 1.1 49cdeca097624936e070b73619df7da9.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - ilNUrhdEGWo2UEVFgfGeouSxtSjSIjMI_oCOIJ6PiswBih2qpcSQyA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60Q76GG","UV5GLBZT6","UV60P4CMN","UV64BM5QV","UV68KR96Z"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60Q76GG","UV5GLBZT6","UV60P4CMN","UV64BM5QV","UV68KR96Z"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60Q76GG","UV5GLBZT6","UV60P4CMN","UV64BM5QV","UV68KR96Z"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:16 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/recipient-recipients-endpoint.yml b/test/cassettes/recipient-recipients-endpoint.yml new file mode 100644 index 00000000..0f61bcd3 --- /dev/null +++ b/test/cassettes/recipient-recipients-endpoint.yml @@ -0,0 +1,246 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/?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: 301 + message: Moved Permanently + headers: + Content-Type: + - text/html + Content-Length: + - '0' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:09 GMT + Server: + - Apache + Vary: + - Accept-Encoding + X-Frame-Options: + - SAMEORIGIN + Location: + - https://slack.com/api?token= + X-Via: + - haproxy-www-ixj4 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 e9f9d4725d6328edca783d6dff756da8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - P2H8HSNhFQJZsUUT_LKBV5muYtO-NGljtOew_HEVGTGI0cDPt7Z2ag== + body: + encoding: UTF-8 + string: '' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:09 GMT +- request: + method: get + uri: https://slack.com/api?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: 301 + message: Moved Permanently + headers: + Content-Type: + - text/html; charset=iso-8859-1 + Content-Length: + - '312' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:10 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Location: + - https://api.slack.com?token= + X-Via: + - haproxy-www-hnt8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 aabd01c4a20dae837d162bd972422efc.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - ceCgAdXN5QH-Y_YdACIn18OgTCGvHiwz2HFQyA4Ng87d5sOv1WS1_g== + body: + encoding: UTF-8 + string: | + + + 301 Moved Permanently + +

Moved Permanently

+

The document has moved here.

+ + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:10 GMT +- request: + method: get + uri: https://api.slack.com/?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: + Content-Type: + - text/html; charset=utf-8 + Content-Length: + - '15132' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:10 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Vary: + - Accept-Encoding + X-Xss-Protection: + - '0' + X-Slack-Backend: + - h + Set-Cookie: + - b=b8l5obe47d6j6m8ut4emd2l5g; expires=Sat, 16-Mar-2030 21:29:10 GMT; Max-Age=315532800; + path=/; domain=.slack.com; secure; SameSite=None + - x=b8l5obe47d6j6m8ut4emd2l5g.1584394150; expires=Mon, 16-Mar-2020 21:44:10 + GMT; Max-Age=900; path=/; domain=.slack.com; secure; SameSite=None + X-Frame-Options: + - SAMEORIGIN + X-Via: + - haproxy-www-lc3r + X-Cache: + - Miss from cloudfront + Via: + - 1.1 ce71f64ad5dca81beca846466f2d5008.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - 8Xxnrvha96fAuvMKUu906N_RmrHv7mgsGdwSr6CZDNu9wQBhnKqW_g== + body: + encoding: ASCII-8BIT + string: !binary |- + PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4tVVMiIGNsYXNzPSIiPjxoZWFkPjxzY3JpcHQ+d2luZG93LnRzX2VuZHBvaW50X3VybCA9ICJodHRwczpcL1wvc2xhY2suY29tXC9iZWFjb25cL3RpbWluZyI7KGZ1bmN0aW9uKGUpIHsKCXZhciBuPURhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlLHI9ZS5wZXJmb3JtYW5jZXx8e30sdD1bXSxhPXt9LGk9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoLGk9W107YT5yO3IrKyl0W3JdW2VdPT1uJiZpLnB1c2godFtyXSk7cmV0dXJuIGl9LG89ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHIsYT10Lmxlbmd0aDthLS07KXI9dFthXSxyLmVudHJ5VHlwZSE9ZXx8dm9pZCAwIT09biYmci5uYW1lIT1ufHx0LnNwbGljZShhLDEpfTtyLm5vd3x8KHIubm93PXIud2Via2l0Tm93fHxyLm1vek5vd3x8ci5tc05vd3x8ZnVuY3Rpb24oKXtyZXR1cm4oRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGUpLW59KSxyLm1hcmt8fChyLm1hcms9ci53ZWJraXRNYXJrfHxmdW5jdGlvbihlKXt2YXIgbj17bmFtZTplLGVudHJ5VHlwZToibWFyayIsc3RhcnRUaW1lOnIubm93KCksZHVyYXRpb246MH07dC5wdXNoKG4pLGFbZV09bn0pLHIubWVhc3VyZXx8KHIubWVhc3VyZT1yLndlYmtpdE1lYXN1cmV8fGZ1bmN0aW9uKGUsbixyKXtuPWFbbl0uc3RhcnRUaW1lLHI9YVtyXS5zdGFydFRpbWUsdC5wdXNoKHtuYW1lOmUsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bixkdXJhdGlvbjpyLW59KX0pLHIuZ2V0RW50cmllc0J5VHlwZXx8KHIuZ2V0RW50cmllc0J5VHlwZT1yLndlYmtpdEdldEVudHJpZXNCeVR5cGV8fGZ1bmN0aW9uKGUpe3JldHVybiBpKCJlbnRyeVR5cGUiLGUpfSksci5nZXRFbnRyaWVzQnlOYW1lfHwoci5nZXRFbnRyaWVzQnlOYW1lPXIud2Via2l0R2V0RW50cmllc0J5TmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGkoIm5hbWUiLGUpfSksci5jbGVhck1hcmtzfHwoci5jbGVhck1hcmtzPXIud2Via2l0Q2xlYXJNYXJrc3x8ZnVuY3Rpb24oZSl7bygibWFyayIsZSl9KSxyLmNsZWFyTWVhc3VyZXN8fChyLmNsZWFyTWVhc3VyZXM9ci53ZWJraXRDbGVhck1lYXN1cmVzfHxmdW5jdGlvbihlKXtvKCJtZWFzdXJlIixlKX0pLGUucGVyZm9ybWFuY2U9ciwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiYoZGVmaW5lLmFtZHx8ZGVmaW5lLmFqcykmJmRlZmluZSgicGVyZm9ybWFuY2UiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lCn0pKHdpbmRvdyk7PC9zY3JpcHQ+PHNjcmlwdD4KCihmdW5jdGlvbigpIHsKCQoJd2luZG93LlRTTWFyayA9IGZ1bmN0aW9uKG1hcmtfbGFiZWwpIHsKCQlpZiAoIXdpbmRvdy5wZXJmb3JtYW5jZSB8fCAhd2luZG93LnBlcmZvcm1hbmNlLm1hcmspIHJldHVybjsKCQlwZXJmb3JtYW5jZS5tYXJrKG1hcmtfbGFiZWwpOwoJfTsKCXdpbmRvdy5UU01hcmsoJ3N0YXJ0X2xvYWQnKTsKCgkKCXdpbmRvdy5UU01lYXN1cmVBbmRCZWFjb24gPSBmdW5jdGlvbihtZWFzdXJlX2xhYmVsLCBzdGFydF9tYXJrX2xhYmVsKSB7CgkJaWYgKCF3aW5kb3cucGVyZm9ybWFuY2UgfHwgIXdpbmRvdy5wZXJmb3JtYW5jZS5tYXJrIHx8ICF3aW5kb3cucGVyZm9ybWFuY2UubWVhc3VyZSkgewoJCQlyZXR1cm47CgkJfQoKCQlwZXJmb3JtYW5jZS5tYXJrKHN0YXJ0X21hcmtfbGFiZWwgKyAnX2VuZCcpOwoKCQl0cnkgewoJCQlwZXJmb3JtYW5jZS5tZWFzdXJlKG1lYXN1cmVfbGFiZWwsIHN0YXJ0X21hcmtfbGFiZWwsIHN0YXJ0X21hcmtfbGFiZWwgKyAnX2VuZCcpOwoJCQl3aW5kb3cuVFNCZWFjb24obWVhc3VyZV9sYWJlbCwgcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShtZWFzdXJlX2xhYmVsKVswXS5kdXJhdGlvbik7CgkJfSBjYXRjaCAoZSkgewoJCQkKCQl9Cgl9OwoKCQoJaWYgKCdzZW5kQmVhY29uJyBpbiBuYXZpZ2F0b3IpIHsKCQl3aW5kb3cuVFNCZWFjb24gPSBmdW5jdGlvbihsYWJlbCwgdmFsdWUpIHsKCQkJdmFyIGVuZHBvaW50X3VybCA9IHdpbmRvdy50c19lbmRwb2ludF91cmwgfHwgJ2h0dHBzOi8vc2xhY2suY29tL2JlYWNvbi90aW1pbmcnOwoJCQluYXZpZ2F0b3Iuc2VuZEJlYWNvbigKCQkJCWVuZHBvaW50X3VybCArICc/ZGF0YT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsICsgJzonICsgdmFsdWUpLAoJCQkJJycKCQkJKTsKCQl9OwoJfSBlbHNlIHsKCQl3aW5kb3cuVFNCZWFjb24gPSBmdW5jdGlvbihsYWJlbCwgdmFsdWUpIHsKCQkJdmFyIGVuZHBvaW50X3VybCA9IHdpbmRvdy50c19lbmRwb2ludF91cmwgfHwgJ2h0dHBzOi8vc2xhY2suY29tL2JlYWNvbi90aW1pbmcnOwoJCQluZXcgSW1hZ2UoKS5zcmMgPSBlbmRwb2ludF91cmwgKyAnP2RhdGE9JyArIGVuY29kZVVSSUNvbXBvbmVudChsYWJlbCArICc6JyArIHZhbHVlKTsKCQl9OwoJfQp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PndpbmRvdy5UU01hcmsoJ3N0ZXBfbG9hZCcpOzwvc2NyaXB0Pjxub3NjcmlwdD48bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9Lz90b2tlbj08U0xBQ0tfVE9LRU4+JmFtcDtub2pzbW9kZT0xIj48L25vc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgc2FmZV9ob3N0cyA9IFsnYXBwLm9wdGltaXplbHkuY29tJ107CgppZiAoc2VsZiAhPT0gdG9wICYmIHNhZmVfaG9zdHMuaW5kZXhPZih0b3AubG9jYXRpb24uaG9zdCkgPT09IC0xKSB7Cgl3aW5kb3cuZG9jdW1lbnQud3JpdGUoCgkJJ1x1MDAzQ3N0eWxlPmJvZHkgKiB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVx1MDAzQy9zdHlsZT5cdTAwM0NhIGhyZWY9IiMiIG9uY2xpY2s9JyArCgkJCScidG9wLmxvY2F0aW9uLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWYiIHN0eWxlPSJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7cGFkZGluZzoxMHB4Ij5HbyB0byBTbGFjay5jb21cdTAwM0MvYT4nCgkpOwp9CgooZnVuY3Rpb24oKSB7Cgl2YXIgdGltZXI7CglpZiAoc2VsZiAhPT0gdG9wICYmIHNhZmVfaG9zdHMuaW5kZXhPZih0b3AubG9jYXRpb24uaG9zdCkgPT09IC0xKSB7CgkJdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CgkJCWlmICh3aW5kb3cpIHsKCQkJCXRyeSB7CgkJCQkJdmFyIHBhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJyk7CgkJCQkJdmFyIGNsaWVudEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaWVudC11aScpOwoJCQkJCXZhciBzZWN0aW9uRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbmF2LCBoZWFkZXIsIHNlY3Rpb24nKTsKCgkJCQkJcGFnZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGFnZUVsKTsKCQkJCQljbGllbnRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsaWVudEVsKTsKCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHNlY3Rpb25FbHMubGVuZ3RoOyBpKyspIHsKCQkJCQkJc2VjdGlvbkVsc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlY3Rpb25FbHNbaV0pOwoJCQkJCX0KCQkJCQl3aW5kb3cuVFMgPSBudWxsOwoJCQkJCXdpbmRvdy5URCA9IG51bGw7CgkJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIpOwoJCQkJfSBjYXRjaCAoZSkge30JCgkJCX0KCQl9LCAyMDApOwoJfQp9KSgpOzwvc2NyaXB0Pjx0aXRsZT5TbGFjayBBUEkgfCBTbGFjazwvdGl0bGU+PG1ldGEgbmFtZT0iSGFuZGhlbGRGcmllbmRseSIgY29udGVudD0idHJ1ZSI+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPjxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iU2xhY2siPjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJTbGFjayBBUElzIGFsbG93IHlvdSB0byBpbnRlZ3JhdGUgY29tcGxleCBzZXJ2aWNlcyB3aXRoIFNsYWNrIHRvIGdvIGJleW9uZCB0aGUgaW50ZWdyYXRpb25zIHdlIHByb3ZpZGUgb3V0IG9mIHRoZSBib3guIj48bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+PG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iU2xhY2siPjxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iU2xhY2sgQVBJIj48bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvc2VydmljZXMvYXBpXzIwMC5wbmciPjxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iU2xhY2sgQVBJcyBhbGxvdyB5b3UgdG8gaW50ZWdyYXRlIGNvbXBsZXggc2VydmljZXMgd2l0aCBTbGFjayB0byBnbyBiZXlvbmQgdGhlIGludGVncmF0aW9ucyB3ZSBwcm92aWRlIG91dCBvZiB0aGUgYm94LiI+PG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cHM6Ly9zbGFjay5jb20vIj48bWV0YSBuYW1lPSJ0d2l0dGVyOnNpdGUiIGNvbnRlbnQ9IkBzbGFja2FwaSI+PG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5Ij48bGluayBocmVmPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vNDAxNC9zdHlsZS9yb2xsdXAtc2xhY2tfa2l0X2xlZ2FjeV9hZGFwdGVycy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48bGluayBocmVmPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYWNkNzcvc3R5bGUvcm9sbHVwLWFwaV9zaXRlLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxsaW5rIGhyZWY9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC04Y2FjZGEyL21vZGVybi52ZW5kb3IuNjQyNzBmNi5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PGxpbmsgaHJlZj0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2YxOTVjMy9zdHlsZS9yb2xsdXAtc2xhY2tfa2l0X2hlbHBlcnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJzbGFja19raXRfaGVscGVyc19zdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC04Y2FjZGEyL3dlYnBhY2subWFuaWZlc3QuOTAxYTdmZmZlNDkxZDYwNTMyMGUubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PGxpbmsgaWQ9ImZhdmljb24iIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L21hcmtldGluZy9pbWcvbWV0YS9mYXZpY29uLTMyLnBuZyIgc2l6ZXM9IjE2eDE2IDMyeDMyIDQ4eDQ4IiB0eXBlPSJpbWFnZS9wbmciPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4Kd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CndpbmRvdy5kYXRhTGF5ZXIucHVzaCh7CgknZ3RtLnN0YXJ0JzogRGF0ZS5ub3coKSwKCSdldmVudCcgOiAnZ3RtLmpzJywKCSdzZWN1cmVfcGFnZScgOiBmYWxzZSwKfSk7CnZhciBmaXJzdFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKdmFyIHRoaXNTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKdGhpc1NjcmlwdC5hc3luYyA9IHRydWU7CnRoaXNTY3JpcHQuc3JjID0gJy8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD1HVE0tS0gyTFBLJzsKZmlyc3RTY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1NjcmlwdCwgZmlyc3RTY3JpcHQpOwo8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbihlKSB7Cgl2YXIgZ3RtRGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTsKCXZhciBndG1UYWdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKltkYXRhLWd0bS1jbGlja10nKTsKCXZhciBndG1DbGlja0hhbmRsZXIgPSBmdW5jdGlvbihjKSB7CgkJdmFyIGd0bV9ldmVudHMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1ndG0tY2xpY2snKTsKCQlpZiAoIWd0bV9ldmVudHMpIHJldHVybjsKCQl2YXIgZ3RtX2V2ZW50c19hcnIgPSBndG1fZXZlbnRzLnNwbGl0KCIsIik7CgkJZm9yKHZhciBlPTA7IGUgPCBndG1fZXZlbnRzX2Fyci5sZW5ndGg7IGUrKykgewoJCQl2YXIgZXYgPSBndG1fZXZlbnRzX2FycltlXS50cmltKCk7CgkJCWd0bURhdGFMYXllci5wdXNoKHsgJ2V2ZW50JzogZXYgfSk7CgkJfQoJfTsKCWZvcih2YXIgZz0wOyBnIDwgZ3RtVGFncy5sZW5ndGg7IGcrKyl7CgkJdmFyIGVsZW0gPSBndG1UYWdzW2ddOwoJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBndG1DbGlja0hhbmRsZXIpOwoJfQp9KTsKPC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgooZnVuY3Rpb24oZSxjLGIsZixkLGcsYSl7ZS5TbGFja0JlYWNvbk9iamVjdD1kOwplW2RdPWVbZF18fGZ1bmN0aW9uKCl7KGVbZF0ucT1lW2RdLnF8fFtdKS5wdXNoKFsxKm5ldyBEYXRlKCksYXJndW1lbnRzXSl9OwplW2RdLmw9MSpuZXcgRGF0ZSgpO2c9Yy5jcmVhdGVFbGVtZW50KGIpO2E9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXTsKZy5hc3luYz0xO2cuc3JjPWY7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLGEpCn0pKHdpbmRvdyxkb2N1bWVudCwic2NyaXB0IiwiaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04LThjYWNkYTIvc2xhY2tfYmVhY29uLjUyNTZjMWYyNTJmOWFlODg1MDcxLm1pbi5qcyIsInNiIik7CndpbmRvdy5zYignc2V0JywgJ3Rva2VuJywgJzMzMDdmNDM2OTYzZTAyZDRmOWViODVjZTUxNTk3NDRjJyk7CndpbmRvdy5zYigndHJhY2snLCAncGFnZXZpZXcnKTsKPC9zY3JpcHQ+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJSZWNlbnQgY2hhbmdlcyB0byB0aGUgU2xhY2sgcGxhdGZvcm0gUlNTIEZlZWQiIGhyZWY9Ii9jaGFuZ2Vsb2cucnNzIj48L2hlYWQ+PGJvZHkgY2xhc3M9ImFwaSBsaWdodF90aGVtZSBmZWF0dXJlX3JlbGF0ZWRfY29udGVudCI+PGhlYWRlcj48ZGl2IGNsYXNzPSJkaXNwbGF5X2ZsZXggZnVsbF93aWR0aCBmbGV4X2RpcmVjdGlvbl9yb3cgYWxpZ25faXRlbXNfY2VudGVyIGhlYWRlcl93cmFwcGVyIj48YSBpZD0ibWVudV90b2dnbGUiIGNsYXNzPSJub190cmFuc2l0aW9uIHNob3dfb25fbW9iaWxlIG5hdl9pY29uX2xpbmsiPjx0cy1pY29uIGNsYXNzPSJjLWljb24gbnVkZ2VfdG9wXzEgYy1pY29uLS1tZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC90cy1pY29uPjwvYT48ZGl2IGNsYXNzPSJmbGV4X29uZSI+PGEgaHJlZj0iaHR0cHM6Ly9hcGkuc2xhY2suY29tLyIgaWQ9ImhlYWRlcl9sb2dvIiBjbGFzcz0iYXBpIj48aW1nIGFsdD0iU2xhY2sgQVBJIiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvc2xhY2tfYXBpX2xvZ29fdm9ndWUucG5nIj48L2E+PC9kaXY+PGEgaHJlZj0iaHR0cHM6Ly9hcGkuc2xhY2suY29tL3NlYXJjaCIgY2xhc3M9InNlYXJjaF9uYXZfbGluayBzaG93X29uX21vYmlsZSBmbGV4X25vbmUgbmF2X2ljb25fbGluayI+PHRzLWljb24gY2xhc3M9ImMtaWNvbiBjLWljb24tLXNlYXJjaC1tZWRpdW0iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3RzLWljb24+PC9hPjxkaXYgY2xhc3M9InNlYXJjaF9uYXZfaW5saW5lIGhpZGVfb25fbW9iaWxlIGZsZXhfb25lIj48Zm9ybSBjbGFzcz0ic2VhcmNoIiBhY2NlcHQtY2hhcnNldD0iVVRGLTgiIGFjdGlvbj0iL3NlYXJjaCIgbWV0aG9kPSJnZXQiIHJvbGU9InNlYXJjaCI+PGRpdiBjbGFzcz0iYy1maWx0ZXJfaW5wdXQgYXBpX3NlYXJjaCIgcm9sZT0icHJlc2VudGF0aW9uIj48dHMtaWNvbiBjbGFzcz0iYy1pY29uIG51ZGdlX3RvcF8xIGMtaWNvbi0tc2VhcmNoLW1lZGl1bSIgYXJpYS1oaWRkZW49InRydWUiPjwvdHMtaWNvbj48aW5wdXQgY2xhc3M9InNlYXJjaF9pbnB1dCIgaWQ9InF1ZXJ5IiBuYW1lPSJxdWVyeSIgdmFsdWU9IiIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCIgZGF0YS1zbWFsbHBsYWNlaG9sZGVyPSJTZWFyY2ggdGhlIGRvY3VtZW50YXRpb24iPjwvZGl2PjwvZm9ybT48L2Rpdj48ZGl2IGNsYXNzPSJoaWRlX29uX21vYmlsZSBmbGV4X25vbmUiPjxkaXYgY2xhc3M9ImhlYWRlcl9uYXYiPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL3NpZ25pbiIgY2xhc3M9ImJ0biBoZWFkZXJfYnRuIGZsb2F0X3JpZ2h0IiBkYXRhLXFhPSJzaWduX2luIj5HbyB0byBTbGFjazwvYT48ZGl2IGNsYXNzPSJoZWFkZXJfbGlua3MgZmxvYXRfcmlnaHQiPjxhIGhyZWY9Ii8jcmVhZF90aGVfZG9jcyIgY2xhc3M9ImFjdGl2ZSIgZGF0YS1xYT0iZG9jdW1lbnRhdGlvbiI+RG9jdW1lbnRhdGlvbjwvYT4gPGEgaHJlZj0iL3R1dG9yaWFscyIgZGF0YS1xYT0idHV0b3JpYWxzIj5UdXRvcmlhbHM8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vQHNsYWNrYXBpIiB0YXJnZXQ9Im5ldyIgZGF0YS1xYT0idHdpdHRlciI+VHdpdHRlcjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJhbGVydF9wYWdlX3N0YWNrZWQiPjxkaXYgY2xhc3M9ImFsZXJ0X3BhZ2UgYWxlcnRfc3VjY2VzcyBoaWRkZW4gZmFkZSBhcGlfYWxlcnRfcGFnZSIgZGF0YS1qcz0iYXBpX2FsZXJ0X3BhZ2UiPjxpIGNsYXNzPSJ0c19pY29uIHRzX2ljb25fY2hlY2tfY2lyY2xlX28iPjwvaT5TdWNjZXNzITwvZGl2PjwvZGl2PjwvaGVhZGVyPjxkaXYgaWQ9InBhZ2UiIGNsYXNzPSJsYXlvdXRfdGhyZWVfY29sIj48ZGl2IGNsYXNzPSJhcGlfaG9tZV9iYW5uZXJfY29udGFpbmVyIGZ1bGxfd2lkdGggZGlzcGxheV9mbGV4IGZsZXhfZGlyZWN0aW9uX2NvbHVtbiBhbGlnbl9pdGVtc19jZW50ZXIganVzdGlmeV9jb250ZW50X2NlbnRlciBhbGlnbl9jZW50ZXIgbmV1dHJhbF93aGl0ZSI+PGRpdiBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2JhY2tncm91bmRfaW1hZ2UgcG9zaXRpb25fYWJzb2x1dGUiPjwvZGl2PjxoMSBjbGFzcz0ibmV1dHJhbF93aGl0ZSBhcGlfaG9tZV9iYW5uZXJfaGVhZGluZyB0b3BfbWFyZ2luIj5CdWlsZDwvaDE+PGRpdiBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2hlYWRpbmdfbGlzdF9jb250YWluZXIgb3ZlcmZsb3dfaGlkZGVuIHBvc2l0aW9uX3JlbGF0aXZlIj48dWwgY2xhc3M9ImFwaV9ob21lX2Jhbm5lcl9oZWFkaW5nX2xpc3Qgbm9fbGlzdF9zdHlsZSBwb3NpdGlvbl9yZWxhdGl2ZSBuZXV0cmFsX3doaXRlIG5vcm1hbCBub19tYXJnaW4iPjxsaSBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2hlYWRpbmdfbGlzdF9pdGVtIj48YSBocmVmPSIvaW50ZXJuYWwtaW50ZWdyYXRpb25zIj5pbnRlcm5hbCB0b29sczwvYT48L2xpPjxsaSBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2hlYWRpbmdfbGlzdF9pdGVtIj48YSBocmVmPSJodHRwczovL3NsYWNrLmNvbS9mZWF0dXJlcy93b3JrZmxvdy1hdXRvbWF0aW9uIj5zaW1wbGlmaWVkIHdvcmtmbG93czwvYT48L2xpPjxsaSBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2hlYWRpbmdfbGlzdF9pdGVtIj48YSBocmVmPSIvYm90LXVzZXJzIj5icmlsbGlhbnQgYm90czwvYT48L2xpPjxsaSBjbGFzcz0iYXBpX2hvbWVfYmFubmVyX2hlYWRpbmdfbGlzdF9pdGVtIj48YSBocmVmPSIvc3RhcnQvb3ZlcnZpZXciPnVzZWZ1bCBhcHBzPC9hPjwvbGk+PGxpIGNsYXNzPSJhcGlfaG9tZV9iYW5uZXJfaGVhZGluZ19saXN0X2l0ZW0iPjxhIGhyZWY9Ii9pbnRlcm5hbC1pbnRlZ3JhdGlvbnMiPmludGVybmFsIHRvb2xzPC9hPjwvbGk+PC91bD48ZGl2IGNsYXNzPSJhcGlfaG9tZV9iYW5uZXJfZ2l6bW8gcG9zaXRpb25fYWJzb2x1dGUiPjxkaXYgY2xhc3M9ImFwaV9ob21lX2Jhbm5lcl9naXptb19iZWx0Ij48L2Rpdj48ZGl2IGNsYXNzPSJhcGlfaG9tZV9iYW5uZXJfZ2l6bW9fZ2VhciBhcGlfaG9tZV9iYW5uZXJfZ2l6bW9fZ2Vhcl90b3AiPjwvZGl2PjxkaXYgY2xhc3M9ImFwaV9ob21lX2Jhbm5lcl9naXptb19nZWFyIGFwaV9ob21lX2Jhbm5lcl9naXptb19nZWFyX2JvdHRvbSI+PC9kaXY+PC9kaXY+PC9kaXY+PHAgY2xhc3M9ImFwaV9ob21lX2Jhbm5lcl9zdWJoZWFkaW5nIHRvcF9tYXJnaW4gbGFyZ2VfYm90dG9tX21hcmdpbiI+Zm9yIGp1c3QgeW91ciB0ZWFtLCBvciBtaWxsaW9ucyBvZiBTbGFjayB1c2VyczwvcD48YSBjbGFzcz0iYnRuIGJ0bl9sYXJnZSBhcGlfaG9tZV9iYW5uZXJfYnV0dG9uIGxlZnRfcGFkZGluZyByaWdodF9wYWRkaW5nIiBocmVmPSIvYXBwcz9uZXdfYXBwPTEiIGRhdGEtY2xvZy1ldmVudD0iQVBQX0RJUkVDVE9SWV9XRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9YXBpX2hlYWRlcl9zdGFydF9idWlsZGluZ19idG4iIGRhdGEtZ3RtLWNsaWNrPSJBUElTdGFydEJ1aWxkaW5nIj5TdGFydCBCdWlsZGluZzwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlX2NvbnRlbnRzIiBjbGFzcz0iY2xlYXJmaXggYXBpX2hvbWVfcGFnZV9jb250ZW50cyAiPjxuYXYgaWQ9ImFwaV9uYXYiIGNsYXNzPSJjb2wgaHViIj48ZGl2IGNsYXNzPSJzaWRlYmFyX21lbnUgc2hvd19vbl9tb2JpbGUiPjxoNCBjbGFzcz0ic2lkZWJhcl9tZW51X2hlYWRlciI+TXkgU2xhY2sgQVBJPC9oND48dWwgY2xhc3M9InNpZGViYXJfbWVudV9saXN0Ij48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gaXNfYWN0aXZlIiBocmVmPSIvI3JlYWRfdGhlX2RvY3MiPkRvY3VtZW50YXRpb248L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvdHV0b3JpYWxzIj5UdXRvcmlhbHM8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvYXBwcyI+WW91ciBBcHBzPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJzaWRlYmFyX21lbnUiPjxoNCBjbGFzcz0ic2lkZWJhcl9tZW51X2hlYWRlciI+U3RhcnQgaGVyZTwvaDQ+PHVsIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdCI+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3N0YXJ0L292ZXJ2aWV3IiB0YXJnZXQ9IiI+QW4gaW50cm9kdWN0aW9uIHRvwqBhcHBzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zdGFydC9wbGFubmluZyIgdGFyZ2V0PSIiPlBsYW5uaW5nIHlvdXIgYXBwIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zdGFydC9kZXNpZ25pbmciIHRhcmdldD0iIj5EZXNpZ25pbmcgZXhwZXJpZW5jZXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3N0YXJ0L2J1aWxkaW5nIiB0YXJnZXQ9IiI+QnVpbGRpbmcgYW4gYXBwIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9iZXN0LXByYWN0aWNlcy9ibHVlcHJpbnRzIiB0YXJnZXQ9IiI+QXBwIGJsdWVwcmludHMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2NoYW5nZWxvZyIgdGFyZ2V0PSIiPlJlY2VudCBjaGFuZ2VzIDwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2lkZWJhcl9tZW51Ij48aDQgY2xhc3M9InNpZGViYXJfbWVudV9oZWFkZXIiPkluc3RhbGxhdGlvbiAmYW1wOyBwZXJtaXNzaW9uczwvaDQ+PHVsIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdCI+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2F1dGhlbnRpY2F0aW9uIiB0YXJnZXQ9IiI+T3ZlcnZpZXcgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2F1dGhlbnRpY2F0aW9uL2Jhc2ljcyIgdGFyZ2V0PSIiPkJhc2ljIGFwcCBzZXR1cCA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvYXV0aGVudGljYXRpb24vb2F1dGgtdjIiIHRhcmdldD0iIj5JbnN0YWxsaW5nIHdpdGggT0F1dGggPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2F1dGhlbnRpY2F0aW9uL3F1aWNrc3RhcnQiIHRhcmdldD0iIj5RdWlja3N0YXJ0IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9hdXRoZW50aWNhdGlvbi9taWdyYXRpb24iIHRhcmdldD0iIj5NaWdyYXRpb24gZ3VpZGUgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2F1dGhlbnRpY2F0aW9uL3ZlcmlmeWluZy1yZXF1ZXN0cy1mcm9tLXNsYWNrIiB0YXJnZXQ9IiI+QXBwIFNlY3VyaXR5IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9hdXRoZW50aWNhdGlvbi9iZXN0LXByYWN0aWNlcyIgdGFyZ2V0PSIiPlJlZmVyZW5jZSA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PGg0IGNsYXNzPSJzaWRlYmFyX21lbnVfaGVhZGVyIj5BcHAgc3VyZmFjZXM8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zdXJmYWNlcyIgdGFyZ2V0PSIiPk92ZXJ2aWV3IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zdXJmYWNlcy90YWJzIiB0YXJnZXQ9IiI+SG9tZSB0YWJzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zdXJmYWNlcy9tb2RhbHMiIHRhcmdldD0iIj5Nb2RhbHMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3N1cmZhY2VzL21lc3NhZ2VzIiB0YXJnZXQ9IiI+TWVzc2FnZXMgPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJzaWRlYmFyX21lbnUiPjxoNCBjbGFzcz0ic2lkZWJhcl9tZW51X2hlYWRlciI+QmxvY2sgS2l0OiBCdWlsZGluZyBVSXM8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9ibG9jay1raXQiIHRhcmdldD0iIj5PdmVydmlldyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvYmxvY2sta2l0L2J1aWxkaW5nIiB0YXJnZXQ9IiI+QnVpbGRpbmcgYmxvY2tzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9ibG9jay1raXQvaW50ZXJhY3Rpdml0eSIgdGFyZ2V0PSIiPkludGVyYWN0aXZpdHkgaW4gYmxvY2tzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9ibG9jay1raXQtYnVpbGRlciIgdGFyZ2V0PSIiPkJsb2NrIEtpdCBCdWlsZGVyIDwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2lkZWJhcl9tZW51Ij48aDQgY2xhc3M9InNpZGViYXJfbWVudV9oZWFkZXIiPkludGVyYWN0aXZpdHk8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9pbnRlcmFjdGl2aXR5IiB0YXJnZXQ9IiI+T3ZlcnZpZXcgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2ludGVyYWN0aXZpdHkvaGFuZGxpbmciIHRhcmdldD0iIj5IYW5kbGluZyB1c2VyIGludGVyYWN0aW9uIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9pbnRlcmFjdGl2aXR5L2VudHJ5LXBvaW50cyIgdGFyZ2V0PSIiPkVudHJ5IHBvaW50cyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvaW50ZXJhY3Rpdml0eS9hY3Rpb25zIiB0YXJnZXQ9IiI+QXBwIEFjdGlvbnMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2ludGVyYWN0aXZpdHkvc2xhc2gtY29tbWFuZHMiIHRhcmdldD0iIj5TbGFzaCBDb21tYW5kcyA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PGg0IGNsYXNzPSJzaWRlYmFyX21lbnVfaGVhZGVyIj5NZXNzYWdpbmc8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9tZXNzYWdpbmciIHRhcmdldD0iIj5PdmVydmlldyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvbWVzc2FnaW5nL21hbmFnaW5nIiB0YXJnZXQ9IiI+TWFuYWdpbmcgbWVzc2FnZXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL21lc3NhZ2luZy9jb21wb3NpbmciIHRhcmdldD0iIj5Db21wb3NpbmcgbWVzc2FnZXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL21lc3NhZ2luZy9pbnRlcmFjdGl2aXR5IiB0YXJnZXQ9IiI+SW50ZXJhY3RpdmUgbWVzc2FnZXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL21lc3NhZ2luZy9maWxlcyIgdGFyZ2V0PSIiPldvcmtpbmcgd2l0aCBmaWxlcyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvcmVmZXJlbmNlL21lc3NhZ2luZy9wYXlsb2FkIiB0YXJnZXQ9IiI+UmVmZXJlbmNlIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9pbmNvbWluZy13ZWJob29rcyIgdGFyZ2V0PSIiPkluY29taW5nIHdlYmhvb2tzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL291dG1vZGVkLW1lc3NhZ2luZyIgdGFyZ2V0PSIiPk91dG1vZGVkIG1lc3NhZ2luZyA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PGg0IGNsYXNzPSJzaWRlYmFyX21lbnVfaGVhZGVyIj5BcHBzIGZvciBlbnRlcnByaXNlczwvaDQ+PHVsIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdCI+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2VudGVycHJpc2UiIHRhcmdldD0iIj5PdmVydmlldyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZW50ZXJwcmlzZS9ncmlkIiB0YXJnZXQ9IiI+RW50ZXJwcmlzZSBHcmlkIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9lbnRlcnByaXNlL3NoYXJlZC1jaGFubmVscyIgdGFyZ2V0PSIiPlNoYXJlZCBjaGFubmVscyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZW50ZXJwcmlzZS9tYW5hZ2luZyIgdGFyZ2V0PSIiPkFwcHMgZm9yIFNsYWNrIEFkbWlucyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvc2NpbSIgdGFyZ2V0PSIiPlByb3Zpc2lvbmluZyB3aXRoIFNDSU0gPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2RvY3MvYXVkaXQtbG9ncy1hcGkiIHRhcmdldD0iIj5BdWRpdCBMb2dzIEFQSSA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZW50ZXJwcmlzZS9ncmlkL3Rlc3RpbmciIHRhcmdldD0iIj5UZXN0aW5nIGFwcHMgb24gR3JpZCA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PGg0IGNsYXNzPSJzaWRlYmFyX21lbnVfaGVhZGVyIj5SZWZlcmVuY2U8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9yZWZlcmVuY2UiIHRhcmdldD0iIj5PdmVydmlldyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvd2ViIiB0YXJnZXQ9IiI+V2ViIEFQSSA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvbWV0aG9kcyIgdGFyZ2V0PSIiPk1ldGhvZHMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3R5cGVzIiB0YXJnZXQ9IiI+T2JqZWN0IFR5cGVzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9ldmVudHMtYXBpIiB0YXJnZXQ9IiI+RXZlbnRzIEFQSSA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZXZlbnRzIiB0YXJnZXQ9IiI+RXZlbnQgVHlwZXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3J0bSIgdGFyZ2V0PSIiPlJlYWwgVGltZSBNZXNzYWdpbmcgQVBJIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL3BhZ2luYXRpb24iIHRhcmdldD0iIj5QYWdpbmF0aW9uIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL3ByZXNlbmNlLWFuZC1zdGF0dXMiIHRhcmdldD0iIj5QcmVzZW5jZSAmYW1wOyBzdGF0dXMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3JlZmVyZW5jZS9kZWVwLWxpbmtpbmciIHRhcmdldD0iIj5EZWVwIGxpbmtpbmcgaW50byBjbGllbnRzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL3JhdGUtbGltaXRzIiB0YXJnZXQ9IiI+UmF0ZSBMaW1pdHMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2RvY3Mvc2lnbi1pbi13aXRoLXNsYWNrIiB0YXJnZXQ9IiI+U2lnbiBpbiB3aXRoIFNsYWNrIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9sZWdhY3ktd29ya3NwYWNlLWFwcHMiIHRhcmdldD0iIj5MZWdhY3k6IFdvcmtzcGFjZSBhcHBzIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL29hdXRoIiB0YXJnZXQ9IiI+TGVnYWN5OiBPQXV0aCAyLjAgZm9yIGNsYXNzaWMgYXBwcyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZG9jcy9zbGFjay1zdGF0dXMiIHRhcmdldD0iIj5TbGFjayBTdGF0dXMgPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJzaWRlYmFyX21lbnUiPjxoNCBjbGFzcz0ic2lkZWJhcl9tZW51X2hlYWRlciI+S2VlcCBpbiB0b3VjaDwvaDQ+PHVsIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdCI+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2RvY3Mvc3VwcG9ydCIgdGFyZ2V0PSIiPlN1cHBvcnQgYW5kIERpc2N1c3Npb24gPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9zbGFja2FwaSIgdGFyZ2V0PSIiPkBTbGFja0FQSSBvbiBUd2l0dGVyIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Imh0dHBzOi8vbWVkaXVtLmNvbS9zbGFjay1kZXZlbG9wZXItYmxvZyIgdGFyZ2V0PSIiPlBsYXRmb3JtIEJsb2cgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iaHR0cHM6Ly9zbGFjay5lbmdpbmVlcmluZyIgdGFyZ2V0PSIiPlNsYWNrIEVuZ2luZWVyaW5nIEJsb2cgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL3JvYWRtYXAiIHRhcmdldD0iIj5QbGF0Zm9ybSBSb2FkbWFwIDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL3BhcnRuZXJzIiB0YXJnZXQ9IiI+UGFydG5lcmluZyB3aXRoIFNsYWNrIDwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2lkZWJhcl9tZW51Ij48aDQgY2xhc3M9InNpZGViYXJfbWVudV9oZWFkZXIiPlJlc291cmNlczwvaDQ+PHVsIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdCI+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2ZhcSIgdGFyZ2V0PSIiPkZBUSA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvdG9vbHMiIHRhcmdldD0iIj5TbGFjayBkZXZlbG9wZXIgdG9vbHMgPC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJzaWRlYmFyX21lbnVfbGlzdF9pdGVtICIgaHJlZj0iL2xhbmcvamEtanAiIHRhcmdldD0iIj5JbiBKYXBhbmVzZSAo5pel5pys6KqeKSA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PGg0IGNsYXNzPSJzaWRlYmFyX21lbnVfaGVhZGVyIj5Db21tdW5pdHk8L2g0Pjx1bCBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3QiPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Imh0dHBzOi8vc2xhY2tjb21tdW5pdHkuY29tP3V0bV9tZWRpdW09cmVmZXJyYWwmYW1wO3V0bV9zb3VyY2U9YXBpc2xhY2smYW1wO3V0bV9jYW1wYWlnbj1meTIwLVExMDMtc3BjbGF1bmNoIiB0YXJnZXQ9IiI+U2xhY2sgUGxhdGZvcm0gQ29tbXVuaXR5IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9jb21tdW5pdHkiIHRhcmdldD0iIj5CdWlsdCBieSBvdXIgY29tbXVuaXR5IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9kb2NzL2hvc3RpbmciIHRhcmdldD0iIj5Ib3N0aW5nIFByb3ZpZGVycyA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvZG9jcy9jb21tdW5pdHktY29kZS1vZi1jb25kdWN0IiB0YXJnZXQ9IiI+Q29kZSBvZiBDb25kdWN0IDwvYT48L2xpPjxsaT48YSBjbGFzcz0ic2lkZWJhcl9tZW51X2xpc3RfaXRlbSAiIGhyZWY9Ii9zbGFjay1mdW5kIiB0YXJnZXQ9IiI+U2xhY2sgRnVuZCA8L2E+PC9saT48bGk+PGEgY2xhc3M9InNpZGViYXJfbWVudV9saXN0X2l0ZW0gIiBocmVmPSIvdGVybXMtb2Ytc2VydmljZS9hcGkiIHRhcmdldD0iIj5BUEkgVGVybXMgb2YgU2VydmljZSA8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNpZGViYXJfbWVudSI+PHA+PGEgZGF0YS1ndG0tY2xpY2s9IkFQSUdldEhlbHAiIGRhdGEtY2xvZy1ldmVudD0iQVBQX0RJUkVDVE9SWV9XRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9YXBpX25hdl9nZXRfaGVscF9idG4iIGhyZWY9Ii9zdXBwb3J0P3JlZj1hcGlfbmF2IiBjbGFzcz0iYnRuIj5HZXQgSGVscDwvYT48L3A+PC9kaXY+PC9uYXY+PGRpdiBpZD0iYXBpX21haW5fY29udGVudCIgY2xhc3M9ImNvbCI+PGRpdiBjbGFzcz0iY2FyZCI+PHNlY3Rpb24+PGRpdiBjbGFzcz0iZGlzcGxheV9mbGV4IGFsaWduX2l0ZW1zX2NlbnRlciBhcGlfaG9tZV9leGFtcGxlX3JvdyI+PGRpdiBjbGFzcz0iZmxleF9ub25lIGFwaV9ob21lX2V4YW1wbGVfaW1hZ2VfY29udGFpbmVyIj48aW1nIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9hcGkvaG9tZXBhZ2VfZXhhbXBsZV92aXNpdGJvdC5wbmciIHNyY3NldD0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9hcGkvaG9tZXBhZ2VfZXhhbXBsZV92aXNpdGJvdC5wbmcgMXgsIGh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvYXBpL2hvbWVwYWdlX2V4YW1wbGVfdmlzaXRib3RAMngucG5nIDJ4Ij48L2Rpdj48ZGl2IGNsYXNzPSJhcGlfaG9tZV9leGFtcGxlX3RleHRfY29udGFpbmVyIj48aDMgY2xhc3M9ImJsYWNrIj5TZW5kIG1lc3NhZ2VzPC9oMz48cD5NZXNzYWdlcyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiBhcHBzIGFuZCBib3RzLiBTdGFydCBmcm9tICZsZHF1bztIZWxsbywgd29ybGQsJnJkcXVvOyBvciBjb25uZWN0IGEgc2VydmljZSB5b3UgYWxyZWFkeSB1c2UuPC9wPjxhc2lkZSBjbGFzcz0ic21hbGwiPkxlYXJuIGFib3V0IDxhIGhyZWY9Ii9kb2NzL21lc3NhZ2VzIj5NZXNzYWdlczwvYT4gJmFtcDsgPGEgaHJlZj0iL2luY29taW5nLXdlYmhvb2tzIj5JbmNvbWluZyBXZWJob29rczwvYT4uPC9hc2lkZT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJkaXNwbGF5X2ZsZXggYWxpZ25faXRlbXNfY2VudGVyIGFwaV9ob21lX2V4YW1wbGVfcm93Ij48ZGl2IGNsYXNzPSJhcGlfaG9tZV9leGFtcGxlX3RleHRfY29udGFpbmVyIj48aDMgY2xhc3M9ImJsYWNrIj5DcmVhdGUgc2ltcGxlIHdvcmtmbG93czwvaDM+PHA+WW91ciBhcHAgY2FuIHJlc3BvbmQgdG8gdXNlciBhY3Rpdml0eSwgYW5kIGJ1dHRvbnMgbGV0IHVzZXJzIGNvbXBsZXRlIHNpbXBsZSB0YXNrcyAobGlrZSByZXF1ZXN0cyBhbmQgYXBwcm92YWxzKS48L3A+PGFzaWRlIGNsYXNzPSJzbWFsbCI+IExlYXJuIGFib3V0IDxhIGhyZWY9Ii9pbnRlcmFjdGl2ZS1tZXNzYWdlcyI+SW50ZXJhY3RpdmUgQ29tcG9uZW50czwvYT4gJmFtcDsgPGEgaHJlZj0iL2V2ZW50cy1hcGkiPkV2ZW50cyBBUEk8L2E+LiA8L2FzaWRlPjwvZGl2PjxkaXYgY2xhc3M9ImZsZXhfbm9uZSBhcGlfaG9tZV9leGFtcGxlX2ltYWdlX2NvbnRhaW5lciI+PGltZyBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvYXBpL2hvbWVwYWdlX2V4YW1wbGVfaGlyZXRyb24ucG5nIiBzcmNzZXQ9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvYXBpL2hvbWVwYWdlX2V4YW1wbGVfaGlyZXRyb24ucG5nIDF4LCBodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2hpcmV0cm9uQDJ4LnBuZyAyeCI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZGlzcGxheV9mbGV4IGFsaWduX2l0ZW1zX2NlbnRlciBhcGlfaG9tZV9leGFtcGxlX3JvdyI+PGRpdiBjbGFzcz0iZmxleF9ub25lIGFwaV9ob21lX2V4YW1wbGVfaW1hZ2VfY29udGFpbmVyIj48aW1nIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9hcGkvaG9tZXBhZ2VfZXhhbXBsZV9leHBlbnNpYm90LnBuZyIgc3Jjc2V0PSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2V4cGVuc2lib3QucG5nIDF4LCBodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2V4cGVuc2lib3RAMngucG5nIDJ4Ij48L2Rpdj48ZGl2IGNsYXNzPSJhcGlfaG9tZV9leGFtcGxlX3RleHRfY29udGFpbmVyIj48aDMgY2xhc3M9ImJsYWNrIj5CdWlsZCBib3RzPC9oMz48cD5BZGQgYSBib3QgdG8gdGFsayB3aXRoIHVzZXJzIGFuZCBhdXRvbWF0ZSB0YXNrcyAoYW5kIGFkZCBhIGxpdHRsZSBmdW4pLjwvcD48YXNpZGUgY2xhc3M9InNtYWxsIj5MZWFybiBhYm91dCA8YSBocmVmPSIvYm90LXVzZXJzIj5Cb3QgVXNlcnM8L2E+ICZhbXA7IDxhIGhyZWY9Ii9ldmVudHMtYXBpIj5FdmVudHMgQVBJPC9hPi48L2FzaWRlPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImRpc3BsYXlfZmxleCBhbGlnbl9pdGVtc19jZW50ZXIgYXBpX2hvbWVfZXhhbXBsZV9yb3ciPjxkaXYgY2xhc3M9ImFwaV9ob21lX2V4YW1wbGVfdGV4dF9jb250YWluZXIiPjxoMyBjbGFzcz0iYmxhY2siPlNldCB1cCBpbnRlcm5hbCB0b29sczwvaDM+PHA+TmVlZCBhIHNsYXNoIGNvbW1hbmQgb3IgYSBib3QganVzdCBmb3IgeW91ciB0ZWFtPyBBbGwgb3VyIHRvb2xzIGNhbiBiZSB1c2VkIGZvciBpbnRlcm5hbCBpbnRlZ3JhdGlvbnMuPC9wPjxhc2lkZSBjbGFzcz0ic21hbGwiPkxlYXJuIGFib3V0IDxhIGhyZWY9Ii9pbnRlcm5hbC1pbnRlZ3JhdGlvbnMiPkludGVybmFsIEludGVncmF0aW9uczwvYT4uPC9hc2lkZT48L2Rpdj48ZGl2IGNsYXNzPSJmbGV4X25vbmUgYXBpX2hvbWVfZXhhbXBsZV9pbWFnZV9jb250YWluZXIiPjxpbWcgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2hlbHBkZXNrLnBuZyIgc3Jjc2V0PSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2hlbHBkZXNrLnBuZyAxeCwgaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9hcGkvaG9tZXBhZ2VfZXhhbXBsZV9oZWxwZGVza0AyeC5wbmcgMngiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImRpc3BsYXlfZmxleCBhbGlnbl9pdGVtc19jZW50ZXIgYXBpX2hvbWVfZXhhbXBsZV9yb3ciPjxkaXYgY2xhc3M9ImZsZXhfbm9uZSBhcGlfaG9tZV9leGFtcGxlX2ltYWdlX2NvbnRhaW5lciI+PGltZyBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvYXBpL2hvbWVwYWdlX2V4YW1wbGVfY2hlY2tsaXN0LnBuZyIgc3Jjc2V0PSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vODA1ODgvaW1nL2FwaS9ob21lcGFnZV9leGFtcGxlX2NoZWNrbGlzdC5wbmcgMXgsIGh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvYXBpL2hvbWVwYWdlX2V4YW1wbGVfY2hlY2tsaXN0QDJ4LnBuZyAyeCI+PC9kaXY+PGRpdiBjbGFzcz0iYXBpX2hvbWVfZXhhbXBsZV90ZXh0X2NvbnRhaW5lciI+PGgzIGNsYXNzPSJibGFjayI+UHVibGlzaCB5b3VyIGFwcDwvaDM+PHA+U3VibWl0IHlvdXIgYXBwIHRvIHRoZSBTbGFjayBBcHAgRGlyZWN0b3J5LCBhbmQgcmVhY2ggbWlsbGlvbnMgb2YgZGFpbHkgYWN0aXZlIFNsYWNrIHVzZXJzLjwvcD48YXNpZGUgY2xhc3M9InNtYWxsIj5MZWFybiBhYm91dCB0aGUgPGEgaHJlZj0iL2RvY3Mvc2xhY2stYXBwcy1jaGVja2xpc3QiPkFwcCBEaXJlY3RvcnkgQ2hlY2tsaXN0PC9hPi48L2FzaWRlPjwvZGl2PjwvZGl2Pjwvc2VjdGlvbj48c2VjdGlvbiBjbGFzcz0iYXBpX2hvbWVfc3RhcnRfbGVhcm5pbmdfYmFubmVyIG5ldXRyYWxfd2hpdGUgZGlzcGxheV9mbGV4IGFsaWduX2l0ZW1zX2NlbnRlciBqdXN0aWZ5X2NvbnRlbnRfY2VudGVyIHZlcnlfbGFyZ2VfYm90dG9tX21hcmdpbiI+PGRpdiBjbGFzcz0ic3Bhbl8xX29mXzMgYWxpZ25fY2VudGVyIj48aW1nIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9pbnRlZ3JhdGlvbnNfZm9yX3lvdXJfdGVhbS5wbmciIHNyY3NldD0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tLzgwNTg4L2ltZy9pbnRlZ3JhdGlvbnNfZm9yX3lvdXJfdGVhbS5wbmcgMXgsIGh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS84MDU4OC9pbWcvaW50ZWdyYXRpb25zX2Zvcl95b3VyX3RlYW1AMngucG5nIDJ4Ij48L2Rpdj48ZGl2IGNsYXNzPSJzcGFuXzJfb2ZfMyB2ZXJ5X2xhcmdlX3JpZ2h0X3BhZGRpbmciPjxoMyBjbGFzcz0iYXBpX2hvbWVfc3RhcnRfbGVhcm5pbmdfaGVhZGluZyBibGFjayI+V2FudCB0byBkaXZlIGRlZXBlcj88L2gzPjxwIGNsYXNzPSJhcGlfaG9tZV9zdGFydF9sZWFybmluZ19zdWJoZWFkaW5nIHNtYWxsX3RvcF9tYXJnaW4gbGFyZ2VfYm90dG9tX21hcmdpbiI+RkFRcywgdHV0b3JpYWxzLCBhbmQgbW9yZSAmbWRhc2g7IHJlYWQgdXAgb24gaG93IHRvIG1ha2UgeW91ciBhcHAgc2hpbmUuPC9wPjxhIGNsYXNzPSJidG4gYnRuX2xhcmdlIGFwaV9ob21lX3N0YXJ0X2xlYXJuaW5nX2J1dHRvbiBsZWZ0X3BhZGRpbmcgcmlnaHRfcGFkZGluZyIgZGF0YS1jbG9nLWV2ZW50PSJBUFBfRElSRUNUT1JZX1dFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1hcGlfc3RhcnRfbGVhcm5pbmdfYnRuIiBkYXRhLWd0bS1jbGljaz0iQVBJU3RhcnRMZWFybmluZyIgaHJlZj0iL3N0YXJ0Ij5TdGFydCBMZWFybmluZzwvYT48L2Rpdj48L3NlY3Rpb24+PHNlY3Rpb24gY2xhc3M9ImFsaWduX2NlbnRlciBwb3NpdGlvbl9yZWxhdGl2ZSBhcGlfaG9tZV9sb29raW5nX21vcmUiPjxoNCBjbGFzcz0iYmxhY2siPjx0cy1pY29uIGNsYXNzPSJ0c19pY29uX2Vtb2ppX29iamVjdHMgbWlhbWlfcGluayBzbWFsbF9yaWdodF9tYXJnaW4iPjwvdHMtaWNvbj5Mb29raW5nIGZvciBtb3JlPzwvaDQ+PHAgY2xhc3M9ImxhcmdlX2JvdHRvbV9tYXJnaW4iPlRoZXNlIGhhbmR5IGxpbmtzIHdpbGwgaGVscCB5b3UgZ2V0IG9uIHlvdXIgd2F5LjwvcD48ZGl2IGNsYXNzPSJkaXNwbGF5X2ZsZXggYm90dG9tX21hcmdpbiBhcGlfaG9tZV9sb29raW5nX21vcmVfbGlua19jb250YWluZXIgYm9sZCI+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZGV2ZWxvcGVycy9mdW5kIiBjbGFzcz0iYXBpX2hvbWVfbG9va2luZ19tb3JlX2xpbmsgcG9zaXRpb25fcmVsYXRpdmUgZmxleF9vbmUgZGlzcGxheV9mbGV4IGFsaWduX2l0ZW1zX2NlbnRlciBqdXN0aWZ5X2NvbnRlbnRfY2VudGVyIGNoYXJjb2FsX2dyZXkgbmV1dHJhbF93aGl0ZV9iZyBub191bmRlcmxpbmUiPlNsYWNrIEZ1bmQ8L2E+PGEgaHJlZj0iaHR0cHM6Ly90cmVsbG8uY29tL2IvWm5UUXl1bVEvc2xhY2stcGxhdGZvcm0tcm9hZG1hcCIgY2xhc3M9ImFwaV9ob21lX2xvb2tpbmdfbW9yZV9saW5rIHBvc2l0aW9uX3JlbGF0aXZlIGZsZXhfb25lIGRpc3BsYXlfZmxleCBhbGlnbl9pdGVtc19jZW50ZXIganVzdGlmeV9jb250ZW50X2NlbnRlciBjaGFyY29hbF9ncmV5IG5ldXRyYWxfd2hpdGVfYmcgbm9fdW5kZXJsaW5lIj5QbGF0Zm9ybSBSb2FkbWFwPC9hPjxhIGhyZWY9Ii9jaGFuZ2Vsb2ciIGNsYXNzPSJhcGlfaG9tZV9sb29raW5nX21vcmVfbGluayBwb3NpdGlvbl9yZWxhdGl2ZSBmbGV4X29uZSBkaXNwbGF5X2ZsZXggYWxpZ25faXRlbXNfY2VudGVyIGp1c3RpZnlfY29udGVudF9jZW50ZXIgY2hhcmNvYWxfZ3JleSBuZXV0cmFsX3doaXRlX2JnIG5vX3VuZGVybGluZSI+QVBJIENoYW5nZWxvZzwvYT48L2Rpdj48L3NlY3Rpb24+PC9kaXY+PC9kaXY+PGRpdiBpZD0ib3ZlcmxheSI+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXJfYm90aCI+PC9kaXY+PC9kaXY+PC9kaXY+PGZvb3RlciBkYXRhLXFhPSJmb290ZXIiPjxzZWN0aW9uIGNsYXNzPSJsaW5rcyI+PGRpdiBjbGFzcz0iZ3JpZCI+PGRpdiBjbGFzcz0iY29sIHNwYW5fMV9vZl80IG5hdl9jb2wiPjx1bD48bGkgY2xhc3M9ImNhdF8xIj5Vc2luZyBTbGFjazwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL2lzIiBkYXRhLXFhPSJwcm9kdWN0X2Zvb3RlciIgZGF0YS1jbG9nLWV2ZW50PSJXRUJTSVRFX0NMSUNLIiBkYXRhLWNsb2ctcGFyYW1zPSJjbGlja190YXJnZXQ9Zm9vdGVyX3Byb2R1Y3QiPlByb2R1Y3Q8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9zbGFjay5jb20vZW50ZXJwcmlzZSIgZGF0YS1xYT0iZW50ZXJwcmlzZV9mb290ZXIiIGRhdGEtY2xvZy1ldmVudD0iV0VCU0lURV9DTElDSyIgZGF0YS1jbG9nLXBhcmFtcz0iY2xpY2tfdGFyZ2V0PWZvb3Rlcl9lbnRlcnByaXNlIj5FbnRlcnByaXNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vc2xhY2suY29tL3ByaWNpbmc/dWlfc3RlcD0yOCZ1aV9lbGVtZW50PTUiIGRhdGEtcWE9InByaWNpbmdfZm9vdGVyIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtY2xvZy1wYXJhbXM9ImNsaWNrX3RhcmdldD1mb290ZXJfcHJpY2luZyI+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+CS8vIGNvbW1vbiBib290X2RhdGEKCXZhciBib290X2RhdGEgPSB7ImFwaV91cmwiOiJcL2FwaVwvIiwiYXBwIjoiZmFsc2UiLCJ1c2VyX2lkIjpudWxsLCJ0ZWFtX2lkIjoiVDAwMDAwMDAwIiwidmlzaXRvcl91aWQiOiJiOGw1b2JlNDdkNmo2bTh1dDRlbWQybDVnIiwibm9fbG9naW4iOnRydWUsInZlcnNpb25fdHMiOiIxNTg0Mzg5NjE5IiwidmVyc2lvbl91aWQiOiIxOTg0NmU3MjdlNzQwYzJjYjAyMGRlNzI5OWU2ODIxOTBmOGJkYzFjIiwiY2FjaGVfdmVyc2lvbiI6InYyMS1ub21hZCIsImNhY2hlX3RzX3ZlcnNpb24iOiJ2Mi1idW5ueSIsInJlZGlyX2RvbWFpbiI6InNsYWNrLXJlZGlyLm5ldCIsInNpZ25pbl91cmwiOiJodHRwczpcL1wvc2xhY2suY29tXC9zaWduaW4iLCJhYnNfcm9vdF91cmwiOiJodHRwczpcL1wvc2xhY2suY29tXC8iLCJ0ZWFtX3VybCI6IiIsImltYWdlX3Byb3h5X3VybCI6Imh0dHBzOlwvXC9zbGFjay1pbWdzLmNvbVwvIiwiYmVhY29uX3RpbWluZ191cmwiOiJodHRwczpcL1wvc2xhY2suY29tXC9iZWFjb25cL3RpbWluZyIsImJlYWNvbl9lcnJvcl91cmwiOiJodHRwczpcL1wvc2xhY2suY29tXC9iZWFjb25cL2Vycm9yIiwiY2xvZ191cmwiOiJjbG9nXC90cmFja1wvIiwiYXBpX3Rva2VuIjoiIiwidnZ2X3BhdGhzIjp7Imx6X3N0cmluZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC9idjEtOC04Y2FjZGEyXC9sei1zdHJpbmctMS40LjQud29ya2VyLjhkZTFiMDBkNjcwZmYzZGM3MDZhMC5qcyIsImNvZGVtaXJyb3IiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvYnYxLTgtOGNhY2RhMlwvY29kZW1pcnJvci5taW4uNjhjNmEwNjEyYWJjY2M2Yjg4NTkubWluLmpzIiwiY29kZW1pcnJvcl9hZGRvbl9zaW1wbGUiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvYnYxLTgtOGNhY2RhMlwvY29kZW1pcnJvcl9zaW1wbGUuOTkzZmM1ZjhkZGQ0MDFmNjMyYWEubWluLmpzIiwiY29kZW1pcnJvcl9sb2FkIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cL2J2MS04LThjYWNkYTJcL2NvZGVtaXJyb3JfbG9hZC43NWEzNjEzY2E4MjkyMTZmMTAzMy5taW4uanMiLCJjb2RlbWlycm9yX2ZpbGVzIjp7ImphdmFzY3JpcHQiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvYnYxLTgtOGNhY2RhMlwvY29kZW1pcnJvcl9sYW5nX2phdmFzY3JpcHQuYWMxODMzZTllMjM5ZDUzMmI1YTkubWluLmpzIn19LCJub3RpZmljYXRpb25fc291bmRzIjpbeyJ2YWx1ZSI6ImIyLm1wMyIsImxhYmVsIjoiRGluZyIsInVybCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC83ZTkxXC9zb3VuZHNcL3B1c2hcL2IyLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYjIub2dnIn0seyJ2YWx1ZSI6ImFuaW1hbF9zdGljay5tcDMiLCJsYWJlbCI6IkJvaW5nIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvYW5pbWFsX3N0aWNrLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYW5pbWFsX3N0aWNrLm9nZyJ9LHsidmFsdWUiOiJiZWVuX3RyZWUubXAzIiwibGFiZWwiOiJEcm9wIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvYmVlbl90cmVlLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvYmVlbl90cmVlLm9nZyJ9LHsidmFsdWUiOiJjb21wbGV0ZV9xdWVzdF9yZXF1aXJlbWVudC5tcDMiLCJsYWJlbCI6IlRhLWRhIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvY29tcGxldGVfcXVlc3RfcmVxdWlyZW1lbnQubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9jb21wbGV0ZV9xdWVzdF9yZXF1aXJlbWVudC5vZ2cifSx7InZhbHVlIjoiY29uZmlybV9kZWxpdmVyeS5tcDMiLCJsYWJlbCI6IlBsaW5rIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvY29uZmlybV9kZWxpdmVyeS5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2NvbmZpcm1fZGVsaXZlcnkub2dnIn0seyJ2YWx1ZSI6ImZsaXR0ZXJidWcubXAzIiwibGFiZWwiOiJXb3ciLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9mbGl0dGVyYnVnLm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvZmxpdHRlcmJ1Zy5vZ2cifSx7InZhbHVlIjoiaGVyZV95b3VfZ29fbGlnaHRlci5tcDMiLCJsYWJlbCI6IkhlcmUgeW91IGdvIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwvaGVyZV95b3VfZ29fbGlnaHRlci5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2hlcmVfeW91X2dvX2xpZ2h0ZXIub2dnIn0seyJ2YWx1ZSI6ImhpX2Zsb3dlcnNfaGl0Lm1wMyIsImxhYmVsIjoiSGkiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9oaV9mbG93ZXJzX2hpdC5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2hpX2Zsb3dlcnNfaGl0Lm9nZyJ9LHsidmFsdWUiOiJrbm9ja19icnVzaC5tcDMiLCJsYWJlbCI6Iktub2NrIEJydXNoIiwidXJsIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzdlOTFcL3NvdW5kc1wvcHVzaFwva25vY2tfYnJ1c2gubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9rbm9ja19icnVzaC5vZ2cifSx7InZhbHVlIjoic2F2ZV9hbmRfY2hlY2tvdXQubXAzIiwibGFiZWwiOiJXaG9hISIsInVybCI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC83ZTkxXC9zb3VuZHNcL3B1c2hcL3NhdmVfYW5kX2NoZWNrb3V0Lm1wMyIsInVybF9vZ2ciOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvNDZlYmJcL3NvdW5kc1wvcHVzaFwvc2F2ZV9hbmRfY2hlY2tvdXQub2dnIn0seyJ2YWx1ZSI6Iml0ZW1fcGlja3VwLm1wMyIsImxhYmVsIjoiWW9pbmsiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2U5MVwvc291bmRzXC9wdXNoXC9pdGVtX3BpY2t1cC5tcDMiLCJ1cmxfb2dnIjoiaHR0cHM6XC9cL2Euc2xhY2stZWRnZS5jb21cLzQ2ZWJiXC9zb3VuZHNcL3B1c2hcL2l0ZW1fcGlja3VwLm9nZyJ9LHsidmFsdWUiOiJodW1tdXMubXAzIiwibGFiZWwiOiJIdW1tdXMiLCJ1cmwiOiJodHRwczpcL1wvYS5zbGFjay1lZGdlLmNvbVwvN2ZhOVwvc291bmRzXC9wdXNoXC9odW1tdXMubXAzIiwidXJsX29nZyI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC80NmViYlwvc291bmRzXC9wdXNoXC9odW1tdXMub2dnIn0seyJ2YWx1ZSI6Im5vbmUiLCJsYWJlbCI6Ik5vbmUifV0sImFsZXJ0X3NvdW5kcyI6W3sidmFsdWUiOiJmcm9nLm1wMyIsImxhYmVsIjoiRnJvZyIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcL2EzNGFcL3NvdW5kc1wvZnJvZy5tcDMifV0sImNhbGxfc291bmRzIjpbeyJ2YWx1ZSI6ImNhbGxcL2FsZXJ0X3YyLm1wMyIsImxhYmVsIjoiQWxlcnQiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL2FsZXJ0X3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC9pbmNvbWluZ19yaW5nX3YyLm1wMyIsImxhYmVsIjoiSW5jb21pbmcgcmluZyIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwvaW5jb21pbmdfcmluZ192Mi5tcDMifSx7InZhbHVlIjoiY2FsbFwvb3V0Z29pbmdfcmluZ192Mi5tcDMiLCJsYWJlbCI6Ik91dGdvaW5nIHJpbmciLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL291dGdvaW5nX3JpbmdfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3BvcF92Mi5tcDMiLCJsYWJlbCI6IkluY29taW5nIHJlYWN0aW9uIiwidXJsIjoiaHR0cHM6XC9cL3NsYWNrLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldFwvMDhmN1wvc291bmRzXC9jYWxsXC9wb3BfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3RoZXlfbGVmdF9jYWxsX3YyLm1wMyIsImxhYmVsIjoiVGhleSBsZWZ0IGNhbGwiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL3RoZXlfbGVmdF9jYWxsX3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC95b3VfbGVmdF9jYWxsX3YyLm1wMyIsImxhYmVsIjoiWW91IGxlZnQgY2FsbCIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwveW91X2xlZnRfY2FsbF92Mi5tcDMifSx7InZhbHVlIjoiY2FsbFwvdGhleV9qb2luZWRfY2FsbF92Mi5tcDMiLCJsYWJlbCI6IlRoZXkgam9pbmVkIGNhbGwiLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL3RoZXlfam9pbmVkX2NhbGxfdjIubXAzIn0seyJ2YWx1ZSI6ImNhbGxcL3lvdV9qb2luZWRfY2FsbF92Mi5tcDMiLCJsYWJlbCI6IllvdSBqb2luZWQgY2FsbCIsInVybCI6Imh0dHBzOlwvXC9zbGFjay5nbG9iYWwuc3NsLmZhc3RseS5uZXRcLzA4ZjdcL3NvdW5kc1wvY2FsbFwveW91X2pvaW5lZF9jYWxsX3YyLm1wMyJ9LHsidmFsdWUiOiJjYWxsXC9jb25maXJtYXRpb25fdjIubXAzIiwibGFiZWwiOiJDb25maXJtYXRpb24iLCJ1cmwiOiJodHRwczpcL1wvc2xhY2suZ2xvYmFsLnNzbC5mYXN0bHkubmV0XC8wOGY3XC9zb3VuZHNcL2NhbGxcL2NvbmZpcm1hdGlvbl92Mi5tcDMifV0sImNhbGxfc291bmRzX3ZlcnNpb24iOiJ2MiIsImltZyI6eyJhcHBfaWNvbiI6Imh0dHBzOlwvXC9hLnNsYWNrLWVkZ2UuY29tXC84MDU4OFwvaW1nXC9zbGFja19ncm93bF9pY29uX3ZvZ3VlLnBuZyJ9LCJwYWdlX25lZWRzX2VudGVycHJpc2UiOmZhbHNlLCJwYWdlX25lZWRzX2N1c3RvbV9lbW9qaSI6ZmFsc2UsImlzX2RlcHJlY2F0ZWRfd2ViY2xpZW50X2Jyb3dzZXIiOmZhbHNlLCJpc191bnN1cHBvcnRlZF93ZWJjbGllbnRfYnJvd3NlciI6dHJ1ZSwiZGVmYXVsdF90eiI6IkFtZXJpY2FcL0xvc19BbmdlbGVzIiwiZmVhdHVyZV9uZXdfcHVycGxlX3NjaGVtZSI6ZmFsc2UsImZlYXR1cmVfYnVpbGRlcl9nZXR0aW5nX3N0YXJ0ZWRfaTE4biI6ZmFsc2UsImZlYXR1cmVfYnVpbGRlcl9jcmVhdGlvbl9vcmdfcG9saWN5IjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX2V4dGVuc2lvbnMiOmZhbHNlLCJmZWF0dXJlX2tleWJvYXJkX2tleV90b29sdGlwIjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX3dlYmhvb2tfYWRtaW4iOnRydWUsImZlYXR1cmVfYnVpbGRlcl93ZWJob29rX3RyaWdnZXIiOnRydWUsImZlYXR1cmVfYWxseV9idWdiYXNoIjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX3NjaGVkdWxlZF90cmlnZ2VyIjp0cnVlLCJmZWF0dXJlX2Jsb2NrX2tpdF9tYXhfc2VsZWN0ZWRfaXRlbXMiOnRydWUsImZlYXR1cmVfYnVpbGRlcl9mZWVkYmFja19idXR0b24iOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfbWVzc2FnZV9zdGVwX3JpY2hfdGV4dCI6ZmFsc2UsImZlYXR1cmVfYXBwX3ZpZXdzX3YxIjp0cnVlLCJmZWF0dXJlX2F1ZGl0X2xvZ3NfdmlldyI6ZmFsc2UsImZlYXR1cmVfYXVkaXRfbG9nc192aWV3X3dvcmtzcGFjZSI6ZmFsc2UsImZlYXR1cmVfZGF0YV9sb2NhdGlvbl9uZXdfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9za19pMThuIjpmYWxzZSwiZmVhdHVyZV9zc29fY29tYmluZV9jb25maWdfcHJlZmVyZW5jZXMiOmZhbHNlLCJmZWF0dXJlX3Nzb19wcmVmZXJlbmNlc192aWV3X21vZGFscyI6dHJ1ZSwiZmVhdHVyZV9zY2hlZHVsZWRfZXhwb3J0c19jbGFyaWZ5X2NhbmNlbGxhdGlvbiI6dHJ1ZSwiZmVhdHVyZV9kZWZhdWx0X2Jyb3dzZXJfY29udHJvbF92MiI6ZmFsc2UsImZlYXR1cmVfYWNjb3VudF9jcmVhdGlvbl9zaG93X2N1c3RvbV90b3MiOnRydWUsImZlYXR1cmVfaWRwX2dyb3VwX2NvdW50IjpmYWxzZSwiZmVhdHVyZV9hY2Nlc3NpYmxlX3NlbGVjdHMiOmZhbHNlLCJmZWF0dXJlX2J1aWxkZXJfZGlzYWJsZV9nbG9iYWxfdHJpZ2dlcnMiOnRydWUsImZlYXR1cmVfd29ya2Zsb3dfYnVpbGRlcl9lbmFibGVkX29yZ19zZXR0aW5nIjp0cnVlLCJmZWF0dXJlX2J1aWxkZXJfY2FuX2FjY2VzcyI6ZmFsc2UsImZlYXR1cmVfZXNjX3JldGVudGlvbl9jbGllbnQiOmZhbHNlLCJmZWF0dXJlX2VzY19yZXRlbnRpb25fY2xpZW50X2NvcHkiOnRydWUsImZlYXR1cmVfYWx3YXlzX3Nob3dfYXJjaGl2ZV9jaGFubmVsX29wdGlvbiI6ZmFsc2UsImZlYXR1cmVfZ3JhbnVsYXJfZG5kIjpmYWxzZSwiZmVhdHVyZV9jb250ZXh0X2Jhcl9ndWVzdHMiOmZhbHNlLCJmZWF0dXJlX2NvbnRleHRfYmFyX3R6X2lzc3VlcyI6ZmFsc2UsImZlYXR1cmVfbXVsdGlfZmlsZV9sYXlvdXQiOnRydWUsImZlYXR1cmVfbWlncmF0aW9uX29yZ19hcHByb3ZhbHMiOnRydWUsImZlYXR1cmVfbmV3eHBfMzI2NiI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF8zMjc5Ijp0cnVlLCJmZWF0dXJlX25ld3hwXzQxNTMiOmZhbHNlLCJmZWF0dXJlX3RpbnlzcGVjayI6ZmFsc2UsImZlYXR1cmVfb3JnX2d1ZXN0X2NvbnZlcnNpb24iOnRydWUsImZlYXR1cmVfb3JnX2xldmVsX3VzZXJfZ3JvdXBzX3BoYXNlXzJfZnJvbnRlbmQiOmZhbHNlLCJmZWF0dXJlX3VzZV9uZXdfbGlzdF90ZWFtc19yZXNwb25zZSI6dHJ1ZSwiZmVhdHVyZV9kZXNrdG9wX2NvcHlfdGV4dCI6ZmFsc2UsImZlYXR1cmVfc3NiX3EzMTlfZGVwcmVjYXRpb24iOnRydWUsImZlYXR1cmVfc3NiX3EzMTlfZGVwcmVjYXRpb25fZGFyayI6ZmFsc2UsImZlYXR1cmVfc3NiX3EzMTlfZGVwcmVjYXRpb25fbW9kYWwiOmZhbHNlLCJmZWF0dXJlX3NzYl9xMzE5X2RlcHJlY2F0aW9uX21vZGFsX3N0b3JlX292ZXJyaWRlIjpmYWxzZSwiZmVhdHVyZV9zc2JfcTMxOV9kZXByZWNhdGlvbl9ibG9jayI6dHJ1ZSwiZmVhdHVyZV9kZXByZWNhdGVfZ2V0X21lbWJlcl9ieV9uYW1lIjpmYWxzZSwiZmVhdHVyZV91bmtub3duX2ZpbGVzIjp0cnVlLCJmZWF0dXJlX3Vua25vd25fbWVzc2FnZXMiOnRydWUsImZlYXR1cmVfYWRkX21lc3NhZ2VfcGVyZiI6ZmFsc2UsImZlYXR1cmVfZml4X2N1c3RvbV9lbW9qaV9lcnJvcnMiOnRydWUsImZlYXR1cmVfbW9kZXJuX2RlbGV0ZV9maWxlIjp0cnVlLCJmZWF0dXJlX2NvcHlfY2hhbm5lbF9saW5rIjp0cnVlLCJmZWF0dXJlX2NvbGxhcHNlX3JlYWN0aW9ucyI6ZmFsc2UsImZlYXR1cmVfZW1haWxfd29ya2Zsb3ciOmZhbHNlLCJmZWF0dXJlX21lc3NhZ2Vfa2l0X2luX21lc3NhZ2VfcGFuZSI6dHJ1ZSwiZmVhdHVyZV9pYV9lZHVjYXRpb24iOmZhbHNlLCJmZWF0dXJlX2NoYW5uZWxfZGV0YWlsc19tZW1iZXJzaGlwX2xpc3QiOmZhbHNlLCJmZWF0dXJlX2FsbF9kbV9tdXRlX2JvdHMiOmZhbHNlLCJmZWF0dXJlX2hlbHBfbWVudV9mZWVkYmFjayI6ZmFsc2UsImZlYXR1cmVfZmlsZV90aHJlYWRzIjp0cnVlLCJmZWF0dXJlX2Jyb2FkY2FzdF9pbmRpY2F0b3IiOnRydWUsImZlYXR1cmVfbmV3X3JlcGxpZXNfYWZ0ZXJfYmNhc3QiOnRydWUsImZlYXR1cmVfc29uaWNfZW1vamkiOmZhbHNlLCJmZWF0dXJlX2Vtb2ppX3NlYXJjaF9rZXl3b3Jkc19pbl9hdXRvY29tcGxldGUiOmZhbHNlLCJmZWF0dXJlX2VtYWlsX2luZ2VzdGlvbiI6ZmFsc2UsImZlYXR1cmVfc2lkZWJhcl9jb250ZXh0X21lbnUiOmZhbHNlLCJmZWF0dXJlX2F0dGFjaG1lbnRzX2lubGluZSI6ZmFsc2UsImZlYXR1cmVfZml4X2ZpbGVzIjp0cnVlLCJmZWF0dXJlX2FhYV9hZG1pbl9hcGlzIjp0cnVlLCJmZWF0dXJlX2FhYV9hZG1pbl9hcGlzX2V2ZW50c19kb2NzIjp0cnVlLCJmZWF0dXJlX2FwcF9sYXVuY2hlcl9iYW5uZXJzIjpmYWxzZSwiZmVhdHVyZV9hcHBfbGF1bmNoZXJfZmlsdGVycyI6ZmFsc2UsImZlYXR1cmVfaGVscF90ZXN0X3ByaW1lciI6ZmFsc2UsImZlYXR1cmVfZ2xvYmFsX2FjdGlvbnNfZ3Vlc3RfY2hlY2siOmZhbHNlLCJmZWF0dXJlX2N1c3RvbV9zdGF0dXNfZXhwaXJ5Ijp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfc2lkZWJhcl9kcmFmdHNfc2VjdGlvbiI6dHJ1ZSwiZmVhdHVyZV9uYXZpZ2F0ZV9oaXN0b3J5Ijp0cnVlLCJmZWF0dXJlX21lc3NhZ2VfYWN0aW9uc19yZWZyZXNoIjp0cnVlLCJmZWF0dXJlX2NvbXBvc2VfZmxvdyI6ZmFsc2UsImZlYXR1cmVfY29tcG9zZV9mbG93X3h3cyI6ZmFsc2UsImZlYXR1cmVfdGVtcF9jaGFubmVsX3N1YnNjcmlwdGlvbnMiOmZhbHNlLCJmZWF0dXJlX2Zhc3Rlcl9jb3VudF9hbGxfdW5yZWFkcyI6dHJ1ZSwiZmVhdHVyZV9zb25pY191c2VyX2dyb3VwcyI6ZmFsc2UsImZlYXR1cmVfY2hhbm5lbF9zZWxlY3Rvcl9mb3JfdGVhbV9ndWVzdHNfdXBkYXRlIjpmYWxzZSwiZmVhdHVyZV9kZXNrdG9wX3N5bXB0b21fZXZlbnRzIjpmYWxzZSwiZmVhdHVyZV9kYXRhX3Jlc2lkZW5jeV9kZWJ1Z2dpbmciOmZhbHNlLCJmZWF0dXJlX2VudF9hZG1pbl9hcHByb3ZlZF9hcHBzX3YyIjp0cnVlLCJmZWF0dXJlX21vZGVybml6ZWRfeHdzX3Blcm1hbGlua19kaWFsb2dzIjp0cnVlLCJmZWF0dXJlX2Rhc2hib2FyZF9zb3J0YWJsZV9saXN0cyI6ZmFsc2UsImZlYXR1cmVfc2tfbG9hZGluZ19idXR0b25fbW90aW9ucyI6dHJ1ZSwiZmVhdHVyZV9za19iYXNlX2ljb24iOmZhbHNlLCJmZWF0dXJlX2NlX2VuZ19jb250YWN0X2Zvcm1fY2F0ZWdvcmllcyI6ZmFsc2UsImZlYXR1cmVfZ2Rwcl9leHBvcnRzIjp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfaXNfcmVtb3ZlX2NyZWF0ZV9zaGFyZWRfY2hhbm5lbCI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX211bHRpX29yZyI6ZmFsc2UsImZlYXR1cmVfcmVtb3ZlX2RvdWJsZV9kaWFtb25kcyI6ZmFsc2UsImZlYXR1cmVfcmVtb3ZlX3BlbmRpbmdfY29ubmVjdGlvbnMiOmZhbHNlLCJmZWF0dXJlX3JlbW92ZV9kb3VibGVfcmluZ3MiOmZhbHNlLCJmZWF0dXJlX2V4dGVybmFsX29yZ3Nfc2VjdGlvbl9jaGFubmVsX2RldGFpbHMiOmZhbHNlLCJmZWF0dXJlX2Rpc3BsYXlfb3Jnc19saXN0X3NoYXJlX2RpYWxvZyI6ZmFsc2UsImZlYXR1cmVfZW5hYmxlX211bHRpX29yZ19pbnZpdGVzX2ZlIjpmYWxzZSwiZmVhdHVyZV9lbmFibGVfbXVsdGlfb3JnX2Rpc2Nvbm5lY3RfZmUiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19tdWx0aV9vcmdfaW52aXRlc19iZSI6ZmFsc2UsImZlYXR1cmVfY29udGV4dF9iYXJfc2NhbGFibGVfbW9yZSI6ZmFsc2UsImZlYXR1cmVfY29udGV4dF9iYXJfbWVzc2FnZV9wYW5lX2NsaWNrIjpmYWxzZSwiZmVhdHVyZV9tYW5hZ2Vfc2NfY2hhbm5lbF9jYXJkIjpmYWxzZSwiZmVhdHVyZV9jcmVhdGVfcHJpdmF0ZV9jX2NoYW5uZWxzIjpmYWxzZSwiZmVhdHVyZV9nZHByX3VzZXJfam9pbl90b3MiOnRydWUsImZlYXR1cmVfdXNlcl9pbnZpdGVfdG9zX2FwcmlsXzIwMTgiOnRydWUsImZlYXR1cmVfY2hhbm5lbF9tZ210X3BoYXNlX3RocmVlIjpmYWxzZSwiZmVhdHVyZV9pbmNyZW1lbnRhbF91bnJlYWRfY291bnRzIjpmYWxzZSwiZmVhdHVyZV9uZXVlX3R5cGUiOmZhbHNlLCJmZWF0dXJlX2N1c3RfYWNxX2kxOG5fdHdlYWtzIjpmYWxzZSwiZmVhdHVyZV9yZWZhY190aGVfdGF4IjpmYWxzZSwiZmVhdHVyZV9jb250YWN0X3NhbGVzX2V4cGVyaW1lbnQiOnRydWUsImZlYXR1cmVfZGF0YV9yZXNpZGVuY3lfanBfYmFubmVyIjp0cnVlLCJmZWF0dXJlX2lhX3JldmFtcF93ZWIiOmZhbHNlLCJmZWF0dXJlX2lhX3JldmFtcF93ZWJfd2F2ZV90d28iOmZhbHNlLCJmZWF0dXJlX2RhdGFfcmVzaWRlbmN5X2F1c3RyYWxpYV9iYW5uZXIiOmZhbHNlLCJmZWF0dXJlX3Byb2pfbmF2X2NvbXBvbmVudCI6ZmFsc2UsImZlYXR1cmVfcHJval91cGRhdGVfdHJhbnNwYXJlbmN5X3JlcG9ydCI6ZmFsc2UsImZlYXR1cmVfd2hpdGVsaXN0X3plbmRlc2tfY2hhdF93aWRnZXQiOmZhbHNlLCJmZWF0dXJlX2FwcF9hY3Rpb25fc2xhc2hfY29tbWFuZHNfcGFkMTA0MiI6dHJ1ZSwiZmVhdHVyZV9zaG9ydGN1dHNfbWVudV9hbm5vdW5jZV9vbmx5Ijp0cnVlLCJmZWF0dXJlX2xpdmVfc3VwcG9ydF9mcmVlX3BsYW4iOmZhbHNlLCJmZWF0dXJlX29mZmxpbmVfbW9kZSI6ZmFsc2UsImZlYXR1cmVfZm9yY2VfbHNfY29tcHJlc3Npb24iOmZhbHNlLCJmZWF0dXJlX3VzZV9pbWdwcm94eV9yZXNpemluZyI6dHJ1ZSwiZmVhdHVyZV9zaGFyZV9tZW50aW9uX2NvbW1lbnRfY2xlYW51cCI6ZmFsc2UsImZlYXR1cmVfZWxlY3Ryb25fbWVtb3J5X2xvZ2dpbmciOmZhbHNlLCJmZWF0dXJlX2xvY2FsaXphdGlvbl9waGFzZV90d28iOnRydWUsImZlYXR1cmVfbG9jYWxlX2VzX0xBIjp0cnVlLCJmZWF0dXJlX2xvY2FsZV9lbl9HQiI6dHJ1ZSwiZmVhdHVyZV9sb2NhbGVfcHRfQlIiOnRydWUsImZlYXR1cmVfbmV3X2xvY2FsZV90b2FzdCI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2V4cG9ydHMiOmZhbHNlLCJmZWF0dXJlX2RvY3NfbWVudGlvbnNfYW5kX2NoYW5uZWxzIjpmYWxzZSwiZmVhdHVyZV92YWNhdGlvbl9kZWxpZ2h0Ijp0cnVlLCJmZWF0dXJlX3RocmVhZHNfdW5yZWFkX3RyYW5zbGF0aW9ucyI6ZmFsc2UsImZlYXR1cmVfY2FsbHNfZXNjX3VpIjp0cnVlLCJmZWF0dXJlX2NhbGxzX3N1cnZleV9yZXF1ZXN0X3Jlc3BvbnNlIjp0cnVlLCJmZWF0dXJlX3JlbW90ZV9maWxlc19hcGkiOnRydWUsImZlYXR1cmVfdG9rZW5faXBfd2hpdGVsaXN0Ijp0cnVlLCJmZWF0dXJlX3NpZGViYXJfdGhlbWVfdW5kbyI6ZmFsc2UsImZlYXR1cmVfaGlkZV9vbl9zdGFydHVwIjp0cnVlLCJmZWF0dXJlX2RvbnRfc2V0X2NoYW5uZWxfbWVtYmVyc2hpcF90d2ljZSI6ZmFsc2UsImZlYXR1cmVfYWxsb3dfaW50cmFfd29yZF9mb3JtYXR0aW5nIjp0cnVlLCJmZWF0dXJlX2kxOG5fY2hhbm5lbHNfdmFsaWRhdGVfZW1vamkiOnRydWUsImZlYXR1cmVfZndfZW5nX25vcm1hbGl6YXRpb24iOnRydWUsImZlYXR1cmVfc2xpbV9zY3JvbGxiYXIiOmZhbHNlLCJmZWF0dXJlX3ByaW1hcnlfc2VhcmNoIjpmYWxzZSwiZmVhdHVyZV9tb2Rlcm5fc291bmRzIjpmYWxzZSwiZmVhdHVyZV9zbGlfY2hhbm5lbF9hcmNoaXZlX3N1Z2dlc3Rpb25zIjp0cnVlLCJmZWF0dXJlX3N0ZWVwbGVfY2h1cmNoIjp0cnVlLCJmZWF0dXJlX3N0ZWVwbGVfY2h1cmNoX2xpbmsiOnRydWUsImZlYXR1cmVfc3RlZXBsZV9jaHVyY2hfZXh0Ijp0cnVlLCJmZWF0dXJlX3N0cm9sbGVyc190b19wZXJjaCI6dHJ1ZSwiZmVhdHVyZV9mYW50YWlsX251cnR1cmUiOnRydWUsImZlYXR1cmVfcG91cm92ZXIiOmZhbHNlLCJmZWF0dXJlX3Blb3BsZV9zZWFyY2giOmZhbHNlLCJmZWF0dXJlX3JlYWN0X21lc3NhZ2VzIjp0cnVlLCJmZWF0dXJlX2VkZ2VfdXBsb2FkX3Byb3h5X2NoZWNrIjpmYWxzZSwiZmVhdHVyZV9sZWdhY3lfZmlsZV91cGxvYWRfYW5hbHl0aWNzIjp0cnVlLCJmZWF0dXJlX3NvbmljX2ZpbmRfbW9yZV93a3NwcyI6ZmFsc2UsImZlYXR1cmVfc29uaWNfaW5wdXRzIjpmYWxzZSwiZmVhdHVyZV90aHJlYWRlZF9zbGFja19vd25lZF9wbHVnaW5zIjp0cnVlLCJmZWF0dXJlX2FwcF9wb3BvdXRzX2kxOG4iOmZhbHNlLCJmZWF0dXJlX3NuaXBwZXRfbW9kZXNfaTE4biI6ZmFsc2UsImZlYXR1cmVfZ2RyaXZlX2RvX25vdF9pbnN0YWxsX2J5X2RlZmF1bHQiOnRydWUsImZlYXR1cmVfZWttX2JhY2tmaWxsX2FkZF9zbGVlcCI6ZmFsc2UsImZlYXR1cmVfZWttX21lc3NhZ2VfcmV2b2NhdGlvbl9wb2xsaW5nX3Rlc3QiOmZhbHNlLCJmZWF0dXJlX2xvbmdlcl9jaGFubmVsX25hbWVzIjp0cnVlLCJmZWF0dXJlX3RlYW1fYWRtaW5zX2xpc3RfYXBpIjpmYWxzZSwiZmVhdHVyZV90ZWFtX2FkbWluc19saXN0X2FwaV9hY2Nlc3MiOmZhbHNlLCJmZWF0dXJlX21zX2xhdGVzdCI6dHJ1ZSwiZmVhdHVyZV9ndWVzdHNfdXNlX2VudGl0bGVtZW50cyI6dHJ1ZSwiZmVhdHVyZV9hcHBfY2FudmFzZXMiOmZhbHNlLCJmZWF0dXJlX2NhbGxzX3NpcF9pbnRlZ3JhdGlvbl9sYWJlbHMiOmZhbHNlLCJmZWF0dXJlX2FwcF9ob21lX2FkbWluX3BhZ2VzIjpmYWxzZSwiZmVhdHVyZV9hcHBfYWN0aW9uc19hZG1pbl9wYWdlcyI6ZmFsc2UsImZlYXR1cmVfYXBwX3ZpZXdzX3JlbWluZGVycyI6ZmFsc2UsImZlYXR1cmVfcmVtaW5kZXJzX3VzZXIiOmZhbHNlLCJmZWF0dXJlX2Jsb2Nrc19yZW1pbmRlcnNfbGlzdCI6ZmFsc2UsImZlYXR1cmVfbWVzc2FnZV9ibG9ja3MiOmZhbHNlLCJmZWF0dXJlX3NpbGVuY2VfYXBwX2RtcyI6ZmFsc2UsImZlYXR1cmVfc2V0X3R6X2F1dG9tYXRpY2FsbHkiOnRydWUsImZlYXR1cmVfY29uZmlybV9jbGVhcl9hbGxfdW5yZWFkc19wcmVmIjp0cnVlLCJmZWF0dXJlX2Jsb2NrX21vdW50cyI6dHJ1ZSwiZmVhdHVyZV9hdHRhY2htZW50c192MiI6dHJ1ZSwiZmVhdHVyZV9pMThuX2FwcF9tZXNzYWdlX3RhYiI6ZmFsc2UsImZlYXR1cmVfYmtfc2VsZWN0X2ZpbHRlcnMiOmZhbHNlLCJmZWF0dXJlX2Jsb2NrX2tpdF9leHBhbmRhYmxlX2Jsb2NrIjpmYWxzZSwiZmVhdHVyZV9ncm91cF9ibG9jayI6ZmFsc2UsImZlYXR1cmVfYmxvY2tfa2l0X2RlZXBfbGlua3MiOnRydWUsImZlYXR1cmVfc2hvd19ibG9ja19raXRfaW5fc2hhcmVfZGlhbG9ncyI6ZmFsc2UsImZlYXR1cmVfYmxvY2tfa2l0X2V2ZW50X2Jsb2NrIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfdXNlcl9ibG9jayI6ZmFsc2UsImZlYXR1cmVfYmxvY2tfa2l0X3JhZGlvX2J1dHRvbnMiOnRydWUsImZlYXR1cmVfbXJrZHduX29uX3JhZGlvX2J1dHRvbiI6dHJ1ZSwiZmVhdHVyZV9ibG9ja19raXRfdGFibGUiOmZhbHNlLCJmZWF0dXJlX2Jsb2NrX2tpdF9yYW5nZV9kYXRlcGlja2VyIjpmYWxzZSwiZmVhdHVyZV9ibG9ja19raXRfdGltZXBpY2tlciI6ZmFsc2UsImZlYXR1cmVfYWRkX2FwcF9ob21lX3RlYW1fbmFtZSI6ZmFsc2UsImZlYXR1cmVfYmVhY29uX2pzX2Vycm9ycyI6ZmFsc2UsImZlYXR1cmVfYmVhY29uX2pzX2FkbWluX2Vycm9ycyI6ZmFsc2UsImZlYXR1cmVfZGlhbG9nc192Ml9tb2JpbGUiOnRydWUsImZlYXR1cmVfdXNlcl9hcHBfZGlzYWJsZV9zcGVlZF9idW1wIjp0cnVlLCJmZWF0dXJlX3RyYWN0b3Jfc2hhcmVkX2ludml0ZV9saW5rIjp0cnVlLCJmZWF0dXJlX25ld3hwXzIxMTkiOnRydWUsImZlYXR1cmVfdHJhY3Rvcl9iYWNrdXBfY2hhbm5lbG5hbWVfY29weSI6dHJ1ZSwiZmVhdHVyZV9kZWdyYWRlZF9ydG1fYWx3YXlzX2ZhaWxzIjpmYWxzZSwiZmVhdHVyZV9hcHBzX21hbmFnZV9wZXJtaXNzaW9uc19zY29wZV9jaGFuZ2VzIjp0cnVlLCJmZWF0dXJlX3JlbWluZGVyX2Nyb3NzX3dvcmtzcGFjZSI6dHJ1ZSwiZmVhdHVyZV9wMnAiOmZhbHNlLCJmZWF0dXJlX2dsb2JhbF9uYXYiOmZhbHNlLCJmZWF0dXJlX2dsb2JhbF9uYXZfcm9sbGJhY2siOmZhbHNlLCJmZWF0dXJlX2NsYXNzaWNfbmF2IjpmYWxzZSwiZmVhdHVyZV9uZXdfcmVhY3Rpb25zIjp0cnVlLCJmZWF0dXJlX3BhZ2VzX2V4YW1wbGUiOmZhbHNlLCJmZWF0dXJlX3NvbmljX3BpbnMiOmZhbHNlLCJmZWF0dXJlX3NvbmljX3ZpZGVvX3BsYWNlaG9sZGVyIjp0cnVlLCJmZWF0dXJlX2lhcDEiOmZhbHNlLCJmZWF0dXJlX2lhX2dhIjpmYWxzZSwiZmVhdHVyZV9pYV9pMThuIjpmYWxzZSwiZmVhdHVyZV9pYV90aGVtZXMiOmZhbHNlLCJmZWF0dXJlX3NvbmljX2hhcmRfcmVsb2FkIjp0cnVlLCJmZWF0dXJlX2hpZGRlbl93a3NwX3VuZnVybHMiOnRydWUsImZlYXR1cmVfZ3Vlc3Rfd2tzcF91bmZ1cmxzIjpmYWxzZSwiZmVhdHVyZV93b3Jrc3BhY2Vfc2NpbV9tYW5hZ2VtZW50IjpmYWxzZSwiZmVhdHVyZV91bmlmaWVkX21lbWJlciI6ZmFsc2UsImZlYXR1cmVfdHVybl9tcGRtX25vdGlmc19vbiI6dHJ1ZSwiZmVhdHVyZV9kb2xvcmVzIjpmYWxzZSwiZmVhdHVyZV9kZXNrdG9wX2ZvcmNlX3Byb2R1Y3Rpb25fY2hhbm5lbCI6ZmFsc2UsImZlYXR1cmVfZGVza3RvcF9sb2dzX3VwbG9hZCI6ZmFsc2UsImZlYXR1cmVfbWFjb3NfZGlzYWJsZV9odyI6dHJ1ZSwiZmVhdHVyZV9xdWlsbF9jamtfY29kZV9ibG9jayI6ZmFsc2UsImZlYXR1cmVfYm90c19ub3RfbWVtYmVycyI6dHJ1ZSwiZmVhdHVyZV93dGFfc3RvcF9jcmVhdGlvbiI6dHJ1ZSwiZmVhdHVyZV9tMTFuX2NoYW5uZWxfZGV0YWlscyI6ZmFsc2UsImZlYXR1cmVfZ3JhbnVsYXJfYm90X2dhIjp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfYWN0aW9ucyI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2FjdGlvbnNfY2xpZW50Ijp0cnVlLCJmZWF0dXJlX3Nob3J0Y3V0c19wcm9tcHQiOnRydWUsImZlYXR1cmVfYWNjZXNzaWJsZV9kaWFsb2dzIjp0cnVlLCJmZWF0dXJlX2NhbGxzX2NsaXBib2FyZF9icm9hZGNhc3Rpbmdfb3B0aW4iOnRydWUsImZlYXR1cmVfc2NyZWVuX3NoYXJlX25lZWRzX2Flcm8iOmZhbHNlLCJmZWF0dXJlX3NsaV90cmVuZGluZ19kYXNoYm9hcmQiOmZhbHNlLCJmZWF0dXJlX2FjY2Vzc2libGVfZnNfZGlhbG9ncyI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX2hlYWRlcl9sYWJlbHMiOmZhbHNlLCJmZWF0dXJlX3RyYXBfa2Jfd2l0aGluX2ZzX21vZGFscyI6dHJ1ZSwiZmVhdHVyZV9tb2Rlcm5faW1hZ2Vfdmlld2VyIjp0cnVlLCJmZWF0dXJlX2Vtb2ppX2J5X2lkIjp0cnVlLCJmZWF0dXJlX21jX21pZ3JhdGlvbl9iYW5uZXIiOnRydWUsImZlYXR1cmVfYXJpYV9hcHBsaWNhdGlvbl9tb2RlIjpmYWxzZSwiZmVhdHVyZV91cGRhdGVfbXVsdGl3b3Jrc3BhY2VfY2hhbm5lbF9tb2RhbCI6dHJ1ZSwiZmVhdHVyZV9tb2Rlcm5fcmVxdWVzdF93b3Jrc3BhY2VfZGlhbG9nIjpmYWxzZSwiZmVhdHVyZV9hcHBfc2V0dGluZ3NfZ2FudHJ5IjpmYWxzZSwiZmVhdHVyZV9tb2Rlcm5fcHJvZmlsZV9mbGV4cGFuZSI6ZmFsc2UsImZlYXR1cmVfc2NnX2NvbnZlcnNpb25fY2hhbm5lbHMiOnRydWUsImZlYXR1cmVfcmVkdWNlX3VuZXhwZWN0ZWRfdW5pbnN0YWxscyI6dHJ1ZSwiZmVhdHVyZV9pZHBfZ3JvdXBfd2FybmluZyI6ZmFsc2UsImZlYXR1cmVfZW50ZXJwcmlzZV9yZXRlbnRpb25fYWxsb3dfb3ZlcnJpZGVfb25fb3JnX2xldmVsX2NoYW5uZWxzIjpmYWxzZSwiZmVhdHVyZV90cmFja190aW1lX3NwZW50Ijp0cnVlLCJmZWF0dXJlX2Fubm91bmNlX29ubHkiOnRydWUsImZlYXR1cmVfYW5ub3VuY2Vfb25seV93ZWJzb2NrZXQiOnRydWUsImZlYXR1cmVfYW5ub3VuY2Vfb25seV9wcm9tbyI6ZmFsc2UsImZlYXR1cmVfYXRfbWVudGlvbl9pbnZpdGVzIjp0cnVlLCJmZWF0dXJlX2NoYW5uZWxfaW52aXRlX3Rva2VuaXphdGlvbiI6dHJ1ZSwiZmVhdHVyZV9iZXR0ZXJfdG9rZW5pemF0aW9uX3dlYmFwcF9mYXN0X2ZvbGxvdyI6dHJ1ZSwiZmVhdHVyZV9pbXBvcnRzX2NhbmNlbCI6dHJ1ZSwiZmVhdHVyZV9lbWFpbF93b3Jrb2JqZWN0X3VpIjpmYWxzZSwiZmVhdHVyZV9lbWFpbF9ub3RpZnkiOmZhbHNlLCJmZWF0dXJlX2VtYWlsX3ByaXZhdGUiOnRydWUsImZlYXR1cmVfc2luZ2xlX3VzZXJfZXhwb3J0IjpmYWxzZSwiZmVhdHVyZV9jYWxlbmRhcl9zaW1wbGVfYWdlbmRhX3ZpZXciOmZhbHNlLCJmZWF0dXJlX2FuYWx5dGljc19lbmFibGVfZGl2aXNpb24iOmZhbHNlLCJmZWF0dXJlX2VudGVycHJpc2VfYW5hbHl0aWNzX2FwcHNfdGFiIjpmYWxzZSwiZmVhdHVyZV9lbnRlcnByaXNlX2FuYWx5dGljc18yMDE5X3ExX3VwZGF0ZSI6dHJ1ZSwiZmVhdHVyZV9pbnNpZ2h0c19hbGxvd19hY2Nlc3NfdG9fYXBwIjpmYWxzZSwiZmVhdHVyZV9pbnNpZ2h0c19jb21tc19pbXBhY3RfbWVzc2FnZV9zdGF0cyI6ZmFsc2UsImZlYXR1cmVfaW5zaWdodHNfbWVzc2FnZV9hY3Rpdml0eV9hZG1pbiI6ZmFsc2UsImZlYXR1cmVfaW5zaWdodHNfbWVzc2FnZV9hY3Rpdml0eV91cGRhdGVzIjpmYWxzZSwiZmVhdHVyZV90ZWFtX3RoZW1lcyI6ZmFsc2UsImZlYXR1cmVfdW5mdXJsX21ldGFkYXRhIjpmYWxzZSwiZmVhdHVyZV9wbHVzX21lbnVfYWRkX2FwcHNfbGluayI6ZmFsc2UsImZlYXR1cmVfcmVjZW50X2ZpbGVzX29tbmlwaWNrZXIiOmZhbHNlLCJmZWF0dXJlX2dyYW51bGFyX2JvdCI6dHJ1ZSwiZmVhdHVyZV9jaGVja291dF9mb3JjZV9pbnRvX2xlZ2FjeSI6ZmFsc2UsImZlYXR1cmVfYWRtaW5fbW92ZV9jaGFubmVsc19tZXNzYWdlIjpmYWxzZSwiZmVhdHVyZV9uZXd4cF9mZV9pbnZpdGVfbW9kZXJuIjp0cnVlLCJmZWF0dXJlX21vZGVybml6ZV9jaGFubmVsX2NyZWF0ZV9tb2RhbCI6dHJ1ZSwiZmVhdHVyZV9zb25pY19wbGFjZWhvbGRlcl9sYWJlbHMiOmZhbHNlLCJmZWF0dXJlX3NvbmljX2VzY19jcmVhdGlvbiI6ZmFsc2UsImZlYXR1cmVfZGFuZ2Vyb3VzbHlfZ3VhcmRfaWFfdHJhbnNsYXRpb25zIjpmYWxzZSwiZmVhdHVyZV9wbGF0Zm9ybV9jYWxsc19hcGkiOnRydWUsImZlYXR1cmVfdGhyZWFkZWRfY2FsbF9ibG9jayI6ZmFsc2UsImZlYXR1cmVfdHJpZ2dlcl9pZF9zY29wZSI6ZmFsc2UsImZlYXR1cmVfbGlmZWN5Y2xlX2xvZ2dpbmdfcGxhbnNfcGFnZSI6dHJ1ZSwiZmVhdHVyZV9zbGFja19tZXNzYWdlX2F0dGFjaG1lbnRfdG9vbHRpcCI6ZmFsc2UsImZlYXR1cmVfZW50ZXJwcmlzZV9tb2JpbGVfZGV2aWNlX2NoZWNrIjp0cnVlLCJmZWF0dXJlX25ld3hwMzc4OSI6dHJ1ZSwiZmVhdHVyZV9uZXd4cF8zNzkzIjp0cnVlLCJmZWF0dXJlX25ld3hwXzQxMDEiOmZhbHNlLCJmZWF0dXJlX3NoYXJlZF9jaGFubmVsc19jdXN0b21fZW1vamlzX3VybCI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2N1c3RvbV9lbW9qaXNfdXJsX2NsaWVudCI6ZmFsc2UsImZlYXR1cmVfbmV3X2NvcHlfZm9yX2lkZW50aXR5X2Jhc2ljIjpmYWxzZSwiZmVhdHVyZV9zb25pY19sZWF2ZV93b3Jrc3BhY2VfZGlhbG9nIjpmYWxzZSwiZmVhdHVyZV9zaGFyZWRfY2hhbm5lbHNfbmV3X3VzZXJfdHJpYWwiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2ludml0ZXJfdHJpYWwiOnRydWUsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2ludml0ZXJfdHJpYWxfYmFieV90ZWFtcyI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX3Nob3J0Y3V0IjpmYWxzZSwiZmVhdHVyZV9zaGFyZWRfaW52aXRlX2FjY2VwdGFuY2VfZWxpZ2liaWxpdHlfdjJfYXBpIjpmYWxzZSwiZmVhdHVyZV9zaGFyZWRfY2hhbm5lbF9pbnZpdGVzX3YyIjp0cnVlLCJmZWF0dXJlX2JldHRlcl9pbnZpdGVzX2NhbGxfdjJfYXBpIjp0cnVlLCJmZWF0dXJlX3BhaWRfb25ib2FyZGluZ19wYWdldXBkYXRlIjp0cnVlLCJmZWF0dXJlX3RyYWNlX3dlYmFwcF9pbml0Ijp0cnVlLCJmZWF0dXJlX2Fubm91bmNlbWVudF9vbmx5X2NoYW5uZWxfY29weV9jaGFuZ2VfdHJhbnNsYXRpb25zIjp0cnVlLCJmZWF0dXJlX3N0cmlwZV9jb21wbGV0ZWx5X2Rvd25fYmFubmVyIjpmYWxzZSwiZmVhdHVyZV9zaWRlYmFyX29uYm9hcmRpbmdfaW52aXRlX3Byb21wdCI6dHJ1ZSwiZmVhdHVyZV90YXJnZXRlZF9wcm9tb3Rpb25hbF9kaXNjb3VudHMiOnRydWUsImZlYXR1cmVfcGxhbnNfcGFnZV9mcmVlX2NvbHVtbiI6dHJ1ZSwiZmVhdHVyZV9zZmJfZHVubmluZ19zdGF0ZW1lbnQiOnRydWUsImZlYXR1cmVfamFwYW5fdGF4X2NoYW5nZV9jaGFyZ2VfZm9yX2FsbF90ZWFtcyI6dHJ1ZSwiZmVhdHVyZV9tYWxheXNpYV90YXhfZW1haWwiOnRydWUsImZlYXR1cmVfbWFsYXlzaWFfdGF4X2Fzc2Vzc21lbnQiOnRydWUsImZlYXR1cmVfamFwYW5fdGF4X2JpbGxpbmdfc3RhdGVtZW50cyI6ZmFsc2UsImZlYXR1cmVfc2luZ2Fwb3JlX3RheF9lbWFpbCI6ZmFsc2UsImZlYXR1cmVfc2luZ2Fwb3JlX3RheF9hc3Nlc3NtZW50IjpmYWxzZSwiZmVhdHVyZV9jaGVja291dF92Ml9wcm9kdWN0X3N3aXRjaF9jaGVja291dF9yZXZpZXciOnRydWUsImZlYXR1cmVfY2hlY2tvdXRfdjJfcHJvZHVjdF9zd2l0Y2hfY2hlY2tvdXRfZm9ybSI6dHJ1ZSwiZmVhdHVyZV9jaGVja291dF92Ml9hY2hfc3VwcG9ydCI6dHJ1ZSwiZmVhdHVyZV9jaGVja291dF92Ml9tb2JpbGUiOmZhbHNlLCJmZWF0dXJlX2NoZWNrb3V0X3YyX21vYmlsZV9waGFzZV90d28iOmZhbHNlLCJmZWF0dXJlX2NoZWNrb3V0X3YyX2Rpc2FsbG93X2llX2FjaCI6ZmFsc2UsImZlYXR1cmVfY29udGV4dHVhbF9tZXNzYWdlX3Nob3J0Y3V0cyI6dHJ1ZSwiZmVhdHVyZV9lbnRlcnByaXNlX2FuYWx5dGljc18yMDE5X3EzX2VuaGFuY2VtZW50cyI6ZmFsc2UsImZlYXR1cmVfb3JnX2xldmVsX2FwcHMiOmZhbHNlLCJmZWF0dXJlX2NoYW5uZWxfc2VjdGlvbnMiOnRydWUsImZlYXR1cmVfY2hhbm5lbF9zZWN0aW9uc19zaWRlYmFyX2JlaGF2aW9yX3VpIjpmYWxzZSwiZmVhdHVyZV9nbG9iYWxfYWN0aW9uc192MCI6ZmFsc2UsImZlYXR1cmVfbWVzc2FnZV9uYXZpZ2F0aW9uX3Nob3J0Y3V0cyI6dHJ1ZSwiZmVhdHVyZV9zZWFyY2hfbGltaXRfdGVhbV9maWx0ZXIiOnRydWUsImZlYXR1cmVfYW5hbHl0aWNzX3NjaW1fZmllbGRzX3BhaWQiOmZhbHNlLCJmZWF0dXJlX29yZ19hcHBzX2Rhc2hib2FyZCI6ZmFsc2UsImZlYXR1cmVfZ29vZ2xlX2RpcmVjdG9yeV9pbnZpdGVzIjpmYWxzZSwiZmVhdHVyZV9oZWxwX2NlbnRlcl9pbmNpZGVudF9iYW5uZXIiOnRydWUsImZlYXR1cmVfc2NnX2Vycm9yX21lc3NhZ2UiOnRydWUsImZlYXR1cmVfc2VhcmNoX3Jlc3VsdHNfdmlydHVhbGl6ZWQiOmZhbHNlLCJmZWF0dXJlX3Nob3dfZW1haWxfZm9yd2FyZGVkX2J5IjpmYWxzZSwiZmVhdHVyZV9jaGFubmVsX2VtYWlsX2FkZHJlc3NlcyI6ZmFsc2UsImZlYXR1cmVfbmV3X2Vub3VnaF9wZXJpb2RpY19yZWxvYWRzIjpmYWxzZSwiZmVhdHVyZV9pYXAxX2Rvd25sb2FkcyI6ZmFsc2UsImZlYXR1cmVfYnVpbGRlcl9kaXNwbGF5X2V4cG9ydF9mb3JtX2NzdiI6dHJ1ZSwiZmVhdHVyZV9idWlsZGVyX3dvcmtmbG93X2FjdGl2aXR5IjpmYWxzZSwiZmVhdHVyZV9idWlsZGVyX2V4cG9ydF9mb3JtX2Nzdl9hZG1pbiI6dHJ1ZSwiZmVhdHVyZV9pYV9oY19zaG93X2NvbnRlbnQiOnRydWUsImZlYXR1cmVfbmV3X2JpbGxpbmdfZW1haWxzX3RyYW5zbGF0aW9ucyI6dHJ1ZSwiZmVhdHVyZV9jaGFubmVsX21nbXRfcGhhc2Vfb25lIjpmYWxzZSwiZmVhdHVyZV9jaGFubmVsX21nbXRfcGhhc2VfdHdvIjpmYWxzZSwiZmVhdHVyZV9pYV9oY19zaG93X2NvbnRlbnRfbWFudWFsbHkiOmZhbHNlLCJmZWF0dXJlX2NyZWF0b3JzX2xvZ2luX3dpdGhfZ29vZ2xlIjpmYWxzZSwiZmVhdHVyZV9yYXRlX2xpbWl0X2FwcF9jcmVhdGlvbiI6ZmFsc2UsImZlYXR1cmVfc2hhcmVkX2NoYW5uZWxzX2hvbWVfcmVtaW5kZXJzIjpmYWxzZSwiZmVhdHVyZV9mZWF0X3NheV9teV9uYW1lIjp0cnVlLCJmZWF0dXJlX2FwcF9kaXJlY3Rvcnlfc2VjdXJpdHlfY29tcGxpYW5jZSI6ZmFsc2UsImZlYXR1cmVfaW52aXRlX2xpbmtfY29weSI6ZmFsc2UsImZlYXR1cmVfcHV0X2FfbWVudGlvbl9vbl9pdCI6ZmFsc2UsImZlYXR1cmVfZ29vZ2xlX2RpcmVjdG9yeV9wbGFjZWhvbGRlciI6ZmFsc2UsImNsaWVudF9sb2dzIjp7IjAiOnsibnVtYmVycyI6WyIwIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjIiOnsibnVtYmVycyI6WyIyIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjQiOnsibnVtYmVycyI6WyI0Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjUiOnsibnVtYmVycyI6WyI1Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjIzIjp7Im51bWJlcnMiOlsiMjMiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwic291bmRzIjp7Im5hbWUiOiJzb3VuZHMiLCJudW1iZXJzIjpbIjM3Il19LCIzNyI6eyJuYW1lIjoic291bmRzIiwibnVtYmVycyI6WyIzNyJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIjQ3Ijp7Im51bWJlcnMiOlsiNDciXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNDgiOnsibnVtYmVycyI6WyI0OCJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJNZXNzYWdlIEhpc3RvcnkiOnsibmFtZSI6Ik1lc3NhZ2UgSGlzdG9yeSIsIm51bWJlcnMiOlsiNTgiXX0sIjU4Ijp7Im5hbWUiOiJNZXNzYWdlIEhpc3RvcnkiLCJudW1iZXJzIjpbIjU4Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwiNjciOnsibnVtYmVycyI6WyI2NyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI3MiI6eyJudW1iZXJzIjpbIjcyIl0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjczIjp7Im51bWJlcnMiOlsiNzMiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiODIiOnsibnVtYmVycyI6WyI4MiJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI4OCI6eyJudW1iZXJzIjpbIjg4Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjkxIjp7Im51bWJlcnMiOlsiOTEiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiOTMiOnsibnVtYmVycyI6WyI5MyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI5NiI6eyJudW1iZXJzIjpbIjk2Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjk5Ijp7Im51bWJlcnMiOlsiOTkiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiQ2hhbm5lbCBNYXJraW5nIChNUykiOnsibmFtZSI6IkNoYW5uZWwgTWFya2luZyAoTVMpIiwibnVtYmVycyI6WyIxNDEiXX0sIjE0MSI6eyJuYW1lIjoiQ2hhbm5lbCBNYXJraW5nIChNUykiLCJudW1iZXJzIjpbIjE0MSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIkNoYW5uZWwgTWFya2luZyAoQ2xpZW50KSI6eyJuYW1lIjoiQ2hhbm5lbCBNYXJraW5nIChDbGllbnQpIiwibnVtYmVycyI6WyIxNDIiXX0sIjE0MiI6eyJuYW1lIjoiQ2hhbm5lbCBNYXJraW5nIChDbGllbnQpIiwibnVtYmVycyI6WyIxNDIiXSwidXNlcl9mYWNpbmciOnRydWV9LCJDbG9zZSBPbGQgSU1zIChDbGllbnQpIjp7Im5hbWUiOiJDbG9zZSBPbGQgSU1zIChDbGllbnQpIiwibnVtYmVycyI6WyIyMjEiXX0sIjIyMSI6eyJuYW1lIjoiQ2xvc2UgT2xkIElNcyAoQ2xpZW50KSIsIm51bWJlcnMiOlsiMjIxIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwiMzY1Ijp7Im51bWJlcnMiOlsiMzY1Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjM4OSI6eyJudW1iZXJzIjpbIjM4OSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI0MzgiOnsibnVtYmVycyI6WyI0MzgiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNDQ0Ijp7Im51bWJlcnMiOlsiNDQ0Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjQ4MSI6eyJudW1iZXJzIjpbIjQ4MSJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI0ODgiOnsibnVtYmVycyI6WyI0ODgiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNTI5Ijp7Im51bWJlcnMiOlsiNTI5Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjU1MiI6eyJudW1iZXJzIjpbIjU1MiJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJkYXNoYm9hcmQiOnsibmFtZSI6ImRhc2hib2FyZCIsIm51bWJlcnMiOlsiNjY2Il19LCI2NjYiOnsibmFtZSI6ImRhc2hib2FyZCIsIm51bWJlcnMiOlsiNjY2Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjY2NyI6eyJudW1iZXJzIjpbIjY2NyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCI3NzMiOnsibnVtYmVycyI6WyI3NzMiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiNzc3Ijp7Im51bWJlcnMiOlsiNzc3Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sIjc5NCI6eyJudW1iZXJzIjpbIjc5NCJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJDbGllbnQgUmVzcG9uc2l2ZW5lc3MiOnsibmFtZSI6IkNsaWVudCBSZXNwb25zaXZlbmVzcyIsInVzZXJfZmFjaW5nIjpmYWxzZSwibnVtYmVycyI6WyI4MDgiXX0sIjgwOCI6eyJuYW1lIjoiQ2xpZW50IFJlc3BvbnNpdmVuZXNzIiwidXNlcl9mYWNpbmciOmZhbHNlLCJudW1iZXJzIjpbIjgwOCJdfSwiTWVzc2FnZSBQYW5lIFNjcm9sbGluZyI6eyJuYW1lIjoiTWVzc2FnZSBQYW5lIFNjcm9sbGluZyIsIm51bWJlcnMiOlsiODg4Il19LCI4ODgiOnsibmFtZSI6Ik1lc3NhZ2UgUGFuZSBTY3JvbGxpbmciLCJudW1iZXJzIjpbIjg4OCJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIlVucmVhZCBiYW5uZXIgYW5kIGRpdmlkZXIiOnsibmFtZSI6IlVucmVhZCBiYW5uZXIgYW5kIGRpdmlkZXIiLCJudW1iZXJzIjpbIjk5OSJdfSwiOTk5Ijp7Im5hbWUiOiJVbnJlYWQgYmFubmVyIGFuZCBkaXZpZGVyIiwibnVtYmVycyI6WyI5OTkiXSwidXNlcl9mYWNpbmciOnRydWV9LCIxMDAwIjp7Im51bWJlcnMiOlsiMTAwMCJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJEdXBsaWNhdGUgYmFkZ2VzIChkZXNrdG9wIGFwcCBpY29ucykiOnsibmFtZSI6IkR1cGxpY2F0ZSBiYWRnZXMgKGRlc2t0b3AgYXBwIGljb25zKSIsIm51bWJlcnMiOlsiMTcwMSJdfSwiMTcwMSI6eyJuYW1lIjoiRHVwbGljYXRlIGJhZGdlcyAoZGVza3RvcCBhcHAgaWNvbnMpIiwibnVtYmVycyI6WyIxNzAxIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwiTWVtYmVycyI6eyJuYW1lIjoiTWVtYmVycyIsIm51bWJlcnMiOlsiMTk3NSJdfSwiMTk3NSI6eyJuYW1lIjoiTWVtYmVycyIsIm51bWJlcnMiOlsiMTk3NSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sImxhenkgbG9hZGluZyI6eyJuYW1lIjoibGF6eSBsb2FkaW5nIiwibnVtYmVycyI6WyIxOTg5Il19LCIxOTg5Ijp7Im5hbWUiOiJsYXp5IGxvYWRpbmciLCJudW1iZXJzIjpbIjE5ODkiXSwidXNlcl9mYWNpbmciOnRydWV9LCJ0aGluX2NoYW5uZWxfbWVtYmVyc2hpcCI6eyJuYW1lIjoidGhpbl9jaGFubmVsX21lbWJlcnNoaXAiLCJudW1iZXJzIjpbIjE5OTAiXX0sIjE5OTAiOnsibmFtZSI6InRoaW5fY2hhbm5lbF9tZW1iZXJzaGlwIiwibnVtYmVycyI6WyIxOTkwIl0sInVzZXJfZmFjaW5nIjp0cnVlfSwic3RhdHMiOnsibmFtZSI6InN0YXRzIiwibnVtYmVycyI6WyIxOTkxIl19LCIxOTkxIjp7Im5hbWUiOiJzdGF0cyIsIm51bWJlcnMiOlsiMTk5MSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIm1zIjp7Im5hbWUiOiJtcyIsIm51bWJlcnMiOlsiMTk5NiJdfSwiMTk5NiI6eyJuYW1lIjoibXMiLCJudW1iZXJzIjpbIjE5OTYiXSwidXNlcl9mYWNpbmciOnRydWV9LCJzaGFyZWRfY2hhbm5lbHNfY29ubmVjdGlvbiI6eyJuYW1lIjoic2hhcmVkX2NoYW5uZWxzX2Nvbm5lY3Rpb24iLCJudW1iZXJzIjpbIjE5OTkiXX0sIjE5OTkiOnsibmFtZSI6InNoYXJlZF9jaGFubmVsc19jb25uZWN0aW9uIiwibnVtYmVycyI6WyIxOTk5Il0sInVzZXJfZmFjaW5nIjpmYWxzZX0sImRuZCI6eyJuYW1lIjoiZG5kIiwibnVtYmVycyI6WyIyMDAyIl19LCIyMDAyIjp7Im5hbWUiOiJkbmQiLCJudW1iZXJzIjpbIjIwMDIiXSwidXNlcl9mYWNpbmciOnRydWV9LCIyMDAzIjp7Im51bWJlcnMiOlsiMjAwMyJdLCJ1c2VyX2ZhY2luZyI6ZmFsc2V9LCJUaHJlYWRzIjp7Im5hbWUiOiJUaHJlYWRzIiwibnVtYmVycyI6WyIyMDA0Il19LCIyMDA0Ijp7Im5hbWUiOiJUaHJlYWRzIiwibnVtYmVycyI6WyIyMDA0Il0sInVzZXJfZmFjaW5nIjp0cnVlfSwiMjAwNSI6eyJudW1iZXJzIjpbIjIwMDUiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiUmVhY3Rpb25zIjp7Im5hbWUiOiJSZWFjdGlvbnMiLCJudW1iZXJzIjpbIjIwMDYiXX0sIjIwMDYiOnsibmFtZSI6IlJlYWN0aW9ucyIsIm51bWJlcnMiOlsiMjAwNiJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIlRTU1NCLmZvY3VzVGFiQW5kU3dpdGNoVG9DaGFubmVsIjp7Im5hbWUiOiJUU1NTQi5mb2N1c1RhYkFuZFN3aXRjaFRvQ2hhbm5lbCIsIm51bWJlcnMiOlsiMjAwNyJdfSwiMjAwNyI6eyJuYW1lIjoiVFNTU0IuZm9jdXNUYWJBbmRTd2l0Y2hUb0NoYW5uZWwiLCJudW1iZXJzIjpbIjIwMDciXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiUHJlc2VuY2UgRGV0ZWN0aW9uIjp7Im5hbWUiOiJQcmVzZW5jZSBEZXRlY3Rpb24iLCJudW1iZXJzIjpbIjIwMTciXX0sIjIwMTciOnsibmFtZSI6IlByZXNlbmNlIERldGVjdGlvbiIsIm51bWJlcnMiOlsiMjAxNyJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIm1jX3NpYnMiOnsibmFtZSI6Im1jX3NpYnMiLCJudW1iZXJzIjpbIjk5OTkiXX0sIjk5OTkiOnsibmFtZSI6Im1jX3NpYnMiLCJudW1iZXJzIjpbIjk5OTkiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiTWVtYmVyIHNlYXJjaGluZyI6eyJuYW1lIjoiTWVtYmVyIHNlYXJjaGluZyIsIm51bWJlcnMiOlsiOTAyMTEiXX0sIjkwMjExIjp7Im5hbWUiOiJNZW1iZXIgc2VhcmNoaW5nIiwibnVtYmVycyI6WyI5MDIxMSJdLCJ1c2VyX2ZhY2luZyI6dHJ1ZX0sIjk4NzY1Ijp7Im51bWJlcnMiOlsiOTg3NjUiXSwidXNlcl9mYWNpbmciOmZhbHNlfSwiODY3NTMwOSI6eyJudW1iZXJzIjpbIjg2NzUzMDkiXSwidXNlcl9mYWNpbmciOmZhbHNlfX19OwoJYm9vdF9kYXRhLnN0YXJ0X21zID0gRGF0ZS5ub3coKTsKPC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciBUU19sYXN0X2xvZ19kYXRlID0gbnVsbDsKdmFyIFRTTWFrZUxvZ0RhdGUgPSBmdW5jdGlvbigpIHsKCXZhciBkYXRlID0gbmV3IERhdGUoKTsKCgl2YXIgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKCXZhciBtbyA9IGRhdGUuZ2V0TW9udGgoKSsxOwoJdmFyIGQgPSBkYXRlLmdldERhdGUoKTsKCgl2YXIgdGltZSA9IHsKCSAgaDogZGF0ZS5nZXRIb3VycygpLAoJICBtaTogZGF0ZS5nZXRNaW51dGVzKCksCgkgIHM6IGRhdGUuZ2V0U2Vjb25kcygpLAoJICBtczogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKQoJfTsKCglPYmplY3Qua2V5cyh0aW1lKS5tYXAoZnVuY3Rpb24obW9tZW50LCBpbmRleCkgewoJCWlmIChtb21lbnQgPT0gJ21zJykgewoJCQlpZiAodGltZVttb21lbnRdIDwgMTApIHsKCQkJCXRpbWVbbW9tZW50XSA9IHRpbWVbbW9tZW50XSsnMDAnOwoJCQl9IGVsc2UgaWYgKHRpbWVbbW9tZW50XSA8IDEwMCkgewoJCQkJdGltZVttb21lbnRdID0gdGltZVttb21lbnRdKycwJzsKCQkJfQoJCX0gZWxzZSBpZiAodGltZVttb21lbnRdIDwgMTApIHsKCQkJdGltZVttb21lbnRdID0gJzAnICsgdGltZVttb21lbnRdOwoJCX0KCX0pOwoKCXZhciBzdHIgPSB5ICsgJy8nICsgbW8gKyAnLycgKyBkICsgJyAnICsgdGltZS5oICsgJzonICsgdGltZS5taSArICc6JyArIHRpbWUucyArICcuJyArIHRpbWUubXM7CglpZiAoVFNfbGFzdF9sb2dfZGF0ZSkgewoJCXZhciBkaWZmID0gZGF0ZS1UU19sYXN0X2xvZ19kYXRlOwoJCS8vc3RyKz0gJyAoJytkaWZmKydtcyknOwoJfQoJVFNfbGFzdF9sb2dfZGF0ZSA9IGRhdGU7CglyZXR1cm4gc3RyKycgJzsKfQoKdmFyIHBhcnNlRGVlcExpbmtSZXF1ZXN0ID0gZnVuY3Rpb24oY29kZSkgewoJdmFyIG0gPSBjb2RlLm1hdGNoKC8iaWQiOiIoW0NER11bQS1aMC05XXs4LH0pIi8pOwoJdmFyIGlkID0gbSA/IG1bMV0gOiBudWxsOwoKCW0gPSBjb2RlLm1hdGNoKC8idGVhbSI6IihUW0EtWjAtOV17OCx9KSIvKTsKCXZhciB0ZWFtID0gbSA/IG1bMV0gOiBudWxsOwoKCW0gPSBjb2RlLm1hdGNoKC8ibWVzc2FnZSI6IihbMC05XStcLlswLTldKykiLyk7Cgl2YXIgbWVzc2FnZSA9IG0gPyBtWzFdIDogbnVsbDsKCglyZXR1cm4geyBpZDogaWQsIHRlYW06IHRlYW0sIG1lc3NhZ2U6IG1lc3NhZ2UgfTsKfQoKaWYgKCdyZW5kZXJlckV2YWxBc3luYycgaW4gd2luZG93KSB7Cgl2YXIgb3JpZ1JlbmRlcmVyRXZhbEFzeW5jID0gd2luZG93LnJlbmRlcmVyRXZhbEFzeW5jOwoJd2luZG93LnJlbmRlcmVyRXZhbEFzeW5jID0gZnVuY3Rpb24oYmxvYikgewoJCXRyeSB7CgkJCXZhciBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoYXRvYihibG9iKSkpOwoJCQlpZiAoZGF0YS5jb2RlLm1hdGNoKC9oYW5kbGVEZWVwTGluay8pKSB7CgkJCQl2YXIgcmVxdWVzdCA9IHBhcnNlRGVlcExpbmtSZXF1ZXN0KGRhdGEuY29kZSk7CgkJCQlpZiAoIXJlcXVlc3QuaWQgfHwgIXJlcXVlc3QudGVhbSB8fCAhcmVxdWVzdC5tZXNzYWdlKSByZXR1cm47CgoJCQkJcmVxdWVzdC5jbWQgPSAnY2hhbm5lbCc7CgkJCQlUU1NTQi5oYW5kbGVEZWVwTGlua1dpdGhBcmdzKEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpKTsKCQkJCXJldHVybjsKCQkJfSBlbHNlIHsKCQkJCW9yaWdSZW5kZXJlckV2YWxBc3luYyhibG9iKTsKCQkJfQoJCX0gY2F0Y2ggKGUpIHsKCQl9Cgl9Cn08L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dmFyIFRTU1NCID0gewoJY2FsbDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQp9Ozwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC04Y2FjZGEyL3JvbGx1cC1jb3JlX3JlcXVpcmVkX2xpYnMuZjM5MTU3ZDRlOTEzOTBkNGNjZGIubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04LThjYWNkYTIvbW9kZXJuLnZlbmRvci5jZmM2NGU0NmJhYmVkMTMwMTY4OC5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgtOGNhY2RhMi9hcHBsaWNhdGlvbi5hNWNjZDdmOTBhM2FmYWIzMjhiNy5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgtOGNhY2RhMi9yb2xsdXAtY29yZV9yZXF1aXJlZF90cy43MDk1ODNjMDAzNjgwYTMwYjMyNS5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgtOGNhY2RhMi9yb2xsdXAtY29yZV93ZWIuNzAwZmMzODU3NzZlMWExNjhmZTQubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04LThjYWNkYTIvcm9sbHVwLWFwaV9kb2NzLjNlZjNiMDFlYzk0Zjk5ODk5YmE5Lm1pbi5qcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYS5zbGFjay1lZGdlLmNvbS9idjEtOC04Y2FjZGEyL3JvbGx1cC1zZWNvbmRhcnlfYV9yZXF1aXJlZC41OTMzZjViYWUxNTNmNGU1N2NmZi5taW4uanMiIG9ubG9hZD0id2luZG93Ll9jZG4gPyBfY2RuLm9rKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBvbmVycm9yPSJ3aW5kb3cuX2NkbiA/IF9jZG4uZmFpbGVkKHRoaXMsIGFyZ3VtZW50cykgOiBudWxsIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2Euc2xhY2stZWRnZS5jb20vYnYxLTgtOGNhY2RhMi9yb2xsdXAtc2Vjb25kYXJ5X2JfcmVxdWlyZWQuMTg2NjVmMzA2MGE5OTBkYjEwYzAubWluLmpzIiBvbmxvYWQ9IndpbmRvdy5fY2RuID8gX2Nkbi5vayh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgb25lcnJvcj0id2luZG93Ll9jZG4gPyBfY2RuLmZhaWxlZCh0aGlzLCBhcmd1bWVudHMpIDogbnVsbCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hLnNsYWNrLWVkZ2UuY29tL2J2MS04LThjYWNkYTIvZm9vdGVyLmFkODQ4YmU0MTUyM2VkZDVmNDkyLm1pbi5qcyIgb25sb2FkPSJ3aW5kb3cuX2NkbiA/IF9jZG4ub2sodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIG9uZXJyb3I9IndpbmRvdy5fY2RuID8gX2Nkbi5mYWlsZWQodGhpcywgYXJndW1lbnRzKSA6IG51bGwiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxzY3JpcHQ+CQkJd2luZG93LmJvb3RfZGF0YSA9IHdpbmRvdy5ib290X2RhdGEgfHwge307CgkJCWJvb3RfZGF0YS5ub19sb2dpbiA9IHRydWU7CgkJCWJvb3RfZGF0YS5hcHAgPSAnYXBpJzsKCQkJYm9vdF9kYXRhLmFwaV91cmwgPSAnL2FwaS8nOwoJCQlib290X2RhdGEuYXBwX2lkID0gIiI7CgkJCWJvb3RfZGF0YS5hcHBfbmFtZSA9ICIiOwoJCQlib290X2RhdGEubnVtX3RlYW1zID0gMDsKCQkJYm9vdF9kYXRhLnJlc2VydmVkX2NvbW1hbmRzID0gW107CgkJCWJvb3RfZGF0YS5udW1fY29tbWFuZHMgPSAwOwoJCQlib290X2RhdGEuc3Vkb191cmwgPSAiIjsKCQkJYm9vdF9kYXRhLmFwaV90b2tlbiA9ICIiOwoJCQlUUy5ib290KGJvb3RfZGF0YSk7PC9zY3JpcHQ+PHNjcmlwdD4JCWhsanMuY29uZmlndXJlKHtsYW5ndWFnZXM6IFsnanNvbicsICdiYXNoJywgJ2phdmFzY3JpcHQnLCAnaHR0cCddfSk7CgkJaGxqcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCk7PC9zY3JpcHQ+Cgo8IS0tIHNsYWNrLXd3dy1oaHZtLW1haW4taWFkLXB2enQvIDIwMjAtMDMtMTYgMTQ6Mjk6MTAvIHYxOTg0NmU3MjdlNzQwYzJjYjAyMGRlNzI5OWU2ODIxOTBmOGJkYzFjLyBCOkggLS0+Cgo8ZGl2IGlkPSJhcHBzX21hcmtldGluZ19iYW5uZXIiIGNsYXNzPSJzcGVjX2Jhbm5lciBoaWRkZW4iPjxkaXYgY2xhc3M9InNwZWNfYmFubmVyX19jb250ZW50Ij48ZGl2IGNsYXNzPSJmaXJzdF9yb3ciPjxpIGNsYXNzPSJiYW5uZXJfdHNfaWNvbiB0c19pY29uX2xvY2siPjwvaT48ZGl2IGNsYXNzPSJ0ZXh0Ij48Yj5JbXBvcnRhbnQgLTwvYj48c3Bhbj5TbGFjayBoYXMgZW5kZWQgc3VwcG9ydCBmb3IgVExTIDEuMCBhbmQgMS4xPC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY29uZF9yb3ciPjxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vYXBpLnNsYWNrLmNvbS91bnNhZmUtdGxzLWRlcHJlY2F0aW9uIiBkYXRhLWNsb2ctY2xpY2s9InRydWUiIGRhdGEtY2xvZy11aS1hY3Rpb249ImNsaWNrIiBkYXRhLWNsb2ctZXZlbnQ9IldFQlNJVEVfQ0xJQ0siIGRhdGEtZ3RtLWNsaWNrPSJHVE0tYXV0by1wYWdlc19hcGktbGlua190bHNfZGVwcmVjYXRpb25fY3RhIiBkYXRhLWNsb2ctdWktc3RlcD0icGFnZXNfYXBpIiBkYXRhLWNsb2ctdWktZWxlbWVudD0ibGlua190bHNfZGVwcmVjYXRpb25fY3RhIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZTwvYT48L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJjbG9zZV9zcGVjIHRzX2ljb24gdHNfaWNvbl90aW1lcyI+PC9idXR0b24+PC9kaXY+PHNjcmlwdD4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCWlmICghcmVhZENvb2tpZSgnZG9jdW1lbnRhdGlvbl9iYW5uZXJfY29va2llJykpIHsKCQkkKCcuc3BlY19iYW5uZXInKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CgkJJCgnLmNsb3NlX3NwZWMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsKCQkJY3JlYXRlQ29va2llKCdkb2N1bWVudGF0aW9uX2Jhbm5lcl9jb29raWUnLCAxLCAzMCwgJy5zbGFjay5jb20nKTsKCQkJJCgnLnNwZWNfYmFubmVyJykuYWRkQ2xhc3MoJ2hpZGRlbicpOwoJCX0pOwoJfQp9KTsKPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4= + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:10 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=Test + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '327' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:10 GMT + Server: + - Apache + X-Slack-Req-Id: + - 0c6842d2a6fcf0d4fa67c043ad0610a2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-gnio + X-Cache: + - Miss from cloudfront + Via: + - 1.1 174acb08636ac7d9e9a778bbf1bcbc53.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - xEiHoQAPsWU_g18VKOwYYONIto_3OQV8fKMKkYTFabEggM_arRGESQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1584394150.000900","message":{"bot_id":"BV6A94UG5","type":"message","text":"Test","user":"UV60Q76GG","ts":"1584394150.000900","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-endpoint.yml b/test/cassettes/users-list-endpoint.yml new file mode 100644 index 00000000..6d67d530 --- /dev/null +++ b/test/cassettes/users-list-endpoint.yml @@ -0,0 +1,155 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:11 GMT + Server: + - Apache + X-Slack-Req-Id: + - e99f0f12857d7db0dd0b00e1d99e17e2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ehwu + X-Cache: + - Miss from cloudfront + Via: + - 1.1 49cdeca097624936e070b73619df7da9.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 2Bh291SjoQGv-iXyUhp81EjmadhIU_KRMolt0y9FHuTlmD9enX2R2Q== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584394151,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +- request: + method: get + uri: https://slack.com/api/bogus.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '76' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:11 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + 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 + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 21c6554aa0c01976102ff36bf632c4ab + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ixwe + X-Cache: + - Miss from cloudfront + Via: + - 1.1 8275ae3e861a04a309ec8b466cdc4a26.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - q1lR3NoJN3AsK2ybCQoFedmUnvgccKlVILiaeg4Q-n1EWPx4a8D05w== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"bogus.list"}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-initialized.yml b/test/cassettes/workspace-initialized.yml new file mode 100644 index 00000000..f8d484eb --- /dev/null +++ b/test/cassettes/workspace-initialized.yml @@ -0,0 +1,172 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:16 GMT + Server: + - Apache + X-Slack-Req-Id: + - 1de51db7b5eb8ea4593c72447a0b9ab3 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-hnt8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 aabd01c4a20dae837d162bd972422efc.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - NEp-xfhyRScnrc8aZiACl29o0BetogIpUQeZkU5ugjbWn-2KBY62kA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584394156,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:16 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '601' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:16 GMT + Server: + - Apache + X-Slack-Req-Id: + - 3e2fcefc1bf8d5edb0957ed7f1821eee + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-fmpy + X-Cache: + - Miss from cloudfront + Via: + - 1.1 1002c05e647d0804e83147cdd205d14a.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - OogDm8ivkiHq3G6CQa6rExgKvRCifaoNGpz57zL3b-DcTXepdW5daw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:16 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-select-channel.yml b/test/cassettes/workspace-select-channel.yml new file mode 100644 index 00000000..b70295fd --- /dev/null +++ b/test/cassettes/workspace-select-channel.yml @@ -0,0 +1,251 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:11 GMT + Server: + - Apache + X-Slack-Req-Id: + - bdb88998a4aedae5fe05d8670a497601 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ff5q + X-Cache: + - Miss from cloudfront + Via: + - 1.1 60b744e5b364d04abea9fa6686121242.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - VK8y7QJzaGSPhkpPdoT0I-UqUFkmXqnFYgfZ-Yzqr14jrqwGqIGBrQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584394151,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '601' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:11 GMT + Server: + - Apache + X-Slack-Req-Id: + - ca72cbecfdf9319c02f2ea24071e434e + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-37rz + X-Cache: + - Miss from cloudfront + Via: + - 1.1 44cd593d82a2d200a94217033c614c6a.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - FUxPxp24_kAHJapKsh2iIByMkRhiTyJ5ywcTop02_ba_TBwB3mJ_9w== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60P4CMN","UV60Q76GG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60P4CMN","UV60Q76GG"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV5GLBZT6","UV60P4CMN","UV60Q76GG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=Text2 + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '328' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:15 GMT + Server: + - Apache + X-Slack-Req-Id: + - cedade326f66621eaecf0f64a0e18a5b + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-heis + X-Cache: + - Miss from cloudfront + Via: + - 1.1 fec77e486350d1bd33f526a760d8b5a4.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - "-J9ZUiCzZGIEEQGPIpJ01CIjJJb4Yl2yLfEqschNLZdLT622pdGrAg==" + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1584394155.001000","message":{"bot_id":"BV6A94UG5","type":"message","text":"Text2","user":"UV60Q76GG","ts":"1584394155.001000","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:15 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-select-user.yml b/test/cassettes/workspace-select-user.yml new file mode 100644 index 00000000..67950d36 --- /dev/null +++ b/test/cassettes/workspace-select-user.yml @@ -0,0 +1,172 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:08 GMT + Server: + - Apache + X-Slack-Req-Id: + - bc3b436e285977ff063afcc76d02bed1 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-lxmb + X-Cache: + - Miss from cloudfront + Via: + - 1.1 34f8ef0e4c880df0650a814412a26ea6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 7ItblXR_jdLiaeXjbM-YhBOt1NpcryOHdBbx4DodjyYg7ZZjNmrbVw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584394148,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:08 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '600' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:29:09 GMT + Server: + - Apache + X-Slack-Req-Id: + - 3c917011e82a89ae790a1670ba7775ae + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5mc5 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 2241406ac19fffc8f35d6ddef8e22f56.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - xiLKTAcSH8a8SnDpXm5CHWBYJFWza_VBz4DPx1dkZNepKxYC2t3Aeg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60Q76GG","UV60P4CMN","UV5GLBZT6"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60Q76GG","UV60P4CMN","UV5GLBZT6"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60Q76GG","UV60P4CMN","UV5GLBZT6"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:29:09 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-sendmessage-channel.yml b/test/cassettes/workspace-sendmessage-channel.yml new file mode 100644 index 00000000..0de2c7fe --- /dev/null +++ b/test/cassettes/workspace-sendmessage-channel.yml @@ -0,0 +1,251 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:47:57 GMT + Server: + - Apache + X-Slack-Req-Id: + - 1aea3d6ea66bb03da0e1f779d4a56177 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-tqr5 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 ef6538ee7be7b17c84d06edb0f4c0a1a.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - L_6nEUQWkwlJM4gylUdu2o5QTjC6RW7pAR21_01bQ8OOMQfaMKJk-w== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584395277,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:47:57 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '601' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:47:57 GMT + Server: + - Apache + X-Slack-Req-Id: + - 7928acbe75f5cda83b50c1c142769b03 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-hvb7 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 27a84054de24e45f952ea4056a821764.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - CUYJiZNIZq0S9JaoPdTRhvrCLcATAIvf961XzJ5AwKbb9r0bPZZBQA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60P4CMN","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60P4CMN","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV64BM5QV","UV68KR96Z","UV60P4CMN","UV5GLBZT6","UV60Q76GG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:47:57 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=Test + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '328' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:47:59 GMT + Server: + - Apache + X-Slack-Req-Id: + - 97dbad55a6b9e88be6acf8617b13a516 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-03b7 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 b4085435efbe95a420f374958bd145bf.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - Ryl17Cd3c2_f_iEwV1202w2khMeMMV1PFiSG07yoTlbNVyyDX90OMQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1584395279.001100","message":{"bot_id":"BV6A94UG5","type":"message","text":"Test","user":"UV60Q76GG","ts":"1584395279.001100","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:48:00 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-showdetails-channel.yml b/test/cassettes/workspace-showdetails-channel.yml new file mode 100644 index 00000000..f6579fd7 --- /dev/null +++ b/test/cassettes/workspace-showdetails-channel.yml @@ -0,0 +1,172 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2016' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:48:00 GMT + Server: + - Apache + X-Slack-Req-Id: + - ce23a51a1af3ae272b2af932e844aa14 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-rn4n + X-Cache: + - Miss from cloudfront + Via: + - 1.1 4c48e9fb20d53d40e9fe273dbdae1099.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - bSr_thBVGpQ2HpN6DXMuX1NCQgo0aGxPkz9MPo-hKE3DxEOJ1C0RCA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TUVTGCG8H","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"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":"TUVTGCG8H"},"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":"UUTB447GA","team_id":"TUVTGCG8H","name":"space_nikki_v_api_pro","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_nikki_v_api_pro","real_name_normalized":"space_nikki_v_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9f1f52862a3","api_app_id":"AV80E6U15","always_active":false,"bot_id":"BV80VFAF9","image_24":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9f1f52862a3fe88cf7cf0e3c592450a6.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584039082},{"id":"UUTFEGX7U","team_id":"TUVTGCG8H","name":"time_vera_api_project","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_vera_api_project","real_name_normalized":"time_vera_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3c93b95bac9","api_app_id":"AUTF5G9R8","always_active":false,"bot_id":"BV8561FMM","image_24":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3c93b95bac98de9661f70da4afca7db0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1583874337},{"id":"UUW8EPTR7","team_id":"TUVTGCG8H","name":"time_sharon_cheung_ap","deleted":false,"color":"684b6c","real_name":"time_sharon_cheung_ap","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_sharon_cheung_ap","real_name_normalized":"time_sharon_cheung_ap","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g39da6f1a267","api_app_id":"AV6AZG6Q5","always_active":false,"bot_id":"BUTH5NWSW","first_name":"time_sharon_cheung_ap","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/39da6f1a267bd9468d389bfaf9aad25f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1584372982},{"id":"UUWNEB82F","team_id":"TUVTGCG8H","name":"time_emily_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"time_emily_api_projec","real_name_normalized":"time_emily_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga34175d6590","api_app_id":"AVACSNPN2","always_active":false,"bot_id":"BV7NS2P1A","first_name":"time_emily_api_projec","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a34175d6590715898809c47d3790c4fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"is_bot":true,"is_app_user":false,"updated":1584314260},{"id":"UV5GLBZT6","team_id":"TUVTGCG8H","name":"e.anderson8977","deleted":false,"color":"9f69e7","real_name":"Emily + Cowan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Emily + Cowan","real_name_normalized":"Emily Cowan","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g42c84c2e8ed","first_name":"Emily","last_name":"Cowan","image_24":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/42c84c2e8ed03134c2c75a116cb2a8db.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865695},{"id":"UV60P4CMN","team_id":"TUVTGCG8H","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"247b75993584","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/981944386785_247b7599358427ae6a7f_1024.jpg","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583865896},{"id":"UV60Q76GG","team_id":"TUVTGCG8H","name":"lizeth.veraro","deleted":false,"color":"e7392d","real_name":"Vera","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Vera","real_name_normalized":"Vera","display_name":"Vera","display_name_normalized":"Vera","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"220b824fa494","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_original.png","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994142975895_220b824fa49458c4473f_1024.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872956,"has_2fa":false},{"id":"UV64BM5QV","team_id":"TUVTGCG8H","name":"vnikki13","deleted":false,"color":"3c989f","real_name":"Nikki + Vaughan","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Nikki + Vaughan","real_name_normalized":"Nikki Vaughan","display_name":"Nikki Vaughan","display_name_normalized":"Nikki + Vaughan","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9e7c278e8fd","image_24":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9e7c278e8fd688e7bbc3e08211fe9b4a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583868664},{"id":"UV68KR96Z","team_id":"TUVTGCG8H","name":"mairheshmati","deleted":false,"color":"e96699","real_name":"Mair + Bear","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Mair + Bear","real_name_normalized":"Mair Bear","display_name":"Mair Bear","display_name_normalized":"Mair + Bear","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g93f8924e6f7","image_24":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/93f8924e6f7526df1e523f881c3c13df.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0016-512.png","status_text_canonical":"","team":"TUVTGCG8H"},"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":1583872779}],"cache_ts":1584395280,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:48:00 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '601' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 21:48:00 GMT + Server: + - Apache + X-Slack-Req-Id: + - 21e2ea89c82503a043f5243ff7ee3436 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-83yj + X-Cache: + - Miss from cloudfront + Via: + - 1.1 6a6653dfb47ccc5082f2a5b9d0d168ce.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 7ukou_Q4nnnq9uC3tRUkig86Hku0SuO0EXibJwj3-HvQIbkVieq8_g== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CV5GLCW12","name":"general","is_channel":true,"created":1583865622,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV60Q76GG","UV64BM5QV","UV68KR96Z","UV5GLBZT6"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5},{"id":"CV5GLDJ9J","name":"slack-bot","is_channel":true,"created":1583865623,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"slack-bot","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV60Q76GG","UV64BM5QV","UV68KR96Z","UV5GLBZT6"],"topic":{"value":"A + place for us to test our slack API projects","creator":"UV5GLBZT6","last_set":1583865752},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":5},{"id":"CV86RT7AS","name":"random","is_channel":true,"created":1583865622,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UV5GLBZT6","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UV60P4CMN","UV60Q76GG","UV64BM5QV","UV68KR96Z","UV5GLBZT6"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UV5GLBZT6","last_set":1583865622},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UV5GLBZT6","last_set":1583865622},"previous_names":[],"num_members":5}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 21:48:00 GMT +recorded_with: VCR 5.1.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index b575e5b9..bcc5ce03 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -70,7 +70,7 @@ def @workspace.gets end it "show_details - Based on the selected User/Channel" do - VCR.use_cassette("workspace-select-channel") do + VCR.use_cassette("workspace-showdetails-channel") do @workspace = Slack_cli::Workspace.new end # Takes general but it work with user names too. @@ -83,7 +83,7 @@ def @workspace.gets end it "send message - Based on the selected Channel" do - VCR.use_cassette("workspace-select-channel") do + VCR.use_cassette("workspace-sendmessage-channel") do @workspace = Slack_cli::Workspace.new def @workspace.gets From 59454729667c1e9e9430e7a1bb8a5b972cbe3b99 Mon Sep 17 00:00:00 2001 From: Vera Date: Mon, 23 Mar 2020 22:02:42 -0700 Subject: [PATCH 24/24] Optional refactoring afert individual reflection --- lib/recipient.rb | 5 +- .../recipient-recipients-endpoint.yml | 78 +++++ .../workspace-sendmessage-channel.yml | 316 ++++++++++++++++++ test/recipient_test.rb | 12 +- 4 files changed, 408 insertions(+), 3 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 9b225672..5fb1ad23 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -36,7 +36,10 @@ def send_message(channel) text: message } }) - return resp.code == 200 && resp.parsed_response["ok"] + if resp.code == 200 && resp.parsed_response["ok"] + return true + end + raise SlackAPIError, "We encountered a problem: #{resp["error"]}" end def self.list_all diff --git a/test/cassettes/recipient-recipients-endpoint.yml b/test/cassettes/recipient-recipients-endpoint.yml index 0f61bcd3..66a5b339 100644 --- a/test/cassettes/recipient-recipients-endpoint.yml +++ b/test/cassettes/recipient-recipients-endpoint.yml @@ -243,4 +243,82 @@ http_interactions: - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' http_version: null recorded_at: Mon, 16 Mar 2020 21:29:11 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=not_channel&text=Test + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '60' + Connection: + - keep-alive + Date: + - Tue, 24 Mar 2020 04:39:56 GMT + Server: + - Apache + X-Slack-Req-Id: + - 93817462d5ee910b2b59a3d3b0fc488d + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-14kb + X-Cache: + - Miss from cloudfront + Via: + - 1.1 f9d716a351f14a0ac1fac2449734849b.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - lOhHIF6On3BAK-LzkuanvHJHvczgmq_QhjlPWdC7yeCPAPd7EZuyug== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + http_version: null + recorded_at: Tue, 24 Mar 2020 04:39:56 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-sendmessage-channel.yml b/test/cassettes/workspace-sendmessage-channel.yml index 0de2c7fe..d02bd01c 100644 --- a/test/cassettes/workspace-sendmessage-channel.yml +++ b/test/cassettes/workspace-sendmessage-channel.yml @@ -248,4 +248,320 @@ http_interactions: - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' http_version: null recorded_at: Mon, 16 Mar 2020 21:48:00 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=general + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '329' + Connection: + - keep-alive + Date: + - Tue, 24 Mar 2020 04:30:41 GMT + Server: + - Apache + X-Slack-Req-Id: + - f6714541344536d374ab945caf9d94dc + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-xy1y + X-Cache: + - Miss from cloudfront + Via: + - 1.1 2bedbeaa49b4a77447d30097858cb81a.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - _hKKqf9shW1KBEAXq9Vc0z4FvDr-6jDGFVdNyT9pJQRO6vGa7DfNNA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1585024241.000100","message":{"bot_id":"BV6A94UG5","type":"message","text":"general","user":"UV60Q76GG","ts":"1585024241.000100","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Tue, 24 Mar 2020 04:30:41 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=ll + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '327' + Connection: + - keep-alive + Date: + - Tue, 24 Mar 2020 04:38:08 GMT + Server: + - Apache + X-Slack-Req-Id: + - 50f407fa7f1733ca11235ec5df6f0336 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5mc5 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 981753271eb5b6d11bc29d52f173a5da.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - G6urgMR8tnCvIKqQjbXe-MKIeWQjw1IHndVZaqaQajYo2YNpzB9fkA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1585024688.000200","message":{"bot_id":"BV6A94UG5","type":"message","text":"ll","user":"UV60Q76GG","ts":"1585024688.000200","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Tue, 24 Mar 2020 04:38:08 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=l + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '327' + Connection: + - keep-alive + Date: + - Tue, 24 Mar 2020 04:39:55 GMT + Server: + - Apache + X-Slack-Req-Id: + - 8d42cd02c9fe7049497b6c286a8fcf6c + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-45sp + X-Cache: + - Miss from cloudfront + Via: + - 1.1 b2f9564ebf9c745cc2ceae96d434977e.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - CrZioHklr5S88JSt8pK-aldttXQ3OsS1zIudYTgmtMtzhihYG-mw7w== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1585024795.000300","message":{"bot_id":"BV6A94UG5","type":"message","text":"l","user":"UV60Q76GG","ts":"1585024795.000300","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Tue, 24 Mar 2020 04:39:55 GMT +- request: + method: post + uri: https://slack.com/api//chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=general&text=%1B%5BA + headers: + Content-Type: + - application/x-www-form-urlencoded + Charset: + - utf-8 + 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '328' + Connection: + - keep-alive + Date: + - Tue, 24 Mar 2020 04:44:21 GMT + Server: + - Apache + X-Slack-Req-Id: + - 860a2cbdc0f859af4205c2885549ee67 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-a8o9 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - kcpcOkWQ3jbm0nxl34WncvQmVWK8aECf46ITpOajw9yu8ZzAEiGzqg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5GLCW12","ts":"1585025061.000400","message":{"bot_id":"BV6A94UG5","type":"message","text":"[A","user":"UV60Q76GG","ts":"1585025061.000400","team":"TUVTGCG8H","bot_profile":{"id":"BV6A94UG5","deleted":false,"name":"Time + - Vera - API Project","updated":1583874443,"app_id":"AUW7613MF","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":"TUVTGCG8H"}}}' + http_version: null + recorded_at: Tue, 24 Mar 2020 04:44:21 GMT recorded_with: VCR 5.1.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 27084fbf..9433e581 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -39,7 +39,6 @@ it "can send a valid message" do - VCR.use_cassette("recipient-recipients-endpoint") do @recipient = Slack_cli::Recipient.new(id: "CV5GLCW12", name: "general") def @recipient.gets @@ -48,6 +47,15 @@ def @recipient.gets response = @recipient.send_message("general") expect(response).must_equal true end - + end + + it "raises an error if the message can't be sent." do + VCR.use_cassette("recipient-recipients-endpoint") do + @recipient = Slack_cli::Recipient.new(id: "CV5GLCW12", name: "general") + def @recipient.gets + "Test" + end + expect { @recipient.send_message("not_channel") }.must_raise SlackAPIError + end end end \ No newline at end of file