poolparty 1.4.6 → 1.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/VERSION.yml +2 -2
  2. data/bin/cloud-contract +6 -1
  3. data/bin/cloud-list +5 -6
  4. data/bin/cloud-vnc +39 -0
  5. data/examples/rds_cloud.rb +44 -0
  6. data/lib/cloud_providers/connections.rb +0 -1
  7. data/lib/cloud_providers/ec2/ec2.rb +86 -25
  8. data/lib/cloud_providers/ec2/ec2_instance.rb +6 -2
  9. data/lib/cloud_providers/ec2/helpers/ec2_helper.rb +19 -6
  10. data/lib/cloud_providers/ec2/helpers/elastic_load_balancer.rb +3 -3
  11. data/lib/cloud_providers/ec2/helpers/rds_instance.rb +110 -0
  12. data/lib/cloud_providers/remote_instance.rb +5 -3
  13. data/lib/poolparty/cloud.rb +8 -3
  14. data/lib/poolparty/pool.rb +12 -0
  15. data/test/fixtures/clouds/rds_cloud.rb +14 -0
  16. data/test/fixtures/clouds/rds_missing_params.rb +11 -0
  17. data/test/fixtures/ec2/ec2-describe-security-groups_response_body.xml +23 -0
  18. data/test/fixtures/ec2/rds-describe-db-instances-empty_response_body.xml +9 -0
  19. data/test/lib/poolparty/rds_test.rb +35 -0
  20. data/test/test_helper.rb +4 -4
  21. data/vendor/gems/amazon-ec2/ChangeLog +15 -0
  22. data/vendor/gems/amazon-ec2/README.rdoc +27 -24
  23. data/vendor/gems/amazon-ec2/README_dev.rdoc +0 -2
  24. data/vendor/gems/amazon-ec2/Rakefile +8 -39
  25. data/vendor/gems/amazon-ec2/VERSION +1 -1
  26. data/vendor/gems/amazon-ec2/amazon-ec2.gemspec +24 -16
  27. data/vendor/gems/amazon-ec2/bin/setup.rb +1 -0
  28. data/vendor/gems/amazon-ec2/lib/AWS/Autoscaling/autoscaling.rb +6 -16
  29. data/vendor/gems/amazon-ec2/lib/AWS/EC2/availability_zones.rb +8 -0
  30. data/vendor/gems/amazon-ec2/lib/AWS/EC2/console.rb +2 -0
  31. data/vendor/gems/amazon-ec2/lib/AWS/EC2/devpay.rb +18 -0
  32. data/vendor/gems/amazon-ec2/lib/AWS/EC2/elastic_ips.rb +37 -32
  33. data/vendor/gems/amazon-ec2/lib/AWS/EC2/images.rb +43 -27
  34. data/vendor/gems/amazon-ec2/lib/AWS/EC2/instances.rb +136 -99
  35. data/vendor/gems/amazon-ec2/lib/AWS/EC2/keypairs.rb +3 -17
  36. data/vendor/gems/amazon-ec2/lib/AWS/EC2/security_groups.rb +4 -23
  37. data/vendor/gems/amazon-ec2/lib/AWS/EC2/snapshots.rb +38 -17
  38. data/vendor/gems/amazon-ec2/lib/AWS/EC2/volumes.rb +6 -21
  39. data/vendor/gems/amazon-ec2/lib/AWS/EC2.rb +2 -2
  40. data/vendor/gems/amazon-ec2/lib/AWS/ELB/load_balancers.rb +11 -38
  41. data/vendor/gems/amazon-ec2/lib/AWS/RDS/rds.rb +522 -0
  42. data/vendor/gems/amazon-ec2/lib/AWS/RDS.rb +73 -0
  43. data/vendor/gems/amazon-ec2/lib/AWS/exceptions.rb +103 -25
  44. data/vendor/gems/amazon-ec2/lib/AWS.rb +19 -9
  45. data/vendor/gems/amazon-ec2/perftools/ec2prof +0 -0
  46. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.dot +130 -191
  47. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.txt +100 -126
  48. data/vendor/gems/amazon-ec2/perftools/ec2prof.symbols +102 -129
  49. data/vendor/gems/amazon-ec2/test/test_Autoscaling_groups.rb +3 -2
  50. data/vendor/gems/amazon-ec2/test/test_EC2_images.rb +32 -0
  51. data/vendor/gems/amazon-ec2/test/test_EC2_instances.rb +204 -22
  52. data/vendor/gems/amazon-ec2/test/test_EC2_snapshots.rb +1 -1
  53. data/vendor/gems/amazon-ec2/test/test_ELB_load_balancers.rb +2 -2
  54. data/vendor/gems/amazon-ec2/test/test_RDS.rb +354 -0
  55. data/vendor/gems/amazon-ec2/wsdl/2009-10-31.ec2.wsdl +4261 -0
  56. data/vendor/gems/amazon-ec2/wsdl/2009-11-30.ec2.wsdl +4668 -0
  57. metadata +17 -2
@@ -1,8 +1,8 @@
1
1
  #--
2
- # AWS EC2 CLIENT ERROR CODES
3
- # AWS EC2 can throw error exceptions that contain a '.' in them.
2
+ # AWS ERROR CODES
3
+ # AWS can throw error exceptions that contain a '.' in them.
4
4
  # since we can't name an exception class with that '.' I compressed
5
- # each class name into the non-dot version. This allows us to retain
5
+ # each class name into the non-dot version which allows us to retain
6
6
  # the granularity of the exception.
7
7
  #++
8
8
 
@@ -14,17 +14,26 @@ module AWS
14
14
  # CLIENT : A client side argument error
15
15
  class ArgumentError < Error; end
16
16
 
17
+ # Elastic Compute Cloud
18
+ ############################
19
+
20
+ # EC2 : User has the maximum number of allowed IP addresses.
21
+ class AddressLimitExceeded < Error; end
22
+
23
+ # EC2 : The limit on the number of Amazon EBS volumes attached to one instance has been exceeded.
24
+ class AttachmentLimitExceeded < Error; end
25
+
17
26
  # EC2 : User not authorized.
18
27
  class AuthFailure < Error; end
19
28
 
20
- # EC2 : Invalid AWS Account
21
- class InvalidClientTokenId < Error; end
29
+ # EC2 : Volume is in incorrect state
30
+ class IncorrectState < Error; end
22
31
 
23
- # EC2 : Invalid Parameters for Value
24
- class InvalidParameterValue < Error; end
32
+ # EC2 : User has max allowed concurrent running instances.
33
+ class InstanceLimitExceeded < Error; end
25
34
 
26
- # EC2 : Specified AMI has an unparsable manifest.
27
- class InvalidManifest < Error; end
35
+ # EC2 : The value of an item added to, or removed from, an image attribute is invalid.
36
+ class InvalidAMIAttributeItemValue < Error; end
28
37
 
29
38
  # EC2 : Specified AMI ID is not valid.
30
39
  class InvalidAMIIDMalformed < Error; end
@@ -35,6 +44,12 @@ module AWS
35
44
  # EC2 : Specified AMI ID has been deregistered and is no longer available.
36
45
  class InvalidAMIIDUnavailable < Error; end
37
46
 
47
+ # EC2 : The instance cannot detach from a volume to which it is not attached.
48
+ class InvalidAttachmentNotFound < Error; end
49
+
50
+ # EC2 : The device to which you are trying to attach (i.e. /dev/sdh) is already in use on the instance.
51
+ class InvalidDeviceInUse < Error; end
52
+
38
53
  # EC2 : Specified instance ID is not valid.
39
54
  class InvalidInstanceIDMalformed < Error; end
40
55
 
@@ -59,6 +74,15 @@ module AWS
59
74
  # EC2 : Specified group name is a reserved name.
60
75
  class InvalidGroupReserved < Error; end
61
76
 
77
+ # EC2 : Specified AMI has an unparsable manifest.
78
+ class InvalidManifest < Error; end
79
+
80
+ # EC2 : RunInstances was called with minCount and maxCount set to 0 or minCount > maxCount.
81
+ class InvalidParameterCombination < Error; end
82
+
83
+ # EC2 : The value supplied for a parameter was invalid.
84
+ class InvalidParameterValue < Error; end
85
+
62
86
  # EC2 : Attempt to authorize a permission that has already been authorized.
63
87
  class InvalidPermissionDuplicate < Error; end
64
88
 
@@ -71,22 +95,79 @@ module AWS
71
95
  # EC2 : Specified reservation ID does not exist.
72
96
  class InvalidReservationIDNotFound < Error; end
73
97
 
74
- # EC2 : User has reached max allowed concurrent running instances.
75
- class InstanceLimitExceeded < Error; end
98
+ # EC2 : The snapshot ID that was passed as an argument was malformed.
99
+ class InvalidSnapshotIDMalformed < Error; end
76
100
 
77
- # EC2 : An invalid set of parameters were passed as arguments
78
- class InvalidParameterCombination < Error; end
79
-
80
- # EC2 : An unknown parameter was passed as an argument
81
- class UnknownParameter < Error; end
101
+ # EC2 : The specified snapshot does not exist.
102
+ class InvalidSnapshotIDNotFound < Error; end
82
103
 
83
104
  # EC2 : The user ID is neither in the form of an AWS account ID or one
84
105
  # of the special values accepted by the owner or executableBy flags
85
106
  # in the DescribeImages call.
86
107
  class InvalidUserIDMalformed < Error; end
87
108
 
88
- # EC2 : The value of an item added to, or removed from, an image attribute is invalid.
89
- class InvalidAMIAttributeItemValue < Error; end
109
+ # EC2 : Reserved Instances ID not found.
110
+ class InvalidReservedInstancesId < Error; end
111
+
112
+ # EC2 : Reserved Instances Offering ID not found.
113
+ class InvalidReservedInstancesOfferingId < Error; end
114
+
115
+ # EC2 : The volume ID that was passed as an argument was malformed.
116
+ class InvalidVolumeIDMalformed < Error; end
117
+
118
+ # EC2 : The volume specified does not exist.
119
+ class InvalidVolumeIDNotFound < Error; end
120
+
121
+ # EC2 : The volume already exists in the system.
122
+ class InvalidVolumeIDDuplicate < Error; end
123
+
124
+ # EC2 : The specified volume ID and instance ID are in different Availability Zones.
125
+ class InvalidVolumeIDZoneMismatch < Error; end
126
+
127
+ # EC2 : The zone specified does not exist.
128
+ class InvalidZoneNotFound < Error; end
129
+
130
+ # EC2 : Insufficient Reserved Instances capacity.
131
+ class InsufficientReservedInstancesCapacity < Error; end
132
+
133
+ # EC2 : The instance specified does not support EBS.
134
+ class NonEBSInstance < Error; end
135
+
136
+ # EC2 : The limit on the number of Amazon EBS snapshots in the pending state has been exceeded.
137
+ class PendingSnapshotLimitExceeded < Error; end
138
+
139
+ # EC2 : Your current quota does not allow you to purchase the required number of reserved instances.
140
+ class ReservedInstancesLimitExceeded < Error; end
141
+
142
+ # EC2 : The limit on the number of Amazon EBS snapshots has been exceeded.
143
+ class SnapshotLimitExceeded < Error; end
144
+
145
+ # EC2 : An unknown parameter was passed as an argument
146
+ class UnknownParameter < Error; end
147
+
148
+ # EC2 : The limit on the number of Amazon EBS volumes has been exceeded.
149
+ class VolumeLimitExceeded < Error; end
150
+
151
+ # Server Error Codes
152
+ ###
153
+
154
+ # Server : Internal Error.
155
+ class InternalError < Error; end
156
+
157
+ # Server : Not enough available addresses to satisfy your minimum request.
158
+ class InsufficientAddressCapacity < Error; end
159
+
160
+ # Server : There are not enough available instances to satisfy your minimum request.
161
+ class InsufficientInstanceCapacity < Error; end
162
+
163
+ # Server : There are not enough available reserved instances to satisfy your minimum request.
164
+ class InsufficientReservedInstanceCapacity < Error; end
165
+
166
+ # Server : The server is overloaded and cannot handle the request.
167
+ class Unavailable < Error; end
168
+
169
+ # Elastic Load Balancer
170
+ ############################
90
171
 
91
172
  # ELB : The Load balancer specified was not found.
92
173
  class LoadBalancerNotFound < Error; end
@@ -106,14 +187,11 @@ module AWS
106
187
  # ELB :
107
188
  class InvalidConfigurationRequest < Error; end
108
189
 
109
- # Server : Internal AWS EC2 Error.
110
- class InternalError < Error; end
111
-
112
- # Server : There are not enough available instances to satisfy your minimum request.
113
- class InsufficientInstanceCapacity < Error; end
190
+ # API Errors
191
+ ############################
114
192
 
115
- # Server : The server is overloaded and cannot handle the request.
116
- class Unavailable < Error; end
193
+ # Server : Invalid AWS Account
194
+ class InvalidClientTokenId < Error; end
117
195
 
118
196
  # Server : The provided signature does not match.
119
197
  class SignatureDoesNotMatch < Error; end
@@ -11,7 +11,6 @@
11
11
  %w[ base64 cgi openssl digest/sha1 net/https rexml/document time ostruct ].each { |f| require f }
12
12
 
13
13
  begin
14
- require "rubygems"
15
14
  require 'xmlsimple' unless defined? XmlSimple
16
15
  rescue Exception => e
17
16
  require 'xml-simple' unless defined? XmlSimple
@@ -29,6 +28,14 @@ class Hash
29
28
  self[meth.to_s] || self[meth.to_sym]
30
29
  end
31
30
  end
31
+
32
+ def has?(key)
33
+ self[key] && !self[key].to_s.empty?
34
+ end
35
+
36
+ def does_not_have?(key)
37
+ self[key].nil? || self[key].to_s.empty?
38
+ end
32
39
  end
33
40
 
34
41
 
@@ -178,10 +185,14 @@ module AWS
178
185
  # ("People", [{:name=>'jon', :age=>'22'}, {:name=>'chris'}], {:name => 'Name', :age => 'Age'}) you should get
179
186
  # {"People.1.Name"=>"jon", "People.1.Age"=>'22', 'People.2.Name'=>'chris'}
180
187
  def pathhashlist(key, arr_of_hashes, mappings)
181
- params ={}
188
+ raise ArgumentError, "expected a key that is a String" unless key.is_a? String
189
+ raise ArgumentError, "expected a arr_of_hashes that is an Array" unless arr_of_hashes.is_a? Array
190
+ arr_of_hashes.each{|h| raise ArgumentError, "expected each element of arr_of_hashes to be a Hash" unless h.is_a?(Hash)}
191
+ raise ArgumentError, "expected a mappings that is an Hash" unless mappings.is_a? Hash
192
+ params = {}
182
193
  arr_of_hashes.each_with_index do |hash, i|
183
194
  hash.each do |attribute, value|
184
- params["#{key}.#{i+1}.#{mappings[attribute]}"] = value
195
+ params["#{key}.#{i+1}.#{mappings[attribute]}"] = value.to_s
185
196
  end
186
197
  end
187
198
  params
@@ -213,9 +224,9 @@ module AWS
213
224
  req = Net::HTTP::Post.new("/")
214
225
  req.content_type = 'application/x-www-form-urlencoded'
215
226
  req['User-Agent'] = "github-amazon-ec2-ruby-gem"
216
-
227
+
217
228
  response = @http.request(req, query)
218
-
229
+
219
230
  # Make a call to see if we need to throw an error based on the response given by EC2
220
231
  # All error classes are defined in EC2/exceptions.rb
221
232
  aws_error?(response)
@@ -241,16 +252,15 @@ module AWS
241
252
  }.merge(options)
242
253
 
243
254
  raise ArgumentError, ":action must be provided to response_generator" if options[:action].nil? || options[:action].empty?
244
-
245
- http_response = make_request(options[:action], options[:params])
246
255
 
256
+ http_response = make_request(options[:action], options[:params])
247
257
  http_xml = http_response.body
248
258
  return Response.parse(:xml => http_xml)
249
259
 
250
260
  end
251
261
 
252
262
  # Raises the appropriate error if the specified Net::HTTPResponse object
253
- # contains an Amazon EC2 error; returns +false+ otherwise.
263
+ # contains an AWS error; returns +false+ otherwise.
254
264
  def aws_error?(response)
255
265
 
256
266
  # return false if we got a HTTP 200 code,
@@ -271,7 +281,7 @@ module AWS
271
281
 
272
282
  # An valid error response looks like this:
273
283
  # <?xml version="1.0"?><Response><Errors><Error><Code>InvalidParameterCombination</Code><Message>Unknown parameter: foo</Message></Error></Errors><RequestID>291cef62-3e86-414b-900e-17246eccfae8</RequestID></Response>
274
- # AWS EC2 throws some exception codes that look like Error.SubError. Since we can't name classes this way
284
+ # AWS throws some exception codes that look like Error.SubError. Since we can't name classes this way
275
285
  # we need to strip out the '.' in the error 'Code' and we name the error exceptions with this
276
286
  # non '.' name as well.
277
287
  error_code = doc.root.elements['Errors'].elements['Error'].elements['Code'].text.gsub('.', '')
@@ -1,193 +1,132 @@
1
- digraph "/usr/local/bin/ruby; 2178 samples" {
1
+ digraph "/usr/bin/ruby; 2043 samples" {
2
2
  node [width=0.375,height=0.25];
3
- Legend [shape=box,fontsize=24,shape=plaintext,label="/usr/local/bin/ruby\lTotal samples: 2178\lFocusing on: 2170\lDropped nodes with <= 10 abs(samples)\lDropped edges with <= 2 samples\l"];
4
- N1 [label="XmlSimple#xml_in\n0 (0.0%)\rof 1113 (51.1%)\r",shape=box,fontsize=8.0];
5
- N2 [label="XmlSimple.xml_in\n0 (0.0%)\rof 993 (45.6%)\r",shape=box,fontsize=8.0];
6
- N3 [label="REXML\nElement#each_element\n1 (0.0%)\rof 970 (44.5%)\r",shape=box,fontsize=9.1];
7
- N4 [label="REXML\nElements#each\n24 (1.1%)\rof 970 (44.5%)\r",shape=box,fontsize=13.3];
8
- N5 [label="XmlSimple#collapse\n24 (1.1%)\rof 970 (44.5%)\r",shape=box,fontsize=13.3];
9
- N6 [label="REXML\nXPath.each\n1 (0.0%)\rof 970 (44.5%)\r",shape=box,fontsize=9.1];
10
- N7 [label="EC2\nBase#response_generator\n0 (0.0%)\rof 945 (43.4%)\r",shape=box,fontsize=8.0];
11
- N8 [label="EC2\nResponse.parse\n0 (0.0%)\rof 934 (42.9%)\r",shape=box,fontsize=8.0];
12
- N9 [label="EC2\nBase#describe_images\n0 (0.0%)\rof 918 (42.1%)\r",shape=box,fontsize=8.0];
13
- N10 [label="Class#new\n1 (0.0%)\rof 804 (36.9%)\r",shape=box,fontsize=9.1];
14
- N11 [label="REXML\nParsers\nTreeParser#parse\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
15
- N12 [label="REXML\nDocument#build\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
16
- N13 [label="XmlSimple#parse\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
17
- N14 [label="REXML\nDocument#initialize\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
18
- N15 [label="REXML\nParsers\nBaseParser#pull\n162 (7.4%)\rof 462 (21.2%)\r",shape=box,fontsize=21.7];
19
- N16 [label="garbage_collector\n352 (16.2%)\r",shape=box,fontsize=28.1];
20
- N17 [label="REXML\nText#value\n17 (0.8%)\rof 316 (14.5%)\r",shape=box,fontsize=12.4];
21
- N18 [label="Array#each\n0 (0.0%)\rof 275 (12.6%)\r",shape=box,fontsize=8.0];
22
- N19 [label="XmlSimple#collapse_text_node\n11 (0.5%)\rof 268 (12.3%)\r",shape=box,fontsize=11.6];
23
- N20 [label="REXML\nElement#has_text?\n22 (1.0%)\rof 263 (12.1%)\r",shape=box,fontsize=13.0];
24
- N21 [label="REXML\nElement#text\n14 (0.6%)\rof 241 (11.1%)\r",shape=box,fontsize=12.0];
25
- N22 [label="XmlSimple#node_to_text\n33 (1.5%)\rof 233 (10.7%)\r",shape=box,fontsize=14.2];
26
- N23 [label="REXML\nSource#match\n123 (5.6%)\rof 166 (7.6%)\r",shape=box,fontsize=19.9];
27
- N24 [label="REXML\nParent#each\n21 (1.0%)\rof 155 (7.1%)\r",shape=box,fontsize=12.9];
28
- N25 [label="REXML\nElement#add_element\n47 (2.2%)\rof 153 (7.0%)\r",shape=box,fontsize=15.4];
29
- N26 [label="Array#map\n0 (0.0%)\rof 152 (7.0%)\r",shape=box,fontsize=8.0];
30
- N27 [label="Object#find\n80 (3.7%)\rof 146 (6.7%)\r",shape=box,fontsize=17.6];
31
- N28 [label="REXML\nDocument#doctype\n80 (3.7%)\rof 140 (6.4%)\r",shape=box,fontsize=17.6];
32
- N29 [label="REXML\nElement#document\n19 (0.9%)\rof 121 (5.6%)\r",shape=box,fontsize=12.7];
33
- N30 [label="REXML\nElement#texts\n46 (2.1%)\rof 110 (5.1%)\r",shape=box,fontsize=15.3];
34
- N31 [label="XmlSimple#has_mixed_content?\n5 (0.2%)\rof 108 (5.0%)\r",shape=box,fontsize=10.4];
35
- N32 [label="REXML\nElements#add\n18 (0.8%)\rof 107 (4.9%)\r",shape=box,fontsize=12.6];
36
- N33 [label="REXML\nElement#root\n102 (4.7%)\r",shape=box,fontsize=18.8];
37
- N34 [label="REXML\nChild#find_all\n50 (2.3%)\rof 101 (4.6%)\r",shape=box,fontsize=15.6];
38
- N35 [label="REXML\nElement#initialize\n20 (0.9%)\rof 97 (4.5%)\r",shape=box,fontsize=12.8];
39
- N36 [label="REXML\nParent#add\n79 (3.6%)\rof 95 (4.4%)\r",shape=box,fontsize=17.5];
40
- N37 [label="REXML\nElement#has_elements?\n12 (0.6%)\rof 95 (4.4%)\r",shape=box,fontsize=11.7];
41
- N38 [label="REXML\nXPathParser#parse\n0 (0.0%)\rof 86 (3.9%)\r",shape=box,fontsize=8.0];
42
- N39 [label="REXML\nElements#empty?\n27 (1.2%)\rof 83 (3.8%)\r",shape=box,fontsize=13.6];
43
- N40 [label="REXML\nParsers\nBaseParser#empty?\n55 (2.5%)\rof 73 (3.4%)\r",shape=box,fontsize=16.0];
44
- N41 [label="REXML\nChild#find\n49 (2.2%)\rof 72 (3.3%)\r",shape=box,fontsize=15.5];
45
- N42 [label="XmlSimple#get_attributes\n22 (1.0%)\rof 56 (2.6%)\r",shape=box,fontsize=13.0];
46
- N43 [label="Set#initialize\n45 (2.1%)\rof 46 (2.1%)\r",shape=box,fontsize=15.2];
47
- N44 [label="REXML\nParsers\nXPathParser#parse\n0 (0.0%)\rof 44 (2.0%)\r",shape=box,fontsize=8.0];
48
- N45 [label="REXML\nParsers\nXPathParser#OrExpr\n3 (0.1%)\rof 44 (2.0%)\r",shape=box,fontsize=9.9];
49
- N46 [label="Regexp#match\n43 (2.0%)\r",shape=box,fontsize=15.0];
50
- N47 [label="REXML\nXPathParser#match\n2 (0.1%)\rof 42 (1.9%)\r",shape=box,fontsize=9.5];
51
- N48 [label="REXML\nElement#get_text\n22 (1.0%)\rof 42 (1.9%)\r",shape=box,fontsize=13.0];
52
- N49 [label="REXML\nParsers\nXPathParser#AndExpr\n3 (0.1%)\rof 41 (1.9%)\r",shape=box,fontsize=9.9];
53
- N50 [label="REXML\nXPathParser#expr\n27 (1.2%)\rof 40 (1.8%)\r",shape=box,fontsize=13.6];
54
- N51 [label="REXML\nParent#initialize\n6 (0.3%)\rof 39 (1.8%)\r",shape=box,fontsize=10.6];
55
- N52 [label="REXML\nText.unnormalize\n38 (1.7%)\r",shape=box,fontsize=14.6];
56
- N53 [label="REXML\nParsers\nXPathParser#EqualityExpr\n3 (0.1%)\rof 38 (1.7%)\r",shape=box,fontsize=9.9];
57
- N54 [label="XmlSimple#merge\n7 (0.3%)\rof 37 (1.7%)\r",shape=box,fontsize=10.8];
58
- N55 [label="REXML\nParsers\nXPathParser#RelationalExpr\n5 (0.2%)\rof 35 (1.6%)\r",shape=box,fontsize=10.4];
59
- N56 [label="Net\nHTTP#request\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
60
- N57 [label="EC2\nBase#make_request\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
61
- N58 [label="Net\nHTTP#start\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
62
- N59 [label="REXML\nAttributes#each\n16 (0.7%)\rof 34 (1.6%)\r",shape=box,fontsize=12.3];
63
- N60 [label="REXML\nChild#initialize\n5 (0.2%)\rof 33 (1.5%)\r",shape=box,fontsize=10.4];
64
- N61 [label="XmlSimple#empty\n33 (1.5%)\r",shape=box,fontsize=14.2];
65
- N62 [label="REXML\nText#initialize\n32 (1.5%)\rof 33 (1.5%)\r",shape=box,fontsize=14.1];
66
- N63 [label="Net\nHTTPResponse#read_body_0\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
67
- N64 [label="Net\nHTTPResponse#read_chunked\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
68
- N65 [label="Net\nHTTPResponse#read_body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
69
- N66 [label="Net\nHTTPResponse#reading_body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
70
- N67 [label="Net\nBufferedIO#read\n1 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=9.1];
71
- N68 [label="Net\nHTTPResponse#body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
72
- N69 [label="Array#delete_if\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
73
- N70 [label="XmlSimple#force_array?\n29 (1.3%)\rof 30 (1.4%)\r",shape=box,fontsize=13.8];
74
- N71 [label="REXML\nParsers\nXPathParser#AdditiveExpr\n5 (0.2%)\rof 30 (1.4%)\r",shape=box,fontsize=10.4];
75
- N72 [label="Timeout.timeout\n1 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=9.1];
76
- N73 [label="Net\nBufferedIO#rbuf_fill\n1 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=9.1];
77
- N74 [label="Object#timeout\n0 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=8.0];
78
- N75 [label="REXML\nParsers\nXPathParser#MultiplicativeExpr\n1 (0.0%)\rof 25 (1.1%)\r",shape=box,fontsize=9.1];
79
- N76 [label="REXML\nChild#parent=\n25 (1.1%)\r",shape=box,fontsize=13.4];
80
- N77 [label="REXML\nParsers\nXPathParser#UnaryExpr\n2 (0.1%)\rof 24 (1.1%)\r",shape=box,fontsize=9.5];
81
- N78 [label="REXML\nParent#[]\n24 (1.1%)\r",shape=box,fontsize=13.3];
82
- N79 [label="REXML\nText#to_s\n22 (1.0%)\r",shape=box,fontsize=13.0];
83
- N80 [label="REXML\nElement#whitespace\n22 (1.0%)\r",shape=box,fontsize=13.0];
84
- N17 -> N52 [label=38, weight=12, style="setlinewidth(0.105069)"];
85
- N23 -> N46 [label=43, weight=13, style="setlinewidth(0.118894)"];
86
- N4 -> N6 [label=2353, weight=229, style="setlinewidth(2.000000)"];
87
- N35 -> N10 [label=24, weight=9, style="setlinewidth(0.066359)"];
88
- N22 -> N26 [label=152, weight=33, style="setlinewidth(0.420276)"];
89
- N6 -> N4 [label=2305, weight=225, style="setlinewidth(2.000000)"];
90
- N10 -> N62 [label=33, weight=11, style="setlinewidth(0.091244)"];
91
- N17 -> N29 [label=121, weight=28, style="setlinewidth(0.334562)"];
92
- N57 -> N58 [label=34, weight=11, style="setlinewidth(0.094009)"];
93
- N63 -> N64 [label=32, weight=11, style="setlinewidth(0.088479)"];
94
- N5 -> N61 [label=19, weight=7, style="setlinewidth(0.052535)"];
95
- N21 -> N48 [label=42, weight=13, style="setlinewidth(0.116129)"];
96
- N24 -> N18 [label=134, weight=30, style="setlinewidth(0.370507)"];
97
- N15 -> N10 [label=46, weight=14, style="setlinewidth(0.127189)"];
98
- N35 -> N51 [label=39, weight=12, style="setlinewidth(0.107834)"];
99
- N31 -> N30 [label=41, weight=13, style="setlinewidth(0.113364)"];
100
- N69 -> N50 [label=32, weight=11, style="setlinewidth(0.088479)"];
101
- N10 -> N35 [label=97, weight=24, style="setlinewidth(0.268203)"];
102
- N55 -> N71 [label=30, weight=10, style="setlinewidth(0.082949)"];
103
- N5 -> N31 [label=108, weight=26, style="setlinewidth(0.298618)"];
104
- N15 -> N23 [label=166, weight=35, style="setlinewidth(0.458986)"];
105
- N50 -> N69 [label=32, weight=11, style="setlinewidth(0.088479)"];
106
- N21 -> N17 [label=185, weight=38, style="setlinewidth(0.511521)"];
107
- N39 -> N41 [label=72, weight=19, style="setlinewidth(0.199078)"];
108
- N18 -> N41 [label=55, weight=16, style="setlinewidth(0.152074)"];
109
- N27 -> N18 [label=124, weight=29, style="setlinewidth(0.342857)"];
110
- N53 -> N55 [label=35, weight=12, style="setlinewidth(0.096774)"];
111
- N75 -> N77 [label=24, weight=9, style="setlinewidth(0.066359)"];
112
- N57 -> N56 [label=34, weight=11, style="setlinewidth(0.094009)"];
113
- N5 -> N19 [label=268, weight=50, style="setlinewidth(0.741014)"];
114
- N58 -> N57 [label=34, weight=11, style="setlinewidth(0.094009)"];
115
- N41 -> N24 [label=62, weight=17, style="setlinewidth(0.171429)"];
116
- N47 -> N50 [label=40, weight=13, style="setlinewidth(0.110599)"];
117
- N41 -> N39 [label=16, weight=6, style="setlinewidth(0.044240)"];
118
- N15 -> N40 [label=73, weight=20, style="setlinewidth(0.201843)"];
119
- N5 -> N37 [label=84, weight=22, style="setlinewidth(0.232258)"];
120
- N74 -> N72 [label=27, weight=10, style="setlinewidth(0.074654)"];
121
- N14 -> N12 [label=801, weight=107, style="setlinewidth(2.000000)"];
122
- N64 -> N67 [label=32, weight=11, style="setlinewidth(0.088479)"];
123
- N17 -> N28 [label=140, weight=31, style="setlinewidth(0.387097)"];
124
- N10 -> N14 [label=801, weight=107, style="setlinewidth(2.000000)"];
125
- N20 -> N21 [label=241, weight=46, style="setlinewidth(0.666359)"];
126
- N11 -> N10 [label=33, weight=11, style="setlinewidth(0.091244)"];
127
- N72 -> N73 [label=14, weight=6, style="setlinewidth(0.038710)"];
128
- N27 -> N28 [label=56, weight=16, style="setlinewidth(0.154839)"];
129
- N56 -> N66 [label=32, weight=11, style="setlinewidth(0.088479)"];
130
- N48 -> N27 [label=30, weight=10, style="setlinewidth(0.082949)"];
131
- N22 -> N30 [label=69, weight=19, style="setlinewidth(0.190783)"];
132
- N18 -> N27 [label=124, weight=29, style="setlinewidth(0.342857)"];
133
- N65 -> N63 [label=32, weight=11, style="setlinewidth(0.088479)"];
134
- N11 -> N80 [label=22, weight=8, style="setlinewidth(0.060829)"];
135
- N33 -> N33 [label=77, weight=20, style="setlinewidth(0.212903)"];
136
- N4 -> N5 [label=2408, weight=232, style="setlinewidth(2.000000)"];
137
- N50 -> N18 [label=5, weight=3, style="setlinewidth(0.013825)"];
138
- N13 -> N10 [label=801, weight=107, style="setlinewidth(2.000000)"];
139
- N28 -> N27 [label=116, weight=27, style="setlinewidth(0.320737)"];
140
- N8 -> N2 [label=934, weight=120, style="setlinewidth(2.000000)"];
141
- N5 -> N5 [label=2446, weight=235, style="setlinewidth(2.000000)"];
142
- N49 -> N53 [label=38, weight=12, style="setlinewidth(0.105069)"];
143
- N5 -> N3 [label=2152, weight=215, style="setlinewidth(2.000000)"];
144
- N10 -> N32 [label=3, weight=2, style="setlinewidth(0.008295)"];
145
- N19 -> N22 [label=233, weight=45, style="setlinewidth(0.644240)"];
146
- N42 -> N59 [label=34, weight=11, style="setlinewidth(0.094009)"];
147
- N6 -> N38 [label=86, weight=22, style="setlinewidth(0.237788)"];
148
- N54 -> N70 [label=30, weight=10, style="setlinewidth(0.082949)"];
149
- N44 -> N45 [label=44, weight=14, style="setlinewidth(0.121659)"];
150
- N34 -> N24 [label=93, weight=23, style="setlinewidth(0.257143)"];
151
- N12 -> N11 [label=801, weight=107, style="setlinewidth(2.000000)"];
152
- N1 -> N5 [label=312, weight=55, style="setlinewidth(0.862673)"];
153
- N11 -> N78 [label=24, weight=9, style="setlinewidth(0.066359)"];
154
- N31 -> N37 [label=11, weight=5, style="setlinewidth(0.030415)"];
155
- N71 -> N75 [label=25, weight=9, style="setlinewidth(0.069124)"];
156
- N3 -> N4 [label=2226, weight=220, style="setlinewidth(2.000000)"];
157
- N11 -> N15 [label=462, weight=73, style="setlinewidth(1.277419)"];
158
- N7 -> N57 [label=34, weight=11, style="setlinewidth(0.094009)"];
159
- N38 -> N47 [label=42, weight=13, style="setlinewidth(0.116129)"];
160
- N32 -> N10 [label=97, weight=24, style="setlinewidth(0.268203)"];
161
- N1 -> N13 [label=801, weight=107, style="setlinewidth(2.000000)"];
162
- N31 -> N20 [label=29, weight=10, style="setlinewidth(0.080184)"];
163
- N5 -> N54 [label=37, weight=12, style="setlinewidth(0.102304)"];
164
- N27 -> N48 [label=10, weight=5, style="setlinewidth(0.027650)"];
165
- N22 -> N17 [label=131, weight=30, style="setlinewidth(0.362212)"];
166
- N73 -> N74 [label=27, weight=10, style="setlinewidth(0.074654)"];
167
- N45 -> N49 [label=41, weight=13, style="setlinewidth(0.113364)"];
168
- N66 -> N68 [label=32, weight=11, style="setlinewidth(0.088479)"];
169
- N26 -> N22 [label=152, weight=33, style="setlinewidth(0.420276)"];
170
- N11 -> N36 [label=95, weight=24, style="setlinewidth(0.262673)"];
171
- N37 -> N39 [label=83, weight=22, style="setlinewidth(0.229493)"];
172
- N7 -> N8 [label=911, weight=117, style="setlinewidth(2.000000)"];
173
- N60 -> N32 [label=28, weight=10, style="setlinewidth(0.077419)"];
174
- N9 -> N7 [label=918, weight=118, style="setlinewidth(2.000000)"];
175
- N18 -> N50 [label=5, weight=3, style="setlinewidth(0.013825)"];
176
- N10 -> N43 [label=46, weight=14, style="setlinewidth(0.127189)"];
177
- N38 -> N44 [label=44, weight=14, style="setlinewidth(0.121659)"];
178
- N2 -> N1 [label=993, weight=125, style="setlinewidth(2.000000)"];
179
- N51 -> N60 [label=33, weight=11, style="setlinewidth(0.091244)"];
180
- N67 -> N73 [label=26, weight=9, style="setlinewidth(0.071889)"];
181
- N18 -> N34 [label=79, weight=21, style="setlinewidth(0.218433)"];
182
- N68 -> N65 [label=32, weight=11, style="setlinewidth(0.088479)"];
183
- N29 -> N33 [label=102, weight=25, style="setlinewidth(0.282028)"];
184
- N5 -> N42 [label=56, weight=16, style="setlinewidth(0.154839)"];
185
- N6 -> N10 [label=3, weight=2, style="setlinewidth(0.008295)"];
186
- N36 -> N76 [label=16, weight=6, style="setlinewidth(0.044240)"];
187
- N11 -> N25 [label=153, weight=33, style="setlinewidth(0.423041)"];
188
- N30 -> N34 [label=101, weight=25, style="setlinewidth(0.279263)"];
189
- N25 -> N32 [label=104, weight=25, style="setlinewidth(0.287558)"];
190
- N34 -> N30 [label=37, weight=12, style="setlinewidth(0.102304)"];
191
- N19 -> N61 [label=14, weight=6, style="setlinewidth(0.038710)"];
192
- N5 -> N20 [label=234, weight=45, style="setlinewidth(0.647005)"];
3
+ Legend [shape=box,fontsize=24,shape=plaintext,label="/usr/bin/ruby\lTotal samples: 2043\lFocusing on: 2035\lDropped nodes with <= 10 abs(samples)\lDropped edges with <= 2 samples\l"];
4
+ N1 [label="garbage_collector\n1298 (63.5%)\r",shape=box,fontsize=47.9];
5
+ N2 [label="XmlSimple#xml_in\n0 (0.0%)\rof 507 (24.8%)\r",shape=box,fontsize=8.0];
6
+ N3 [label="XmlSimple.xml_in\n0 (0.0%)\rof 469 (23.0%)\r",shape=box,fontsize=8.0];
7
+ N4 [label="AWS\nResponse.parse\n0 (0.0%)\rof 442 (21.6%)\r",shape=box,fontsize=8.0];
8
+ N5 [label="AWS\nBase#response_generator\n0 (0.0%)\rof 431 (21.1%)\r",shape=box,fontsize=8.0];
9
+ N6 [label="AWS\nEC2\nBase#describe_images\n0 (0.0%)\rof 422 (20.7%)\r",shape=box,fontsize=8.0];
10
+ N7 [label="Class#new\n142 (7.0%)\rof 371 (18.2%)\r",shape=box,fontsize=21.2];
11
+ N8 [label="REXML\nDocument#build\n14 (0.7%)\rof 370 (18.1%)\r",shape=box,fontsize=12.1];
12
+ N9 [label="REXML\nDocument#initialize\n0 (0.0%)\rof 370 (18.1%)\r",shape=box,fontsize=8.0];
13
+ N10 [label="XmlSimple#parse\n0 (0.0%)\rof 370 (18.1%)\r",shape=box,fontsize=8.0];
14
+ N11 [label="REXML\nParsers\nTreeParser#parse\n65 (3.2%)\rof 355 (17.4%)\r",shape=box,fontsize=16.9];
15
+ N12 [label="REXML\nElement#each_element\n5 (0.2%)\rof 338 (16.5%)\r",shape=box,fontsize=10.5];
16
+ N13 [label="REXML\nElements#each\n11 (0.5%)\rof 338 (16.5%)\r",shape=box,fontsize=11.7];
17
+ N14 [label="REXML\nXPath.each\n4 (0.2%)\rof 338 (16.5%)\r",shape=box,fontsize=10.2];
18
+ N15 [label="XmlSimple#collapse\n45 (2.2%)\rof 338 (16.5%)\r",shape=box,fontsize=15.4];
19
+ N16 [label="REXML\nParsers\nBaseParser#pull\n14 (0.7%)\rof 107 (5.2%)\r",shape=box,fontsize=12.1];
20
+ N17 [label="XmlSimple#collapse_text_node\n20 (1.0%)\rof 97 (4.7%)\r",shape=box,fontsize=13.0];
21
+ N18 [label="REXML\nElement#add_element\n2 (0.1%)\rof 94 (4.6%)\r",shape=box,fontsize=9.6];
22
+ N19 [label="REXML\nElements#add\n2 (0.1%)\rof 92 (4.5%)\r",shape=box,fontsize=9.6];
23
+ N20 [label="REXML\nElement#initialize\n18 (0.9%)\rof 81 (4.0%)\r",shape=box,fontsize=12.7];
24
+ N21 [label="XmlSimple#node_to_text\n6 (0.3%)\rof 76 (3.7%)\r",shape=box,fontsize=10.7];
25
+ N22 [label="REXML\nText#value\n19 (0.9%)\rof 74 (3.6%)\r",shape=box,fontsize=12.8];
26
+ N23 [label="REXML\nElement#has_elements?\n0 (0.0%)\rof 55 (2.7%)\r",shape=box,fontsize=8.0];
27
+ N24 [label="REXML\nElement#has_text?\n3 (0.1%)\rof 55 (2.7%)\r",shape=box,fontsize=9.9];
28
+ N25 [label="REXML\nElements#empty?\n2 (0.1%)\rof 55 (2.7%)\r",shape=box,fontsize=9.6];
29
+ N26 [label="REXML\nChild#find\n50 (2.4%)\rof 54 (2.6%)\r",shape=box,fontsize=15.8];
30
+ N27 [label="REXML\nElement#text\n5 (0.2%)\rof 52 (2.5%)\r",shape=box,fontsize=10.5];
31
+ N28 [label="REXML\nElement#texts\n5 (0.2%)\rof 45 (2.2%)\r",shape=box,fontsize=10.5];
32
+ N29 [label="REXML\nSource#match\n44 (2.2%)\r",shape=box,fontsize=15.4];
33
+ N30 [label="REXML\nChild#find_all\n37 (1.8%)\rof 40 (2.0%)\r",shape=box,fontsize=14.7];
34
+ N31 [label="Array#map\n2 (0.1%)\rof 36 (1.8%)\r",shape=box,fontsize=9.6];
35
+ N32 [label="Array#each\n7 (0.3%)\rof 33 (1.6%)\r",shape=box,fontsize=10.9];
36
+ N33 [label="REXML\nElement#document\n11 (0.5%)\rof 29 (1.4%)\r",shape=box,fontsize=11.7];
37
+ N34 [label="XmlSimple#has_mixed_content?\n3 (0.1%)\rof 29 (1.4%)\r",shape=box,fontsize=9.9];
38
+ N35 [label="REXML\nXPathParser#parse\n0 (0.0%)\rof 23 (1.1%)\r",shape=box,fontsize=8.0];
39
+ N36 [label="REXML\nParent#initialize\n17 (0.8%)\rof 22 (1.1%)\r",shape=box,fontsize=12.6];
40
+ N37 [label="Set#initialize\n2 (0.1%)\rof 22 (1.1%)\r",shape=box,fontsize=9.6];
41
+ N38 [label="XmlSimple#merge\n13 (0.6%)\rof 21 (1.0%)\r",shape=box,fontsize=12.0];
42
+ N39 [label="AWS\nBase#make_request\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
43
+ N40 [label="Net\nHTTP#request\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
44
+ N41 [label="Net\nHTTP#start\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
45
+ N42 [label="Net\nHTTPResponse#body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
46
+ N43 [label="Net\nHTTPResponse#read_body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
47
+ N44 [label="Net\nHTTPResponse#read_body_0\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
48
+ N45 [label="Net\nHTTPResponse#read_chunked\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
49
+ N46 [label="Net\nHTTPResponse#reading_body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
50
+ N47 [label="Net\nBufferedIO#read\n5 (0.2%)\rof 19 (0.9%)\r",shape=box,fontsize=10.5];
51
+ N48 [label="REXML\nText#initialize\n17 (0.8%)\rof 19 (0.9%)\r",shape=box,fontsize=12.6];
52
+ N49 [label="REXML\nElement#root\n18 (0.9%)\r",shape=box,fontsize=12.7];
53
+ N50 [label="REXML\nText.unnormalize\n16 (0.8%)\rof 18 (0.9%)\r",shape=box,fontsize=12.4];
54
+ N51 [label="REXML\nParent#each\n2 (0.1%)\rof 16 (0.8%)\r",shape=box,fontsize=9.6];
55
+ N52 [label="REXML\nParsers\nXPathParser#parse\n4 (0.2%)\rof 15 (0.7%)\r",shape=box,fontsize=10.2];
56
+ N53 [label="Net\nBufferedIO#rbuf_fill\n13 (0.6%)\rof 14 (0.7%)\r",shape=box,fontsize=12.0];
57
+ N54 [label="Object#timeout\n0 (0.0%)\rof 14 (0.7%)\r",shape=box,fontsize=8.0];
58
+ N55 [label="Timeout.timeout\n1 (0.0%)\rof 14 (0.7%)\r",shape=box,fontsize=9.1];
59
+ N56 [label="REXML\nParsers\nXPathParser#OrExpr\n2 (0.1%)\rof 11 (0.5%)\r",shape=box,fontsize=9.6];
60
+ N22 -> N50 [label=18, weight=7, style="setlinewidth(0.053071)"];
61
+ N13 -> N14 [label=911, weight=117, style="setlinewidth(2.000000)"];
62
+ N20 -> N7 [label=32, weight=11, style="setlinewidth(0.094349)"];
63
+ N21 -> N31 [label=36, weight=12, style="setlinewidth(0.106143)"];
64
+ N14 -> N13 [label=904, weight=117, style="setlinewidth(2.000000)"];
65
+ N7 -> N48 [label=19, weight=7, style="setlinewidth(0.056020)"];
66
+ N22 -> N33 [label=29, weight=10, style="setlinewidth(0.085504)"];
67
+ N44 -> N45 [label=20, weight=8, style="setlinewidth(0.058968)"];
68
+ N51 -> N32 [label=14, weight=6, style="setlinewidth(0.041278)"];
69
+ N16 -> N7 [label=43, weight=13, style="setlinewidth(0.126781)"];
70
+ N20 -> N36 [label=22, weight=8, style="setlinewidth(0.064865)"];
71
+ N7 -> N20 [label=81, weight=21, style="setlinewidth(0.238821)"];
72
+ N34 -> N28 [label=7, weight=3, style="setlinewidth(0.020639)"];
73
+ N15 -> N34 [label=29, weight=10, style="setlinewidth(0.085504)"];
74
+ N16 -> N29 [label=44, weight=14, style="setlinewidth(0.129730)"];
75
+ N27 -> N22 [label=44, weight=14, style="setlinewidth(0.129730)"];
76
+ N32 -> N26 [label=7, weight=3, style="setlinewidth(0.020639)"];
77
+ N25 -> N26 [label=54, weight=16, style="setlinewidth(0.159214)"];
78
+ N15 -> N17 [label=97, weight=24, style="setlinewidth(0.285995)"];
79
+ N26 -> N51 [label=10, weight=5, style="setlinewidth(0.029484)"];
80
+ N4 -> N3 [label=442, weight=71, style="setlinewidth(1.303194)"];
81
+ N54 -> N55 [label=14, weight=6, style="setlinewidth(0.041278)"];
82
+ N15 -> N23 [label=46, weight=14, style="setlinewidth(0.135627)"];
83
+ N45 -> N47 [label=19, weight=7, style="setlinewidth(0.056020)"];
84
+ N9 -> N8 [label=370, weight=62, style="setlinewidth(1.090909)"];
85
+ N7 -> N9 [label=370, weight=62, style="setlinewidth(1.090909)"];
86
+ N37 -> N7 [label=20, weight=8, style="setlinewidth(0.058968)"];
87
+ N55 -> N53 [label=13, weight=6, style="setlinewidth(0.038329)"];
88
+ N24 -> N27 [label=52, weight=15, style="setlinewidth(0.153317)"];
89
+ N11 -> N7 [label=77, weight=20, style="setlinewidth(0.227027)"];
90
+ N40 -> N46 [label=20, weight=8, style="setlinewidth(0.058968)"];
91
+ N21 -> N28 [label=38, weight=12, style="setlinewidth(0.112039)"];
92
+ N43 -> N44 [label=20, weight=8, style="setlinewidth(0.058968)"];
93
+ N5 -> N39 [label=20, weight=8, style="setlinewidth(0.058968)"];
94
+ N13 -> N15 [label=922, weight=118, style="setlinewidth(2.000000)"];
95
+ N10 -> N7 [label=370, weight=62, style="setlinewidth(1.090909)"];
96
+ N5 -> N4 [label=411, weight=67, style="setlinewidth(1.211794)"];
97
+ N15 -> N15 [label=892, weight=116, style="setlinewidth(2.000000)"];
98
+ N15 -> N12 [label=801, weight=107, style="setlinewidth(2.000000)"];
99
+ N17 -> N21 [label=76, weight=20, style="setlinewidth(0.224079)"];
100
+ N14 -> N35 [label=23, weight=8, style="setlinewidth(0.067813)"];
101
+ N30 -> N51 [label=6, weight=3, style="setlinewidth(0.017690)"];
102
+ N52 -> N56 [label=11, weight=5, style="setlinewidth(0.032432)"];
103
+ N39 -> N40 [label=20, weight=8, style="setlinewidth(0.058968)"];
104
+ N8 -> N11 [label=355, weight=60, style="setlinewidth(1.046683)"];
105
+ N2 -> N15 [label=137, weight=31, style="setlinewidth(0.403931)"];
106
+ N34 -> N23 [label=9, weight=4, style="setlinewidth(0.026536)"];
107
+ N39 -> N41 [label=20, weight=8, style="setlinewidth(0.058968)"];
108
+ N12 -> N13 [label=857, weight=113, style="setlinewidth(2.000000)"];
109
+ N11 -> N16 [label=107, weight=26, style="setlinewidth(0.315479)"];
110
+ N2 -> N10 [label=370, weight=62, style="setlinewidth(1.090909)"];
111
+ N19 -> N7 [label=91, weight=23, style="setlinewidth(0.268305)"];
112
+ N34 -> N24 [label=9, weight=4, style="setlinewidth(0.026536)"];
113
+ N15 -> N38 [label=21, weight=8, style="setlinewidth(0.061916)"];
114
+ N21 -> N22 [label=30, weight=10, style="setlinewidth(0.088452)"];
115
+ N53 -> N54 [label=14, weight=6, style="setlinewidth(0.041278)"];
116
+ N46 -> N42 [label=20, weight=8, style="setlinewidth(0.058968)"];
117
+ N31 -> N21 [label=34, weight=11, style="setlinewidth(0.100246)"];
118
+ N41 -> N39 [label=20, weight=8, style="setlinewidth(0.058968)"];
119
+ N23 -> N25 [label=55, weight=16, style="setlinewidth(0.162162)"];
120
+ N7 -> N37 [label=22, weight=8, style="setlinewidth(0.064865)"];
121
+ N3 -> N2 [label=469, weight=74, style="setlinewidth(1.382801)"];
122
+ N35 -> N52 [label=15, weight=6, style="setlinewidth(0.044226)"];
123
+ N47 -> N53 [label=14, weight=6, style="setlinewidth(0.041278)"];
124
+ N6 -> N5 [label=422, weight=68, style="setlinewidth(1.244226)"];
125
+ N32 -> N30 [label=3, weight=2, style="setlinewidth(0.008845)"];
126
+ N42 -> N43 [label=20, weight=8, style="setlinewidth(0.058968)"];
127
+ N33 -> N49 [label=18, weight=7, style="setlinewidth(0.053071)"];
128
+ N11 -> N18 [label=94, weight=24, style="setlinewidth(0.277150)"];
129
+ N28 -> N30 [label=40, weight=13, style="setlinewidth(0.117936)"];
130
+ N18 -> N19 [label=92, weight=23, style="setlinewidth(0.271253)"];
131
+ N15 -> N24 [label=46, weight=14, style="setlinewidth(0.135627)"];
193
132
  }