forex 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0805a3b1ecebdfe37fb068a85dc133dd9e500007
4
- data.tar.gz: 735001cf921eeeda36f4c1235adce750aff8000b
3
+ metadata.gz: 3d4e71d9ae4fd8181b15ac9ef5b5ffc05eaa84d7
4
+ data.tar.gz: 4437bea32a9afb382343f3e92e2f1569f69c8ce6
5
5
  SHA512:
6
- metadata.gz: 5cca23e919fe8b9745119b06430c644e7c33d4c5867bd9e844db861984f9a8d405661a0d3a3c2f2d560a19917a88198ac025e5e8b7e23c30fd6ae12c0cd2b23f
7
- data.tar.gz: 5e7980edf74dd90a048f833ee74c1c3c280c26bcb223f6137fe45333aa1e6d83df87e5e8324e5c8b99daa6485c9f2b61d307282b05983b429fa72e26e35b3570
6
+ metadata.gz: e551f4d0a50a8d981a25df40ebcf56eb4eec6a219d4009e34df081a78616c0694eb96e10215acc0503fc2441c6f6f51dcfdcb26a1fd7ab9f70d21e5611a66679
7
+ data.tar.gz: 8b6ab4840fa681573f7ee57668232573beae5c71bb70a0c927a9fb5989218d4a61d3218415e0bd021168bf34d6070b1f7fa3a08a12c6ff058af014ac10204e3f
data/README.md CHANGED
@@ -31,9 +31,10 @@ contents:
31
31
  ```ruby
32
32
 
33
33
  Forex::Trader.define "NCB" do |t|
34
- t.base_currency = "JMD"
35
- t.name = "National Commercial Bank"
36
- t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
34
+ t.base_currency = "JMD"
35
+ t.name = "National Commercial Bank"
36
+ t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
37
+ t.twitter_handle = "@ncbja"
37
38
 
38
39
  t.rates_parser = ->(doc) do # doc is a nokogiri document
39
40
  # process the doc and return rates hash in the following format
@@ -63,7 +64,7 @@ For example:
63
64
 
64
65
  ```ruby
65
66
  #...
66
-
67
+
67
68
  translations = {
68
69
  'US$' => 'USD',
69
70
  'TT$' => 'TTD',
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ Dir.glob('lib/tasks/*.rake').each {|r| import r}
4
+
5
+ task :console do
6
+ require 'pry'
7
+ require 'forex'
8
+ ARGV.clear
9
+ Pry.start
10
+ end
@@ -2,7 +2,7 @@ module Forex
2
2
  class TabularRates
3
3
  NoSuchColumn = Class.new(StandardError)
4
4
 
5
- attr_accessor :table, :options
5
+ attr_accessor :table, :columns
6
6
 
7
7
  COLUMN_LABELS = [
8
8
  :buy_cash,
@@ -11,35 +11,55 @@ module Forex
11
11
  :sell_draft
12
12
  ]
13
13
 
14
- DEFAULT_OPTIONS = {
14
+ DEFAULT_COLUMNS = {
15
15
  currency_code: 0,
16
16
  }.merge(Hash[(COLUMN_LABELS).zip(1..COLUMN_LABELS.size)])
17
17
 
18
- def initialize(table, options = DEFAULT_OPTIONS)
18
+ def initialize(table, columns = DEFAULT_COLUMNS)
19
19
  @table = table
20
- @options = options.symbolize_keys
20
+ @columns = columns.symbolize_keys
21
21
  end
22
22
 
23
23
  def parse_rates(translations = {})
24
- currency = options.delete(:currency_code) || 0
24
+ table.css('tr').each_with_object(cached_currencies) do |tr, currencies|
25
+ table_row = tr.css('td')
25
26
 
26
- table.css('tr').each_with_object({}) do |tr, currencies|
27
- cells = tr.css('td')
28
- next if cells.empty?
27
+ next unless (currency_code = parse_currency_code(table_row, translations))
29
28
 
30
- currency_code = CurrencyCode.new(cells[currency.to_i].content, translations)
29
+ currencies[currency_code] = COLUMN_LABELS.each_with_object({}) do |column_label, rates|
30
+ rates.merge! parse_currency_rates(table_row, column_label)
31
+ end
32
+ end
33
+ end
31
34
 
32
- next if currencies.has_key?(currency_code.to_s) || currency_code.invalid?
35
+ private
33
36
 
34
- currencies[currency_code.to_s] = COLUMN_LABELS.each_with_object({}) do |column_label, rates|
35
- next unless rate_column = options[column_label]
37
+ def cached_currencies
38
+ @cached_currencies ||= {}
39
+ end
36
40
 
37
- rate_node = cells[rate_column.to_i]
38
- raise NoSuchColumn, "#{column_label} (#{rate_column}) does not exist in table" unless rate_node
41
+ def currency_column
42
+ @currency_column ||= columns.delete(:currency_code) || 0
43
+ end
39
44
 
40
- rates[column_label.to_sym] = Currency.new(rate_node.content).value
41
- end
42
- end
45
+ def parse_currency_code(table_row, translations)
46
+ return if table_row.empty?
47
+
48
+ currency_code = CurrencyCode.new(table_row[currency_column.to_i].content, translations)
49
+ return if currency_code.invalid? ||
50
+ cached_currencies.has_key?(parsed_currency_string = currency_code.to_s)
51
+
52
+ parsed_currency_string
53
+ end
54
+
55
+ def parse_currency_rates(table_row, column_label)
56
+ return {} unless rate_column = columns[column_label]
57
+
58
+ rate_node = table_row[rate_column.to_i]
59
+
60
+ raise NoSuchColumn, "#{column_label} (#{rate_column}) does not exist in table" unless rate_node
61
+
62
+ { column_label.to_sym => Currency.new(rate_node.content).value }
43
63
  end
44
64
 
45
65
  end
@@ -7,7 +7,8 @@ module Forex
7
7
  :base_currency,
8
8
  :endpoint,
9
9
  :rates_parser,
10
- :rates
10
+ :rates,
11
+ :twitter_handle
11
12
 
12
13
  class << self
13
14
  attr_accessor :all
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "BNS" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Bank of Nova Scotia"
4
- t.endpoint = "http://www4.scotiabank.com/cgi-bin/ratesTool/depdisplay.cgi?pid=56"
2
+ t.base_currency = "JMD"
3
+ t.name = "Bank of Nova Scotia"
4
+ t.twitter_handle = "@ScotiabankJM"
5
+ t.endpoint = "http://www4.scotiabank.com/cgi-bin/ratesTool/depdisplay.cgi?pid=56"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -5,13 +5,6 @@ Forex::Trader.define "COK" do |t|
5
5
 
6
6
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
7
 
8
- options = {
9
- currency_code: 0,
10
- buy_cash: 3,
11
- buy_draft: 2,
12
- sell_cash: 1,
13
- }
14
-
15
8
  table = doc.css(".table-bordered").first
16
9
 
17
10
  translations = {
@@ -19,6 +12,6 @@ Forex::Trader.define "COK" do |t|
19
12
  'Euro' => 'EUR',
20
13
  }
21
14
 
22
- Forex::TabularRates.new(table, options).parse_rates(translations)
15
+ Forex::TabularRates.new(table).parse_rates(translations)
23
16
  end
24
17
  end
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "FGB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "First Global Bank"
4
- t.endpoint = "http://www.firstglobal-bank.com/"
2
+ t.base_currency = "JMD"
3
+ t.name = "First Global Bank"
4
+ t.twitter_handle = "@First_Global"
5
+ t.endpoint = "http://www.firstglobal-bank.com/"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
  options = {
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "JMMB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Jamaica Money Market Brokers"
4
- t.endpoint = "http://www.jmmb.com/full_rates.php"
2
+ t.base_currency = "JMD"
3
+ t.name = "Jamaica Money Market Brokers"
4
+ t.twitter_handle = "@JMMBGROUP"
5
+ t.endpoint = "http://www.jmmb.com/full_rates.php"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -9,7 +10,7 @@ Forex::Trader.define "JMMB" do |t|
9
10
  currency_code: 0,
10
11
  buy_cash: 1,
11
12
  buy_draft: 3,
12
- sell_cash: 2,
13
+ sell_cash: 4,
13
14
  sell_draft: 4
14
15
  }
15
16
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "JNBS" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Jamaica National Building Society"
4
- t.endpoint = "http://www.jnbs.com/fx-rates-2"
2
+ t.base_currency = "JMD"
3
+ t.name = "Jamaica National Building Society"
4
+ t.twitter_handle = "@JamaicaNational"
5
+ t.endpoint = "http://www.jnbs.com/fx-rates-2"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "NCB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "National Commercial Bank"
4
- t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
2
+ t.base_currency = "JMD"
3
+ t.name = "National Commercial Bank"
4
+ t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
5
+ t.twitter_handle = "@ncbja"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "Sagicor" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Sagicor Bank"
4
- t.endpoint = "http://www.gopancaribbean.com/personal-banking"
2
+ t.base_currency = "JMD"
3
+ t.name = "Sagicor Bank"
4
+ t.twitter_handle = "@SagicorJa"
5
+ t.endpoint = "http://www.gopancaribbean.com/personal-banking"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
  table = doc.css("table .data").first
@@ -1,3 +1,3 @@
1
1
  module Forex
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -0,0 +1,28 @@
1
+ desc "build rates for missing traders"
2
+ task :build_expected_rates do
3
+ require 'yaml'
4
+ require 'vcr'
5
+ require 'forex'
6
+
7
+ VCR.configure do |c|
8
+ c.cassette_library_dir = 'spec/vcr'
9
+ c.hook_into :webmock
10
+ end
11
+
12
+ Forex::Trader.all.each do |short_name, trader|
13
+ expected_rates_file_path = "spec/rates/#{short_name.downcase}.yml"
14
+
15
+ unless File.exists?(expected_rates_file_path)
16
+ VCR.use_cassette(['traders', short_name].join('/')) do
17
+ puts "Adding expected rates to #{expected_rates_file_path}"
18
+
19
+ File.open(expected_rates_file_path, 'w') do |f|
20
+ f.write(trader.fetch && trader.rates.to_yaml)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+
@@ -0,0 +1,51 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 101.3
4
+ :buy_draft: 103.3
5
+ :sell_cash: 105.0
6
+ :sell_draft: 105.0
7
+ GBP:
8
+ :buy_cash: 166.06
9
+ :buy_draft: 169.48
10
+ :sell_cash: 173.16
11
+ :sell_draft: 173.16
12
+ CAD:
13
+ :buy_cash: 94.3
14
+ :buy_draft: 96.71
15
+ :sell_cash: 99.5
16
+ :sell_draft: 99.5
17
+ EUR:
18
+ :buy_cash: 135.01
19
+ :buy_draft: 138.05
20
+ :sell_cash: 143.82
21
+ :sell_draft: 143.82
22
+ BBD:
23
+ :buy_cash: 46.23
24
+ :buy_draft: 50.25
25
+ :sell_cash: 54.62
26
+ :sell_draft: 54.62
27
+ KYD:
28
+ :buy_cash: 112.4
29
+ :buy_draft: 117.09
30
+ :sell_cash: 127.13
31
+ :sell_draft: 127.13
32
+ XCD:
33
+ :buy_cash: 34.59
34
+ :buy_draft: 36.41
35
+ :sell_cash: 40.46
36
+ :sell_draft: 40.46
37
+ JPY:
38
+ :buy_cash: 0.9341
39
+ :buy_draft: 0.9833
40
+ :sell_cash: 1.0573
41
+ :sell_draft: 1.0573
42
+ CHF:
43
+ :buy_cash: 106.8
44
+ :buy_draft: 110.67
45
+ :sell_cash: 119.64
46
+ :sell_draft: 119.64
47
+ TTD:
48
+ :buy_cash: 15.26
49
+ :buy_draft: 16.06
50
+ :sell_cash: 17.65
51
+ :sell_draft: 17.65
@@ -1,20 +1,26 @@
1
+ ---
1
2
  USD:
2
- buy_cash: 103.4
3
- buy_draft: 101.8
4
- sell_cash: 105.65
5
- GBP:
6
- buy_cash: 165.8
7
- buy_draft: 162.0
8
- sell_cash: 172.3
3
+ :buy_cash: 106.45
4
+ :buy_draft: 104.2
5
+ :sell_cash: 108.85
6
+ :sell_draft: 109.4
9
7
  CAD:
10
- buy_cash: 95.75
11
- buy_draft: 93.5
12
- sell_cash: 98.45
8
+ :buy_cash: 93.15
9
+ :buy_draft: 91.9
10
+ :sell_cash: 97.0
11
+ :sell_draft: 98.35
12
+ GBP:
13
+ :buy_cash: 175.1
14
+ :buy_draft: 162.0
15
+ :sell_cash: 180.1
16
+ :sell_draft: 181.4
13
17
  KYD:
14
18
  :buy_cash: 116.3
15
19
  :buy_draft: 100.0
16
- :sell_cash: 120.4
20
+ :sell_cash: 123.4
21
+ :sell_draft: 122.25
17
22
  EUR:
18
- :buy_cash: 139.5
23
+ :buy_cash: 143.0
19
24
  :buy_draft: 130.2
20
- :sell_cash: 144.0
25
+ :sell_cash: 147.0
26
+ :sell_draft: 148.0
@@ -1,25 +1,26 @@
1
+ ---
1
2
  USD:
2
- buy_cash: 103.45
3
- buy_draft: 104.45
4
- sell_draft: 106.0
5
- sell_cash:
3
+ :buy_cash: 103.45
4
+ :buy_draft: 104.45
5
+ :sell_cash: 106.0
6
+ :sell_draft: 106.0
6
7
  TTD:
7
- buy_cash: 14.55
8
- buy_draft: 15.01
9
- sell_draft: 16.92
10
- sell_cash:
8
+ :buy_cash: 14.55
9
+ :buy_draft: 15.01
10
+ :sell_cash: 16.92
11
+ :sell_draft: 16.92
11
12
  GBP:
12
- buy_cash: 167.74
13
- buy_draft: 168.74
14
- sell_draft: 174.53
15
- sell_cash:
13
+ :buy_cash: 167.74
14
+ :buy_draft: 168.74
15
+ :sell_cash: 174.53
16
+ :sell_draft: 174.53
16
17
  EUR:
17
- buy_cash: 138.81
18
- buy_draft: 140.31
19
- sell_draft: 145.68
20
- sell_cash:
18
+ :buy_cash: 138.81
19
+ :buy_draft: 140.31
20
+ :sell_cash: 145.68
21
+ :sell_draft: 145.68
21
22
  CAD:
22
- buy_cash: 95.59
23
- buy_draft: 96.59
24
- sell_draft: 100.56
25
- sell_cash:
23
+ :buy_cash: 95.59
24
+ :buy_draft: 96.59
25
+ :sell_cash: 100.56
26
+ :sell_draft: 100.56
@@ -0,0 +1,21 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 102.7
4
+ :buy_draft: 103.2
5
+ :sell_cash: 105.25
6
+ GBP:
7
+ :buy_cash: 167.96
8
+ :buy_draft: 168.71
9
+ :sell_cash: 173.85
10
+ CAD:
11
+ :buy_cash: 96.16
12
+ :buy_draft: 96.91
13
+ :sell_cash: 99.79
14
+ KYD:
15
+ :buy_cash: 95.0
16
+ :buy_draft:
17
+ :sell_cash: 104.5
18
+ EUR:
19
+ :buy_cash: 135.21
20
+ :buy_draft: 136.21
21
+ :sell_cash: 144.71
@@ -0,0 +1,45 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 102.0
4
+ :buy_draft: 103.5
5
+ :sell_cash: 105.0
6
+ GBP:
7
+ :buy_cash: 165.5
8
+ :buy_draft: 169.0
9
+ :sell_cash: 173.0
10
+ CAD:
11
+ :buy_cash: 95.5
12
+ :buy_draft: 98.0
13
+ :sell_cash: 101.0
14
+ EUR:
15
+ :buy_cash: 139.5
16
+ :buy_draft: 141.0
17
+ :sell_cash: 143.5
18
+ BBD:
19
+ :buy_cash:
20
+ :buy_draft:
21
+ :sell_cash:
22
+ BZD:
23
+ :buy_cash:
24
+ :buy_draft: 49.27
25
+ :sell_cash: 51.73
26
+ KYD:
27
+ :buy_cash: 106.5
28
+ :buy_draft:
29
+ :sell_cash: 110.0
30
+ XCD:
31
+ :buy_cash:
32
+ :buy_draft:
33
+ :sell_cash:
34
+ TTD:
35
+ :buy_cash: 14.55
36
+ :buy_draft: 15.0
37
+ :sell_cash: 16.4
38
+ CHF:
39
+ :buy_cash: 109.17
40
+ :buy_draft: 109.47
41
+ :sell_cash: 114.94
42
+ JPY:
43
+ :buy_cash: 0.96
44
+ :buy_draft: 0.97
45
+ :sell_cash: 1.01
@@ -0,0 +1,21 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 103.5
4
+ :buy_draft: 104.5
5
+ :sell_cash: 105.8
6
+ :sell_draft: 105.9
7
+ CAD:
8
+ :buy_cash: 94.5
9
+ :buy_draft: 95.5
10
+ :sell_cash: 100.0
11
+ :sell_draft: 100.5
12
+ GBP:
13
+ :buy_cash: 168.5
14
+ :buy_draft: 169.5
15
+ :sell_cash: 174.0
16
+ :sell_draft: 174.5
17
+ EUR:
18
+ :buy_cash: 138.0
19
+ :buy_draft: 139.0
20
+ :sell_cash: 144.4
21
+ :sell_draft: 145.0
@@ -15,15 +15,18 @@ describe "Traders" do
15
15
  expected_rates_file_path = "spec/rates/#{short_name.downcase}.yml"
16
16
 
17
17
  unless File.exists?(expected_rates_file_path)
18
- pending "Create expected rates YAML for #{short_name} at #{expected_rates_file_path}"
18
+ error_message = "Create expected rates YAML for #{short_name} at #{expected_rates_file_path}"
19
+ raise error_message
19
20
  end
20
21
 
21
- YAML.load(File.read(expected_rates_file_path)). # read file
22
- each_with_object({}) do |(currency,txns), rates| # make txn type a symbol
23
- rates[currency] = txns.each_with_object({}) do |(txn, price), txn_price|
24
- txn_price[txn.to_sym] = price
25
- end
22
+ expected_rates_yaml = File.read(expected_rates_file_path)
23
+ expected_rates = YAML.load(expected_rates_yaml)
24
+
25
+ expected_rates.each_with_object({}) do |(currency,txns), rates|
26
+ rates[currency] = txns.each_with_object({}) do |(txn, price), txn_price|
27
+ txn_price[txn.to_sym] = price
26
28
  end
29
+ end
27
30
  end
28
31
 
29
32
  end
@@ -21,7 +21,7 @@ http_interactions:
21
21
  message: OK
22
22
  headers:
23
23
  Date:
24
- - Sat, 14 Dec 2013 18:14:15 GMT
24
+ - Sun, 16 Mar 2014 11:37:34 GMT
25
25
  Server:
26
26
  - Apache
27
27
  X-Pingback:
@@ -30,8 +30,10 @@ http_interactions:
30
30
  - <http://www.cokcu.com/?p=1700>; rel=shortlink
31
31
  Vary:
32
32
  - Accept-Encoding
33
- Transfer-Encoding:
34
- - chunked
33
+ Content-Length:
34
+ - '8508'
35
+ Connection:
36
+ - close
35
37
  Content-Type:
36
38
  - text/html; charset=UTF-8
37
39
  body:
@@ -398,284 +400,288 @@ http_interactions:
398
400
  IGN1cnZlZCBjdXJ2ZWQtaHotMSI+DQogICAgICAgICAgICAgICAgICAgICAg
399
401
  ICA8dWwgY2xhc3M9InNsaWRlcyI+DQoJCQkJCQk8bGkgPjxpbWcgc3JjPSJo
400
402
  dHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvb3RoZXIt
401
- YmFubmVyLmpwZyIgd2lkdGg9IjExNzAiIGhlaWdodD0iMCIgLz48L2xpPg0K
402
- ICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAg
403
- ICAgICAgPC9kaXY+PCEtLSBlbmQgI2ZsZXhzbGlkZXIgLS0+DQoNCgkJCTwv
404
- ZGl2Pg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJ6bl9oZWFkZXJfYm90dG9tX3N0
405
- eWxlIj48L2Rpdj48IS0tIGhlYWRlciBib3R0b20gc3R5bGUgLS0+DQoJCQkN
406
- CiAgICAgICAgPC9kaXY+PCEtLSBlbmQgc2xpZGVzaG93IC0tPg0KCQo8c2Vj
407
- dGlvbiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iY29udGFpbmVyIj48ZGl2
408
- IGNsYXNzPSJtYWluYm9keSB6bl9oYXNfc2lkZWJhciI+PGRpdiBjbGFzcz0i
409
- cm93ICI+PGRpdiBjbGFzcz0ic3Bhbjkgem5fY29udGVudCI+PGgxIGNsYXNz
410
- PSJwYWdlLXRpdGxlIj5DYW1iaW88L2gxPjxkaXYgY2xhc3M9InNwYW40IHpu
411
- X2NvbnRlbnQiPgo8cD48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS93
412
- cC1jb250ZW50L3VwbG9hZHMvQ2FtYmlvLUV4Y2hhbmdlLnBuZyIgY2xhc3M9
413
- ImhvdmVyQm9yZGVyIGFsaWdubm9uZSIgcmVsPSJwcmV0dHlQaG90b1tpZnJh
414
- bWVzXSI+PGltZyBjbGFzcz0iIHNpemUtbWVkaXVtIHdwLWltYWdlLTMwOTEi
415
- IGFsdD0iQ2FtYmlvIEV4Y2hhbmdlIiBzcmM9Imh0dHA6Ly93d3cuY29rY3Uu
416
- Y29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9DYW1iaW8tRXhjaGFuZ2UtMzAweDYy
417
- LnBuZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI2MiIgLz48L2E+PC9wPgo8cD4m
418
- bmJzcDs8L3A+CjxwPkNPSyBvZmZlcnMgY2FtYmlvIHNlcnZpY2VzIGF0IGFs
419
- bCA1IGxvY2F0aW9uczsgQ3Jvc3Nyb2FkcywgSGFsZi1XYXktVHJlZSwgUG9y
420
- dG1vcmUsIE1hbmRldmlsbGUgYW5kIE1vbnRlZ28gQmF5LiBXZSBvZmZlciBj
421
- b21wZXRpdGl2ZSByYXRlcywgZmFzdCBhbmQgZWZmaWNpZW50IHNlcnZpY2Uu
422
- IE91ciBjYW1iaW8gc2VydmljZXMgaXMgYXZhaWxhYmxlIHRvIGJvdGggbWVt
423
- YmVycyBhbmQgbm9uLW1lbWJlcnMuPC9wPgo8cD5Gb3IgbW9yZSBpbmZvcm1h
424
- dGlvbiwgY29udGFjdCA8c3Ryb25nPlBhdHJpY2UgVGhvbWFzPC9zdHJvbmc+
425
- LCBvdXIgRm9yZWlnbiBFeGNoYW5nZSBUcmFkZXIsIGVtYWlsIDxhIGhyZWY9
426
- Im1haWx0bzpwdGhvbWFzQGNva2N1LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnB0
427
- aG9tYXNAY29rY3UuY29tPC9hPiBvciBkaWFsIDEtODc2LTk2MC1JQ0FOICg5
428
- NjAtNDIyNiksIGV4dGVuc2lvbnMgMTU0OSBvciAxNTQ4LjwvcD4KPC9kaXY+
429
- CjxkaXYgY2xhc3M9InNwYW40IHpuX2NvbnRlbnQiPgo8aDQgY2xhc3M9Im1f
430
- dGl0bGUiPkZvcmVpZ24gRXhjaGFuZ2UgcmF0ZXM8L2g0Pgo8dGFibGUgY2xh
431
- c3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KPHRoZWFkPgo8dHI+Cjx0aD48
432
- L3RoPgo8dGg+U2VsbGluZyAoQ2FzaCk8L3RoPgo8dGg+QnV5aW5nIChDaGVx
433
- dWUpPC90aD4KPHRoPkJ1eWluZyAoQ2FzaCk8L3RoPgo8L3RyPgo8L3RoZWFk
434
- Pgo8dGJvZHkgY2xhc3M9InRhYmxlLWhvdmVyIj4KPHRyPgo8dGQ+PHN0cm9u
435
- Zz5VU0Q8L3N0cm9uZz48L3RkPgo8dGQ+MTA1LjY1PC90ZD4KPHRkPjEwMS44
436
- MDwvdGQ+Cjx0ZD4xMDMuNDA8L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3Ryb25n
437
- PkdCUDwvc3Ryb25nPjwvdGQ+Cjx0ZD4xNzIuMzA8L3RkPgo8dGQ+MTYyLjAw
438
- PC90ZD4KPHRkPjE2NS44MDwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxzdHJvbmc+
439
- Q0FEPC9zdHJvbmc+PC90ZD4KPHRkPjk4LjQ1PC90ZD4KPHRkPjkzLjUwPC90
440
- ZD4KPHRkPjk1Ljc1PC90ZD4KPC90cj4KPHRyPgo8dGQ+PHN0cm9uZz5DSTwv
441
- c3Ryb25nPjwvdGQ+Cjx0ZD4xMjAuNDA8L3RkPgo8dGQ+MTAwLjAwPC90ZD4K
442
- PHRkPjExNi4zMDwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxzdHJvbmc+RXVybzwv
443
- c3Ryb25nPjwvdGQ+Cjx0ZD4xNDQuMDA8L3RkPgo8dGQ+MTMwLjIwPC90ZD4K
444
- PHRkPjEzOS41MDwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvZGl2
445
- Pgo8L2Rpdj48ZGl2IGNsYXNzPSJzcGFuMyI+PGRpdiBpZD0ic2lkZWJhciIg
446
- Y2xhc3M9InNpZGViYXIgc2lkZWJhci1yaWdodCAiPjxkaXYgaWQ9Im5hdl9t
447
- ZW51LTUiIGNsYXNzPSJ3aWRnZXQgd2lkZ2V0X25hdl9tZW51Ij48ZGl2IGNs
448
- YXNzPSJtZW51LXNlcnZpY2VzLW1lbnUtY29udGFpbmVyIj48dWwgaWQ9Im1l
449
- bnUtc2VydmljZXMtbWVudSIgY2xhc3M9Im1lbnUiPjxsaSBpZD0ibWVudS1p
450
- dGVtLTI0MDAiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9z
451
- dF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBjdXJyZW50LXBhZ2UtYW5j
452
- ZXN0b3IgY3VycmVudC1wYWdlLXBhcmVudCBtZW51LWl0ZW0tMjQwMCI+PGEg
453
- aHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy8iPk90
454
- aGVyIFNlcnZpY2VzPC9hPjwvbGk+CjxsaSBpZD0ibWVudS1pdGVtLTI0MDEi
455
- IGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1l
456
- bnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tMjQwMSI+PGEgaHJlZj0i
457
- aHR0cDovL3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy9hdG0vIj5BY2Nl
458
- c3MgUGx1cyBBVE0gQ2FyZDwvYT48L2xpPgo8bGkgaWQ9Im1lbnUtaXRlbS0y
459
- NDAyIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlw
460
- ZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTI0MDIiPjxhIGhy
461
- ZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2VydmljZXMvaGVhbHRo
462
- LyI+SGVhbHRoIEluc3VyYW5jZTwvYT48L2xpPgo8bGkgaWQ9Im1lbnUtaXRl
463
- bS0yNDAzIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3Rf
464
- dHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgY3VycmVudC1tZW51LWl0ZW0g
465
- cGFnZV9pdGVtIHBhZ2UtaXRlbS0xNzAwIGN1cnJlbnRfcGFnZV9pdGVtIG1l
466
- bnUtaXRlbS0yNDAzIGFjdGl2ZSI+PGEgaHJlZj0iaHR0cDovL3d3dy5jb2tj
467
- dS5jb20vb3RoZXJzZXJ2aWNlcy9jYW1iaW8vIj5DYW1iaW88L2E+PC9saT4K
468
- PGxpIGlkPSJtZW51LWl0ZW0tMjQwNCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51
469
- LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1l
470
- bnUtaXRlbS0yNDA0Ij48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9v
471
- dGhlcnNlcnZpY2VzL2Nvay1yZW1pdHRhbmNlLXNlcnZpY2VzLyI+Q09LIFJl
472
- bWl0dGFuY2UgU2VydmljZXM8L2E+PC9saT4KPGxpIGlkPSJtZW51LWl0ZW0t
473
- MjQwNSIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5
474
- cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS0yNDA1Ij48YSBo
475
- cmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9vdGhlcnNlcnZpY2VzL2ZpcC8i
476
- PkZhbWlseSBJbmRlbW5pdHkgUGxhbjwvYT48L2xpPgo8L3VsPjwvZGl2Pjwv
477
- ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjwvc2VjdGlvbj48
478
- IS0tIGVuZCAjY29udGVudCAtLT4JCQkJCgkNCgk8Zm9vdGVyIGlkPSJmb290
479
- ZXIiPg0KCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KDQoJCQk8ZGl2IGNs
480
- YXNzPSJyb3ciPjxkaXYgY2xhc3M9InNwYW4zIj48L2Rpdj48ZGl2IGNsYXNz
481
- PSJzcGFuMyI+PC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjwvZGl2PjxkaXYg
482
- Y2xhc3M9InNwYW4zIj48L2Rpdj48L2Rpdj48IS0tIGVuZCByb3cgLS0+CQ0K
483
- CQkJDQoJCQk8ZGl2IGNsYXNzPSJyb3ciPg0KCQkJCTxkaXYgY2xhc3M9InNw
484
- YW4xMiI+DQoJCQkJCTxkaXYgY2xhc3M9ImJvdHRvbSBmaXhjbGVhciI+DQoJ
485
- CQkJCQ0KCQkJCQk8dWwgY2xhc3M9InNvY2lhbC1pY29ucyBjb2xvcmVkIGZp
486
- eGNsZWFyIj48bGkgY2xhc3M9InRpdGxlIj5HRVQgU09DSUFMPC9saT48bGkg
487
- Y2xhc3M9InNvY2lhbC1mYWNlYm9vayI+PGEgaHJlZj0iaHR0cHM6Ly93d3cu
488
- ZmFjZWJvb2suY29tL3BhZ2VzL0NPSy1Tb2RhbGl0eS1Dby1vcGVyYXRpdmUt
489
- Q3JlZGl0LVVuaW9uLzMzNjM3NDgyNDM2NSIgdGFyZ2V0PSJfYmxhbmsiPkZh
490
- Y2Vib29rPC9hPjwvbGk+PGxpIGNsYXNzPSJzb2NpYWwtdHdpdHRlciI+PGEg
491
- aHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPlR3aXR0ZXI8L2E+PC9saT48L3Vs
492
- PgkJCQkJDQoJCQkJCQkJCQkJCQ0KCQkJCQkJPGRpdiBjbGFzcz0iY29weXJp
493
- Z2h0Ij4NCgkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQk8YSBocmVmPSJodHRw
494
- Oi8vd3d3LmNva2N1LmNvbSI+PGltZyBzcmM9Imh0dHA6Ly93d3cuY29rY3Uu
495
- Y29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9mb290ZXJsb2dvMi5wbmciIGFsdD0i
496
- IiAvPjwvYT48cD7CqSBDT0sgU29kYWxpdHkgQ28tb3BlcmF0aXZlIENyZWRp
497
- dCBVbmlvbiBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuPGJyLz4NCkRlc2ln
498
- bmVkICYgRGV2ZWxvcGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuemlwdGVj
499
- aG5vbG9naWVzLmNvbS8iPlppcFRlY2hub2xvZ2llcy5jb208L2E+IC0gPGEg
500
- aHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vcHJpdmFjeS1wb2xpY3kvIj5Q
501
- cml2YWN5PC9hPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL3Rl
502
- cm1zLW9mLXVzZS8iPlRlcm1zIG9mIFVzZTwvYT4gLSA8YSBocmVmPSJodHRw
503
- Oi8vd3d3LndvY2N1Lm9yZy8iPldPQ0NVPC9hPjwvcD4JCQkJCQkJDQoJCQkJ
504
- CQkJDQoJCQkJCQk8L2Rpdj48IS0tIGVuZCBjb3B5cmlnaHQgLS0+DQoJCQkJ
505
- CQkJDQoJCQkJCQkJCQkJCQ0KDQoJCQkJCTwvZGl2PjwhLS0gZW5kIGJvdHRv
506
- bSAtLT4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2PjwhLS0gZW5kIHJvdyAtLT4N
507
- CgkJCQ0KCQk8L2Rpdj4NCgk8L2Zvb3Rlcj4NCgkgICAgPC9kaXY+PCEtLSBl
508
- bmQgcGFnZV93cmFwcGVyIC0tPg0KCQ0KICAgIDxhIGhyZWY9IiMiIGlkPSJ0
509
- b3RvcCI+VE9QPC9hPiANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
510
- Ij4NCg0KICB2YXIgX2dhcSA9IF9nYXEgfHwgW107DQogIF9nYXEucHVzaChb
511
- J19zZXRBY2NvdW50JywgJ1VBLTQzMTQyMDIwLTEnXSk7DQogIF9nYXEucHVz
512
- aChbJ190cmFja1BhZ2V2aWV3J10pOw0KDQogIChmdW5jdGlvbigpIHsNCiAg
513
- ICB2YXIgZ2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsg
514
- Z2EudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBnYS5hc3luYyA9IHRydWU7
515
- DQogICAgZ2Euc3JjID0gKCdodHRwczonID09IGRvY3VtZW50LmxvY2F0aW9u
516
- LnByb3RvY29sID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyAnc3RhdHMu
517
- Zy5kb3VibGVjbGljay5uZXQvZGMuanMnOw0KICAgIHZhciBzID0gZG9jdW1l
518
- bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVu
519
- dE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsNCiAgfSkoKTsNCg0KPC9zY3Jp
520
- cHQ+DQoNCg0KDQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
521
- cmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LWxhdGVzdC5taW4u
522
- anMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
523
- IHNyYz0iaHR0cDovL2Nkbi5qc2RlbGl2ci5uZXQvanF1ZXJ5LmNvb2tpZS8x
524
- LjMuMS9qcXVlcnkuY29va2llLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlw
525
- ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuY29rY3UuY29t
526
- L3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvYWRkb25zL3ByZXR0eXBob3Rv
527
- L2pxdWVyeS5wcmV0dHlQaG90by5qcyI+PC9zY3JpcHQ+DQoNCg0KPHNjcmlw
528
- dCA+DQoNCmNvbnNvbGUuZGVidWcoJC5jb29raWUoInN1cnZleSIgKSk7DQoN
529
- CmlmKCQuY29va2llKCdzdXJ2ZXknKSAhPSAnb2xkJyl7DQoJJC5jb29raWUo
530
- InN1cnZleSIsICJuZXciICk7DQoJY29uc29sZS5kZWJ1ZygkLmNvb2tpZSgi
531
- c3VydmV5IiApKTt9DQoJDQppZigkLmNvb2tpZSgnc3VydmV5JykgPT0gJ25l
532
- dycgJiYgZG9jdW1lbnQuVVJMICE9ICdodHRwOi8vd3d3LmNva2N1LmNvbS9j
533
- b250YWN0LXVzL3N1cnZleS8nKXsNCgkNCgkJJC5mbi5wcmV0dHlQaG90byh7
534
- IHNvY2lhbF90b29sczogZmFsc2UgfSk7DQoJCSQucHJldHR5UGhvdG8ub3Bl
535
- bignaHR0cDovL3d3dy5jb2tjdS5jb20vc3VydmV5Lmh0bWw/aWZyYW1lPXRy
536
- dWUmd2lkdGg9NDAyJmhlaWdodD05NCcsICcnLCAnJyk7DQoJCQ0KCQkkLmNv
537
- b2tpZSgic3VydmV5IiwgIm9sZCIgKTsNCiB9DQo8L3NjcmlwdD4NCg0KPHNj
538
- cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2FqYXgu
539
- YXNwbmV0Y2RuLmNvbS9hamF4L2pxdWVyeS52YWxpZGF0ZS8xLjExLjEvanF1
540
- ZXJ5LnZhbGlkYXRlLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0
541
- L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29u
542
- dGVudC9wbHVnaW5zL3dwZ2Zvcm0vanMvanF1ZXJ5LmNvbHVtbml6ZXIuanMn
543
- Pjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+Ci8q
544
- IDwhW0NEQVRBWyAqLwp2YXIgd3BnZm9ybV9zY3JpcHRfdmFycyA9IHsicmVx
545
- dWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBs
546
- ZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBh
547
- IHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEg
548
- dmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRl
549
- LiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIChJU08p
550
- LiIsIm51bWJlciI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlci4iLCJk
551
- aWdpdHMiOiJQbGVhc2UgZW50ZXIgb25seSBkaWdpdHMuIiwiY3JlZGl0Y2Fy
552
- ZCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4i
553
- LCJlcXVhbFRvIjoiUGxlYXNlIGVudGVyIHRoZSBzYW1lIHZhbHVlIGFnYWlu
554
- LiwiLCJhY2NlcHQiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSB3aXRoIGEgdmFs
555
- aWQgZXh0ZW5zaW9uLiIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBt
556
- b3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNl
557
- IGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3Ro
558
- IjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBj
559
- aGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1
560
- ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBh
561
- IHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxl
562
- YXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHsw
563
- fS4ifTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQv
564
- amF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250
565
- ZW50L3BsdWdpbnMvd3BnZm9ybS9qcy93cGdmb3JtLmpzJz48L3NjcmlwdD4K
566
- PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3
567
- dy5jb2tjdS5jb20vd3AtY29udGVudC9wbHVnaW5zL2NvbnRhY3QtZm9ybS03
568
- L2luY2x1ZGVzL2pzL2pxdWVyeS5mb3JtLm1pbi5qcyc+PC9zY3JpcHQ+Cjxz
569
- Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLyogPCFbQ0RBVEFbICov
570
- CnZhciBfd3BjZjcgPSB7ImxvYWRlclVybCI6Imh0dHA6XC9cL3d3dy5jb2tj
571
- dS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2NvbnRhY3QtZm9ybS03XC9p
572
- bWFnZXNcL2FqYXgtbG9hZGVyLmdpZiIsInNlbmRpbmciOiJTZW5kaW5nIC4u
573
- LiJ9OwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9q
574
- YXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRl
575
- bnQvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9qcy9zY3JpcHRz
576
- LmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQn
577
- IHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29udGVudC90aGVtZXMv
578
- a2FsbHlhcy9zbGlkZXJzL2ZsZXhfc2xpZGVyL2pzL2pxdWVyeS5mbGV4c2xp
579
- ZGVyLW1pbi5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh
580
- c2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQv
581
- dGhlbWVzL2thbGx5YXMvanMvYm9vdHN0cmFwLm1pbi5qcyc+PC9zY3JpcHQ+
582
- CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93
583
- d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvanMvcGx1
584
- Z2lucy5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2Ny
585
- aXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhl
586
- bWVzL2thbGx5YXMvYWRkb25zL3N1cGVyZmlzaF9yZXNwb25zaXZlL3N1cGVy
587
- ZmlzaF9tZW51LmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
588
- dmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29udGVu
589
- dC90aGVtZXMva2FsbHlhcy9hZGRvbnMvcHJldHR5cGhvdG8vanF1ZXJ5LnBy
590
- ZXR0eVBob3RvLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
591
- dmFzY3JpcHQnPgovKiA8IVtDREFUQVsgKi8KdmFyIHpuX2RvX2xvZ2luID0g
592
- eyJhamF4dXJsIjoiaHR0cDpcL1wvd3d3LmNva2N1LmNvbVwvd3AtYWRtaW5c
593
- L2FkbWluLWFqYXgucGhwIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlw
594
- dCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tj
595
- dS5jb20vd3AtY29udGVudC90aGVtZXMva2FsbHlhcy9qcy96bnNjcmlwdC5q
596
- cyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBz
597
- cmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9j
598
- bGlja2Rlc2stbGl2ZS1zdXBwb3J0LWNoYXQtcGx1Z2luL2pzL3dpZGdldC5q
599
- cyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
600
- CQkJCQkJKGZ1bmN0aW9uKCQpeyAKCQkJCQkJCSQoZG9jdW1lbnQpLnJlYWR5
601
- KGZ1bmN0aW9uKCl7CgkJCQkJCQkJLyogQWN0aXZhdGUgU3VwZXJmaXNoIE1l
602
- bnUgKi8KCQkJCQkJCQl2YXIgc2ZEZWxheSA9IDYwMDsKCQkJCQkJCQlpZigk
603
- KCdodG1sJykuaGFzQ2xhc3MoJ2lzaWUnKSkKCQkJCQkJCQkJc2ZEZWxheSA9
604
- IDMwMDsKCQkJCQkJCQkkKCcjbWFpbl9tZW51ID4gdWwnKQoJCQkJCQkJCS5z
605
- dXBlcnN1YnMoeyAKCQkJCQkJCQkJbWluV2lkdGg6ICAgIDEyLCAgIC8vIG1p
606
- bmltdW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJ
607
- CQltYXhXaWR0aDogICAgMjcsICAgLy8gbWF4aW11bSB3aWR0aCBvZiBzdWIt
608
- bWVudXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCWV4dHJhV2lkdGg6ICAxICAg
609
- ICAvLyBleHRyYSB3aWR0aCBjYW4gZW5zdXJlIGxpbmVzIGRvbid0IHNvbWV0
610
- aW1lcyB0dXJuIG92ZXIgCgkJCQkJCQkJfSkuc3VwZXJmaXNoKHsKCQkJCQkJ
611
- CQkJZGVsYXk6c2ZEZWxheSwKCQkJCQkJCQkJZHJvcFNoYWRvd3M6ZmFsc2Us
612
- CgkJCQkJCQkJCWF1dG9BcnJvd3M6dHJ1ZSwKCQkJCQkJCQkJc3BlZWQ6MzAw
613
- CgkJCQkJCQkJfSk7CgkJCQkJCQl9KTsKCQkJCQkJCQoJCQkJCQkJCgkJCQkJ
614
- CQkkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewoJCQkJCQkJCSQoJyNt
615
- YWluX21lbnUgPiB1bCcpCgkJCQkJCQkJLnN1cGVyc3Vicyh7IAoJCQkJCQkJ
616
- CQltaW5XaWR0aDogICAgMTIsICAgLy8gbWluaW11bSB3aWR0aCBvZiBzdWIt
617
- bWVudXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCW1heFdpZHRoOiAgICAyNywg
618
- ICAvLyBtYXhpbXVtIHdpZHRoIG9mIHN1Yi1tZW51cyBpbiBlbSB1bml0cyAK
619
- CQkJCQkJCQkJZXh0cmFXaWR0aDogIDEgICAgIC8vIGV4dHJhIHdpZHRoIGNh
620
- biBlbnN1cmUgbGluZXMgZG9uJ3Qgc29tZXRpbWVzIHR1cm4gb3ZlciAKCQkJ
621
- CQkJCQl9KTsKCQkJCQkJCX0pOwoJCQkJCQkJCgkJCQkJCX0pKGpRdWVyeSk7
622
- CgkJCQkJCQ0KCQkJCQkJCShmdW5jdGlvbigkKSB7DQoJCQkJCQkJCSQod2lu
623
- ZG93KS5sb2FkKGZ1bmN0aW9uKCl7DQoJCQkJCQkJCQ0KCQkJCQkJCQkJZnVu
624
- Y3Rpb24gc2xpZGVDb21wbGV0ZXpuX25vcm1hbF9mbGV4KGFyZ3MpIHsNCgkJ
625
- CQkJCQkJCQl2YXIgY2FwdGlvbiA9ICQoYXJncy5jb250YWluZXIpLmZpbmQo
626
- Jy5mbGV4LWNhcHRpb24nKS5hdHRyKCdzdHlsZScsICcnKSwNCgkJCQkJCQkJ
627
- CQkJdGhpc0NhcHRpb24gPSAkKCcuZmxleHNsaWRlci56bl9ub3JtYWxfZmxl
628
- eCAuc2xpZGVzID4gbGkuZmxleC1hY3RpdmUtc2xpZGUnKS5maW5kKCcuZmxl
629
- eC1jYXB0aW9uJyk7DQoJCQkJCQkJCQkJdGhpc0NhcHRpb24uYW5pbWF0ZSh7
630
- bGVmdDoyMCwgb3BhY2l0eToxfSwgNTAwLCAnZWFzZU91dFF1aW50Jyk7DQoJ
631
- CQkJCQkJCQl9DQoJCQkJCQkJCQ0KCQkJCQkJCQkJaWYgKCBqUXVlcnkoJy5m
632
- bGV4c2xpZGVyLnpuX25vcm1hbF9mbGV4JykuaGFzQ2xhc3MoJ3puX2hhc190
633
- aHVtYnMnKSApIHsNCgkJCQkJCQkJCQl0aHVtYnMgPSAndGh1bWJuYWlscyc7
634
- DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlIHsNCgkJCQkJCQkJCQl0aHVt
635
- YnMgPSB0cnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJDQoJCQkJCQkJCQl0
636
- cmFuc2l0aW9uID0galF1ZXJ5KCIuZmxleHNsaWRlci56bl9ub3JtYWxfZmxl
637
- eCIpLmF0dHIoJ2RhdGEtdHJhbnNpdGlvbicpOw0KCQkJCQkJCQkJDQoJCQkJ
638
- CQkJCQkkKCIuZmxleHNsaWRlci56bl9ub3JtYWxfZmxleCIpLmZsZXhzbGlk
639
- ZXIoew0KCQkJCQkJCQkJCWFuaW1hdGlvbjogdHJhbnNpdGlvbiwJCQkJLy9T
640
- dHJpbmc6IFNlbGVjdCB5b3VyIGFuaW1hdGlvbiB0eXBlLCAiZmFkZSIgb3Ig
641
- InNsaWRlIg0KCQkJCQkJCQkJCXNsaWRlRGlyZWN0aW9uOiAiaG9yaXpvbnRh
642
- bCIsCS8vU3RyaW5nOiBTZWxlY3QgdGhlIHNsaWRpbmcgZGlyZWN0aW9uLCAi
643
- aG9yaXpvbnRhbCIgb3IgInZlcnRpY2FsIg0KCQkJCQkJCQkJCXNsaWRlc2hv
644
- dzogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBBbmltYXRlIHNsaWRlciBhdXRvbWF0
645
- aWNhbGx5DQoJCQkJCQkJCQkJc2xpZGVzaG93U3BlZWQ6IDcwMDAsCQkJLy9J
646
- bnRlZ2VyOiBTZXQgdGhlIHNwZWVkIG9mIHRoZSBzbGlkZXNob3cgY3ljbGlu
647
- ZywgaW4gbWlsbGlzZWNvbmRzDQoJCQkJCQkJCQkJYW5pbWF0aW9uRHVyYXRp
648
- b246IDYwMCwJCQkvL0ludGVnZXI6IFNldCB0aGUgc3BlZWQgb2YgYW5pbWF0
649
- aW9ucywgaW4gbWlsbGlzZWNvbmRzDQoJCQkJCQkJCQkJZGlyZWN0aW9uTmF2
650
- OiB0cnVlLAkJCQkvL0Jvb2xlYW46IENyZWF0ZSBuYXZpZ2F0aW9uIGZvciBw
651
- cmV2aW91cy9uZXh0IG5hdmlnYXRpb24/ICh0cnVlL2ZhbHNlKQ0KCQkJCQkJ
652
- CQkJCWNvbnRyb2xOYXY6IHRodW1icywJCQkJLy9Cb29sZWFuOiBDcmVhdGUg
653
- bmF2aWdhdGlvbiBmb3IgcGFnaW5nIGNvbnRyb2wgb2YgZWFjaCBjbGlkZT8g
654
- Tm90ZTogTGVhdmUgdHJ1ZSBmb3IgbWFudWFsQ29udHJvbHMgdXNhZ2UNCgkJ
655
- CQkJCQkJCQlrZXlib2FyZE5hdjogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBBbGxv
656
- dyBzbGlkZXIgbmF2aWdhdGluZyB2aWEga2V5Ym9hcmQgbGVmdC9yaWdodCBr
657
- ZXlzDQoJCQkJCQkJCQkJbW91c2V3aGVlbDogZmFsc2UsCQkJCS8ve1VQREFU
658
- RUR9IEJvb2xlYW46IFJlcXVpcmVzIGpxdWVyeS5tb3VzZXdoZWVsLmpzICho
659
- dHRwczovL2dpdGh1Yi5jb20vYnJhbmRvbmFhcm9uL2pxdWVyeS1tb3VzZXdo
660
- ZWVsKSAtIEFsbG93cyBzbGlkZXIgbmF2aWdhdGluZyB2aWEgbW91c2V3aGVl
661
- bA0KCQkJCQkJCQkJCXNtb290aEhlaWdodDogdHJ1ZSwNCgkJCQkJCQkJCQly
662
- YW5kb21pemU6IGZhbHNlLAkJCQkvL0Jvb2xlYW46IFJhbmRvbWl6ZSBzbGlk
663
- ZSBvcmRlcg0KCQkJCQkJCQkJCXNsaWRlVG9TdGFydDogMCwJCQkJLy9JbnRl
664
- Z2VyOiBUaGUgc2xpZGUgdGhhdCB0aGUgc2xpZGVyIHNob3VsZCBzdGFydCBv
665
- bi4gQXJyYXkgbm90YXRpb24gKDAgPSBmaXJzdCBzbGlkZSkNCgkJCQkJCQkJ
666
- CQlhbmltYXRpb25Mb29wOiB0cnVlLAkJCS8vQm9vbGVhbjogU2hvdWxkIHRo
667
- ZSBhbmltYXRpb24gbG9vcD8gSWYgZmFsc2UsIGRpcmVjdGlvbk5hdiB3aWxs
668
- IHJlY2VpdmVkICJkaXNhYmxlIiBjbGFzc2VzIGF0IGVpdGhlciBlbmQNCgkJ
669
- CQkJCQkJCQlwYXVzZU9uQWN0aW9uOiB0cnVlLAkJCS8vQm9vbGVhbjogUGF1
670
- c2UgdGhlIHNsaWRlc2hvdyB3aGVuIGludGVyYWN0aW5nIHdpdGggY29udHJv
671
- bCBlbGVtZW50cywgaGlnaGx5IHJlY29tbWVuZGVkLg0KCQkJCQkJCQkJCXBh
672
- dXNlT25Ib3ZlcjogZmFsc2UsCQkJLy9Cb29sZWFuOiBQYXVzZSB0aGUgc2xp
673
- ZGVzaG93IHdoZW4gaG92ZXJpbmcgb3ZlciBzbGlkZXIsIHRoZW4gcmVzdW1l
674
- IHdoZW4gbm8gbG9uZ2VyIGhvdmVyaW5nDQoJCQkJCQkJCQkJc3RhcnQ6IHNs
675
- aWRlQ29tcGxldGV6bl9ub3JtYWxfZmxleCwNCgkJCQkJCQkJCQlhZnRlcjog
676
- c2xpZGVDb21wbGV0ZXpuX25vcm1hbF9mbGV4DQoJCQkJCQkJCQl9KTsNCgkJ
677
- CQkJCQkJfSk7DQoJCQkJCQkJfSkoalF1ZXJ5KTsNCgkJCQkJCTwvc2NyaXB0
678
- PjwvYm9keT4NCjwvaHRtbD4=
403
+ YmFubmVyMi0xMTcweDIyMy5qcGciIHdpZHRoPSIxMTcwIiBoZWlnaHQ9IjIy
404
+ MyIgLz48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAg
405
+ ICAgICAgICAgICAgICAgICAgPC9kaXY+PCEtLSBlbmQgI2ZsZXhzbGlkZXIg
406
+ LS0+DQoNCgkJCTwvZGl2Pg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJ6bl9oZWFk
407
+ ZXJfYm90dG9tX3N0eWxlIj48L2Rpdj48IS0tIGhlYWRlciBib3R0b20gc3R5
408
+ bGUgLS0+DQoJCQkNCiAgICAgICAgPC9kaXY+PCEtLSBlbmQgc2xpZGVzaG93
409
+ IC0tPg0KCQo8c2VjdGlvbiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iY29u
410
+ dGFpbmVyIj48ZGl2IGNsYXNzPSJtYWluYm9keSB6bl9oYXNfc2lkZWJhciI+
411
+ PGRpdiBjbGFzcz0icm93ICI+PGRpdiBjbGFzcz0ic3Bhbjkgem5fY29udGVu
412
+ dCI+PGgxIGNsYXNzPSJwYWdlLXRpdGxlIj5DYW1iaW88L2gxPjxkaXYgY2xh
413
+ c3M9InNwYW40IHpuX2NvbnRlbnQiPgo8cD48YSBocmVmPSJodHRwOi8vd3d3
414
+ LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvQ2FtYmlvLUV4Y2hhbmdl
415
+ LnBuZyIgY2xhc3M9ImhvdmVyQm9yZGVyIGFsaWdubm9uZSIgcmVsPSJwcmV0
416
+ dHlQaG90b1tpZnJhbWVzXSI+PGltZyBjbGFzcz0iIHNpemUtbWVkaXVtIHdw
417
+ LWltYWdlLTMwOTEiIGFsdD0iQ2FtYmlvIEV4Y2hhbmdlIiBzcmM9Imh0dHA6
418
+ Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9DYW1iaW8tRXhj
419
+ aGFuZ2UtMzAweDYyLnBuZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI2MiIgLz48
420
+ L2E+PC9wPgo8cD4mbmJzcDs8L3A+CjxwPkNPSyBvZmZlcnMgY2FtYmlvIHNl
421
+ cnZpY2VzIGF0IGFsbCA1IGxvY2F0aW9uczsgQ3Jvc3Nyb2FkcywgSGFsZi1X
422
+ YXktVHJlZSwgUG9ydG1vcmUsIE1hbmRldmlsbGUgYW5kIE1vbnRlZ28gQmF5
423
+ LiBXZSBvZmZlciBjb21wZXRpdGl2ZSByYXRlcywgZmFzdCBhbmQgZWZmaWNp
424
+ ZW50IHNlcnZpY2UuIE91ciBjYW1iaW8gc2VydmljZXMgaXMgYXZhaWxhYmxl
425
+ IHRvIGJvdGggbWVtYmVycyBhbmQgbm9uLW1lbWJlcnMuPC9wPgo8cD5Gb3Ig
426
+ bW9yZSBpbmZvcm1hdGlvbiwgY29udGFjdCA8c3Ryb25nPlBhdHJpY2UgVGhv
427
+ bWFzPC9zdHJvbmc+LCBvdXIgRm9yZWlnbiBFeGNoYW5nZSBUcmFkZXIsIGVt
428
+ YWlsIDxhIGhyZWY9Im1haWx0bzpwdGhvbWFzQGNva2N1LmNvbSIgdGFyZ2V0
429
+ PSJfYmxhbmsiPnB0aG9tYXNAY29rY3UuY29tPC9hPiBvciBkaWFsIDEtODc2
430
+ LTk2MC1JQ0FOICg5NjAtNDIyNiksIGV4dGVuc2lvbnMgMTU0OSBvciAxNTQ4
431
+ LjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNwYW40IHpuX2NvbnRlbnQiPgo8
432
+ aDQgY2xhc3M9Im1fdGl0bGUiPkZvcmVpZ24gRXhjaGFuZ2UgcmF0ZXM8L2g0
433
+ Pgo8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KPHRoZWFk
434
+ Pgo8dHI+Cjx0aCBjb2xzcGFuPSIzIj5CdXlpbmc8L3RoPgo8dGggY29sc3Bh
435
+ bj0iMiI+U2VsbGluZzwvdGg+CjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keSBjbGFz
436
+ cz0idGFibGUtaG92ZXIiPgo8dHI+Cjx0aD48L3RoPgo8dGg+Q2FzaDwvdGg+
437
+ Cjx0aD5DaGVxdWVzIC8gV2lyZTwvdGg+Cjx0aD5DYXNoPC90aD4KPHRoPkNo
438
+ ZXF1ZXMgLyBXaXJlPC90aD4KPC90cj4KPHRyPgo8dGQ+PHN0cm9uZz5VU0Q8
439
+ L3N0cm9uZz48L3RkPgo8dGQ+MTA2LjQ1PC90ZD4KPHRkPjEwNC4yMDwvdGQ+
440
+ Cjx0ZD4xMDguODU8L3RkPgo8dGQ+MTA5LjQwPC90ZD4KPC90cj4KPHRyPgo8
441
+ dGQ+PHN0cm9uZz5DQUQ8L3N0cm9uZz48L3RkPgo8dGQ+OTMuMTU8L3RkPgo8
442
+ dGQ+OTEuOTA8L3RkPgo8dGQ+OTcuMDA8L3RkPgo8dGQ+OTguMzU8L3RkPgo8
443
+ L3RyPgo8dHI+Cjx0ZD48c3Ryb25nPkdCUDwvc3Ryb25nPjwvdGQ+Cjx0ZD4x
444
+ NzUuMTA8L3RkPgo8dGQ+MTYyLjAwPC90ZD4KPHRkPjE4MC4xMDwvdGQ+Cjx0
445
+ ZD4xODEuNDA8L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3Ryb25nPkNJPC9zdHJv
446
+ bmc+PC90ZD4KPHRkPjExNi4zMDwvdGQ+Cjx0ZD4xMDAuMDA8L3RkPgo8dGQ+
447
+ MTIzLjQwPC90ZD4KPHRkPjEyMi4yNTwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxz
448
+ dHJvbmc+RXVybzwvc3Ryb25nPjwvdGQ+Cjx0ZD4xNDMuMDA8L3RkPgo8dGQ+
449
+ MTMwLjIwPC90ZD4KPHRkPjE0Ny4wMDwvdGQ+Cjx0ZD4xNDguMDA8L3RkPgo8
450
+ L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8cD5FZmZlY3RpdmU6IE1hcmNoIDE0
451
+ LCAyMDE0PC9wPgo8L2Rpdj4KPC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjxk
452
+ aXYgaWQ9InNpZGViYXIiIGNsYXNzPSJzaWRlYmFyIHNpZGViYXItcmlnaHQg
453
+ Ij48ZGl2IGlkPSJuYXZfbWVudS01IiBjbGFzcz0id2lkZ2V0IHdpZGdldF9u
454
+ YXZfbWVudSI+PGRpdiBjbGFzcz0ibWVudS1zZXJ2aWNlcy1tZW51LWNvbnRh
455
+ aW5lciI+PHVsIGlkPSJtZW51LXNlcnZpY2VzLW1lbnUiIGNsYXNzPSJtZW51
456
+ Ij48bGkgaWQ9Im1lbnUtaXRlbS0yNDAwIiBjbGFzcz0ibWVudS1pdGVtIG1l
457
+ bnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2Ug
458
+ Y3VycmVudC1wYWdlLWFuY2VzdG9yIGN1cnJlbnQtcGFnZS1wYXJlbnQgbWVu
459
+ dS1pdGVtLTI0MDAiPjxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290
460
+ aGVyc2VydmljZXMvIj5PdGhlciBTZXJ2aWNlczwvYT48L2xpPgo8bGkgaWQ9
461
+ Im1lbnUtaXRlbS0yNDAxIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10
462
+ eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVt
463
+ LTI0MDEiPjxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2Vy
464
+ dmljZXMvYXRtLyI+QWNjZXNzIFBsdXMgQVRNIENhcmQ8L2E+PC9saT4KPGxp
465
+ IGlkPSJtZW51LWl0ZW0tMjQwMiIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0
466
+ ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUt
467
+ aXRlbS0yNDAyIj48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9vdGhl
468
+ cnNlcnZpY2VzL2hlYWx0aC8iPkhlYWx0aCBJbnN1cmFuY2U8L2E+PC9saT4K
469
+ PGxpIGlkPSJtZW51LWl0ZW0tMjQwMyIgY2xhc3M9Im1lbnUtaXRlbSBtZW51
470
+ LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIGN1
471
+ cnJlbnQtbWVudS1pdGVtIHBhZ2VfaXRlbSBwYWdlLWl0ZW0tMTcwMCBjdXJy
472
+ ZW50X3BhZ2VfaXRlbSBtZW51LWl0ZW0tMjQwMyBhY3RpdmUiPjxhIGhyZWY9
473
+ Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2VydmljZXMvY2FtYmlvLyI+
474
+ Q2FtYmlvPC9hPjwvbGk+CjxsaSBpZD0ibWVudS1pdGVtLTI0MDQiIGNsYXNz
475
+ PSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRl
476
+ bS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tMjQwNCI+PGEgaHJlZj0iaHR0cDov
477
+ L3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy9jb2stcmVtaXR0YW5jZS1z
478
+ ZXJ2aWNlcy8iPkNPSyBSZW1pdHRhbmNlIFNlcnZpY2VzPC9hPjwvbGk+Cjxs
479
+ aSBpZD0ibWVudS1pdGVtLTI0MDUiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1p
480
+ dGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51
481
+ LWl0ZW0tMjQwNSI+PGEgaHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vb3Ro
482
+ ZXJzZXJ2aWNlcy9maXAvIj5GYW1pbHkgSW5kZW1uaXR5IFBsYW48L2E+PC9s
483
+ aT4KPC91bD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48
484
+ L2Rpdj48L3NlY3Rpb24+PCEtLSBlbmQgI2NvbnRlbnQgLS0+CQkJCQoJDQoJ
485
+ PGZvb3RlciBpZD0iZm9vdGVyIj4NCgkJPGRpdiBjbGFzcz0iY29udGFpbmVy
486
+ Ij4NCg0KCQkJPGRpdiBjbGFzcz0icm93Ij48ZGl2IGNsYXNzPSJzcGFuMyI+
487
+ PC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjwvZGl2PjxkaXYgY2xhc3M9InNw
488
+ YW4zIj48L2Rpdj48ZGl2IGNsYXNzPSJzcGFuMyI+PC9kaXY+PC9kaXY+PCEt
489
+ LSBlbmQgcm93IC0tPgkNCgkJCQ0KCQkJPGRpdiBjbGFzcz0icm93Ij4NCgkJ
490
+ CQk8ZGl2IGNsYXNzPSJzcGFuMTIiPg0KCQkJCQk8ZGl2IGNsYXNzPSJib3R0
491
+ b20gZml4Y2xlYXIiPg0KCQkJCQkNCgkJCQkJPHVsIGNsYXNzPSJzb2NpYWwt
492
+ aWNvbnMgY29sb3JlZCBmaXhjbGVhciI+PGxpIGNsYXNzPSJ0aXRsZSI+R0VU
493
+ IFNPQ0lBTDwvbGk+PGxpIGNsYXNzPSJzb2NpYWwtZmFjZWJvb2siPjxhIGhy
494
+ ZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9wYWdlcy9DT0stU29kYWxp
495
+ dHktQ28tb3BlcmF0aXZlLUNyZWRpdC1Vbmlvbi8zMzYzNzQ4MjQzNjUiIHRh
496
+ cmdldD0iX2JsYW5rIj5GYWNlYm9vazwvYT48L2xpPjxsaSBjbGFzcz0ic29j
497
+ aWFsLXR3aXR0ZXIiPjxhIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj5Ud2l0
498
+ dGVyPC9hPjwvbGk+PC91bD4JCQkJCQ0KCQkJCQkJCQkJCQkNCgkJCQkJCTxk
499
+ aXYgY2xhc3M9ImNvcHlyaWdodCI+DQoJCQkJCQkJDQoJCQkJCQkJDQoJCQkJ
500
+ CQkJPGEgaHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20iPjxpbWcgc3JjPSJo
501
+ dHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvZm9vdGVy
502
+ bG9nbzIucG5nIiBhbHQ9IiIgLz48L2E+PHA+wqkgQ09LIFNvZGFsaXR5IENv
503
+ LW9wZXJhdGl2ZSBDcmVkaXQgVW5pb24gTHRkLiBBbGwgUmlnaHRzIFJlc2Vy
504
+ dmVkLjxici8+DQpEZXNpZ25lZCAmIERldmVsb3BlZCBieSA8YSBocmVmPSJo
505
+ dHRwOi8vd3d3LnppcHRlY2hub2xvZ2llcy5jb20vIj5aaXBUZWNobm9sb2dp
506
+ ZXMuY29tPC9hPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL3By
507
+ aXZhY3ktcG9saWN5LyI+UHJpdmFjeTwvYT4gLSA8YSBocmVmPSJodHRwOi8v
508
+ d3d3LmNva2N1LmNvbS90ZXJtcy1vZi11c2UvIj5UZXJtcyBvZiBVc2U8L2E+
509
+ IC0gPGEgaHJlZj0iaHR0cDovL3d3dy53b2NjdS5vcmcvIj5XT0NDVTwvYT48
510
+ L3A+CQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJPC9kaXY+PCEtLSBlbmQgY29w
511
+ eXJpZ2h0IC0tPg0KCQkJCQkJCQ0KCQkJCQkJCQkJCQkNCg0KCQkJCQk8L2Rp
512
+ dj48IS0tIGVuZCBib3R0b20gLS0+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj48
513
+ IS0tIGVuZCByb3cgLS0+DQoJCQkNCgkJPC9kaXY+DQoJPC9mb290ZXI+DQoJ
514
+ ICAgIDwvZGl2PjwhLS0gZW5kIHBhZ2Vfd3JhcHBlciAtLT4NCgkNCiAgICA8
515
+ YSBocmVmPSIjIiBpZD0idG90b3AiPlRPUDwvYT4gDQo8c2NyaXB0IHR5cGU9
516
+ InRleHQvamF2YXNjcmlwdCI+DQoNCiAgdmFyIF9nYXEgPSBfZ2FxIHx8IFtd
517
+ Ow0KICBfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICdVQS00MzE0MjAyMC0x
518
+ J10pOw0KICBfZ2FxLnB1c2goWydfdHJhY2tQYWdldmlldyddKTsNCg0KICAo
519
+ ZnVuY3Rpb24oKSB7DQogICAgdmFyIGdhID0gZG9jdW1lbnQuY3JlYXRlRWxl
520
+ bWVudCgnc2NyaXB0Jyk7IGdhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jzsg
521
+ Z2EuYXN5bmMgPSB0cnVlOw0KICAgIGdhLnNyYyA9ICgnaHR0cHM6JyA9PSBk
522
+ b2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwczovLycgOiAnaHR0
523
+ cDovLycpICsgJ3N0YXRzLmcuZG91YmxlY2xpY2submV0L2RjLmpzJzsNCiAg
524
+ ICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
525
+ cHQnKVswXTsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnYSwgcyk7DQog
526
+ IH0pKCk7DQoNCjwvc2NyaXB0Pg0KDQoNCg0KDQo8c2NyaXB0IHR5cGU9InRl
527
+ eHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL2px
528
+ dWVyeS1sYXRlc3QubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0i
529
+ dGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9jZG4uanNkZWxpdnIubmV0
530
+ L2pxdWVyeS5jb29raWUvMS4zLjEvanF1ZXJ5LmNvb2tpZS5qcyI+PC9zY3Jp
531
+ cHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRw
532
+ Oi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2Fk
533
+ ZG9ucy9wcmV0dHlwaG90by9qcXVlcnkucHJldHR5UGhvdG8uanMiPjwvc2Ny
534
+ aXB0Pg0KDQoNCjxzY3JpcHQgPg0KDQpjb25zb2xlLmRlYnVnKCQuY29va2ll
535
+ KCJzdXJ2ZXkiICkpOw0KDQppZigkLmNvb2tpZSgnc3VydmV5JykgIT0gJ29s
536
+ ZCcpew0KCSQuY29va2llKCJzdXJ2ZXkiLCAibmV3IiApOw0KCWNvbnNvbGUu
537
+ ZGVidWcoJC5jb29raWUoInN1cnZleSIgKSk7fQ0KCQ0KaWYoJC5jb29raWUo
538
+ J3N1cnZleScpID09ICduZXcnICYmIGRvY3VtZW50LlVSTCAhPSAnaHR0cDov
539
+ L3d3dy5jb2tjdS5jb20vY29udGFjdC11cy9zdXJ2ZXkvJyl7DQoJDQoJCSQu
540
+ Zm4ucHJldHR5UGhvdG8oeyBzb2NpYWxfdG9vbHM6IGZhbHNlIH0pOw0KCQkk
541
+ LnByZXR0eVBob3RvLm9wZW4oJ2h0dHA6Ly93d3cuY29rY3UuY29tL3N1cnZl
542
+ eS5odG1sP2lmcmFtZT10cnVlJndpZHRoPTQwMiZoZWlnaHQ9OTQnLCAnJywg
543
+ JycpOw0KCQkNCgkJJC5jb29raWUoInN1cnZleSIsICJvbGQiICk7DQogfQ0K
544
+ PC9zY3JpcHQ+DQoNCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBz
545
+ cmM9J2h0dHA6Ly9hamF4LmFzcG5ldGNkbi5jb20vYWpheC9qcXVlcnkudmFs
546
+ aWRhdGUvMS4xMS4xL2pxdWVyeS52YWxpZGF0ZS5qcyc+PC9zY3JpcHQ+Cjxz
547
+ Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cu
548
+ Y29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy93cGdmb3JtL2pzL2pxdWVy
549
+ eS5jb2x1bW5pemVyLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0
550
+ L2phdmFzY3JpcHQnPgovKiA8IVtDREFUQVsgKi8KdmFyIHdwZ2Zvcm1fc2Ny
551
+ aXB0X3ZhcnMgPSB7InJlcXVpcmVkIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJl
552
+ ZC4iLCJyZW1vdGUiOiJQbGVhc2UgZml4IHRoaXMgZmllbGQuIiwiZW1haWwi
553
+ OiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsInVybCI6
554
+ IlBsZWFzZSBlbnRlciBhIHZhbGlkIFVSTC4iLCJkYXRlIjoiUGxlYXNlIGVu
555
+ dGVyIGEgdmFsaWQgZGF0ZS4iLCJkYXRlSVNPIjoiUGxlYXNlIGVudGVyIGEg
556
+ dmFsaWQgZGF0ZSAoSVNPKS4iLCJudW1iZXIiOiJQbGVhc2UgZW50ZXIgYSB2
557
+ YWxpZCBudW1iZXIuIiwiZGlnaXRzIjoiUGxlYXNlIGVudGVyIG9ubHkgZGln
558
+ aXRzLiIsImNyZWRpdGNhcmQiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBjcmVk
559
+ aXQgY2FyZCBudW1iZXIuIiwiZXF1YWxUbyI6IlBsZWFzZSBlbnRlciB0aGUg
560
+ c2FtZSB2YWx1ZSBhZ2Fpbi4sIiwiYWNjZXB0IjoiUGxlYXNlIGVudGVyIGEg
561
+ dmFsdWUgd2l0aCBhIHZhbGlkIGV4dGVuc2lvbi4iLCJtYXhsZW5ndGgiOiJQ
562
+ bGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXJzLiIsIm1p
563
+ bmxlbmd0aCI6IlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVy
564
+ cy4iLCJyYW5nZWxlbmd0aCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGJldHdl
565
+ ZW4gezB9IGFuZCB7MX0gY2hhcmFjdGVycyBsb25nLiIsInJhbmdlIjoiUGxl
566
+ YXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfS4iLCJtYXgi
567
+ OiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g
568
+ ezB9LiIsIm1pbiI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGdyZWF0ZXIgdGhh
569
+ biBvciBlcXVhbCB0byB7MH0uIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNj
570
+ cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5j
571
+ b2tjdS5jb20vd3AtY29udGVudC9wbHVnaW5zL3dwZ2Zvcm0vanMvd3BnZm9y
572
+ bS5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0
573
+ JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lu
574
+ cy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9qcy9qcXVlcnkuZm9ybS5taW4u
575
+ anMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+
576
+ Ci8qIDwhW0NEQVRBWyAqLwp2YXIgX3dwY2Y3ID0geyJsb2FkZXJVcmwiOiJo
577
+ dHRwOlwvXC93d3cuY29rY3UuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9j
578
+ b250YWN0LWZvcm0tN1wvaW1hZ2VzXC9hamF4LWxvYWRlci5naWYiLCJzZW5k
579
+ aW5nIjoiU2VuZGluZyAuLi4ifTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2Ny
580
+ aXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNv
581
+ a2N1LmNvbS93cC1jb250ZW50L3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5j
582
+ bHVkZXMvanMvc2NyaXB0cy5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0n
583
+ dGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dw
584
+ LWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvc2xpZGVycy9mbGV4X3NsaWRlci9q
585
+ cy9qcXVlcnkuZmxleHNsaWRlci1taW4uanMnPjwvc2NyaXB0Pgo8c2NyaXB0
586
+ IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1
587
+ LmNvbS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2pzL2Jvb3RzdHJhcC5t
588
+ aW4uanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlw
589
+ dCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3RoZW1l
590
+ cy9rYWxseWFzL2pzL3BsdWdpbnMuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5
591
+ cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNv
592
+ bS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2FkZG9ucy9zdXBlcmZpc2hf
593
+ cmVzcG9uc2l2ZS9zdXBlcmZpc2hfbWVudS5qcyc+PC9zY3JpcHQ+CjxzY3Jp
594
+ cHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29r
595
+ Y3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvYWRkb25zL3ByZXR0
596
+ eXBob3RvL2pxdWVyeS5wcmV0dHlQaG90by5qcyc+PC9zY3JpcHQ+CjxzY3Jp
597
+ cHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLyogPCFbQ0RBVEFbICovCnZh
598
+ ciB6bl9kb19sb2dpbiA9IHsiYWpheHVybCI6Imh0dHA6XC9cL3d3dy5jb2tj
599
+ dS5jb21cL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCJ9OwovKiBdXT4gKi8K
600
+ PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9
601
+ J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5
602
+ YXMvanMvem5zY3JpcHQuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3Rl
603
+ eHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1j
604
+ b250ZW50L3BsdWdpbnMvY2xpY2tkZXNrLWxpdmUtc3VwcG9ydC1jaGF0LXBs
605
+ dWdpbi9qcy93aWRnZXQuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRl
606
+ eHQvamF2YXNjcmlwdCI+CgkJCQkJCShmdW5jdGlvbigkKXsgCgkJCQkJCQkk
607
+ KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewoJCQkJCQkJCS8qIEFjdGl2
608
+ YXRlIFN1cGVyZmlzaCBNZW51ICovCgkJCQkJCQkJdmFyIHNmRGVsYXkgPSA2
609
+ MDA7CgkJCQkJCQkJaWYoJCgnaHRtbCcpLmhhc0NsYXNzKCdpc2llJykpCgkJ
610
+ CQkJCQkJCXNmRGVsYXkgPSAzMDA7CgkJCQkJCQkJJCgnI21haW5fbWVudSA+
611
+ IHVsJykKCQkJCQkJCQkuc3VwZXJzdWJzKHsgCgkJCQkJCQkJCW1pbldpZHRo
612
+ OiAgICAxMiwgICAvLyBtaW5pbXVtIHdpZHRoIG9mIHN1Yi1tZW51cyBpbiBl
613
+ bSB1bml0cyAKCQkJCQkJCQkJbWF4V2lkdGg6ICAgIDI3LCAgIC8vIG1heGlt
614
+ dW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJCQll
615
+ eHRyYVdpZHRoOiAgMSAgICAgLy8gZXh0cmEgd2lkdGggY2FuIGVuc3VyZSBs
616
+ aW5lcyBkb24ndCBzb21ldGltZXMgdHVybiBvdmVyIAoJCQkJCQkJCX0pLnN1
617
+ cGVyZmlzaCh7CgkJCQkJCQkJCWRlbGF5OnNmRGVsYXksCgkJCQkJCQkJCWRy
618
+ b3BTaGFkb3dzOmZhbHNlLAoJCQkJCQkJCQlhdXRvQXJyb3dzOnRydWUsCgkJ
619
+ CQkJCQkJCXNwZWVkOjMwMAoJCQkJCQkJCX0pOwoJCQkJCQkJfSk7CgkJCQkJ
620
+ CQkKCQkJCQkJCQoJCQkJCQkJJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigp
621
+ IHsKCQkJCQkJCQkkKCcjbWFpbl9tZW51ID4gdWwnKQoJCQkJCQkJCS5zdXBl
622
+ cnN1YnMoeyAKCQkJCQkJCQkJbWluV2lkdGg6ICAgIDEyLCAgIC8vIG1pbmlt
623
+ dW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJCQlt
624
+ YXhXaWR0aDogICAgMjcsICAgLy8gbWF4aW11bSB3aWR0aCBvZiBzdWItbWVu
625
+ dXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCWV4dHJhV2lkdGg6ICAxICAgICAv
626
+ LyBleHRyYSB3aWR0aCBjYW4gZW5zdXJlIGxpbmVzIGRvbid0IHNvbWV0aW1l
627
+ cyB0dXJuIG92ZXIgCgkJCQkJCQkJfSk7CgkJCQkJCQl9KTsKCQkJCQkJCQoJ
628
+ CQkJCQl9KShqUXVlcnkpOwoJCQkJCQkNCgkJCQkJCQkoZnVuY3Rpb24oJCkg
629
+ ew0KCQkJCQkJCQkkKHdpbmRvdykubG9hZChmdW5jdGlvbigpew0KCQkJCQkJ
630
+ CQkNCgkJCQkJCQkJCWZ1bmN0aW9uIHNsaWRlQ29tcGxldGV6bl9ub3JtYWxf
631
+ ZmxleChhcmdzKSB7DQoJCQkJCQkJCQkJdmFyIGNhcHRpb24gPSAkKGFyZ3Mu
632
+ Y29udGFpbmVyKS5maW5kKCcuZmxleC1jYXB0aW9uJykuYXR0cignc3R5bGUn
633
+ LCAnJyksDQoJCQkJCQkJCQkJCXRoaXNDYXB0aW9uID0gJCgnLmZsZXhzbGlk
634
+ ZXIuem5fbm9ybWFsX2ZsZXggLnNsaWRlcyA+IGxpLmZsZXgtYWN0aXZlLXNs
635
+ aWRlJykuZmluZCgnLmZsZXgtY2FwdGlvbicpOw0KCQkJCQkJCQkJCXRoaXND
636
+ YXB0aW9uLmFuaW1hdGUoe2xlZnQ6MjAsIG9wYWNpdHk6MX0sIDUwMCwgJ2Vh
637
+ c2VPdXRRdWludCcpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkNCgkJCQkJCQkJ
638
+ CWlmICggalF1ZXJ5KCcuZmxleHNsaWRlci56bl9ub3JtYWxfZmxleCcpLmhh
639
+ c0NsYXNzKCd6bl9oYXNfdGh1bWJzJykgKSB7DQoJCQkJCQkJCQkJdGh1bWJz
640
+ ID0gJ3RodW1ibmFpbHMnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZSB7
641
+ DQoJCQkJCQkJCQkJdGh1bWJzID0gdHJ1ZTsNCgkJCQkJCQkJCX0NCgkJCQkJ
642
+ CQkJCQ0KCQkJCQkJCQkJdHJhbnNpdGlvbiA9IGpRdWVyeSgiLmZsZXhzbGlk
643
+ ZXIuem5fbm9ybWFsX2ZsZXgiKS5hdHRyKCdkYXRhLXRyYW5zaXRpb24nKTsN
644
+ CgkJCQkJCQkJCQ0KCQkJCQkJCQkJJCgiLmZsZXhzbGlkZXIuem5fbm9ybWFs
645
+ X2ZsZXgiKS5mbGV4c2xpZGVyKHsNCgkJCQkJCQkJCQlhbmltYXRpb246IHRy
646
+ YW5zaXRpb24sCQkJCS8vU3RyaW5nOiBTZWxlY3QgeW91ciBhbmltYXRpb24g
647
+ dHlwZSwgImZhZGUiIG9yICJzbGlkZSINCgkJCQkJCQkJCQlzbGlkZURpcmVj
648
+ dGlvbjogImhvcml6b250YWwiLAkvL1N0cmluZzogU2VsZWN0IHRoZSBzbGlk
649
+ aW5nIGRpcmVjdGlvbiwgImhvcml6b250YWwiIG9yICJ2ZXJ0aWNhbCINCgkJ
650
+ CQkJCQkJCQlzbGlkZXNob3c6IHRydWUsCQkJCS8vQm9vbGVhbjogQW5pbWF0
651
+ ZSBzbGlkZXIgYXV0b21hdGljYWxseQ0KCQkJCQkJCQkJCXNsaWRlc2hvd1Nw
652
+ ZWVkOiA3MDAwLAkJCS8vSW50ZWdlcjogU2V0IHRoZSBzcGVlZCBvZiB0aGUg
653
+ c2xpZGVzaG93IGN5Y2xpbmcsIGluIG1pbGxpc2Vjb25kcw0KCQkJCQkJCQkJ
654
+ CWFuaW1hdGlvbkR1cmF0aW9uOiA2MDAsCQkJLy9JbnRlZ2VyOiBTZXQgdGhl
655
+ IHNwZWVkIG9mIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcw0KCQkJCQkJ
656
+ CQkJCWRpcmVjdGlvbk5hdjogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBDcmVhdGUg
657
+ bmF2aWdhdGlvbiBmb3IgcHJldmlvdXMvbmV4dCBuYXZpZ2F0aW9uPyAodHJ1
658
+ ZS9mYWxzZSkNCgkJCQkJCQkJCQljb250cm9sTmF2OiB0aHVtYnMsCQkJCS8v
659
+ Qm9vbGVhbjogQ3JlYXRlIG5hdmlnYXRpb24gZm9yIHBhZ2luZyBjb250cm9s
660
+ IG9mIGVhY2ggY2xpZGU/IE5vdGU6IExlYXZlIHRydWUgZm9yIG1hbnVhbENv
661
+ bnRyb2xzIHVzYWdlDQoJCQkJCQkJCQkJa2V5Ym9hcmROYXY6IHRydWUsCQkJ
662
+ CS8vQm9vbGVhbjogQWxsb3cgc2xpZGVyIG5hdmlnYXRpbmcgdmlhIGtleWJv
663
+ YXJkIGxlZnQvcmlnaHQga2V5cw0KCQkJCQkJCQkJCW1vdXNld2hlZWw6IGZh
664
+ bHNlLAkJCQkvL3tVUERBVEVEfSBCb29sZWFuOiBSZXF1aXJlcyBqcXVlcnku
665
+ bW91c2V3aGVlbC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2JyYW5kb25hYXJv
666
+ bi9qcXVlcnktbW91c2V3aGVlbCkgLSBBbGxvd3Mgc2xpZGVyIG5hdmlnYXRp
667
+ bmcgdmlhIG1vdXNld2hlZWwNCgkJCQkJCQkJCQlzbW9vdGhIZWlnaHQ6IHRy
668
+ dWUsDQoJCQkJCQkJCQkJcmFuZG9taXplOiBmYWxzZSwJCQkJLy9Cb29sZWFu
669
+ OiBSYW5kb21pemUgc2xpZGUgb3JkZXINCgkJCQkJCQkJCQlzbGlkZVRvU3Rh
670
+ cnQ6IDAsCQkJCS8vSW50ZWdlcjogVGhlIHNsaWRlIHRoYXQgdGhlIHNsaWRl
671
+ ciBzaG91bGQgc3RhcnQgb24uIEFycmF5IG5vdGF0aW9uICgwID0gZmlyc3Qg
672
+ c2xpZGUpDQoJCQkJCQkJCQkJYW5pbWF0aW9uTG9vcDogdHJ1ZSwJCQkvL0Jv
673
+ b2xlYW46IFNob3VsZCB0aGUgYW5pbWF0aW9uIGxvb3A/IElmIGZhbHNlLCBk
674
+ aXJlY3Rpb25OYXYgd2lsbCByZWNlaXZlZCAiZGlzYWJsZSIgY2xhc3NlcyBh
675
+ dCBlaXRoZXIgZW5kDQoJCQkJCQkJCQkJcGF1c2VPbkFjdGlvbjogdHJ1ZSwJ
676
+ CQkvL0Jvb2xlYW46IFBhdXNlIHRoZSBzbGlkZXNob3cgd2hlbiBpbnRlcmFj
677
+ dGluZyB3aXRoIGNvbnRyb2wgZWxlbWVudHMsIGhpZ2hseSByZWNvbW1lbmRl
678
+ ZC4NCgkJCQkJCQkJCQlwYXVzZU9uSG92ZXI6IGZhbHNlLAkJCS8vQm9vbGVh
679
+ bjogUGF1c2UgdGhlIHNsaWRlc2hvdyB3aGVuIGhvdmVyaW5nIG92ZXIgc2xp
680
+ ZGVyLCB0aGVuIHJlc3VtZSB3aGVuIG5vIGxvbmdlciBob3ZlcmluZw0KCQkJ
681
+ CQkJCQkJCXN0YXJ0OiBzbGlkZUNvbXBsZXRlem5fbm9ybWFsX2ZsZXgsDQoJ
682
+ CQkJCQkJCQkJYWZ0ZXI6IHNsaWRlQ29tcGxldGV6bl9ub3JtYWxfZmxleA0K
683
+ CQkJCQkJCQkJfSk7DQoJCQkJCQkJCX0pOw0KCQkJCQkJCX0pKGpRdWVyeSk7
684
+ DQoJCQkJCQk8L3NjcmlwdD48L2JvZHk+DQo8L2h0bWw+
679
685
  http_version:
680
- recorded_at: Sat, 14 Dec 2013 18:14:15 GMT
686
+ recorded_at: Sun, 16 Mar 2014 11:37:34 GMT
681
687
  recorded_with: VCR 2.8.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcel Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-15 00:00:00.000000000 Z
11
+ date: 2014-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -194,10 +194,15 @@ files:
194
194
  - lib/forex/traders/jm/ncb.rb
195
195
  - lib/forex/traders/jm/sagicor.rb
196
196
  - lib/forex/version.rb
197
+ - lib/tasks/build_expected_rates.rake
198
+ - spec/rates/bns.yml
197
199
  - spec/rates/cok.yml
198
200
  - spec/rates/fgb.yml
199
201
  - spec/rates/fxtraders.yml
200
202
  - spec/rates/jmmb.yml
203
+ - spec/rates/jnbs.yml
204
+ - spec/rates/ncb.yml
205
+ - spec/rates/sagicor.yml
201
206
  - spec/rates/sagicore.yml
202
207
  - spec/spec_helper.rb
203
208
  - spec/support/vcr.rb
@@ -239,10 +244,14 @@ test_files:
239
244
  - features/step_definitions/tabular_rates_steps.rb
240
245
  - features/support/env.rb
241
246
  - features/tabular_rates.feature
247
+ - spec/rates/bns.yml
242
248
  - spec/rates/cok.yml
243
249
  - spec/rates/fgb.yml
244
250
  - spec/rates/fxtraders.yml
245
251
  - spec/rates/jmmb.yml
252
+ - spec/rates/jnbs.yml
253
+ - spec/rates/ncb.yml
254
+ - spec/rates/sagicor.yml
246
255
  - spec/rates/sagicore.yml
247
256
  - spec/spec_helper.rb
248
257
  - spec/support/vcr.rb