From 3abba74eef774cdc3486a47ee4646e90ea1096a2 Mon Sep 17 00:00:00 2001 From: Doug Fales Date: Tue, 19 Feb 2008 04:06:29 +0000 Subject: [PATCH] Adding some new unit tests and fixing several file export bugs reported by Jochen Topf. New unit tests also uncovered a bug where the number of trackpoints reported in a file was twice the actual number. --- lib/gpx/gpx.rb | 44 ++++++++-------- lib/gpx/gpx_file.rb | 15 ++++-- lib/gpx/point.rb | 2 +- lib/gpx/route.rb | 9 +++- lib/gpx/track.rb | 1 - lib/gpx/waypoint.rb | 44 +++++++++------- tests/gpx_file_test.rb | 36 ++++++++++++- tests/gpx_files/big.gpx | 1 + tests/output_test.rb | 114 ++++++++++++++++++++++++++++++++++++++++ tests/track_test.rb | 2 +- 10 files changed, 217 insertions(+), 51 deletions(-) create mode 100644 tests/gpx_files/big.gpx create mode 100644 tests/output_test.rb diff --git a/lib/gpx/gpx.rb b/lib/gpx/gpx.rb index 6544e46..c241d30 100644 --- a/lib/gpx/gpx.rb +++ b/lib/gpx/gpx.rb @@ -21,30 +21,30 @@ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #++ module GPX - VERSION = "0.3" + VERSION = "0.3" - # A common base class which provides a useful initializer method to many - # class in the GPX library. - class Base - include XML + # A common base class which provides a useful initializer method to many + # class in the GPX library. + class Base + include XML - # This initializer can take an XML::Node and scrape out any text - # elements with the names given in the "text_elements" array. Each - # element found underneath "parent" with a name in "text_elements" causes - # an attribute to be initialized on the instance. This means you don't - # have to pick out individual text elements in each initializer of each - # class (Route, TrackPoint, Track, etc). Just pass an array of possible - # attributes to this method. - def instantiate_with_text_elements(parent, text_elements, ns) - text_elements.each do |el| - child_xpath = "gpx:#{el}" - unless parent.find(child_xpath, ns).empty? - val = parent.find(child_xpath, ns).first.content - self.send("#{el}=", val) - end - end + # This initializer can take an XML::Node and scrape out any text + # elements with the names given in the "text_elements" array. Each + # element found underneath "parent" with a name in "text_elements" causes + # an attribute to be initialized on the instance. This means you don't + # have to pick out individual text elements in each initializer of each + # class (Route, TrackPoint, Track, etc). Just pass an array of possible + # attributes to this method. + def instantiate_with_text_elements(parent, text_elements, ns) + text_elements.each do |el| + child_xpath = "gpx:#{el}" + unless parent.find(child_xpath, ns).empty? + val = parent.find(child_xpath, ns).first.content + self.send("#{el}=", val) + end + end - end + end - end + end end diff --git a/lib/gpx/gpx_file.rb b/lib/gpx/gpx_file.rb index 6381aea..03bfd99 100644 --- a/lib/gpx/gpx_file.rb +++ b/lib/gpx/gpx_file.rb @@ -22,7 +22,7 @@ #++ module GPX class GPXFile < Base - attr_reader :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :distance, :duration, :average_speed, :ns + attr_accessor :tracks, :routes, :waypoints, :bounds, :lowest_point, :highest_point, :duration, :ns, :time, :name # This initializer can be used to create a new GPXFile from an existing @@ -75,6 +75,9 @@ module GPX else get_bounds = true end + + @time = Time.parse(@xml.find("//gpx:gpx/gpx:metadata/gpx:time", @ns).first.content) rescue nil + @name = @xml.find("//gpx:gpx/gpx:metadata/gpx:name", @ns).first.content rescue nil @tracks = [] @xml.find("//gpx:gpx/gpx:trk", @ns).each do |trk| @@ -98,6 +101,9 @@ module GPX calculate_duration end end + @tracks ||= [] + @routes ||= [] + @waypoints ||= [] end def get_bounds_attr_value(el, possible_names) @@ -199,7 +205,7 @@ module GPX # Serialize the current GPXFile to a gpx file named . # If the file does not exist, it is created. If it does exist, it is overwritten. - def write(filename) + def write(filename, update_time = true) doc = Document.new doc.root = Node.new('gpx') @@ -216,7 +222,10 @@ module GPX meta_data_elem << name_elem time_elem = Node.new('time') - time_elem << Time.now.xmlschema + + @time = Time.now if(@time.nil? or update_time) + time_elem << @time.xmlschema + meta_data_elem << time_elem meta_data_elem << bounds.to_xml diff --git a/lib/gpx/point.rb b/lib/gpx/point.rb index 6eccbf1..7f473d8 100644 --- a/lib/gpx/point.rb +++ b/lib/gpx/point.rb @@ -88,7 +88,7 @@ module GPX # Convert this point to a XML::Node. def to_xml(elem_name = 'trkpt') - pt = Node.new('trkpt') + pt = Node.new(elem_name) pt['lat'] = lat.to_s pt['lon'] = lon.to_s unless time.nil? diff --git a/lib/gpx/route.rb b/lib/gpx/route.rb index d8524f0..53f7997 100644 --- a/lib/gpx/route.rb +++ b/lib/gpx/route.rb @@ -27,17 +27,22 @@ module GPX # automatically logging your progress at regular intervals. class Route < Base - attr_reader :points, :name, :gpx_file + attr_accessor :points, :name, :gpx_file # Initialize a Route from a XML::Node. def initialize(opts = {}) + if(opts[:gpx_file] and opts[:element]) rte_element = opts[:element] @gpx_file = opts[:gpx_file] @name = rte_element.find("child::gpx:name", @gpx_file.ns).first.content @points = [] rte_element.find("child::gpx:rtept", @gpx_file.ns).each do |point| - @points << Point.new(:element => point, :gpx_file => @gpx_file) + @points << Point.new(:element => point, :gpx_file => @gpx_file) end + else + @points = (opts[:points] or []) + @name = (opts[:name]) + end end diff --git a/lib/gpx/track.rb b/lib/gpx/track.rb index daf8585..bc16a31 100644 --- a/lib/gpx/track.rb +++ b/lib/gpx/track.rb @@ -46,7 +46,6 @@ module GPX seg = Segment.new(:element => seg_element, :track => self, :gpx_file => @gpx_file) update_meta_data(seg) @segments << seg - @points.concat(seg.points) unless seg.nil? end end end diff --git a/lib/gpx/waypoint.rb b/lib/gpx/waypoint.rb index f9a7a52..202fe42 100644 --- a/lib/gpx/waypoint.rb +++ b/lib/gpx/waypoint.rb @@ -42,10 +42,19 @@ module GPX # Initializes a waypoint from a XML::Node. def initialize(opts = {}) - wpt_elem = opts[:element] - @gpx_file = opts[:gpx_file] - super(:element => wpt_elem, :gpx_file => @gpx_file) - instantiate_with_text_elements(wpt_elem, SUB_ELEMENTS, @gpx_file.ns) + if(opts[:element] and opts[:gpx_file]) + wpt_elem = opts[:element] + @gpx_file = opts[:gpx_file] + super(:element => wpt_elem, :gpx_file => @gpx_file) + instantiate_with_text_elements(wpt_elem, SUB_ELEMENTS, @gpx_file.ns) + else + opts.each do |key, value| + assignment_method = "#{key}=" + if self.respond_to?(assignment_method) + self.send(assignment_method, value) + end + end + end end # Prints out a friendly summary of this track (sans points). Useful for @@ -67,22 +76,19 @@ module GPX # Converts a waypoint to a XML::Node. def to_xml wpt = Node.new('wpt') - wpt.attributes['lat'] = lat - wpt.attributes['lon'] = lon - if self.respond_to? :name - name_elem = Node.new('name') - name_elem << self.name - wpt << name_elem + wpt['lat'] = lat.to_s + wpt['lon'] = lon.to_s + SUB_ELEMENTS.each do |sub_element_name| + if(self.respond_to?(sub_element_name) and (!self.send(sub_element_name).nil?)) + sub_elem_node = Node.new(sub_element_name) + sub_elem_node << self.send(sub_element_name) + wpt << sub_elem_node + end end - if self.respond_to? :sym - sym_elem = Node.new('sym') - sym_elem << self.sym - wpt << sym_elem - end - if self.respond_to? :ele - elev_elem = Node.new('ele') - elev_elem << self.ele - wpt << elev_elem + unless(self.elevation.nil?) + ele_node = Node.new('ele') + ele_node << self.elevation + wpt << ele_node end wpt end diff --git a/tests/gpx_file_test.rb b/tests/gpx_file_test.rb index 1f3c4d9..0f7f542 100644 --- a/tests/gpx_file_test.rb +++ b/tests/gpx_file_test.rb @@ -2,8 +2,40 @@ require 'test/unit' require File.dirname(__FILE__) + '/../lib/gpx' class GPXFileTest < Test::Unit::TestCase + ONE_TRACK_FILE = File.join(File.dirname(__FILE__), "gpx_files/one_track.gpx") - def test_load_data - GPX::GPXFile.new(:gpx_data => open(ONE_TRACK_FILE).read) + BIG_FILE = File.join(File.dirname(__FILE__), "gpx_files/big.gpx") + + def test_load_data_from_string + gpx_file = GPX::GPXFile.new(:gpx_data => open(ONE_TRACK_FILE).read) + assert_equal(1, gpx_file.tracks.size) + assert_equal(8, gpx_file.tracks.first.segments.size) + assert_equal("ACTIVE LOG", gpx_file.tracks.first.name) + assert_equal("active_log.gpx", gpx_file.name) + assert_equal("2006-04-08T16:44:28Z", gpx_file.time.xmlschema) + assert_equal(38.681488, gpx_file.bounds.min_lat) + assert_equal(-109.606948, gpx_file.bounds.min_lon) + assert_equal(38.791759, gpx_file.bounds.max_lat) + assert_equal(-109.447045, gpx_file.bounds.max_lon) end + + def test_load_data_from_file + gpx_file = GPX::GPXFile.new(:gpx_file => ONE_TRACK_FILE) + assert_equal(1, gpx_file.tracks.size) + assert_equal(8, gpx_file.tracks.first.segments.size) + assert_equal("ACTIVE LOG", gpx_file.tracks.first.name) + assert_equal("active_log.gpx", gpx_file.name) + assert_equal("2006-04-08T16:44:28Z", gpx_file.time.xmlschema) + assert_equal(38.681488, gpx_file.bounds.min_lat) + assert_equal(-109.606948, gpx_file.bounds.min_lon) + assert_equal(38.791759, gpx_file.bounds.max_lat) + assert_equal(-109.447045, gpx_file.bounds.max_lon) + end + + def test_big_file + gpx_file = GPX::GPXFile.new(:gpx_file => BIG_FILE) + assert_equal(1, gpx_file.tracks.size) + assert_equal(7968, gpx_file.tracks.first.points.size) + end + end diff --git a/tests/gpx_files/big.gpx b/tests/gpx_files/big.gpx new file mode 100644 index 0000000..d27410c --- /dev/null +++ b/tests/gpx_files/big.gpx @@ -0,0 +1 @@ +1499.3131500.2751499.7941499.7941500.7551500.2751499.7941499.7941499.7941498.3521495.4681495.4681492.5841494.5071496.4291497.3911496.4291494.9871494.0261495.9491494.5071493.5451493.0651490.6611490.1811490.1811486.3361482.9711482.9711480.0871482.491485.3741489.2191492.5841493.5451497.3911499.3131496.4291493.5451490.6611489.71486.3361483.4511479.6061476.2421476.2421472.8771471.9161473.8381471.4351471.4351471.4351471.9161475.281476.2421477.6841480.0871479.6061476.7221475.281473.3581474.81478.1641478.6451480.5681481.0481482.011480.5681482.9711481.0481480.5681482.011481.0481480.0871482.491483.4511485.8551486.3361486.3361487.7781483.9321481.5291479.6061479.6061477.6841478.1641474.3191471.4351473.3581469.9931469.9931472.3961473.8381445.4791445.961445.4791450.2861451.7281455.0931456.5351457.0151458.9381459.8991457.0151456.0541452.6891451.2471452.6891450.2861449.3251448.3631448.3631448.8441445.4791443.0761440.1921439.7121438.751437.7891435.3851432.5021432.9821431.061427.6951426.7341422.8891419.5241419.5241418.5621421.9271421.9271423.851424.3311427.6951427.6951429.6181427.6951423.851420.4851416.641413.2751410.3911407.5081403.6621399.8171396.9331395.011393.5681392.6071392.1261392.1261391.6461388.2811385.3971387.321387.81389.2421393.0881397.4141401.741401.741401.2591400.2981397.4141394.0491391.6461387.321386.8391388.2811387.81388.2811388.7621391.1651393.0881393.0881396.4521398.8551399.8171396.4521393.0881391.6461389.7231386.3581387.321390.6841394.531394.531397.8941398.8551398.3751395.011391.6461388.2811386.3581390.2041391.1651394.531397.4141396.9331394.0491392.1261388.7621392.6071395.9721399.8171404.1431407.9881411.8331410.8721408.9491405.1041401.2591398.8551396.4521395.4911396.9331395.011393.5681390.6841393.0881395.011397.8941401.741402.221403.6621405.5851408.4691411.8331415.1981418.5621421.4471425.2921426.7341428.6561432.5021436.8281440.6731444.5181449.3251452.6891457.0151460.8611465.6671469.0321473.3581478.6451482.491486.3361490.6611495.4681500.7551504.6011508.9271512.7721517.0981520.4621524.7881527.6721531.5171535.8441536.3241539.6891543.0531546.4181551.7051555.5511560.3571564.2021568.5281570.4511575.2571579.5831583.9091588.7161591.61595.4451598.811603.1361606.9811609.8651614.1911617.5551622.3621625.7271629.0911632.4561635.8211639.6661644.4721647.8371653.6051656.9691661.2961664.661668.5051671.871675.7151680.0411684.8481688.6931693.51697.3451700.7091703.5941706.9581710.8031714.6491718.9751723.3011723.3011727.6261731.4721734.8361738.2011742.0461745.4111748.2951751.6591755.0241758.3891759.8311760.3111763.6761768.0021771.8471775.2121778.5761780.0181782.9021784.8251789.6321789.6321792.9961796.8411799.7251803.091806.4551809.8191813.6641817.0291821.3551824.721828.5651831.9291831.9291827.1231825.6811822.7971819.4321815.5871812.2221808.3771804.0521799.7251797.3221795.3991792.9961791.5541788.191784.3441780.981778.0961772.3281768.9631766.561763.6761762.2341758.8691755.0241752.141750.2181746.3721742.5271739.6431737.241733.3941731.9521727.6261724.2621720.8971719.4551715.611715.1291711.7651708.41705.5161700.7091696.8641696.3841690.6151686.291682.9251678.5991674.7541670.9091668.9861665.1411663.2181662.7381664.661668.5051671.3891675.7151676.6771681.0031683.8861687.7321689.1741689.1741686.291682.9251679.5611675.7151672.8311668.5051664.661664.1791663.2181658.8921656.0081651.6821650.241648.7981646.3951645.4341648.7981652.1631652.1631649.2791646.8761643.5111640.1461641.1081642.551644.4721649.2791652.6441652.6441655.0471658.4111659.8531662.2571664.661666.1021667.5441668.9861670.9091672.8311673.7921674.7541676.1961680.5221681.4831686.771689.1741691.0961692.5391694.9421699.2681701.191705.0351708.41710.3231712.2451714.6491718.9751722.3391724.2621722.821719.4551717.5321714.6491710.8031709.8421704.5551703.5941699.2681698.3061694.9421691.5771691.5771687.2511684.3671681.0031678.1191674.2731669.9471666.1021661.7761661.2961659.3731657.451654.5661651.2021650.241645.9151644.4721643.5111640.1461640.6271639.6661638.2241638.2241636.7821632.9371629.5721628.6111625.2461624.7651620.4391617.0751613.711609.8651605.5391601.2131600.2521599.2911594.0031590.6381586.3131583.4291582.9481579.5831576.6991572.8541570.9321568.0481565.6451561.7991558.4341555.071551.2251547.861544.4951541.1311540.1691544.0151547.3791550.7441555.5511558.4341561.3181565.1641568.0481569.971570.9321571.4121572.3741573.8151575.2571577.6611581.9871586.3131588.2351592.5611594.0031594.9641597.8491602.6551605.5391606.021609.3841611.3071615.1521618.5171621.8811625.2461628.131633.4171636.7821637.2621636.7821633.4171631.9751629.0911626.6881623.3231618.5171617.5551617.5551613.231612.2681611.3071605.5391605.0581601.6941601.2131599.7711599.7711598.811598.811597.3681593.0421589.6771589.6771585.3511583.9091582.4681580.0641582.4681584.391585.8321588.2351589.1971588.7161587.7551587.2741587.2741588.2351588.2351583.9091582.9481578.6221576.2191574.7771572.8541570.4511569.0091564.6831562.281559.8761557.9541554.1091551.7051546.4181545.4571545.4571544.4951543.5341542.5731542.0921539.2081536.3241538.2471540.651541.1311541.6111542.0921545.4571545.9371546.8981547.3791548.3411550.2631552.6671555.071556.9921560.3571564.6831565.1641568.5281572.8541572.8541576.2191577.6611581.0261585.8321589.1971592.5611596.4071598.811600.2521604.0971607.9421609.3841609.8651609.8651613.711618.5171620.921623.8041625.2461628.6111631.9751633.8981637.2621639.6661642.0691645.9151645.4341646.8761648.3181649.761651.6821652.6441655.0471656.4891658.4111659.8531662.7381663.6991664.661666.5831669.9471673.3121673.7921673.7921677.1571677.6381680.0411683.4061685.8091689.6541691.5771693.981694.9421696.8641700.2291703.5941706.9581710.3231712.7261716.0911720.8971722.821723.3011727.6261727.6261730.511733.8751734.3561738.2011743.4881746.8531747.8141751.6591752.6211755.9851757.4271757.9081760.7921762.2341766.0791769.4441775.2121778.5761780.0181781.461783.3831786.2671787.2281788.671791.0731794.9191798.2831799.2451801.1671802.1281802.6091804.5321806.4551807.4161809.3391811.7421812.2221813.6641813.6641812.7031813.6641817.0291817.991817.0291817.991817.511818.9521817.991819.9131817.991816.5481812.2221808.3771807.8971803.5711799.7251797.3221794.9191791.0731791.0731789.1511788.671784.8251781.9411780.4991779.0571778.0961774.7311771.3661769.4441764.1561759.8311757.4271756.9471755.5051752.6211752.141749.7371746.3721744.931743.9691742.0461740.1241738.2011737.241735.7981732.4331730.511728.1071725.7041722.821721.3781718.9751715.611713.2071712.2451710.8031710.3231707.9191704.5551704.0741703.1131698.3061695.9031693.0191689.6541689.6541685.8091682.4451680.0411677.1571672.3511668.9861667.5441665.6221665.1411663.6991659.8531656.4891651.6821647.8371647.8371646.3951643.031638.2241636.3011634.8591631.0141628.131625.7271621.4011618.0361614.6721611.3071608.4231607.9421606.9811605.5391605.0581601.6941598.3291595.4451594.9641592.5611588.7161586.3131585.3511581.9871581.0261577.6611576.6991572.8541570.9321566.6061565.6451563.7211560.3571558.9151557.9541556.9921555.5511552.6671548.3411544.9761544.9761542.0921540.1691536.8051535.3631532.9591531.5171530.5561528.6341526.231524.7881523.8271522.3851518.0591518.0591513.7331513.7331512.7721509.4071508.9271507.9651507.4851506.0421504.6011502.6781502.1971497.3911494.0261490.1811485.3741482.011480.5681480.0871480.0871480.0871480.0871479.1251480.5681482.491486.8161487.2971493.0651494.9871499.3131501.2361506.0421509.8881512.7721517.0981517.5781514.2141512.7721513.2521515.1751511.8111507.4851505.0811504.121501.7171497.3911491.6231488.2581484.8941486.3361488.2581482.491482.491480.5681480.0871479.6061478.1641475.281475.7611473.8381473.3581473.3581474.3191474.81473.8381474.81475.281475.281475.281478.1641479.6061474.3191474.81473.3581472.3961468.0711468.0711465.6671463.7441463.2641463.2641463.7441463.2641465.1871465.6671467.1091469.0321470.9551474.3191470.9551467.591464.2251460.381457.4961461.8221465.6671470.4741474.3191478.6451482.491487.7781491.6231494.9871498.8331499.3131501.2361497.8711497.8711497.8711501.7171505.5621507.0041508.4461507.0041504.121507.0041509.8881512.7721514.6941514.6941516.1361517.5781520.9431520.9431518.0591515.1751519.5011522.3851525.751530.0751533.441533.9211531.5171527.1921526.231527.6721531.5171534.4021535.3631531.5171527.6721527.6721522.8661519.5011515.1751511.8111512.2911515.6561515.6561514.2141510.8491507.0041503.6391500.2751495.9491494.0261490.6611487.2971483.4511480.0871476.7221473.3581469.0321465.1871462.3021456.5351453.171449.8051449.8051446.4411442.5961438.751435.8661429.1371424.3311421.9271418.5621415.1981411.8331408.4691405.5851403.1811402.221398.3751395.011395.011393.0881391.1651394.531397.8941401.2591401.2591397.8941393.5681390.2041385.8781382.5131379.1481379.1481374.8231371.4581367.6131364.2481360.4031357.0381353.6741353.6741350.3091348.8671346.9441344.0611342.1381342.1381341.1771340.2151340.2151340.2151340.2151339.7341337.8121339.7341340.2151340.6961338.2921339.7341342.6191343.0991344.0611346.4641349.3481352.2311353.6741355.1151356.0771353.1931349.3481346.4641345.0221343.0991344.5411347.9061351.271351.271353.1931357.0381357.0381359.9221361.3641358.481355.1151351.7511347.9061345.5021341.6571340.6961342.1381345.0221345.9831345.9831349.3481353.6741357.0381361.8451365.691369.0551372.4191372.4191376.2651379.1481381.5521384.9171384.9171388.2811391.6461395.011398.8551402.221405.5851408.9491409.9111413.2751416.641416.1591414.2371411.8331408.4691405.1041401.741398.8551395.9721396.4521394.0491390.6841386.8391385.8781382.0321382.0321378.1871374.8231370.9771370.0161366.1711362.8061359.4421357.0381352.7121349.8281346.4641342.1381340.6961337.3311333.0051330.1211328.1991328.6791330.1211330.6021327.2381327.2381324.8341321.951320.5081316.6631313.2981308.9721303.2041297.9171294.0721289.2651286.3811281.0941277.2491273.4041269.0781264.2711259.4641256.11249.3711245.0451241.1991237.8351234.9511231.5861227.261223.8961222.9341224.3761227.7411231.1061234.471237.3541241.681247.4481250.8121254.6581258.5031262.3481266.1941270.521272.9231276.7681280.1331280.1331279.6521280.6141282.0551279.6521275.3261271.9611267.6351262.8291258.5031254.6581250.8121246.9671243.1221238.3151234.471232.5481229.6641233.0281236.3931240.7191244.5641247.4481247.4481251.2931254.6581258.9841263.311267.1551269.5581274.8451273.8841270.521266.1941262.3481258.9841256.11252.2541246.0061241.681238.3151234.471231.1061228.2221222.4541219.0891215.2441211.8791209.4761206.1111205.151206.5921208.0341206.5921207.5531209.9561210.9181214.2821218.1281222.9341222.9341226.781246.0061252.2541252.7351236.3931236.3931240.2381243.1221246.4871251.2931256.11259.9451263.791267.1551270.521273.4041276.2881277.7291280.6141281.0941284.4591285.421288.7851289.7461293.5911298.3981301.7621305.1271308.4921309.4531312.8181316.6631320.0271323.3921325.3151323.3921319.5471315.7021310.4141306.0881302.7241299.841296.4751291.6681287.8231287.3431281.0941277.2491273.8841270.521266.6741263.311259.4641259.4641256.581254.6581252.7351248.891245.5251242.1611238.3151236.3931234.9511231.5861228.7021225.8181221.9731218.6081222.4541220.5311217.1671212.8411211.3981207.0731204.1891199.8631196.4981194.0951195.0561198.4211198.4211201.7851204.6691208.0341207.5531204.6691203.7081202.7471202.7471202.2661201.7851201.7851199.3821196.4981194.5751194.5751194.5751195.0561195.0561193.6141193.1331190.731188.3271184.0011182.5591177.2721174.8681171.5041171.9841169.1011167.6581166.6971166.6971166.6971169.1011172.9461176.311173.9071170.0621166.6971163.3331159.9681158.0451154.6811152.2771154.21158.0451160.4481162.3711161.411161.8911160.9291157.5651157.5651162.3711165.7361166.6971169.5811173.4271172.9461176.311180.1561180.1561181.5981184.4821187.8461184.4821184.4821182.5591179.1941177.2721174.8681174.8681173.9071170.5421167.1781166.6971163.3331159.4871155.6421157.0841158.5261161.411161.411164.7751164.7751166.6971168.621171.0231170.5421169.5811169.5811171.5041172.4651172.4651174.8681174.8681178.2331181.1171182.5591178.7141177.7521175.3491177.2721179.6751179.6751178.2331177.2721175.3491173.9071173.4271172.9461171.9841171.5041170.5421171.9841173.4271175.3491176.311178.7141182.0781182.0781181.5981181.1171178.7141176.7911173.9071170.5421168.621171.9841168.1391166.6971162.3711159.4871159.4871162.8521166.2171167.1781167.6581166.2171165.2551163.3331161.411157.5651157.5651154.6811154.21154.21152.7581152.2771151.3161154.21156.1231159.4871163.8131166.6971168.1391171.0231172.9461175.831176.311177.7521181.5981181.1171180.1561176.7911173.9071170.5421166.2171163.3331159.9681156.6031152.7581148.9131145.5481141.2221139.31135.9351133.0511129.6861128.7251126.3221123.4381121.0351117.671114.3051109.0181108.5371104.6921104.6921108.0571110.9411114.3051118.1511121.5151124.3991128.2441130.6481134.0121138.3381141.7031146.0291149.3941152.2771157.0841159.9681163.8131163.3331161.8911158.5261156.1231152.2771150.3551150.8351151.3161148.4321145.0671144.5871144.5871145.0671144.5871140.7411137.8581137.3771134.9741131.6091128.7251125.361122.4771118.6311117.671114.7861111.9021108.5371105.6541101.8081101.3281097.9631097.0011094.1181092.1951091.2341087.8691086.9081084.9851081.141077.2951075.8531072.9691071.0461067.6811063.8361060.4711056.6261055.1841058.5491061.9141065.2781061.4331061.4331063.3551064.7971064.3171064.3171065.2781066.2391067.6811068.6431072.0071075.3721074.8911076.3331076.8141078.7371077.7751076.8141079.2171082.5821086.4271087.3881089.3111092.1951093.6371096.5211100.3661104.6921108.0571111.4211116.2281120.5541125.361126.3221130.1671133.5321135.9351139.781139.781141.2221144.1061141.2221138.8191134.9741133.5321129.6861126.3221122.9571122.9571121.0351117.1891113.8241110.461110.461107.0951104.2121099.8851098.4431095.561092.1951089.7921087.8691084.9851083.0621079.2171075.8531076.3331079.6981079.2171082.5821083.0621084.9851081.621078.2561077.7751076.8141080.1781081.141080.6591082.1011084.9851087.8691087.3881084.0241081.141078.2561077.7751080.6591078.7371074.4111077.7751078.2561078.7371077.7751076.8141077.2951078.2561078.7371078.7371074.8911071.5271071.5271068.1621063.8361059.031056.1461051.821047.0131043.6481041.2451036.9191040.2841040.2841043.6481047.4941050.8581055.1841058.5491062.8751066.2391069.6041072.9691072.9691074.4111077.7751080.6591083.5431086.9081089.7921092.1951095.561096.5211099.8851102.771106.1341110.461112.8631115.2671119.5931122.4771125.8411126.8021127.7641130.1671133.5321134.0121131.6091131.1281133.5321137.8581137.3771140.7411142.6641144.1061142.1841138.3381136.8961134.9741134.4931133.0511132.5711132.091132.5711134.4931136.8961138.3381139.781143.1451146.991143.6251142.1841139.781143.1451146.511149.8741153.2391152.2771150.3551146.991146.511143.1451141.7031142.1841145.5481147.4711144.1061146.0291147.4711151.7971155.6421150.8351149.3941147.4711148.9131148.4321145.0671148.4321145.0671141.7031139.31142.1841146.511146.511150.3551152.2771152.7581155.6421159.0071155.1611153.7191150.3551152.2771155.1611158.5261155.6421156.6031156.6031152.2771149.3941145.5481141.2221138.3381134.9741130.6481127.2831121.5151117.671112.8631108.5371105.6541101.8081097.4821093.1561088.8311085.4661083.5431078.7371078.7371076.3331076.8141078.2561082.1011085.9471086.9081085.9471082.5821080.1781076.8141073.4491069.6041069.6041065.7591065.7591062.3941058.5491055.1841054.2231051.821051.3391047.9741045.5711043.1681044.611044.611046.0521045.5711046.0521047.0131045.5711043.1681042.6871044.611046.0521047.0131048.4551051.3391052.7811054.7041056.6261059.9911060.9521058.0681055.1841055.6651059.031054.7041054.2231051.3391047.4941044.1291040.2841037.41035.9581034.0351032.1131031.6321029.7091027.3061026.8251028.2671030.6711030.191027.3061025.3831023.9411025.3831025.8641025.8641024.4221023.4611023.4611022.981023.9411024.4221028.2671030.6711032.1131029.2291027.3061030.6711030.6711031.6321030.191026.8251023.9411022.51021.0581021.0581021.0581021.0581020.0961019.6151019.6151020.0961020.0961019.1351019.6151012.4061011.4441011.9251011.9251013.3671014.3281013.3671010.0021010.4831012.8861013.8471014.3281014.3281015.291016.2511015.291015.291015.771015.771015.771015.771014.8091015.291020.5771023.9411023.9411024.4221023.4611024.4221023.4611023.4611022.981023.4611024.4221027.3061030.6711030.6711029.7091031.6321031.6321031.6321032.1131031.1511030.6711030.6711030.6711031.1511027.7871027.7871028.7481027.7871027.7871022.981023.4611024.9031023.9411027.7871021.5381021.0581021.5381022.0191022.0191021.5381022.0191021.5381021.5381021.5381022.0191021.5381022.0191021.5381021.5381022.51022.981022.981022.51023.4611022.0191022.981022.51029.2291029.7091029.2291022.51027.3061028.7481023.9411022.981021.5381025.8641028.2671021.5381022.0191022.0191025.3831028.2671028.7481025.3831028.7481028.7481023.4611023.4611023.4611023.9411023.9411022.51023.4611022.981023.4611023.4611025.3831024.9031024.9031025.3831025.8641026.8251027.3061026.8251027.3061030.191034.0351034.0351035.4771035.9581035.4771035.9581034.5161034.9971037.41037.41035.4771039.3231035.9581033.5541035.4771038.3611038.3611038.8421042.6871043.1681045.091047.4941048.4551048.9361049.8971049.8971049.4161051.3391051.3391051.821051.821048.4551048.9361050.8581054.2231055.6651059.9911060.4711063.3551065.2781066.2391066.721067.2011067.2011067.6811070.0851072.9691075.8531076.8141076.8141076.8141077.2951077.7751078.7371077.2951077.2951080.6591081.141082.1011078.7371078.2561077.7751078.2561079.2171078.7371080.6591083.5431085.4661088.8311092.1951093.6371097.0011094.1181094.1181090.2721085.9471084.0241081.621079.6981076.3331072.9691070.0851069.6041067.2011063.8361060.9521057.5881057.5881056.1461053.7421052.7811051.821049.4161049.4161048.9361050.3781052.31056.1461060.4711061.9141065.2781068.6431072.4881076.8141080.6591080.6591084.0241084.5051081.621079.6981078.2561076.8141075.3721079.6981079.2171081.141083.0621082.1011078.7371078.7371076.8141072.9691074.4111078.2561081.621085.9471089.3111093.6371096.5211101.3281105.1731108.5371111.4211111.4211114.7861114.3051118.1511120.0731122.9571124.3991125.8411129.6861130.6481132.091128.7251126.3221128.2441131.6091134.9741137.8581140.7411142.6641144.1061146.991149.8741153.2391154.6811156.1231153.7191155.6421152.2771155.6421151.3161149.3941145.5481148.4321152.7581156.6031159.9681159.9681158.0451155.1611151.3161149.3941149.8741152.2771153.7191157.0841160.4481163.8131163.8131166.2171168.1391171.5041172.4651175.831178.2331180.6361183.041185.4431189.2881189.2881194.0951197.4591200.3441200.3441198.9011196.4981192.6531190.251186.8851186.8851185.9241189.7691190.731192.1721195.0561194.0951192.1721187.8461184.9621181.5981178.7141174.3881171.5041167.1781164.2941160.9291156.1231150.3551146.991142.6641138.8191134.4931130.1671126.8021123.4381120.5541115.7471111.9021108.0571105.6541102.2891098.4431096.041093.6371096.5211099.8851103.251104.6921107.0951110.461111.9021115.2671115.7471119.1121115.7471112.8631108.5371106.6151106.6151109.0181109.9791111.4211114.7861116.7091119.5931120.0731124.3991124.3991125.361125.8411129.2061130.6481132.091132.5711133.5321136.8961140.7411143.1451145.0671146.991151.3161151.3161154.21156.1231159.0071159.4871162.8521164.2941167.6581170.0621168.1391166.6971167.6581170.0621171.5041173.4271176.311179.6751182.5591185.9241189.2881187.8461184.4821183.521186.8851190.251192.1721194.5751196.9791198.9011198.9011202.2661202.2661205.6311206.5921209.4761212.8411211.8791212.8411213.3211216.2051219.571222.4541225.8181228.7021230.6251233.991235.9121239.2771241.1991241.681242.6411245.0451246.4871250.8121254.6581253.6971255.6191258.9841259.9451261.8681264.7521266.1941269.0781271.9611275.3261275.8071279.1711279.6521282.0551283.0171283.9781285.9011289.2651292.631296.4751298.3981301.2821302.2431304.6461308.4921311.8561315.2211319.0661322.9111326.2761330.6021331.0831332.5251334.4471337.3311341.1771343.581345.0221349.3481350.791353.6741354.6351358.481362.8061360.8841357.5191352.7121349.8281347.9061343.0991339.2541335.4081332.5251328.6791324.3541323.3921320.0271316.1821312.3371309.4531309.4531306.0881304.1661301.7621298.3981295.5141295.5141296.4751296.9561299.3591299.841298.8781301.7621299.841296.4751293.5911290.7071286.8621283.4971282.5361283.0171283.4971283.9781283.4971286.8621287.3431288.3041284.9391281.0941281.0941280.6141281.0941283.9781284.9391288.3041291.6681294.5521295.9951298.3981301.7621305.1271308.0111311.3761314.261318.1051320.9891323.8731325.3151326.7571329.161332.0441335.8891336.851340.6961344.0611347.4251347.4251349.3481351.7511354.1541355.1151358.9611358.9611362.8061366.1711369.5351373.3811376.7451382.0321386.3581390.6841394.0491395.9721393.5681390.2041388.7621387.81384.9171383.4741380.111376.2651372.4191372.4191367.6131364.2481360.8841357.5191354.6351349.8281346.4641342.6191339.7341335.4081331.5631328.6791324.3541320.9891318.1051313.7791310.4141307.051307.051308.4921305.6081302.7241299.3591299.841301.7621305.1271305.1271306.0881310.4141310.4141313.2981316.1821316.6631320.0271324.8341329.161333.4861336.851340.6961344.5411345.9831350.791355.11513581361.3641364.7291370.0161373.8611373.8611377.2261377.2261379.1481376.2651372.91369.5351366.1711362.8061357.5191354.6351349.3481345.5021342.6191339.2541336.371332.0441328.6791325.3151323.8731322.4311321.951320.9891320.5081321.4691320.5081316.1821316.1821314.261310.8951311.3761313.2981316.6631320.9891320.0271322.4311324.3541326.2761329.161332.5251332.5251336.371340.2151343.0991346.4641349.8281349.8281354.6351354.1541351.271347.9061344.5411340.6961340.2151338.7731341.6571345.9831349.3481353.1931353.1931357.03813581356.0771352.7121349.3481345.5021341.6571338.2921334.9281331.5631328.6791326.2761323.3921321.4691319.0661316.1821317.1441314.741314.261314.261311.8561309.9341307.051303.6851301.2821297.9171297.9171295.0331292.631289.2651287.3431287.8231288.7851291.1881293.5911296.9561300.8011304.1661305.6081310.4141313.7791316.6631320.0271321.4691325.3151328.6791329.161331.0831335.4081338.2921341.1771344.5411348.3861351.7511355.1151355.5961356.5581356.0771353.1931354.6351351.7511348.8671345.9831343.0991343.0991341.6571338.2921335.4081333.9671330.6021329.6411326.2761328.1991324.8341321.4691318.1051315.2211311.8561308.0111308.4921305.1271303.6851301.2821297.9171295.0331291.1881290.2271287.3431285.9011284.9391284.4591283.4971283.0171283.0171280.6141277.7291278.211276.7681272.9231270.0391266.1941262.3481261.3871257.5421254.1771252.2541251.2931250.8121250.8121248.4091249.3711252.2541254.1771255.6191255.6191254.6581258.0221261.3871261.8681264.2711264.2711260.9061259.4641257.5421254.1771251.2931247.4481245.0451242.6411239.2771234.9511232.0671228.7021224.8571222.4541218.1281215.2441210.9181208.0341207.0731203.7081199.8631203.2271206.1111208.5141212.361215.7251215.7251218.1281221.0121223.4151226.781229.6641231.5861234.9511236.3931238.3151241.1991242.6411246.0061248.4091252.2541252.2541255.6191258.5031260.9061261.3871264.7521267.6351270.0391273.4041275.8071276.7681279.6521281.0941281.5751279.6521276.7681280.1331280.1331281.5751281.5751278.211278.211278.6911277.7291275.3261273.4041273.8841271.9611269.5581268.1161266.6741263.791259.9451262.8291261.3871260.9061257.5421254.6581258.9841261.3871258.0221254.6581250.3321246.9671242.1611237.8351233.0281229.6641225.3371225.3371228.7021232.0671235.9121238.7961241.1991237.3541232.5481229.1831228.7021226.2991226.2991229.6641233.5091237.3541240.7191244.5641248.4091251.2931254.1771251.7741251.7741254.6581259.9451260.4261263.791263.791266.6741268.1161270.0391269.5581267.1551264.7521265.2321266.6741263.791263.791264.2711268.1161270.03912711267.6351267.1551267.1551265.7131263.311260.4261256.581256.11254.6581251.2931250.3321249.8511250.3321250.8121250.8121250.8121249.8511249.8511250.3321249.3711246.4871245.0451241.681236.8731233.5091230.6251227.261224.8571221.4921218.6081214.7631214.2821211.3981207.5531207.0731205.6311208.5141208.5141208.5141208.5141208.9951208.5141209.9561211.8791212.8411214.2821216.6861220.051221.4921222.9341226.2991228.7021231.5861234.9511237.8351241.1991245.0451248.4091248.4091251.2931254.6581257.5421259.9451261.3871264.7521266.6741269.5581272.4421274.8451276.7681278.6911282.0551286.3811289.2651289.7461291.6681295.0331298.8781298.8781302.2431306.0881307.051310.4141310.4141309.9341313.7791314.741319.0661322.4311325.7951328.1991333.4861334.9281337.8121341.6571345.9831351.271354.6351358.481360.8841365.2091369.0551372.4191368.5741365.691368.5741371.9381374.8231379.6291382.9941386.8391390.2041393.5681397.8941400.2981401.2591402.221405.5851408.4691410.3911413.2751416.641416.641417.6011421.4471424.3311427.6951430.5791430.0981432.9821436.8281439.2311436.3471432.9821430.0981426.7341423.851421.9271418.0821414.2371411.8331408.9491405.5851401.741398.3751396.4521394.531393.0881391.1651387.321383.9551379.6291376.7451373.3811369.5351366.6511362.8061358.481354.1541351.271347.4251344.5411341.1771336.851333.4861329.6411329.161325.3151321.4691318.1051314.741312.3371310.8951308.0111306.5691303.6851300.3211297.4371294.0721291.1881287.8231287.8231285.421282.5361279.1711277.7291276.2881272.9231269.0781265.7131263.791260.4261258.5031257.0611260.4261258.0221256.581254.1771250.8121250.8121249.3711246.0061242.6411242.6411239.7571236.3931235.4311236.3931238.7961238.7961237.8351234.9511238.3151242.6411245.0451246.0061246.0061241.681240.7191239.2771234.9511231.5861228.7021228.7021225.3371221.4921218.1281214.7631213.3211209.9561206.5921205.151203.2271201.7851198.4211196.4981193.6141190.251186.8851186.8851184.0011180.6361176.7911174.3881171.5041170.0621168.621165.2551165.2551161.8911159.4871156.1231156.1231159.0071159.9681155.6421152.2771148.4321145.5481142.1841141.2221138.3381137.8581134.0121134.4931132.091128.7251125.8411122.9571121.9961121.0351118.1511121.5151125.8411126.8021127.2831126.3221123.9181122.9571120.0731118.6311115.2671112.8631109.4991106.6151104.6921103.251101.3281100.3661097.4821093.6371091.2341089.3111087.8691084.9851086.9081084.0241081.141081.621079.2171076.8141074.4111072.9691069.6041067.2011067.6811067.2011066.721066.721066.721067.2011067.2011067.6811066.721066.2391062.8751060.9521060.9521058.5491057.1071053.7421053.2621053.7421051.821049.8971049.4161048.4551046.5321044.611040.7641039.8031036.4391034.5161031.1511030.191027.3061030.191031.6321032.1131028.2671024.9031021.0581021.0581017.6931018.1731019.6151019.1351015.771015.771013.3671012.4061012.4061014.8091014.3281014.8091010.9641014.3281009.5221007.5991010.4831010.4831007.1181007.1181005.6771002.7921001.831999.9084997.9858998.4663997.9858997.0244993.6599990.2954990.7759987.8918985.4885982.124980.6821981.1628979.7207977.7981974.9143971.5493970.5881970.1074970.1074967.2236964.3396960.9751958.5718955.207953.7651950.8811951.3618952.323956.1685959.0525959.0525957.6106957.1299955.207953.7651950.4006947.0359944.6326945.594942.2295939.8259935.5935.0195932.6162931.6548930.6936930.6936930.6936931.6548927.8096923.9641921.0803918.677917.7156918.677920.1189920.1189919.6384920.1189919.6384919.1577918.677917.7156918.1963918.1963917.7156917.7156918.1963917.7156918.1963917.2351916.2737916.7544916.7544916.2737916.2737916.7544916.7544918.1963919.1577919.1577919.1577917.7156917.2351917.2351918.677919.1577919.6384920.5996923.0029927.3291931.1743931.1743929.7322928.771928.771929.2515929.2515928.771927.3291926.3677924.9258923.4836924.9258925.4062923.9641920.1189919.6384915.7932914.8318911.4673914.8318915.3125918.1963917.2351920.1189920.1189916.7544913.3899910.0251910.5059909.5447910.0251912.4285913.3899911.4673913.3899913.8704913.3899910.0251907.1411903.2959899.9314898.97895.6055892.241892.241889.8374887.4341886.4729885.031880.7051876.8599873.0144871.5723873.4951876.8599878.7825877.3406873.9756871.0918867.7271863.8818860.5173860.0366860.5173859.5559862.9207866.2852870.1304870.1304873.4951873.4951876.3792879.7437879.7437883.5889886.9534890.3181893.6829896.5669900.8926904.2573907.1411910.5059913.3899914.3511919.1577919.1577913.8704910.0251906.6604907.1411903.7766902.3345898.4893895.1248891.76885.9922882.6277887.4341886.9534890.7986891.2793894.644898.4893901.3733904.7378908.1028908.1028911.948911.948915.7932919.6384923.4836928.2903931.1743932.6162929.2515925.4062923.4836920.1189919.6384915.3125911.948909.5447906.6604910.5059913.8704917.2351917.2351913.8704910.9866907.1411903.2959903.2959904.2573905.6992907.6218909.064911.948915.7932919.1577922.5222926.3677930.2129932.6162936.9419941.2681945.1133949.4392949.4392949.4392945.594945.1133947.0359943.6714939.8259939.3452937.4226933.0967927.8096923.9641921.0803918.677915.3125915.3125913.3899913.3899910.5059910.5059913.8704914.8318910.9866907.6218904.7378902.8152900.8926900.4121899.4507896.0862893.2021891.76887.4341887.9148884.0696880.7051877.821872.5337867.7271864.3625860.998855.23851.8655848.5007844.6555841.2908837.4456832.6392831.6777828.3132824.4678821.1033818.7815.8162812.4514810.5286808.606805.7222803.7996801.877798.5122796.5898795.1475796.5898800.4351803.7996807.6448811.9707817.2581820.6226823.5066824.9485828.3132829.2744827.8323825.9097826.8711827.8323828.3132829.7551827.8323824.9485821.1033823.0259821.1033821.1033821.1033820.6226820.1418819.6614818.7819.1807819.6614821.1033821.1033821.1033820.1418832.6392844.175843.6941822.5452818.7818.7817.2581818.2192814.374812.4514815.3354816.2966819.6614823.5066826.8711829.2744832.1584834.0811835.5229840.3296839.8489843.6941843.2134846.5784849.4622854.2688857.6333861.9595866.2852866.2852871.0918873.0144875.4175872.053872.053868.6885868.6885865.324862.4399862.4399865.8047868.6885871.5723875.8982879.2629883.1082882.6277885.9922887.4341888.8762891.76895.6055898.4893902.3345907.1411910.5059914.3511914.3511917.2351920.1189923.9641923.9641926.8484931.1743935.0195937.9033942.2295945.594948.9585950.4006952.323955.6877955.207957.1299959.5332955.207955.207952.8037950.8811947.5166945.1133941.2681940.3069937.4226934.0581930.6936927.8096927.3291923.4836921.5608917.7156913.8704910.0251906.6604903.7766899.9314898.0088893.6829892.241889.3567886.9534883.5889880.2244878.7825876.3792879.7437883.1082886.4729889.8374894.1636894.1636897.5281900.8926902.3345906.1797910.0251913.8704917.7156918.1963922.5222925.887927.3291930.6936931.1743932.1355935.5939.8259935.5931.6548928.2903923.9641923.9641920.1189920.1189923.9641925.4062928.2903931.6548933.0967931.6548928.771931.1743933.5774935.9807939.3452943.1907944.1521945.1133948.4778951.8425955.207958.0913961.9365965.301968.6655970.5881975.3948978.2788982.124983.5659985.9692983.5659979.7207975.3948972.0303970.5881967.2236963.3784966.7429970.5881974.4336974.4336977.7981977.7981981.6433982.6047981.1628980.6821979.7207976.8369973.4724969.627965.7817964.8203960.9751963.8589964.3396966.7429958.0913960.0137960.9751964.3396967.7041970.5881974.4336978.7595981.6433982.124985.4885988.3728988.8535991.7373996.0632998.947998.9471002.3121005.1961005.1961001.8311003.7541006.1571004.2351000.389997.0244996.0632992.6987988.8535988.8535987.4111985.4885982.124980.6821978.2788974.9143972.511968.1848965.301961.9365960.0137956.1685957.1299959.5332963.3784965.301966.2622962.417959.0525955.6877956.1685954.2458956.6492960.0137960.0137959.5332959.0525955.207955.207951.8425949.4392945.1133945.1133941.7488938.8647935.5932.1355932.1355928.771927.8096924.4451924.4451923.0029920.1189917.2351914.8318914.3511913.3899913.3899915.3125918.677918.677921.5608924.9258925.4062927.3291930.6936930.6936931.6548930.6936927.8096923.9641919.1577915.3125910.9866906.6604903.2959899.9314903.2959906.6604910.5059914.3511917.2351916.7544913.3899910.5059907.1411903.7766904.2573907.6218910.5059913.8704917.2351920.1189921.0803923.4836919.1577914.8318911.4673907.6218905.2185904.2573907.6218910.9866913.3899917.2351921.0803917.2351920.1189923.4836927.8096929.2515932.6162928.771928.771925.4062924.4451926.3677923.9641921.5608918.1963914.8318910.5059907.6218904.7378901.854900.8926896.5669894.1636890.7986889.8374885.9922885.9922884.0696880.7051878.3018881.1858884.5503887.4341890.3181893.2021896.0862893.2021889.8374886.9534883.5889880.2244876.8599874.4563875.8982874.4563871.0918866.2852865.8047862.4399860.5173857.1526857.1526853.3074853.7881851.3848853.3074856.1912857.1526860.5173863.8818863.8818867.7271871.0918874.937878.3018881.6663882.6277885.9922884.0696880.7051876.8599873.4951871.5723870.1304868.2078865.8047867.2466870.6111871.5723872.5337869.6499871.0918874.4563877.821877.821881.1858884.5503888.3955889.3567885.9922883.5889881.6663878.3018877.821873.9756871.5723867.7271867.7271864.3625865.8047869.1692870.1304870.6111867.2466863.8818860.0366856.6719855.23853.3074856.6719860.5173863.8818863.8818865.8047862.4399860.998857.1526857.1526854.2688850.9041847.5396846.0977842.7329839.8489839.8489836.9648838.407841.2908842.7329839.3682838.407835.5229831.6777830.2358827.3518830.7166830.2358833.1196833.6003830.2358830.7166827.3518823.9871821.1033823.9871827.8323830.7166828.3132825.429821.1033818.2192816.2966812.9321809.5674806.2026802.8381801.877800.4351799.4736801.3962801.877802.8381802.8381801.877801.877802.8381805.2415801.3962804.7607801.3962798.5122798.0317798.0317798.0317800.4351801.3962801.877802.8381803.7996805.7222807.6448806.2026803.3188800.4351800.4351798.9929795.6282797.0703799.9543803.7996806.6833808.1255811.9707812.9321810.0479809.0867811.9707811.9707813.8933817.2581817.2581817.7385814.374814.8547811.49807.1641804.7607800.9155797.551798.5122802.3574803.7996806.2026805.2415808.606810.0479813.4128815.3354817.2581816.2966813.8933811.0093807.6448807.6448806.2026808.1255811.9707813.8933817.2581816.7773819.6614814.374814.374811.0093807.1641811.0093807.6448803.7996800.4351797.0703793.2249790.3411785.5344789.8604792.7444793.2249796.5898802.3574806.2026809.0867811.49804.7607799.9543796.5898792.7444788.4185787.9377791.3022795.1475798.5122801.3962803.7996806.2026807.6448809.0867804.2803799.9543799.9543796.5898792.7444787.9377784.5732780.2473784.0925787.457787.457791.3022787.457791.3022793.2249789.3796785.5344786.9763788.4185792.7444795.6282795.6282792.2637789.3796785.5344785.5344782.1699778.3245774.96772.0759772.0759769.1921765.8276765.8276769.6729773.0374773.0374776.4019776.4019777.8438779.2856781.6892785.054785.5344782.1699778.8052774.96772.0759767.75767.75765.8276769.1921772.5566775.9211779.2856783.1311786.0151783.1311782.6506779.7664776.4019775.4404778.3245778.3245773.9985773.9985772.0759768.7114773.0374776.4019772.5566769.1921764.3855762.9434760.0593763.4241763.9045764.3855761.0208760.0593756.2141758.6174761.5015760.54762.9434764.3855767.2695762.9434760.54764.8662768.2307763.9045760.54757.1755753.811750.4465747.0815749.9658751.4077755.7336759.0981762.4626765.8276762.9434759.5789758.6174760.0593761.5015758.137756.2141760.0593756.6948753.3303752.3689756.2141760.54760.0593760.54757.1755753.811749.9658752.8496756.2141759.5789756.6948753.3303749.4851749.9658749.0044745.6396742.7559743.717747.5623750.927751.4077753.3303750.4465752.3689755.2529759.5789762.9434765.8276769.6729768.2307762.9434766.3081768.7114765.3469761.0208761.5015757.1755756.6948761.5015765.3469768.7114773.5181773.5181773.9985769.6729765.3469762.4626756.6948752.3689748.5237746.6011744.6782741.3137737.9492734.5847731.7004730.7393730.7393734.104737.4685741.3137744.1978746.1204749.0044749.0044753.3303756.6948758.6174755.7336750.927752.3689757.1755761.5015761.5015764.8662765.8276768.7114772.0759772.0759769.1921765.8276770.1533772.5566776.4019779.7664782.6506786.0151789.3796793.2249798.0317801.3962805.7222810.0479813.4128817.2581817.2581821.1033823.5066824.9485822.5452822.0645816.7773815.8162816.2966820.6226820.6226820.1418817.7385813.4128813.8933816.7773813.4128816.7773821.1033824.4678829.2744828.3132832.1584832.6392835.5229833.6003828.7939823.9871820.6226820.6226823.9871823.9871821.1033824.9485824.4678820.6226816.7773812.4514809.0867804.2803800.9155799.4736798.0317800.9155800.4351803.7996803.7996799.9543796.5898795.1475791.783787.9377785.054785.054783.1311781.2087777.3633774.96776.8826780.728783.6118786.9763788.4185785.054782.1699780.728777.3633773.9985769.1921764.8662762.4626760.54764.3855768.2307772.0759772.0759772.0759770.1533768.7114765.8276763.9045761.0208763.9045768.2307772.0759771.5952773.5181776.4019780.2473783.6118785.5344789.3796785.5344789.3796793.2249797.0703800.9155803.7996807.1641810.5286811.49816.7773820.1418823.0259819.6614815.3354811.0093807.6448804.2803801.3962798.5122802.3574806.2026810.5286810.5286808.1255806.6833809.5674809.5674805.7222804.2803800.4351800.9155803.7996805.2415803.7996800.4351796.1091796.5898793.2249790.8215789.3796787.9377789.3796786.9763784.0925788.8992792.7444796.5898798.5122802.8381805.2415802.8381800.9155804.2803809.0867812.4514808.606805.2415804.7607800.4351797.0703793.7056793.7056788.4185790.3411793.7056795.6282791.3022787.9377785.5344789.8604793.2249797.0703796.5898799.9543803.3188805.7222808.606808.606811.49813.8933818.2192821.5837825.429829.2744832.6392836.9648840.8101842.2522837.9263834.5618832.6392827.8323826.8711822.0645822.0645818.7823.5066826.8711831.6777836.4844839.8489842.7329839.8489839.8489837.4456833.1196836.4844837.9263839.8489837.9263841.2908845.6169845.1362841.2908837.4456834.0811831.6777835.0425838.407836.4844839.8489843.2134846.5784850.9041853.7881857.6333859.5559862.9207866.2852870.1304873.4951873.9756870.1304866.7659863.4014860.5173863.4014864.8433861.4788856.6719852.8267851.3848848.0203848.0203853.3074856.6719860.998864.3625865.324861.9595858.5945855.7107850.4236847.5396844.175841.2908836.4844835.5229832.6392830.7166830.7166824.9485823.5066820.6226820.1418816.7773816.7773815.8162817.7385820.1418823.9871827.8323830.7166834.0811837.4456833.1196829.7551826.8711826.8711822.5452825.429829.2744832.1584832.1584834.5618837.9263841.2908841.2908845.6169848.9814852.8267856.1912859.0752856.1912852.3459847.0588847.0588842.2522841.7715837.9263838.407835.0425838.407841.7715843.2134846.5784846.5784856.1912872.5337871.5723867.2466868.6885847.0588837.4456832.6392830.2358825.9097825.9097829.2744829.2744831.1973834.5618839.3682836.0037833.1196829.2744825.9097822.5452823.9871820.6226816.7773813.4128810.0479807.1641803.7996800.4351797.0703794.1863794.1863794.1863790.8215789.8604790.8215790.8215788.4185789.3796788.4185786.9763785.054783.6118782.1699783.1311780.2473789.8604780.2473782.6506780.2473781.6892779.7664775.4404773.9985770.1533770.1533771.5952771.5952770.634768.7114765.3469761.5015759.5789756.6948753.811754.2917750.927750.927752.3689755.7336754.7722754.7722754.7722752.8496752.8496752.3689750.4465747.5623746.1204746.1204746.1204746.1204746.6011745.6396744.1978743.2363742.2751745.1589746.6011746.1204749.4851749.9658751.8884753.811755.7336759.0981761.9822765.3469768.7114770.1533773.9985774.4792774.96774.96776.4019779.2856781.2087783.6118781.6892785.5344788.8992788.4185791.3022795.1475798.5122801.877805.2415810.0479810.0479814.8547812.9321814.8547815.3354819.1807822.5452824.9485826.3904829.7551829.7551833.1196834.0811835.5229838.407838.407841.2908842.7329846.0977849.4622850.9041848.0203846.0977843.6941841.7715838.407836.4844835.5229838.8877842.7329845.6169848.5007852.8267856.1912859.5559862.9207865.8047868.2078865.8047864.3625860.998856.6719856.6719852.8267856.6719860.0366860.998861.9595863.8818860.5173863.8818867.7271864.3625866.7659867.7271871.0918867.7271867.2466870.1304874.4563877.3406879.2629882.6277883.1082886.4729887.4341892.241895.6055897.5281900.4121904.2573908.1028910.9866915.3125915.3125918.677922.5222925.887925.4062928.2903928.2903930.2129933.5774933.0967937.4226937.9033939.3452942.2295945.594945.594945.594944.1521940.3069939.8259937.4226937.9033934.0581933.5774932.1355928.771927.8096924.4451923.0029919.6384917.7156914.8318911.4673908.1028903.2959900.8926897.5281897.5281897.0474896.5669894.644891.2793891.2793887.9148886.9534883.5889883.1082881.6663885.5115882.6277879.7437878.3018875.8982873.9756871.0918867.7271863.8818863.8818861.4788861.4788857.6333854.2688851.3848847.5396847.5396844.6555844.6555841.2908837.9263836.4844834.0811830.7166829.2744827.8323824.9485823.5066820.1418817.2581815.3354812.9321811.9707809.0867807.6448806.6833807.1641803.3188799.9543799.9543798.0317796.5898795.6282798.9929796.1091792.7444791.783790.3411788.4185786.9763783.6118782.1699780.2473776.8826775.9211773.0374771.1147770.1533769.1921765.8276764.8662761.9822761.9822759.0981757.6562754.2917753.811752.3689749.0044748.5237748.0432744.6782744.6782742.2751740.833737.9492734.5847731.22726.894727.3748726.4133723.5295722.0874718.2422714.8774711.5129708.1484704.7837704.3032701.4192700.458696.6125694.6897691.3252689.4026688.9221685.5574683.1538683.1538681.2314679.3086679.7893678.3474674.9829673.541671.1377669.6958666.8115663.447663.9275663.447662.0051660.563658.1599657.6792657.1985658.1599661.5244661.5244662.0051662.4856662.0051659.1211655.2759654.7952656.2371655.7566653.834650.4692646.624646.1433642.2981640.3755643.2593646.1433648.5464649.9885653.3533656.7178658.1599656.2371653.3533649.9885648.0659646.624645.6626644.2207643.2593645.1819646.624649.9885651.4304653.834657.1985660.0823660.0823659.6018659.1211660.563662.4856665.3696665.3696666.8115669.6958671.1377672.5796673.0603674.0215676.4248677.3862678.3474680.27684.1155685.5574686.9993690.364693.7285694.6897698.0544699.4963697.5737696.1318696.1318699.0156699.9771703.3418707.6677710.5515714.3967715.3582719.6843722.0874724.9714728.3359729.7778733.1426736.5073736.0266737.9492739.3911743.2363743.717746.6011749.4851752.8496752.8496755.7336758.137760.0593761.9822762.9434763.9045763.9045761.0208761.0208761.9822762.9434766.3081768.2307771.5952774.4792775.4404776.4019778.3245777.8438781.2087782.1699785.054787.9377785.5344786.9763790.8215790.3411793.2249790.3411793.7056794.1863798.9929798.5122801.877801.877801.877799.4736799.4736801.877805.2415805.7222809.0867812.4514815.3354820.1418823.0259823.5066834.5618833.1196837.4456841.2908843.2134845.6169849.9429852.8267856.1912857.6333861.9595865.8047868.6885870.1304873.9756877.3406876.3792872.5337872.5337870.1304867.7271864.3625861.4788845.6169843.6941843.2134839.8489836.9648833.6003832.6392830.2358832.1584828.3132827.3518828.3132830.7166830.7166830.2358832.1584829.2744826.3904823.0259821.5837819.6614816.2966817.2581813.4128810.0479808.606807.1641809.0867810.5286813.4128815.3354817.2581820.6226820.6226822.5452820.6226819.1807819.6614821.1033822.0645823.0259823.5066824.9485826.3904828.3132826.8711828.7939831.1973833.6003836.0037838.407841.2908844.175846.5784845.6169847.0588850.4236850.9041855.23854.7493857.6333858.5945858.5945861.4788861.9595862.4399862.4399861.9595863.4014866.2852869.1692869.1692873.0144873.0144874.4563871.5723868.6885865.324860.998857.6333853.7881853.7881849.4622845.6169841.7715839.3682836.9648837.4456838.8877839.3682839.3682840.3296839.8489842.2522841.7715841.7715843.2134843.2134845.6169848.9814849.9429853.7881855.7107858.5945862.4399866.7659870.6111871.5723872.053869.1692867.2466864.8433869.1692873.4951876.8599879.7437881.6663885.5115881.6663878.7825875.4175872.5337869.1692868.2078865.8047869.6499873.0144873.9756875.8982879.7437880.2244876.8599875.4175872.053871.5723867.2466866.2852861.9595857.6333858.114855.7107851.8655851.3848848.9814846.5784842.7329838.8877838.407835.5229833.1196830.2358833.6003835.0425838.407841.2908844.6555848.5007848.5007845.1362845.1362843.2134839.3682837.9263841.2908841.7715839.3682839.8489836.0037836.4844836.9648837.4456833.6003830.7166826.3904823.0259819.1807817.7385813.8933813.4128811.9707810.5286809.0867812.9321816.7773816.7773820.6226824.4678824.9485826.8711822.5452822.5452819.6614819.1807817.7385816.2966815.8162811.9707809.0867808.1255811.49811.9707817.7385817.2581820.1418820.1418818.2192816.7773815.8162812.9321808.606806.2026802.3574798.5122797.0703792.7444793.7056795.1475798.5122801.877798.5122794.6667791.3022788.4185783.6118782.1699782.6506784.0925784.0925785.5344789.3796785.5344783.6118779.7664777.8438774.4792771.1147769.1921765.3469764.3855761.0208757.6562754.7722752.8496749.4851745.6396740.833739.8718736.9878736.0266732.6621732.6621731.22727.8552724.9714723.5295720.6455718.2422714.8774713.4355711.0322707.6677705.2644701.8999700.458700.458699.0156699.4963702.8611704.3032707.6677710.5515711.9937713.916716.8003720.6455722.5681724.4907725.9326727.3748728.8167727.8552731.22733.1426736.5073736.5073736.9878740.3525739.8718741.7944745.1589748.0432751.8884756.2141755.2529757.6562761.5015765.3469764.8662768.2307771.5952774.4792773.0374770.634771.1147770.634773.9985777.3633780.728780.728784.5732785.054786.4958789.8604789.8604791.3022794.6667793.7056797.0703795.1475798.9929798.9929803.3188806.6833810.0479810.0479813.4128816.2966817.7385822.0645825.9097829.2744834.5618836.0037839.3682842.2522846.5784849.4622847.0588852.3459853.7881855.7107855.23853.7881852.3459849.9429847.5396845.6169844.175840.3296836.0037834.0811832.6392834.5618839.8489843.6941847.5396847.0588844.175840.8101840.8101839.8489843.6941847.5396848.5007849.9429853.7881854.2688855.23856.1912857.6333860.5173860.5173858.114859.5559859.0752857.6333854.2688850.4236846.5784845.1362842.2522837.9263837.4456836.4844833.1196829.2744829.2744827.3518824.9485823.0259823.9871777.8438776.4019779.7664783.1311786.4958790.3411793.7056793.2249804.7607818.7817.7385798.5122795.1475794.6667801.877817.7385815.8162818.2192820.6226825.429824.9485825.9097824.9485825.429828.7939831.6777833.6003837.4456836.9648836.0037832.6392832.6392827.8323828.7939824.9485821.5837822.0645818.7815.3354812.9321813.8933809.5674810.0479809.5674811.49807.6448809.0867810.0479806.6833810.0479807.1641805.2415804.2803805.7222803.7996808.1255807.1641803.7996806.2026802.3574800.9155804.7607806.2026810.5286809.5674812.9321817.7385812.4514815.8162821.5837819.1807822.5452822.5452818.2192811.9707812.9321812.9321816.7773816.7773820.6226821.5837824.4678827.8323833.1196832.1584831.1973826.8711822.5452822.5452818.7823.0259820.6226819.1807821.5837820.6226819.6614823.5066824.9485826.8711832.1584832.1584829.2744828.3132824.9485821.1033819.1807815.3354811.49810.0479806.2026806.2026807.6448805.2415801.3962798.0317798.0317794.1863793.2249789.8604789.8604791.783794.6667796.5898797.551800.9155804.2803804.2803806.6833810.0479814.374811.9707805.7222805.7222799.9543800.4351797.551794.1863798.0317797.551801.877801.877806.2026810.5286809.5674813.4128808.606804.2803804.2803801.3962797.0703793.7056791.783787.9377788.4185791.3022796.5898798.5122801.877801.877806.6833806.6833810.0479811.49808.1255803.7996804.2803801.877798.5122798.5122798.9929794.1863790.8215789.8604786.4958782.1699785.5344782.1699785.5344786.4958790.8215788.4185792.2637791.783787.9377786.9763783.6118784.5732783.1311781.6892779.7664784.0925780.2473784.0925783.1311785.054781.6892780.728777.8438777.3633776.8826773.0374775.4404778.3245782.1699781.2087783.6118787.457792.7444788.8992794.1863793.2249796.5898796.1091800.9155805.7222804.2803809.5674808.1255804.2803800.9155797.551794.1863789.3796789.3796785.5344788.8992791.783793.2249796.5898795.6282792.7444790.3411791.3022795.1475791.783792.7444798.5122797.551791.783794.1863796.1091794.1863792.2637788.4185786.9763789.8604793.7056797.0703795.1475798.9929801.3962801.3962798.9929795.1475791.3022789.3796784.0925781.2087775.9211773.9985769.1921769.6729765.8276761.0208761.5015757.1755755.7336752.3689746.6011748.0432744.1978744.1978742.7559746.6011749.4851752.8496756.6948756.2141759.5789759.0981761.9822764.8662767.2695770.634772.0759771.5952768.2307768.7114766.7888769.6729773.5181776.8826778.8052781.6892785.5344784.5732788.4185788.4185783.1311782.1699778.8052775.4404772.5566773.0374769.1921751.4077747.5623747.5623749.9658752.3689750.4465747.0815743.2363740.833737.4685737.4685734.104733.6233737.4685739.8718743.2363743.717739.8718738.9106736.0266738.9106742.7559740.3525740.3525738.9106742.2751743.2363746.6011748.5237751.8884753.811749.9658747.0815748.5237751.4077752.3689755.2529754.2917751.4077750.927754.2917757.1755758.137761.9822764.8662768.2307768.7114765.3469761.9822761.9822758.6174758.6174759.5789761.5015758.6174761.9822760.0593756.6948756.6948752.3689750.927751.8884754.2917754.7722757.6562761.0208761.0208758.6174755.2529752.3689750.4465751.4077749.9658751.8884748.0432749.9658751.4077753.811757.1755757.6562760.54761.0208764.3855761.5015759.5789756.6948756.2141752.8496750.4465746.6011747.0815745.1589747.5623750.927754.2917754.7722751.8884748.5237745.6396744.6782741.7944738.9106737.4685738.9106742.7559746.1204748.0432750.927754.7722756.2141755.7336752.3689748.5237745.6396742.2751738.9106735.5459733.6233733.6233733.6233729.7778726.894725.9326728.8167729.7778732.1814735.5459736.0266739.3911742.7559745.1589742.2751739.3911736.0266731.7004731.7004730.2585727.3748724.4907723.5295720.1648718.7229716.8003713.916711.0322711.9937713.916715.8389714.3967713.4355716.8003720.6455720.6455724.01727.3748728.3359732.6621734.104730.7393729.7778726.4133722.5681719.6843716.3196711.5129711.9937708.1484707.6677712.9548712.9548714.3967718.7229718.7229723.0488723.0488719.6843717.281714.8774711.0322711.0322707.187706.7063702.3804701.8999698.5349698.0544697.093693.2478690.364686.9993689.4026692.7673696.6125700.458698.5349694.6897693.2478689.8833686.5188683.6345680.27677.3862677.3862680.27683.6345686.5188687.48683.6345680.7507677.3862674.0215670.657666.8115663.447663.447660.0823660.563658.1599657.6792661.5244661.5244664.8889666.8115669.2151671.1377674.5022677.8667677.3862680.7507683.1538686.5188689.8833693.2478695.6511691.8059688.9221686.5188683.6345683.1538680.7507677.3862675.4634676.4248679.3086682.6733683.6345680.7507680.7507677.3862677.3862674.0215672.0989667.7727664.4082660.0823656.7178653.834650.4692646.624643.2593639.8948639.8948643.74645.1819641.8174638.4529637.9722641.3367640.3755641.8174644.7012647.5852651.4304655.2759659.6018659.6018661.5244663.9275662.0051657.6792657.6792654.3147654.3147657.6792661.0437663.9275671.1377672.5796671.1377669.2151665.8503665.3696663.447664.4082666.8115670.1763667.2922663.9275662.4856658.6404655.2759651.4304648.0659644.2207640.3755642.2981645.6626648.5464651.9111652.8726655.7566659.6018662.9663659.1211659.1211656.2371653.3533649.9885646.624644.2207642.7788646.1433649.5078652.3918654.3147657.6792657.6792661.5244663.9275667.7727667.7727670.1763671.6182673.541669.6958666.3308665.8503662.9663658.1599654.3147653.834652.3918649.0271647.5852643.74646.624649.9885654.3147654.3147657.6792661.5244662.0051662.0051659.1211655.7566654.3147650.9497653.3533656.7178656.7178659.1211662.4856665.3696661.5244657.6792653.834650.4692647.5852645.6626649.5078651.9111653.3533656.7178660.0823663.9275665.8503668.7344672.0989674.9829674.5022671.6182668.2537664.8889661.5244658.1599655.2759649.0271649.0271651.9111653.834654.3147656.2371657.6792659.6018656.2371653.834654.7952654.7952657.6792661.0437657.6792657.6792654.7952651.4304652.3918648.5464645.1819641.8174639.4141635.5686635.5686639.4141640.3755640.856638.4529634.1267630.7622630.2815628.3589629.3201630.7622634.1267637.0107639.4141642.7788639.4141637.9722634.6074633.646631.7234629.3201627.8782624.5137620.6685616.3423615.8618614.4197612.4971609.6133605.2874604.8066601.4419600.9612599.5193602.4031605.2874606.7292610.0938609.6133610.5745614.4197615.3811618.2649621.1492625.4749629.3201632.6848636.0496638.4529639.8948642.7788645.1819640.856636.5303632.2041629.3201625.9556623.0718619.707615.8618615.3811612.0166608.6519605.2874602.4031600.4807596.6355594.2322592.7903589.4255588.4644586.5415585.0996587.5027590.8674593.7515596.6355597.5967600.4807604.3262607.21604.3262602.4031598.0774596.6355597.5967599.0386602.4031605.7681605.7681609.1326613.939617.7842621.1492622.5911618.7456615.8618613.939612.0166607.21606.2485605.2874598.5579594.7126591.8289595.1934596.6355593.2708593.2708595.1934599.0386602.4031605.2874606.2485603.8452600.4807599.5193603.3645603.3645606.2485608.1714611.0552614.4197611.0552607.21603.3645603.3645601.4419597.5967594.7126591.3481590.387586.5415583.1768583.6575579.8123578.3704574.5251572.1218569.7185566.3538565.3926562.0281562.5085562.5085565.8733562.5085565.3926568.7571572.1218575.0059575.967579.8123579.8123583.6575585.5801587.022590.387593.2708596.6355593.2708590.8674505.3102505.7909505.7909505.3102506.2715509.6361513.0007514.9233518.2878515.8846516.8459519.2493521.6526525.0172527.4204530.7852531.2657534.6304537.995537.995541.8402541.3595544.7242543.7628548.0889551.4534553.8567555.7793557.7021556.26554.8179553.376554.3374557.2214557.7021561.0667564.9119564.9119565.3926562.5085551.9341551.4534552.4146552.4146551.4534552.4146553.8567554.3374553.376552.8953553.376553.8567555.2986555.7793552.4146553.376551.9341551.9341551.4534550.9727553.376553.376552.8953553.376554.3374553.8567554.3374554.3374553.8567554.8179554.8179573.0833574.5251575.4863578.8511582.2156582.6963582.6963582.2156576.9285574.0444571.6409567.7957566.8345563.9504559.6248556.7407553.376549.5308544.2437546.6469549.5308552.4146555.2986557.2214554.3374552.4146549.5308548.5693548.0889551.4534551.4534555.2986559.6248562.9893566.3538569.7185569.7185573.564576.9285576.9285579.8123584.1382582.6963579.8123576.9285574.0444569.2378565.8733562.0281558.6633555.2986555.7793557.7021556.26551.4534551.4534547.6082547.6082544.2437542.3209540.3983537.5143534.1497532.2271528.8625530.3044533.6689534.1497537.5143538.4757538.9563540.3983541.8402539.9176537.0337536.5531535.5916536.0724534.6304533.6689533.6689537.0337540.3983543.7628543.2821539.9176539.4369540.8789544.7242544.7242548.0889548.0889551.4534554.8179558.1829560.5859564.4312563.9504567.7957567.7957571.1604573.564574.5251573.564570.6797573.0833576.4478578.8511580.293583.6575586.0608587.022590.387593.2708592.3096588.9451585.5801582.2156582.2156582.2156578.8511577.8896576.9285580.7737582.6963579.3315578.3704578.3704581.7349582.6963585.0996587.9834591.3481595.1934598.0774600.4807603.3645600.4807597.116593.2708593.2708590.387587.9834590.8674593.2708589.9062586.0608582.6963578.8511576.4478575.0059572.1218568.7571565.3926565.8733567.3152565.8733562.9893563.47565.8733563.9504563.47566.8345567.3152563.9504565.8733569.7185569.7185569.2378566.8345563.9504560.5859558.1829561.0667563.9504564.9119566.3538569.7185571.1604574.5251574.5251572.1218570.6797572.6025571.6409573.0833572.1218573.564572.6025571.6409569.7185566.8345563.47560.1052562.9893566.3538567.3152568.2764568.7571567.3152564.4312563.9504561.5474559.144558.1829555.7793552.4146550.9727555.7793555.2986551.4534551.4534552.4146552.8953551.4534550.4922547.1274543.7628547.6082542.3209543.2821542.3209541.8402545.2048542.3209542.8015543.2821541.3595540.8789541.8402540.8789539.4369538.9563539.9176542.8015545.6855544.2437544.2437545.2048545.6855546.6469548.0889549.05551.4534554.3374555.7793560.1052560.1052555.7793556.7407558.1829560.1052557.7021556.26556.7407553.376553.376550.4922551.9341550.4922552.8953554.8179556.7407557.7021557.7021560.5859563.9504564.9119566.3538563.47560.1052557.2214554.8179550.9727547.6082544.2437540.8789540.3983537.0337538.4757542.3209543.2821543.2821545.2048545.2048543.2821541.3595538.4757542.3209545.6855549.05551.9341551.4534548.5693545.2048541.8402539.9176537.0337540.3983543.2821546.6469547.1274550.4922552.8953552.8953551.4534550.9727554.8179557.7021561.5474562.5085566.3538566.3538569.7185570.199572.1218574.5251577.4092580.7737580.7737584.1382587.9834589.9062592.7903596.1548594.2322590.8674587.9834584.6189581.2544578.8511575.4863575.4863572.1218575.4863578.8511582.6963584.1382580.293576.9285573.564573.564576.4478579.8123581.2544577.4092574.5251571.1604566.8345563.47559.6248559.6248557.2214557.2214553.376550.0115548.5693547.1274549.05552.4146553.376554.8179557.7021560.1052561.5474562.9893564.4312562.5085562.9893561.0667558.1829559.6248563.47564.4312561.0667558.1829562.5085561.5474559.6248558.6633558.1829554.3374552.8953553.376551.4534548.5693545.6855540.8789538.4757536.0724533.6689530.3044526.4591526.9398525.0172522.1332518.7686515.4041513.4814512.52511.078507.7135503.3875503.3875500.9841497.6196494.255491.8517488.4872485.1224481.7578484.1611482.7192478.8739476.9513473.5867476.9513479.3545477.4319474.548471.1833468.2993464.9348468.2993467.8187464.9348461.5702462.0508463.0121462.5314461.5702458.6862459.1669456.283457.2443457.725455.8022453.8796450.515450.515449.073448.5924445.7084441.8632442.8245441.8632438.0178437.5371440.9019438.0178436.5759433.2113429.8466425.5208427.4434430.808428.4047426.4821429.8466433.2113436.5759440.9019442.8245446.1891449.5537449.073447.631450.9956452.9182454.3602450.9956449.5537447.1503446.1891446.1891447.1503447.1503443.3051441.3824437.5371434.6533431.2886427.924425.5208428.4047431.7692431.7692428.8854430.3273433.6919437.0565439.9404443.3051444.2665444.7471445.7084444.7471442.3439442.8245444.7471448.1118444.7471442.8245439.4597438.9791435.1339431.7692435.1339435.6145437.0565438.9791441.8632445.2277447.631447.631450.515447.1503443.7858443.7858442.8245445.2277443.7858439.9404438.0178434.1726430.808430.808432.7307434.6533436.5759439.4597437.5371439.9404438.4985437.0565433.6919433.2113431.2886434.6533435.1339438.0178437.5371438.0178437.5371437.5371436.5759435.6145437.0565441.3824436.5759435.1339436.0952435.6145437.0565435.1339433.6919430.3273426.4821426.9628429.8466431.2886433.6919434.1726436.0952440.4213436.5759436.5759436.0952436.0952432.7307431.7692428.8854425.5208422.156420.2334424.0787427.924430.808431.7692428.4047426.4821424.5594423.1174422.6367422.156423.1174421.1948421.6754420.7141421.6754420.2334416.3882417.3496420.2334417.3496413.0236413.5043409.1783405.8137405.8137402.4491398.6038394.278390.9132386.5874383.7032379.858377.9354374.5708371.2063367.361365.9189362.0737362.0737360.6317362.0737365.4384369.2837369.2837371.2063371.6869372.1675372.1675372.1675372.6482371.2063372.1675371.6869370.7256371.2063372.1675371.6869371.2063371.6869399.0844402.9297405.8137401.9685398.6038401.4878405.333406.2943409.1783412.5428416.3882419.7528423.1174426.9628427.924430.808432.25435.6145432.25428.4047426.9628423.1174419.7528416.8689416.3882413.9849411.101410.6202407.7363404.3717402.9297399.5651396.2006392.3553389.9519388.51385.626381.7806379.858379.3774376.4935375.0515371.2063371.2063368.803366.3995363.5157363.035362.5543360.1511357.7478356.3058352.9412352.4606349.0958349.0958347.6539347.6539346.6926347.6539346.6926346.212343.3279343.3279345.2506343.3279341.886343.3279342.8473342.8473340.9247339.9634338.0408338.5215335.1567336.1182337.5601340.9247340.9247343.8086347.1732347.1732343.3279344.2894342.3667340.4441339.0021339.4827336.5989335.6373335.1567332.7535334.1954330.8309328.4276326.0242325.063321.6984318.8143315.9304313.0465312.0852310.1625306.7979303.9139303.4332300.5493299.1073299.1073297.6654301.5106304.8752298.1461299.588299.1073298.1461295.262291.8975289.0135287.5714289.4941286.1295286.6102287.0908287.0908285.6488285.6488282.765282.2843281.323280.3617279.4003278.9197276.9971273.6324275.0745276.0356275.5551274.113273.6324273.6324272.6711272.6711272.6711273.1519272.6711272.1904271.7097270.7484270.2677270.2677269.3065267.8645266.9032265.9419271.2291270.2677266.4225266.9032266.9032266.9032269.3065266.9032266.4225270.7484265.9419265.9419267.3839265.9419266.4225265.4613266.4225269.7871266.4225265.9419264.9806265.9419264.9806264.9806265.4613268.3451264.4999263.0579264.9806264.4999264.4999265.4613266.9032267.8645267.8645267.3839265.4613265.9419265.9419264.9806264.9806264.4999266.9032265.4613265.4613268.3451267.8645266.4225265.4613262.5771263.5386263.5386263.5386265.4613268.8258264.9806265.4613265.9419264.4999263.5386263.5386262.5771265.9419262.0966261.616265.4613265.4613264.0193261.1353261.616264.9806267.3839266.4225265.4613261.616261.616260.6545262.0966264.9806264.9806267.8645267.8645270.2677269.3065268.3451267.3839267.3839268.8258270.7484268.3451272.1904268.8258269.7871272.1904271.2291271.2291272.6711271.7097270.7484270.7484271.2291269.7871268.3451272.6711273.6324274.113268.8258274.5938275.0745269.3065269.3065271.7097275.5551275.5551272.1904272.1904271.7097273.1519273.6324273.1519272.1904272.1904271.7097272.1904276.5164276.0356273.6324274.5938275.0745275.5551276.0356276.0356276.9971275.0745276.0356276.5164276.9971276.5164276.5164276.9971277.9583279.8809277.4777278.439282.765278.9197277.4777279.4003281.323280.8424280.8424285.1682281.8036281.8036283.2456283.7262284.6876283.7262284.6876288.0522289.0135291.8975293.3394294.7814295.7427291.8975291.8975293.3394295.262298.1461300.0687300.0687300.5493301.0299302.9525306.7979303.4332302.4719304.8752305.356307.2786311.1238311.1238313.5272315.4498337.5601345.2506344.2894350.0573337.5601318.8143318.8143320.2563320.2563319.7756318.8143324.5823346.212343.8086338.0408319.7756319.295320.7371323.1404321.6984334.1954350.5378323.621322.179325.5436325.5436321.6984320.7371324.1016323.621324.5823326.9856329.8695333.2341333.2341334.1954334.6761336.1182335.6373338.0408334.1954334.1954337.5601340.9247340.4441341.886345.2506346.6926350.0573353.9026353.9026356.3058352.4606351.4991350.0573350.0573352.4606355.8252355.8252358.2284359.1897361.5931360.1511355.8252354.3832354.8638356.3058357.7478356.3058356.3058355.8252358.2284361.5931363.9963366.8802367.361369.7643369.7643367.8416371.6869367.8416367.8416363.9963360.1511359.6704357.2671354.3832351.4991353.9026357.7478360.6317363.9963365.4384369.2837369.2837374.0901377.4548376.9742380.8195381.3379.3774382.2614378.4161379.3774380.3387380.3387379.858381.7806380.3387380.3387382.2614378.4161379.3774376.0128376.4935374.5708371.6869368.3223373.1289371.6869368.3223368.3223365.4384366.3995369.7643369.7643365.9189365.9189369.2837371.6869366.3995365.9189364.4769362.5543361.1124357.7478355.8252354.3832353.9026358.2284360.1511354.3832354.3832358.2284354.8638354.8638356.3058357.7478361.1124358.709357.2671353.9026350.5378353.9026355.3445351.9799355.3445355.8252360.1511359.6704363.5157363.5157364.4769365.9189369.7643366.8802363.9963363.035360.6317357.7478354.8638351.9799350.0573347.1732343.3279339.9634336.1182336.1182331.7921332.2728333.2341337.5601338.5215343.8086346.212349.0958351.4991355.3445351.4991347.1732347.6539346.212350.5378350.0573353.4219354.8638357.7478360.1511363.5157361.1124362.5543362.5543363.5157363.5157363.5157363.5157364.4769363.9963363.5157363.9963364.4769365.9189362.0737359.1897357.7478360.1511361.1124363.035365.9189366.3995368.3223368.3223367.361367.361363.5157360.1511359.6704356.7864355.3445351.9799351.9799348.6152348.6152348.1346348.1346348.1346350.5378352.4606354.8638357.7478357.7478357.2671357.7478360.6317364.9576367.361370.7256370.7256372.1675375.5321375.5321378.4161379.3774378.4161375.5321372.1675370.7256369.2837371.6869372.1675370.7256369.2837365.9189363.035363.035361.1124360.6317363.9963366.8802365.9189365.9189365.9189365.9189366.8802368.3223371.6869373.6095375.5321377.4548379.3774382.7421386.1067388.9906387.5486389.4712391.3938391.3938392.8359396.2006400.0459400.5265402.9297401.4878400.0459396.6812392.8359390.4326387.5486388.9906392.8359397.1617397.6425398.1232395.7198393.7972394.278394.7585391.3938388.51388.51391.8745395.2391396.6812395.2391391.8745394.278397.6425400.5265403.4104404.8523401.4878401.0071401.9685402.9297401.4878398.6038395.2391393.7972392.8359391.8745389.9519391.8745390.4326394.278394.278397.1617397.6425401.9685401.4878398.6038396.2006399.0844401.9685405.333406.2943407.2556407.7363404.8523405.8137407.7363405.8137403.8911402.4491400.0459396.6812396.2006394.278397.6425401.4878402.9297406.2943406.7749404.8523403.4104402.4491401.4878398.1232398.1232394.7585392.3553389.9519390.4326390.4326391.8745395.2391397.6425401.0071402.4491402.9297403.8911400.0459395.7198392.3553391.8745390.9132395.7198394.7585396.2006398.1232396.6812397.1617395.2391396.6812399.5651401.4878398.6038397.6425394.278392.3553392.8359391.8745407.2556 \ No newline at end of file diff --git a/tests/output_test.rb b/tests/output_test.rb new file mode 100644 index 0000000..c8153e7 --- /dev/null +++ b/tests/output_test.rb @@ -0,0 +1,114 @@ +require 'test/unit' +require File.dirname(__FILE__) + '/../lib/gpx' + +class OutputTest < Test::Unit::TestCase + + include GPX + + def test_new_gpx_file_from_scratch + gpx_file = GPXFile.new + + track = Track.new(:name => "My First Track") + segment = Segment.new + + track_point_data = [ + {:lat => 40.036926, :lon =>-105.253487, :time => Time.parse('2005-12-31T22:01:24Z'), :elevation => 1737.24}, + {:lat => 40.036604, :lon =>-105.253487, :time => Time.parse("2005-12-31T22:02:01Z"), :elevation => 1738.682}, + {:lat => 40.036347, :lon =>-105.253830, :time => Time.parse("2005-12-31T22:02:08Z"), :elevation => 1738.682}, + {:lat => 40.035574, :lon =>-105.254045, :time => Time.parse("2005-12-31T22:02:20Z"), :elevation => 1737.24}, + {:lat => 40.035467, :lon =>-105.254366, :time => Time.parse("2005-12-31T22:02:29Z"), :elevation => 1735.798}, + {:lat => 40.035317, :lon =>-105.254388, :time => Time.parse("2005-12-31T22:02:33Z"), :elevation => 1735.798}, + {:lat => 40.035274, :lon =>-105.254431, :time => Time.parse("2005-12-31T22:02:49Z"), :elevation => 1736.278}, + {:lat => 40.035274, :lon =>-105.254431, :time => Time.parse("2005-12-31T22:02:54Z"), :elevation => 1739.643}, + {:lat => 40.035317, :lon =>-105.254431, :time => Time.parse("2005-12-31T22:05:08Z"), :elevation => 1732.433}, + {:lat => 40.035317, :lon =>-105.254431, :time => Time.parse("2005-12-31T22:05:09Z"), :elevation => 1726.665}] + + track_point_data.each do |trk_pt_hash| + segment.points << TrackPoint.new(trk_pt_hash) + end + + track.segments << segment + gpx_file.tracks << track + + waypoint_data = [ + {:lat => 39.997298, :lon => -105.292674, :name => 'GRG-CA', :sym => 'Waypoint', :elevation => 1766.535}, + {:lat => 33.330190, :lon => -111.946110, :name => 'GRMPHX', :sym => 'Waypoint', :elevation => 361.0981, + :cmt => "Hey here's a comment.", :desc => "Somewhere in my backyard.", :fix => '3d', :sat => "8", :hdop => "50.5", :vdop => "6.8", :pdop => "7.6"}, + {:lat => 25.061783, :lon => 121.640267, :name => 'GRMTWN', :sym => 'Waypoint', :elevation => 38.09766}, + {:lat => 39.999840, :lon => -105.214696, :name => 'SBDR', :sym => 'Waypoint', :elevation => 1612.965}, + {:lat => 39.989739, :lon => -105.295285, :name => 'TO', :sym => 'Waypoint', :elevation => 2163.556}, + {:lat => 40.035301, :lon => -105.254443, :name => 'VICS', :sym => 'Waypoint', :elevation => 1535.34} + ] + + waypoint_data.each do |wpt_hash| + gpx_file.waypoints << Waypoint.new(wpt_hash) + end + + route_point_data = [ + {:lat => 40.035467, :lon =>-105.254366, :time => Time.parse("2005-12-31T22:02:29Z"), :elevation => 1735.798}, + {:lat => 40.035317, :lon =>-105.254388, :time => Time.parse("2005-12-31T22:02:33Z"), :elevation => 1735.798}, + {:lat => 40.035274, :lon =>-105.254431, :time => Time.parse("2005-12-31T22:02:49Z"), :elevation => 1736.278} ] + + route = Route.new() + route_point_data.each do |rte_pt_hash| + route.points << Point.new(rte_pt_hash) + end + + gpx_file.routes << route + + gpx_file.write(output_file(name_of_test)) + + + written_gpx_file = GPXFile.new(:gpx_file => output_file(name_of_test)) + + assert_equal(File.basename(output_file(name_of_test)), written_gpx_file.name) + assert_equal(1, written_gpx_file.tracks.size) + assert_equal(1, written_gpx_file.tracks[0].segments.size) + assert_equal(track_point_data.size, written_gpx_file.tracks[0].segments[0].points.size) + assert_equal(track_point_data.size, written_gpx_file.tracks[0].points.size) + + # Make sure each point in the segment has the attributes it was initialized with + written_segment = written_gpx_file.tracks[0].segments[0] + track_point_data.each_with_index do |trk_pt_hash, index| + trk_pt_hash.each do |key, value| + assert_equal(value, written_segment.points[index].send(key)) + end + end + + + + # Make sure the one route has the attributes we initialized it with + assert_equal(1, written_gpx_file.routes.size) + written_route = written_gpx_file.routes[0] + assert_equal(route_point_data.size, written_route.points.size) + route_point_data.each_with_index do |rte_pt_hash, index| + rte_pt_hash.each do |key, value| + assert_equal(value, written_route.points[index].send(key)) + end + end + + # Make sure the waypoints have all of the attributes we initialized them with + written_waypoints = written_gpx_file.waypoints + assert_equal(waypoint_data.size, written_waypoints.size) + waypoint_data.each_with_index do |wpt_hash, index| + wpt_hash.each do |key, value| + assert_equal(value, written_waypoints[index].send(key.to_s), key) + end + end + + expected_value = sprintf(THE_WORKS, gpx_file.time.xmlschema) + assert_equal(expected_value, IO.read(output_file(name_of_test))) + + end + + def name_of_test + caller[0] =~ /`test_([^']*)'/ and $1 + end + + def output_file(test_name) + File.join(File.dirname(__FILE__), "output/#{test_name}.gpx") + end + + THE_WORKS = "\n\n \n new_gpx_file_from_scratch.gpx\n \n \n \n \n \n \n \n \n 1737.24\n \n \n \n 1738.682\n \n \n \n 1738.682\n \n \n \n 1737.24\n \n \n \n 1735.798\n \n \n \n 1735.798\n \n \n \n 1736.278\n \n \n \n 1739.643\n \n \n \n 1732.433\n \n \n \n 1726.665\n \n \n \n \n GRG-CA\n Waypoint\n 1766.535\n \n \n GRMPHX\n Hey here's a comment.\n Somewhere in my backyard.\n Waypoint\n 3d\n 8\n 50.5\n 6.8\n 7.6\n 361.0981\n \n \n GRMTWN\n Waypoint\n 38.09766\n \n \n SBDR\n Waypoint\n 1612.965\n \n \n TO\n Waypoint\n 2163.556\n \n \n VICS\n Waypoint\n 1535.34\n \n \n \n \n \n 1735.798\n \n \n \n 1735.798\n \n \n \n 1736.278\n \n \n\n" + +end diff --git a/tests/track_test.rb b/tests/track_test.rb index d9d4229..3744976 100644 --- a/tests/track_test.rb +++ b/tests/track_test.rb @@ -11,7 +11,7 @@ class TrackTest < Test::Unit::TestCase def test_track_read assert_equal("ACTIVE LOG", @track.name) - assert_equal( 364, @track.points.size) + assert_equal( 182, @track.points.size) assert_equal(8, @track.segments.size) assert_equal("3.07249668492626", @track.distance.to_s) assert_equal(1267.155, @track.lowest_point.elevation)