calc_profit 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 64a81fb45103f8d239c3aa1c9f405d74297c35a4
4
+ data.tar.gz: 49efa8af1b7e550ffb2f423f866ae228030d84d6
5
+ SHA512:
6
+ metadata.gz: e34775a6ca4ea497b548bda935f1f04f677521fae27baa86935d47d45b4b9cea905b22609db93174d1a04ecee07168cbadc381ba4f3e6b54853cebcdf3ec8dd4
7
+ data.tar.gz: 2b1e6f5af7894ab734bf525687f690ff7f99754cf74ff23f96993cd6b78fac2aad6ab6fc298b26bcb0e082a0ad95dc259fc8d11014b45de222b7068f8d2322f3
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *~
2
+ *.aux
3
+ .bundle/
4
+ /driver.pdf
5
+ /Trans.tex
6
+ /pkg/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Install ADDED
@@ -0,0 +1,4 @@
1
+ sudo cp -v bin/calc-profit.rb /usr/local/bin/calc-profit
2
+ sudo cp -v bin/tm-profit.rb /usr/local/bin/tm-profit
3
+ mkdir -p ~/lib/ruby/calc-profit
4
+ cp -v lib/calc-profit/*.rb ~/lib/ruby/calc-profit
data/README.rdoc ADDED
@@ -0,0 +1,23 @@
1
+ = calc_profit
2
+
3
+ Description goes here.
4
+
5
+ == Installation
6
+
7
+ === Prerequisites
8
+ * Ruby version 2.1.2 or later
9
+
10
+ == Contributing to calc_profit
11
+
12
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
13
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
14
+ * Fork the project.
15
+ * Start a feature/bugfix branch.
16
+ * Commit and push until you are happy with your contribution.
17
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
18
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
19
+
20
+ == Copyright
21
+
22
+ Copyright (c) 2015 Daniel E. Doherty. See LICENSE.txt for
23
+ further details.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec, :tag) do |t|
5
+ t.rspec_opts = "--tag ~online"
6
+ end
7
+
8
+ require "rake/testtask"
9
+ Rake::TestTask.new(:test) do |test|
10
+ test.libs << 'spec'
11
+ test.pattern = 'spec/**/*_spec.rb'
12
+ test.verbose = true
13
+ end
data/bin/calc_profit ADDED
@@ -0,0 +1,75 @@
1
+ #! /usr/bin/env ruby
2
+ # -*- mode: enh-ruby -*-
3
+
4
+ require 'calc_profit'
5
+
6
+ module CalcProfit
7
+ class Runner
8
+
9
+ attr_reader :transaction_group
10
+
11
+ def initialize(input)
12
+ @transaction_group = TransactionGroup.new(Table.new(input))
13
+ end
14
+
15
+ def profit(recalc = false)
16
+ recalc if recalc
17
+ transaction_group.profit
18
+ end
19
+
20
+ def raw_transaction_tex_table
21
+ transaction_group.raw_transaction_table
22
+ end
23
+
24
+ def transaction_tex_table
25
+ tb = LatexTableBuilder.new(transaction_group.transaction_table)
26
+ tb.build(formats: { shares: 0, price: 4 },
27
+ align: {code: 'c', info: 'l'},
28
+ define_as: 'TransTable')
29
+ end
30
+
31
+ def match_tex_table
32
+ tb = LatexTableBuilder.new(transaction_group.match_table)
33
+ tb.build(exclude: [:info_p, :info_s],
34
+ total_on: [:shares_p, :shares_s, :profit],
35
+ align: { code_p: 'c', code_s: 'c'},
36
+ formats: {
37
+ shares_p: 0, price_p: 4,
38
+ shares_s: 0, price_s: 4, profit: 2
39
+ },
40
+ define_as: 'MatchTable')
41
+ end
42
+
43
+ def run
44
+ transaction_group.match
45
+ puts transaction_tex_table
46
+ puts match_tex_table
47
+ puts "\\newcommand{\\TotalProfit}{#{transaction_group.profit}}"
48
+ end
49
+ end
50
+ end
51
+
52
+ if __FILE__ == $0
53
+ if !ARGV[0].blank? && File.readable?(ARGV[0])
54
+ CalcProfit::Runner.new(ARGV[0]).run
55
+ else
56
+ msg = <<EOS
57
+ Each csv file header must be as follows:
58
+
59
+ Ref, Date, Code, Raw Shares, Shares, Price, Info
60
+
61
+ Where:
62
+ 'Ref' is any text (preferably short, like a number) attached to a
63
+ transaction to identify it when matching
64
+ 'Date' is the date of the transaction in ISO form: '2014-05-14'
65
+ 'Code' is 'P' or 'S' for purchase or sale
66
+ 'Raw Shares' is the number of shares in the original transaction for ref
67
+ 'Shares' is the number of shares adjusted to take into account pecuniary
68
+ interest or other adjustment to original number of shares
69
+ 'Price' is the price per share for the transaction
70
+ 'Info' is also free text, like entity name, etc., that helps to identify
71
+ the transaction.
72
+ EOS
73
+ STDERR.puts "usage: calc-profit <trans-csv-file>" + "\n\n" + msg
74
+ end
75
+ end
data/bin/do-demo.sh ADDED
@@ -0,0 +1,7 @@
1
+ #! /bin/sh
2
+
3
+ set -xv
4
+ ./calc-profit.rb Trans.csv >tables.tex
5
+ pdflatex tabdemo.tex
6
+ pdflatex tabdemo.tex
7
+ kpdf tabdemo.pdf &
data/bin/easters.rb ADDED
@@ -0,0 +1,17 @@
1
+ #! /usr/bin/ruby -w
2
+
3
+ require 'dedutils'
4
+
5
+ base = Date.new(33, 1, 1)
6
+ 3000.times { |k|
7
+ dt = Date.new(base.year + k, 1, 1)
8
+ easter = dt.easter_this_year
9
+ print "%04d: #{easter}" % dt.year
10
+ if easter.month == 3 and easter.day <= 23
11
+ print easter.day == 22 ? " <<<\n" : " <<\n"
12
+ elsif easter.month == 4 and easter.day >= 24
13
+ print easter.day == 25 ? " >>>\n" : " >>\n"
14
+ else
15
+ print "\n"
16
+ end
17
+ }
data/bin/tm-profit.rb ADDED
@@ -0,0 +1,60 @@
1
+ #! /usr/bin/ruby
2
+
3
+ # This is meant to be like calc-profit except that it uses lp_solve to
4
+ # solve a transportation method expression of the problem.
5
+
6
+ require 'calc-profit/transaction.rb'
7
+ require 'optparse'
8
+ require 'ostruct'
9
+ require 'pathname'
10
+
11
+ # Read in each file_names in turn, prepend with
12
+ # initialization files, run through erb, then
13
+ # run through TeX processor of choice
14
+
15
+ class ProfitCalc
16
+ include CalcProfit
17
+
18
+ def initialize(file)
19
+ @file = file
20
+ end
21
+
22
+ def run
23
+ tg = TransactionGroup.new
24
+ File.open(@file, 'r') { |f|
25
+ # discard header for now
26
+ heads = f.readline.chomp.split(',')
27
+ # Read each transaction into tg
28
+ f.each { |l|
29
+ l.chomp!
30
+ ref, dat, code, raw_shares, shares, price, info = l.split(',')
31
+ next unless not dat.nil?
32
+ ref.sub!(/^\s*"?([^"]*)"?\s*$/, '\1') if ref.strip =~ /^"/
33
+ dat.sub!(/^\s*"([^"]*)"\s*$/, '\1') if dat.strip =~ /^"/
34
+ code.sub!(/^\s*"([^"]*)"\s*$/, '\1') if code.strip =~ /^"/
35
+ raw_shares.sub!(/^\s*"([^"]*)"\s*$/, '\1') if raw_shares.strip =~ /^"/
36
+ shares.sub!(/^\s*"([^"]*)"\s*$/, '\1') if shares.strip =~ /^"/
37
+ price.sub!(/^\s*"([^"]*)"\s*$/, '\1') if price.strip =~ /^"/
38
+ info.sub!(/^\s*"([^"]*)"\s*$/, '\1') if info.strip =~ /^"/
39
+ #print "Adding ... #{dat}, #{code}, #{raw_shares}, #{shares}, #{price}, #{ref}\n"
40
+ t = Transaction.new(code, Date.parse(dat), price.to_f,
41
+ shares.to_f, ref, info, raw_shares)
42
+ tg << t
43
+ }
44
+ tg.tp_solve
45
+ # You can pass parameters to the table_macros method to specify captions
46
+ # for each of the three tables. Otherwise, they will have no captions.
47
+ # E.g.,
48
+ #print tg.table_macros("Unadjusted Transactions", "Transactions", "Profit Calculation")
49
+ print tg.table_macros
50
+ }
51
+ end
52
+ end
53
+
54
+ if __FILE__ == $0
55
+ if File.readable?(ARGV[0])
56
+ ProfitCalc.new(ARGV[0]).run
57
+ else
58
+ raise "usage: calc-profit <trans-csv-file>"
59
+ end
60
+ end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './lib/calc_profit/version.rb'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "calc_profit"
7
+ gem.authors = ["Daniel E. Doherty"]
8
+ gem.platform = Gem::Platform::RUBY
9
+ gem.summary = "Library for calculation od Section 16 short-swing profits"
10
+ gem.email = "ded-law@ddoherty.net"
11
+ gem.licenses = ["MIT"]
12
+
13
+ gem.add_runtime_dependency 'fat_core'
14
+
15
+ gem.add_development_dependency "pry"
16
+ gem.add_development_dependency "pry-doc"
17
+ gem.add_development_dependency 'rspec'
18
+ gem.add_development_dependency 'byebug'
19
+ gem.add_development_dependency "pry-byebug"
20
+ gem.add_development_dependency 'rake'
21
+ gem.add_development_dependency 'wirble'
22
+
23
+ gem.files = `git ls-files`.split("\n")
24
+ gem.files.reject! { |fn| fn =~ /^Gemfile.lock/ }
25
+ gem.files.reject! { |fn| fn =~ /^Guardfile/ }
26
+ gem.files.reject! { |fn| fn =~ /^\.ackrc/ }
27
+ gem.files.reject! { |fn| fn =~ /^\.simplecov/ }
28
+ gem.files.reject! { |fn| fn =~ /^spec/ }
29
+ gem.files.reject! { |fn| fn =~ /^features/ }
30
+
31
+ gem.has_rdoc = true
32
+ gem.extra_rdoc_files = ['README.rdoc']
33
+ gem.rdoc_options << '--title' << 'byr' << '--main' << 'README.rdoc' << '-ri'
34
+ gem.bindir = 'bin'
35
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
36
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
37
+ gem.require_paths = ["lib"]
38
+ gem.version = CalcProfit::VERSION
39
+ end
@@ -0,0 +1,92 @@
1
+ Ref,Date,Code,RawShares,Shares,Price,Info
2
+ 1,2006-05-02,P,5000,5000,8.6000,2006-08-09-1-I
3
+ 2,2006-05-03,P,5000,5000,8.4200,2006-08-09-1-I
4
+ 3,2006-05-04,P,5000,5000,8.4000,2006-08-09-1-I
5
+ 4,2006-05-10,P,8600,8600,8.0200,2006-08-09-1-D
6
+ 5,2006-05-12,P,10000,10000,7.2500,2006-08-09-1-D
7
+ 6,2006-05-12,P,2000,2000,6.7400,2006-08-09-1-I
8
+ 7,2006-05-16,P,5000,5000,7.0000,2006-08-09-1-D
9
+ 8,2006-05-17,P,5000,5000,6.7000,2006-08-09-1-D
10
+ 9,2006-05-17,P,2000,2000,6.7400,2006-08-09-1-I
11
+ 10,2006-05-19,P,1000,1000,7.2500,2006-08-09-1-I
12
+ 11,2006-05-19,P,1000,1000,7.2500,2006-08-09-1-I
13
+ 12,2006-05-31,P,2000,2000,7.9200,2006-08-09-1-I
14
+ 13,2006-06-05,P,1000,1000,7.9200,2006-08-09-1-I
15
+ 14,2006-06-15,P,5000,5000,6.9800,2006-08-09-1-I
16
+ 15,2006-06-16,P,1000,1000,6.9300,2006-08-09-1-I
17
+ 16,2006-06-16,P,1000,1000,6.9400,2006-08-09-1-I
18
+ 17,2006-06-29,P,4000,4000,7.0000,2006-08-09-1-I
19
+ 18,2006-07-14,P,2000,2000,6.2000,2006-08-09-1-D
20
+ 19,2006-08-03,P,1400,1400,4.3900,2006-08-09-1-D
21
+ 20,2006-08-07,P,1100,1100,4.5900,2006-08-09-1-D
22
+ 21,2006-08-08,P,16000,16000,4.7000,2006-08-21-1-D
23
+ 22,2006-08-08,S,16000,16000,4.7000,2006-08-21-1-I
24
+ 23,2006-08-15,P,16000,16000,4.8000,2006-08-21-1-D
25
+ 24,2006-08-15,S,16000,16000,4.8000,2006-08-21-1-I
26
+ 25,2006-08-16,P,2100,2100,5.2900,2006-08-21-1-I
27
+ 26,2006-08-17,P,2900,2900,5.7000,2006-08-21-1-I
28
+ 27,2006-08-23,P,8000,8000,5.2400,2006-08-25-1-D
29
+ 28,2006-08-23,S,8000,8000,5.2400,2006-08-29-1-I
30
+ 29,2006-08-28,P,1000,1000,5.4000,2006-08-29-1-D
31
+ 30,2006-08-29,P,2000,2000,5.4000,2006-08-30-1-D
32
+ 31,2006-08-29,S,2000,2000,5.4000,2006-08-30-1-I
33
+ 32,2006-09-05,P,2700,2700,5.7500,2006-09-06-1-I
34
+ 33,2006-09-11,P,4000,4000,5.7200,2006-09-15-1-D
35
+ 34,2006-09-11,S,4000,4000,5.7200,2006-09-15-1-I
36
+ 35,2006-09-12,P,3000,3000,5.4800,2006-09-15-2-I
37
+ 36,2006-09-13,P,1700,1700,5.4100,2006-09-15-2-I
38
+ 37,2006-09-20,P,7500,7500,5.4900,2006-09-21-1-I
39
+ 38,2006-12-07,S,6000,6000,7.8900,2006-12-11-1-I
40
+ 39,2006-12-11,S,100,100,8.0000,2006-12-11-1-I
41
+ 40,2007-01-29,P,2500,2500,12.1000,2007-04-27-1-I
42
+ 41,2007-01-31,P,2500,2500,13.7000,2007-04-27-1-I
43
+ 42,2007-02-02,P,4000,4000,15.1500,2007-04-27-1-I
44
+ 43,2007-02-06,P,5000,5000,14.9500,2007-04-27-1-I
45
+ 44,2007-02-07,P,400,400,15.0000,2007-04-27-1-I
46
+ 45,2007-02-08,P,4600,4600,15.0000,2007-04-27-1-I
47
+ 46,2007-02-12,P,3500,3500,14.9100,2007-04-27-1-I
48
+ 47,2007-02-13,P,1500,1500,14.6500,2007-04-27-1-D
49
+ 48,2007-02-14,P,2000,2000,14.4900,2007-04-27-1-D
50
+ 49,2007-02-15,P,3000,3000,14.3000,2007-04-27-1-I
51
+ 50,2007-02-21,P,8500,8500,14.6500,2007-04-27-1-D
52
+ 51,2007-02-21,S,8500,8500,14.6500,2007-04-27-1-I
53
+ 52,2007-02-22,P,1500,1500,14.8800,2007-04-27-1-I
54
+ 53,2007-02-23,P,3000,3000,14.9700,2007-04-27-1-I
55
+ 54,2007-02-23,P,5000,5000,14.9700,2007-04-27-1-I
56
+ 55,2007-02-27,P,5200,5200,13.8800,2007-04-27-1-I
57
+ 56,2007-02-28,P,6700,6700,13.0000,2007-04-27-1-D
58
+ 57,2007-02-28,P,800,800,13.0000,2007-04-27-1-I
59
+ 58,2007-02-28,P,8400,8400,13.0000,2007-04-27-1-I
60
+ 59,2007-03-01,P,2500,2500,12.2500,2007-04-27-1-D
61
+ 60,2007-03-05,P,1800,1800,11.9700,2007-04-27-1-D
62
+ 61,2007-03-06,P,500,500,12.1300,2007-04-27-1-D
63
+ 62,2007-03-07,P,3000,3000,12.3700,2007-04-27-1-D
64
+ 63,2007-03-08,P,2000,2000,12.6000,2007-04-27-1-I
65
+ 64,2007-03-09,P,7700,7700,12.8100,2007-04-27-1-I
66
+ 65,2007-03-12,P,4200,4200,12.4600,2007-04-27-1-I
67
+ 66,2007-03-13,P,800,800,12.2500,2007-04-27-1-I
68
+ 67,2007-03-19,P,2000,2000,14.5500,2007-04-27-2-I
69
+ 68,2007-03-19,P,5000,5000,14.5500,2007-04-27-2-I
70
+ 69,2007-03-19,P,2000,2000,14.3300,2007-04-27-2-I
71
+ 70,2007-03-20,P,1000,1000,14.4600,2007-04-27-2-I
72
+ 71,2007-03-20,P,1500,1500,14.4600,2007-04-27-2-I
73
+ 72,2007-03-21,P,3900,3900,16.9000,2007-04-27-2-I
74
+ 73,2007-03-23,P,8000,8000,14.9700,2007-04-27-1-D
75
+ 74,2007-03-27,P,1000,1000,16.9300,2007-04-27-2-I
76
+ 75,2007-03-28,P,1000,1000,16.5000,2007-04-27-2-D
77
+ 76,2007-03-29,P,1000,1000,16.2500,2007-04-27-2-D
78
+ 77,2007-04-04,P,200,200,17.8600,2007-04-27-2-I
79
+ 78,2007-04-04,P,2000,2000,19.5000,2007-04-27-2-I
80
+ 79,2007-04-04,P,3000,3000,19.1300,2007-04-27-2-I
81
+ 80,2007-04-05,P,1000,1000,19.1500,2007-04-27-2-I
82
+ 81,2007-04-10,P,2000,2000,20.7500,2007-04-27-2-I
83
+ 82,2007-04-11,P,1000,1000,20.5000,2007-04-27-2-I
84
+ 83,2007-04-12,P,600,600,21.5000,2007-04-27-2-I
85
+ 84,2007-04-12,P,1000,1000,21.4500,2007-04-27-2-I
86
+ 85,2007-04-13,P,2100,2100,21.5000,2007-04-27-2-I
87
+ 86,2007-04-16,P,500,500,22.6000,2007-04-27-2-I
88
+ 87,2007-04-17,P,3500,3500,23.5500,2007-04-27-2-D
89
+ 88,2007-04-17,S,3500,3500,23.5500,2007-04-27-2-I
90
+ 89,2007-04-23,P,5000,5000,23.4500,2007-04-27-2-I
91
+ 90,2007-04-24,P,5000,5000,24.3000,2007-04-27-2-I
92
+ 91,2007-04-25,S,10000,10000,25.7000,2007-04-27-2-I
@@ -0,0 +1,16 @@
1
+ \documentclass[12pt,draft]{article}
2
+
3
+ \usepackage{legal-general}
4
+ \usepackage{longtable}
5
+ \usepackage{lscape}
6
+
7
+ \begin{document}
8
+ \include{Trans}
9
+ \TransTable
10
+ \newpage
11
+ \begin{landscape}
12
+ \begin{footnotesize}
13
+ \MatchTable
14
+ \end{footnotesize}
15
+ \end{landscape}
16
+ \end{document}
@@ -0,0 +1,34 @@
1
+ Ref,Date,Code,RawShares,Shares,Price,Info
2
+ 1,2010-01-15,S,7400,7400,5.6430,Common
3
+ 2,2010-01-21,S,15309,15309,5.6500,Common
4
+ 3,2010-02-18,S,29279,29279,5.5965,Common
5
+ 4,2010-02-19,S,25600,25600,5.5939,Common
6
+ 5,2010-02-22,S,8700,8700,5.6240,Common
7
+ 6,2010-02-23,S,11854,11854,5.6306,Common
8
+ 7,2010-02-24,S,9258,9258,5.6076,Common
9
+ 8,2010-02-25,S,3500,3500,5.6000,Common
10
+ 9,2010-02-26,S,6000,6000,5.6000,Common
11
+ 10,2010-03-01,S,15142,15142,5.6011,Common
12
+ 11,2010-03-02,S,18800,18800,5.6100,Common
13
+ 12,2010-03-03,S,3500,3500,5.6300,Common
14
+ 13,2010-03-04,S,25300,25300,5.6301,Common
15
+ 14,2010-03-06,S,3004,3004,5.6400,Common
16
+ 15,2010-03-08,S,4200,4200,5.6400,Common
17
+ 16,2010-03-09,S,18600,18600,5.6400,Common
18
+ 17,2009-11-04,P,18000,18000,5.2267,Common
19
+ 18,2009-11-05,P,12700,12700,5.2471,Common
20
+ 19,2009-11-06,P,6000,6000,5.2400,Common
21
+ 20,2009-11-09,P,33200,33200,5.2935,Common
22
+ 21,2009-11-10,P,13983,13983,5.2825,Common
23
+ 22,2009-11-11,P,11100,11100,5.2673,Common
24
+ 23,2009-11-12,P,400,400,5.2800,Common
25
+ 24,2009-11-12,P,16363,16363,5.2781,Common
26
+ 25,2009-11-13,P,31000,31000,5.2648,Common
27
+ 26,2009-11-16,P,3000,3000,5.2900,Common
28
+ 27,2009-11-16,P,3300,3300,5.2900,Common
29
+ 28,2009-11-17,P,6000,6000,5.2900,Common
30
+ 29,2009-11-18,P,14200,14200,5.2909,Common
31
+ 30,2009-11-19,P,4700,4700,5.2866,Common
32
+ 31,2009-11-20,P,5400,5400,5.3000,Common
33
+ 32,2009-11-30,P,15000,15000,5.3000,Common
34
+ 33,2010-02-05,P,11100,11100,5.3622,Common
@@ -0,0 +1,93 @@
1
+ max: 0.909999999999999 X_14~38 + 1.02 X_14~39 + 0.96 X_15~38 + 1.07 X_15~39 + 0.949999999999999 X_16~38 + 1.06 X_16~39 + 0.89 X_17~38 + 1.0 X_17~39 + 1.69 X_18~38 + 1.8 X_18~39 + 0.31 X_19~22 + 0.41 X_19~24 + 0.850000000000001 X_19~28 + 1.01 X_19~31 + 1.33 X_19~34 + 3.5 X_19~38 + 3.61 X_19~39 + 0.11 X_20~22 + 0.21 X_20~24 + 0.65 X_20~28 + 0.81 X_20~31 + 1.13 X_20~34 + 3.3 X_20~38 + 3.41 X_20~39 + 0.0999999999999996 X_21~24 + 0.54 X_21~28 + 0.7 X_21~31 + 1.02 X_21~34 + 3.19 X_21~38 + 3.3 X_21~39 + 0.44 X_23~28 + 0.600000000000001 X_23~31 + 0.92 X_23~34 + 3.09 X_23~38 + 3.2 X_23~39 + 0.11 X_25~31 + 0.43 X_25~34 + 2.6 X_25~38 + 2.71 X_25~39 + 0.0199999999999996 X_26~34 + 2.19 X_26~38 + 2.3 X_26~39 + 0.16 X_27~31 + 0.48 X_27~34 + 2.65 X_27~38 + 2.76 X_27~39 + 9.41 X_27~51 + 0.319999999999999 X_29~34 + 2.49 X_29~38 + 2.6 X_29~39 + 9.25 X_29~51 + 0.319999999999999 X_30~34 + 2.49 X_30~38 + 2.6 X_30~39 + 9.25 X_30~51 + 2.14 X_32~38 + 2.25 X_32~39 + 8.9 X_32~51 + 2.17 X_33~38 + 2.28 X_33~39 + 8.93 X_33~51 + 0.239999999999999 X_35~34 + 2.41 X_35~38 + 2.52 X_35~39 + 9.17 X_35~51 + 0.31 X_36~34 + 2.48 X_36~38 + 2.59 X_36~39 + 9.24 X_36~51 + 0.23 X_37~34 + 2.4 X_37~38 + 2.51 X_37~39 + 9.16 X_37~51 + 2.55 X_40~51 + 11.45 X_40~88 + 13.6 X_40~91 + 0.950000000000001 X_41~51 + 9.85 X_41~88 + 12.0 X_41~91 + 8.4 X_42~88 + 10.55 X_42~91 + 8.6 X_43~88 + 10.75 X_43~91 + 8.55 X_44~88 + 10.7 X_44~91 + 8.55 X_45~88 + 10.7 X_45~91 + 8.64 X_46~88 + 10.79 X_46~91 + 8.9 X_47~88 + 11.05 X_47~91 + 0.16 X_48~51 + 9.06 X_48~88 + 11.21 X_48~91 + 0.35 X_49~51 + 9.25 X_49~88 + 11.4 X_49~91 + 8.9 X_50~88 + 11.05 X_50~91 + 8.67 X_52~88 + 10.82 X_52~91 + 8.58 X_53~88 + 10.73 X_53~91 + 8.58 X_54~88 + 10.73 X_54~91 + 0.77 X_55~51 + 9.67 X_55~88 + 11.82 X_55~91 + 1.65 X_56~51 + 10.55 X_56~88 + 12.7 X_56~91 + 1.65 X_57~51 + 10.55 X_57~88 + 12.7 X_57~91 + 1.65 X_58~51 + 10.55 X_58~88 + 12.7 X_58~91 + 2.4 X_59~51 + 11.3 X_59~88 + 13.45 X_59~91 + 2.68 X_60~51 + 11.58 X_60~88 + 13.73 X_60~91 + 2.52 X_61~51 + 11.42 X_61~88 + 13.57 X_61~91 + 2.28 X_62~51 + 11.18 X_62~88 + 13.33 X_62~91 + 2.05 X_63~51 + 10.95 X_63~88 + 13.1 X_63~91 + 1.84 X_64~51 + 10.74 X_64~88 + 12.89 X_64~91 + 2.19 X_65~51 + 11.09 X_65~88 + 13.24 X_65~91 + 2.4 X_66~51 + 11.3 X_66~88 + 13.45 X_66~91 + 0.0999999999999996 X_67~51 + 9.0 X_67~88 + 11.15 X_67~91 + 0.0999999999999996 X_68~51 + 9.0 X_68~88 + 11.15 X_68~91 + 0.32 X_69~51 + 9.22 X_69~88 + 11.37 X_69~91 + 0.19 X_70~51 + 9.09 X_70~88 + 11.24 X_70~91 + 0.19 X_71~51 + 9.09 X_71~88 + 11.24 X_71~91 + 6.65 X_72~88 + 8.8 X_72~91 + 8.58 X_73~88 + 10.73 X_73~91 + 6.62 X_74~88 + 8.77 X_74~91 + 7.05 X_75~88 + 9.2 X_75~91 + 7.3 X_76~88 + 9.45 X_76~91 + 5.69 X_77~88 + 7.84 X_77~91 + 4.05 X_78~88 + 6.2 X_78~91 + 4.42 X_79~88 + 6.57 X_79~91 + 4.4 X_80~88 + 6.55 X_80~91 + 2.8 X_81~88 + 4.95 X_81~91 + 3.05 X_82~88 + 5.2 X_82~91 + 2.05 X_83~88 + 4.2 X_83~91 + 2.1 X_84~88 + 4.25 X_84~91 + 2.05 X_85~88 + 4.2 X_85~91 + 0.949999999999999 X_86~88 + 3.1 X_86~91 + 2.15 X_87~91 + 0.100000000000001 X_89~88 + 2.25 X_89~91 + 1.4 X_90~91 + 0;
2
+
3
+ P_1: X_1~22 + X_1~24 + X_1~28 + X_1~31 + X_1~34 + X_1~38 + X_1~39 + X_1~51 + X_1~88 + X_1~91 + 0 <= 5000;
4
+ P_2: X_2~22 + X_2~24 + X_2~28 + X_2~31 + X_2~34 + X_2~38 + X_2~39 + X_2~51 + X_2~88 + X_2~91 + 0 <= 5000;
5
+ P_3: X_3~22 + X_3~24 + X_3~28 + X_3~31 + X_3~34 + X_3~38 + X_3~39 + X_3~51 + X_3~88 + X_3~91 + 0 <= 5000;
6
+ P_4: X_4~22 + X_4~24 + X_4~28 + X_4~31 + X_4~34 + X_4~38 + X_4~39 + X_4~51 + X_4~88 + X_4~91 + 0 <= 8600;
7
+ P_5: X_5~22 + X_5~24 + X_5~28 + X_5~31 + X_5~34 + X_5~38 + X_5~39 + X_5~51 + X_5~88 + X_5~91 + 0 <= 10000;
8
+ P_6: X_6~22 + X_6~24 + X_6~28 + X_6~31 + X_6~34 + X_6~38 + X_6~39 + X_6~51 + X_6~88 + X_6~91 + 0 <= 2000;
9
+ P_7: X_7~22 + X_7~24 + X_7~28 + X_7~31 + X_7~34 + X_7~38 + X_7~39 + X_7~51 + X_7~88 + X_7~91 + 0 <= 5000;
10
+ P_8: X_8~22 + X_8~24 + X_8~28 + X_8~31 + X_8~34 + X_8~38 + X_8~39 + X_8~51 + X_8~88 + X_8~91 + 0 <= 5000;
11
+ P_9: X_9~22 + X_9~24 + X_9~28 + X_9~31 + X_9~34 + X_9~38 + X_9~39 + X_9~51 + X_9~88 + X_9~91 + 0 <= 2000;
12
+ P_10: X_10~22 + X_10~24 + X_10~28 + X_10~31 + X_10~34 + X_10~38 + X_10~39 + X_10~51 + X_10~88 + X_10~91 + 0 <= 1000;
13
+ P_11: X_11~22 + X_11~24 + X_11~28 + X_11~31 + X_11~34 + X_11~38 + X_11~39 + X_11~51 + X_11~88 + X_11~91 + 0 <= 1000;
14
+ P_12: X_12~22 + X_12~24 + X_12~28 + X_12~31 + X_12~34 + X_12~38 + X_12~39 + X_12~51 + X_12~88 + X_12~91 + 0 <= 2000;
15
+ P_13: X_13~22 + X_13~24 + X_13~28 + X_13~31 + X_13~34 + X_13~38 + X_13~39 + X_13~51 + X_13~88 + X_13~91 + 0 <= 1000;
16
+ P_14: X_14~22 + X_14~24 + X_14~28 + X_14~31 + X_14~34 + X_14~38 + X_14~39 + X_14~51 + X_14~88 + X_14~91 + 0 <= 5000;
17
+ P_15: X_15~22 + X_15~24 + X_15~28 + X_15~31 + X_15~34 + X_15~38 + X_15~39 + X_15~51 + X_15~88 + X_15~91 + 0 <= 1000;
18
+ P_16: X_16~22 + X_16~24 + X_16~28 + X_16~31 + X_16~34 + X_16~38 + X_16~39 + X_16~51 + X_16~88 + X_16~91 + 0 <= 1000;
19
+ P_17: X_17~22 + X_17~24 + X_17~28 + X_17~31 + X_17~34 + X_17~38 + X_17~39 + X_17~51 + X_17~88 + X_17~91 + 0 <= 4000;
20
+ P_18: X_18~22 + X_18~24 + X_18~28 + X_18~31 + X_18~34 + X_18~38 + X_18~39 + X_18~51 + X_18~88 + X_18~91 + 0 <= 2000;
21
+ P_19: X_19~22 + X_19~24 + X_19~28 + X_19~31 + X_19~34 + X_19~38 + X_19~39 + X_19~51 + X_19~88 + X_19~91 + 0 <= 1400;
22
+ P_20: X_20~22 + X_20~24 + X_20~28 + X_20~31 + X_20~34 + X_20~38 + X_20~39 + X_20~51 + X_20~88 + X_20~91 + 0 <= 1100;
23
+ P_21: X_21~22 + X_21~24 + X_21~28 + X_21~31 + X_21~34 + X_21~38 + X_21~39 + X_21~51 + X_21~88 + X_21~91 + 0 <= 16000;
24
+ P_23: X_23~22 + X_23~24 + X_23~28 + X_23~31 + X_23~34 + X_23~38 + X_23~39 + X_23~51 + X_23~88 + X_23~91 + 0 <= 16000;
25
+ P_25: X_25~22 + X_25~24 + X_25~28 + X_25~31 + X_25~34 + X_25~38 + X_25~39 + X_25~51 + X_25~88 + X_25~91 + 0 <= 2100;
26
+ P_26: X_26~22 + X_26~24 + X_26~28 + X_26~31 + X_26~34 + X_26~38 + X_26~39 + X_26~51 + X_26~88 + X_26~91 + 0 <= 2900;
27
+ P_27: X_27~22 + X_27~24 + X_27~28 + X_27~31 + X_27~34 + X_27~38 + X_27~39 + X_27~51 + X_27~88 + X_27~91 + 0 <= 8000;
28
+ P_29: X_29~22 + X_29~24 + X_29~28 + X_29~31 + X_29~34 + X_29~38 + X_29~39 + X_29~51 + X_29~88 + X_29~91 + 0 <= 1000;
29
+ P_30: X_30~22 + X_30~24 + X_30~28 + X_30~31 + X_30~34 + X_30~38 + X_30~39 + X_30~51 + X_30~88 + X_30~91 + 0 <= 2000;
30
+ P_32: X_32~22 + X_32~24 + X_32~28 + X_32~31 + X_32~34 + X_32~38 + X_32~39 + X_32~51 + X_32~88 + X_32~91 + 0 <= 2700;
31
+ P_33: X_33~22 + X_33~24 + X_33~28 + X_33~31 + X_33~34 + X_33~38 + X_33~39 + X_33~51 + X_33~88 + X_33~91 + 0 <= 4000;
32
+ P_35: X_35~22 + X_35~24 + X_35~28 + X_35~31 + X_35~34 + X_35~38 + X_35~39 + X_35~51 + X_35~88 + X_35~91 + 0 <= 3000;
33
+ P_36: X_36~22 + X_36~24 + X_36~28 + X_36~31 + X_36~34 + X_36~38 + X_36~39 + X_36~51 + X_36~88 + X_36~91 + 0 <= 1700;
34
+ P_37: X_37~22 + X_37~24 + X_37~28 + X_37~31 + X_37~34 + X_37~38 + X_37~39 + X_37~51 + X_37~88 + X_37~91 + 0 <= 7500;
35
+ P_40: X_40~22 + X_40~24 + X_40~28 + X_40~31 + X_40~34 + X_40~38 + X_40~39 + X_40~51 + X_40~88 + X_40~91 + 0 <= 2500;
36
+ P_41: X_41~22 + X_41~24 + X_41~28 + X_41~31 + X_41~34 + X_41~38 + X_41~39 + X_41~51 + X_41~88 + X_41~91 + 0 <= 2500;
37
+ P_42: X_42~22 + X_42~24 + X_42~28 + X_42~31 + X_42~34 + X_42~38 + X_42~39 + X_42~51 + X_42~88 + X_42~91 + 0 <= 4000;
38
+ P_43: X_43~22 + X_43~24 + X_43~28 + X_43~31 + X_43~34 + X_43~38 + X_43~39 + X_43~51 + X_43~88 + X_43~91 + 0 <= 5000;
39
+ P_44: X_44~22 + X_44~24 + X_44~28 + X_44~31 + X_44~34 + X_44~38 + X_44~39 + X_44~51 + X_44~88 + X_44~91 + 0 <= 400;
40
+ P_45: X_45~22 + X_45~24 + X_45~28 + X_45~31 + X_45~34 + X_45~38 + X_45~39 + X_45~51 + X_45~88 + X_45~91 + 0 <= 4600;
41
+ P_46: X_46~22 + X_46~24 + X_46~28 + X_46~31 + X_46~34 + X_46~38 + X_46~39 + X_46~51 + X_46~88 + X_46~91 + 0 <= 3500;
42
+ P_47: X_47~22 + X_47~24 + X_47~28 + X_47~31 + X_47~34 + X_47~38 + X_47~39 + X_47~51 + X_47~88 + X_47~91 + 0 <= 1500;
43
+ P_48: X_48~22 + X_48~24 + X_48~28 + X_48~31 + X_48~34 + X_48~38 + X_48~39 + X_48~51 + X_48~88 + X_48~91 + 0 <= 2000;
44
+ P_49: X_49~22 + X_49~24 + X_49~28 + X_49~31 + X_49~34 + X_49~38 + X_49~39 + X_49~51 + X_49~88 + X_49~91 + 0 <= 3000;
45
+ P_50: X_50~22 + X_50~24 + X_50~28 + X_50~31 + X_50~34 + X_50~38 + X_50~39 + X_50~51 + X_50~88 + X_50~91 + 0 <= 8500;
46
+ P_52: X_52~22 + X_52~24 + X_52~28 + X_52~31 + X_52~34 + X_52~38 + X_52~39 + X_52~51 + X_52~88 + X_52~91 + 0 <= 1500;
47
+ P_53: X_53~22 + X_53~24 + X_53~28 + X_53~31 + X_53~34 + X_53~38 + X_53~39 + X_53~51 + X_53~88 + X_53~91 + 0 <= 3000;
48
+ P_54: X_54~22 + X_54~24 + X_54~28 + X_54~31 + X_54~34 + X_54~38 + X_54~39 + X_54~51 + X_54~88 + X_54~91 + 0 <= 5000;
49
+ P_55: X_55~22 + X_55~24 + X_55~28 + X_55~31 + X_55~34 + X_55~38 + X_55~39 + X_55~51 + X_55~88 + X_55~91 + 0 <= 5200;
50
+ P_56: X_56~22 + X_56~24 + X_56~28 + X_56~31 + X_56~34 + X_56~38 + X_56~39 + X_56~51 + X_56~88 + X_56~91 + 0 <= 6700;
51
+ P_57: X_57~22 + X_57~24 + X_57~28 + X_57~31 + X_57~34 + X_57~38 + X_57~39 + X_57~51 + X_57~88 + X_57~91 + 0 <= 800;
52
+ P_58: X_58~22 + X_58~24 + X_58~28 + X_58~31 + X_58~34 + X_58~38 + X_58~39 + X_58~51 + X_58~88 + X_58~91 + 0 <= 8400;
53
+ P_59: X_59~22 + X_59~24 + X_59~28 + X_59~31 + X_59~34 + X_59~38 + X_59~39 + X_59~51 + X_59~88 + X_59~91 + 0 <= 2500;
54
+ P_60: X_60~22 + X_60~24 + X_60~28 + X_60~31 + X_60~34 + X_60~38 + X_60~39 + X_60~51 + X_60~88 + X_60~91 + 0 <= 1800;
55
+ P_61: X_61~22 + X_61~24 + X_61~28 + X_61~31 + X_61~34 + X_61~38 + X_61~39 + X_61~51 + X_61~88 + X_61~91 + 0 <= 500;
56
+ P_62: X_62~22 + X_62~24 + X_62~28 + X_62~31 + X_62~34 + X_62~38 + X_62~39 + X_62~51 + X_62~88 + X_62~91 + 0 <= 3000;
57
+ P_63: X_63~22 + X_63~24 + X_63~28 + X_63~31 + X_63~34 + X_63~38 + X_63~39 + X_63~51 + X_63~88 + X_63~91 + 0 <= 2000;
58
+ P_64: X_64~22 + X_64~24 + X_64~28 + X_64~31 + X_64~34 + X_64~38 + X_64~39 + X_64~51 + X_64~88 + X_64~91 + 0 <= 7700;
59
+ P_65: X_65~22 + X_65~24 + X_65~28 + X_65~31 + X_65~34 + X_65~38 + X_65~39 + X_65~51 + X_65~88 + X_65~91 + 0 <= 4200;
60
+ P_66: X_66~22 + X_66~24 + X_66~28 + X_66~31 + X_66~34 + X_66~38 + X_66~39 + X_66~51 + X_66~88 + X_66~91 + 0 <= 800;
61
+ P_67: X_67~22 + X_67~24 + X_67~28 + X_67~31 + X_67~34 + X_67~38 + X_67~39 + X_67~51 + X_67~88 + X_67~91 + 0 <= 2000;
62
+ P_68: X_68~22 + X_68~24 + X_68~28 + X_68~31 + X_68~34 + X_68~38 + X_68~39 + X_68~51 + X_68~88 + X_68~91 + 0 <= 5000;
63
+ P_69: X_69~22 + X_69~24 + X_69~28 + X_69~31 + X_69~34 + X_69~38 + X_69~39 + X_69~51 + X_69~88 + X_69~91 + 0 <= 2000;
64
+ P_70: X_70~22 + X_70~24 + X_70~28 + X_70~31 + X_70~34 + X_70~38 + X_70~39 + X_70~51 + X_70~88 + X_70~91 + 0 <= 1000;
65
+ P_71: X_71~22 + X_71~24 + X_71~28 + X_71~31 + X_71~34 + X_71~38 + X_71~39 + X_71~51 + X_71~88 + X_71~91 + 0 <= 1500;
66
+ P_72: X_72~22 + X_72~24 + X_72~28 + X_72~31 + X_72~34 + X_72~38 + X_72~39 + X_72~51 + X_72~88 + X_72~91 + 0 <= 3900;
67
+ P_73: X_73~22 + X_73~24 + X_73~28 + X_73~31 + X_73~34 + X_73~38 + X_73~39 + X_73~51 + X_73~88 + X_73~91 + 0 <= 8000;
68
+ P_74: X_74~22 + X_74~24 + X_74~28 + X_74~31 + X_74~34 + X_74~38 + X_74~39 + X_74~51 + X_74~88 + X_74~91 + 0 <= 1000;
69
+ P_75: X_75~22 + X_75~24 + X_75~28 + X_75~31 + X_75~34 + X_75~38 + X_75~39 + X_75~51 + X_75~88 + X_75~91 + 0 <= 1000;
70
+ P_76: X_76~22 + X_76~24 + X_76~28 + X_76~31 + X_76~34 + X_76~38 + X_76~39 + X_76~51 + X_76~88 + X_76~91 + 0 <= 1000;
71
+ P_77: X_77~22 + X_77~24 + X_77~28 + X_77~31 + X_77~34 + X_77~38 + X_77~39 + X_77~51 + X_77~88 + X_77~91 + 0 <= 200;
72
+ P_78: X_78~22 + X_78~24 + X_78~28 + X_78~31 + X_78~34 + X_78~38 + X_78~39 + X_78~51 + X_78~88 + X_78~91 + 0 <= 2000;
73
+ P_79: X_79~22 + X_79~24 + X_79~28 + X_79~31 + X_79~34 + X_79~38 + X_79~39 + X_79~51 + X_79~88 + X_79~91 + 0 <= 3000;
74
+ P_80: X_80~22 + X_80~24 + X_80~28 + X_80~31 + X_80~34 + X_80~38 + X_80~39 + X_80~51 + X_80~88 + X_80~91 + 0 <= 1000;
75
+ P_81: X_81~22 + X_81~24 + X_81~28 + X_81~31 + X_81~34 + X_81~38 + X_81~39 + X_81~51 + X_81~88 + X_81~91 + 0 <= 2000;
76
+ P_82: X_82~22 + X_82~24 + X_82~28 + X_82~31 + X_82~34 + X_82~38 + X_82~39 + X_82~51 + X_82~88 + X_82~91 + 0 <= 1000;
77
+ P_83: X_83~22 + X_83~24 + X_83~28 + X_83~31 + X_83~34 + X_83~38 + X_83~39 + X_83~51 + X_83~88 + X_83~91 + 0 <= 600;
78
+ P_84: X_84~22 + X_84~24 + X_84~28 + X_84~31 + X_84~34 + X_84~38 + X_84~39 + X_84~51 + X_84~88 + X_84~91 + 0 <= 1000;
79
+ P_85: X_85~22 + X_85~24 + X_85~28 + X_85~31 + X_85~34 + X_85~38 + X_85~39 + X_85~51 + X_85~88 + X_85~91 + 0 <= 2100;
80
+ P_86: X_86~22 + X_86~24 + X_86~28 + X_86~31 + X_86~34 + X_86~38 + X_86~39 + X_86~51 + X_86~88 + X_86~91 + 0 <= 500;
81
+ P_87: X_87~22 + X_87~24 + X_87~28 + X_87~31 + X_87~34 + X_87~38 + X_87~39 + X_87~51 + X_87~88 + X_87~91 + 0 <= 3500;
82
+ P_89: X_89~22 + X_89~24 + X_89~28 + X_89~31 + X_89~34 + X_89~38 + X_89~39 + X_89~51 + X_89~88 + X_89~91 + 0 <= 5000;
83
+ P_90: X_90~22 + X_90~24 + X_90~28 + X_90~31 + X_90~34 + X_90~38 + X_90~39 + X_90~51 + X_90~88 + X_90~91 + 0 <= 5000;
84
+ S_22: X_1~22 + X_2~22 + X_3~22 + X_4~22 + X_5~22 + X_6~22 + X_7~22 + X_8~22 + X_9~22 + X_10~22 + X_11~22 + X_12~22 + X_13~22 + X_14~22 + X_15~22 + X_16~22 + X_17~22 + X_18~22 + X_19~22 + X_20~22 + X_21~22 + X_23~22 + X_25~22 + X_26~22 + X_27~22 + X_29~22 + X_30~22 + X_32~22 + X_33~22 + X_35~22 + X_36~22 + X_37~22 + X_40~22 + X_41~22 + X_42~22 + X_43~22 + X_44~22 + X_45~22 + X_46~22 + X_47~22 + X_48~22 + X_49~22 + X_50~22 + X_52~22 + X_53~22 + X_54~22 + X_55~22 + X_56~22 + X_57~22 + X_58~22 + X_59~22 + X_60~22 + X_61~22 + X_62~22 + X_63~22 + X_64~22 + X_65~22 + X_66~22 + X_67~22 + X_68~22 + X_69~22 + X_70~22 + X_71~22 + X_72~22 + X_73~22 + X_74~22 + X_75~22 + X_76~22 + X_77~22 + X_78~22 + X_79~22 + X_80~22 + X_81~22 + X_82~22 + X_83~22 + X_84~22 + X_85~22 + X_86~22 + X_87~22 + X_89~22 + X_90~22 + 0 <= 16000;
85
+ S_24: X_1~24 + X_2~24 + X_3~24 + X_4~24 + X_5~24 + X_6~24 + X_7~24 + X_8~24 + X_9~24 + X_10~24 + X_11~24 + X_12~24 + X_13~24 + X_14~24 + X_15~24 + X_16~24 + X_17~24 + X_18~24 + X_19~24 + X_20~24 + X_21~24 + X_23~24 + X_25~24 + X_26~24 + X_27~24 + X_29~24 + X_30~24 + X_32~24 + X_33~24 + X_35~24 + X_36~24 + X_37~24 + X_40~24 + X_41~24 + X_42~24 + X_43~24 + X_44~24 + X_45~24 + X_46~24 + X_47~24 + X_48~24 + X_49~24 + X_50~24 + X_52~24 + X_53~24 + X_54~24 + X_55~24 + X_56~24 + X_57~24 + X_58~24 + X_59~24 + X_60~24 + X_61~24 + X_62~24 + X_63~24 + X_64~24 + X_65~24 + X_66~24 + X_67~24 + X_68~24 + X_69~24 + X_70~24 + X_71~24 + X_72~24 + X_73~24 + X_74~24 + X_75~24 + X_76~24 + X_77~24 + X_78~24 + X_79~24 + X_80~24 + X_81~24 + X_82~24 + X_83~24 + X_84~24 + X_85~24 + X_86~24 + X_87~24 + X_89~24 + X_90~24 + 0 <= 16000;
86
+ S_28: X_1~28 + X_2~28 + X_3~28 + X_4~28 + X_5~28 + X_6~28 + X_7~28 + X_8~28 + X_9~28 + X_10~28 + X_11~28 + X_12~28 + X_13~28 + X_14~28 + X_15~28 + X_16~28 + X_17~28 + X_18~28 + X_19~28 + X_20~28 + X_21~28 + X_23~28 + X_25~28 + X_26~28 + X_27~28 + X_29~28 + X_30~28 + X_32~28 + X_33~28 + X_35~28 + X_36~28 + X_37~28 + X_40~28 + X_41~28 + X_42~28 + X_43~28 + X_44~28 + X_45~28 + X_46~28 + X_47~28 + X_48~28 + X_49~28 + X_50~28 + X_52~28 + X_53~28 + X_54~28 + X_55~28 + X_56~28 + X_57~28 + X_58~28 + X_59~28 + X_60~28 + X_61~28 + X_62~28 + X_63~28 + X_64~28 + X_65~28 + X_66~28 + X_67~28 + X_68~28 + X_69~28 + X_70~28 + X_71~28 + X_72~28 + X_73~28 + X_74~28 + X_75~28 + X_76~28 + X_77~28 + X_78~28 + X_79~28 + X_80~28 + X_81~28 + X_82~28 + X_83~28 + X_84~28 + X_85~28 + X_86~28 + X_87~28 + X_89~28 + X_90~28 + 0 <= 8000;
87
+ S_31: X_1~31 + X_2~31 + X_3~31 + X_4~31 + X_5~31 + X_6~31 + X_7~31 + X_8~31 + X_9~31 + X_10~31 + X_11~31 + X_12~31 + X_13~31 + X_14~31 + X_15~31 + X_16~31 + X_17~31 + X_18~31 + X_19~31 + X_20~31 + X_21~31 + X_23~31 + X_25~31 + X_26~31 + X_27~31 + X_29~31 + X_30~31 + X_32~31 + X_33~31 + X_35~31 + X_36~31 + X_37~31 + X_40~31 + X_41~31 + X_42~31 + X_43~31 + X_44~31 + X_45~31 + X_46~31 + X_47~31 + X_48~31 + X_49~31 + X_50~31 + X_52~31 + X_53~31 + X_54~31 + X_55~31 + X_56~31 + X_57~31 + X_58~31 + X_59~31 + X_60~31 + X_61~31 + X_62~31 + X_63~31 + X_64~31 + X_65~31 + X_66~31 + X_67~31 + X_68~31 + X_69~31 + X_70~31 + X_71~31 + X_72~31 + X_73~31 + X_74~31 + X_75~31 + X_76~31 + X_77~31 + X_78~31 + X_79~31 + X_80~31 + X_81~31 + X_82~31 + X_83~31 + X_84~31 + X_85~31 + X_86~31 + X_87~31 + X_89~31 + X_90~31 + 0 <= 2000;
88
+ S_34: X_1~34 + X_2~34 + X_3~34 + X_4~34 + X_5~34 + X_6~34 + X_7~34 + X_8~34 + X_9~34 + X_10~34 + X_11~34 + X_12~34 + X_13~34 + X_14~34 + X_15~34 + X_16~34 + X_17~34 + X_18~34 + X_19~34 + X_20~34 + X_21~34 + X_23~34 + X_25~34 + X_26~34 + X_27~34 + X_29~34 + X_30~34 + X_32~34 + X_33~34 + X_35~34 + X_36~34 + X_37~34 + X_40~34 + X_41~34 + X_42~34 + X_43~34 + X_44~34 + X_45~34 + X_46~34 + X_47~34 + X_48~34 + X_49~34 + X_50~34 + X_52~34 + X_53~34 + X_54~34 + X_55~34 + X_56~34 + X_57~34 + X_58~34 + X_59~34 + X_60~34 + X_61~34 + X_62~34 + X_63~34 + X_64~34 + X_65~34 + X_66~34 + X_67~34 + X_68~34 + X_69~34 + X_70~34 + X_71~34 + X_72~34 + X_73~34 + X_74~34 + X_75~34 + X_76~34 + X_77~34 + X_78~34 + X_79~34 + X_80~34 + X_81~34 + X_82~34 + X_83~34 + X_84~34 + X_85~34 + X_86~34 + X_87~34 + X_89~34 + X_90~34 + 0 <= 4000;
89
+ S_38: X_1~38 + X_2~38 + X_3~38 + X_4~38 + X_5~38 + X_6~38 + X_7~38 + X_8~38 + X_9~38 + X_10~38 + X_11~38 + X_12~38 + X_13~38 + X_14~38 + X_15~38 + X_16~38 + X_17~38 + X_18~38 + X_19~38 + X_20~38 + X_21~38 + X_23~38 + X_25~38 + X_26~38 + X_27~38 + X_29~38 + X_30~38 + X_32~38 + X_33~38 + X_35~38 + X_36~38 + X_37~38 + X_40~38 + X_41~38 + X_42~38 + X_43~38 + X_44~38 + X_45~38 + X_46~38 + X_47~38 + X_48~38 + X_49~38 + X_50~38 + X_52~38 + X_53~38 + X_54~38 + X_55~38 + X_56~38 + X_57~38 + X_58~38 + X_59~38 + X_60~38 + X_61~38 + X_62~38 + X_63~38 + X_64~38 + X_65~38 + X_66~38 + X_67~38 + X_68~38 + X_69~38 + X_70~38 + X_71~38 + X_72~38 + X_73~38 + X_74~38 + X_75~38 + X_76~38 + X_77~38 + X_78~38 + X_79~38 + X_80~38 + X_81~38 + X_82~38 + X_83~38 + X_84~38 + X_85~38 + X_86~38 + X_87~38 + X_89~38 + X_90~38 + 0 <= 6000;
90
+ S_39: X_1~39 + X_2~39 + X_3~39 + X_4~39 + X_5~39 + X_6~39 + X_7~39 + X_8~39 + X_9~39 + X_10~39 + X_11~39 + X_12~39 + X_13~39 + X_14~39 + X_15~39 + X_16~39 + X_17~39 + X_18~39 + X_19~39 + X_20~39 + X_21~39 + X_23~39 + X_25~39 + X_26~39 + X_27~39 + X_29~39 + X_30~39 + X_32~39 + X_33~39 + X_35~39 + X_36~39 + X_37~39 + X_40~39 + X_41~39 + X_42~39 + X_43~39 + X_44~39 + X_45~39 + X_46~39 + X_47~39 + X_48~39 + X_49~39 + X_50~39 + X_52~39 + X_53~39 + X_54~39 + X_55~39 + X_56~39 + X_57~39 + X_58~39 + X_59~39 + X_60~39 + X_61~39 + X_62~39 + X_63~39 + X_64~39 + X_65~39 + X_66~39 + X_67~39 + X_68~39 + X_69~39 + X_70~39 + X_71~39 + X_72~39 + X_73~39 + X_74~39 + X_75~39 + X_76~39 + X_77~39 + X_78~39 + X_79~39 + X_80~39 + X_81~39 + X_82~39 + X_83~39 + X_84~39 + X_85~39 + X_86~39 + X_87~39 + X_89~39 + X_90~39 + 0 <= 100;
91
+ S_51: X_1~51 + X_2~51 + X_3~51 + X_4~51 + X_5~51 + X_6~51 + X_7~51 + X_8~51 + X_9~51 + X_10~51 + X_11~51 + X_12~51 + X_13~51 + X_14~51 + X_15~51 + X_16~51 + X_17~51 + X_18~51 + X_19~51 + X_20~51 + X_21~51 + X_23~51 + X_25~51 + X_26~51 + X_27~51 + X_29~51 + X_30~51 + X_32~51 + X_33~51 + X_35~51 + X_36~51 + X_37~51 + X_40~51 + X_41~51 + X_42~51 + X_43~51 + X_44~51 + X_45~51 + X_46~51 + X_47~51 + X_48~51 + X_49~51 + X_50~51 + X_52~51 + X_53~51 + X_54~51 + X_55~51 + X_56~51 + X_57~51 + X_58~51 + X_59~51 + X_60~51 + X_61~51 + X_62~51 + X_63~51 + X_64~51 + X_65~51 + X_66~51 + X_67~51 + X_68~51 + X_69~51 + X_70~51 + X_71~51 + X_72~51 + X_73~51 + X_74~51 + X_75~51 + X_76~51 + X_77~51 + X_78~51 + X_79~51 + X_80~51 + X_81~51 + X_82~51 + X_83~51 + X_84~51 + X_85~51 + X_86~51 + X_87~51 + X_89~51 + X_90~51 + 0 <= 8500;
92
+ S_88: X_1~88 + X_2~88 + X_3~88 + X_4~88 + X_5~88 + X_6~88 + X_7~88 + X_8~88 + X_9~88 + X_10~88 + X_11~88 + X_12~88 + X_13~88 + X_14~88 + X_15~88 + X_16~88 + X_17~88 + X_18~88 + X_19~88 + X_20~88 + X_21~88 + X_23~88 + X_25~88 + X_26~88 + X_27~88 + X_29~88 + X_30~88 + X_32~88 + X_33~88 + X_35~88 + X_36~88 + X_37~88 + X_40~88 + X_41~88 + X_42~88 + X_43~88 + X_44~88 + X_45~88 + X_46~88 + X_47~88 + X_48~88 + X_49~88 + X_50~88 + X_52~88 + X_53~88 + X_54~88 + X_55~88 + X_56~88 + X_57~88 + X_58~88 + X_59~88 + X_60~88 + X_61~88 + X_62~88 + X_63~88 + X_64~88 + X_65~88 + X_66~88 + X_67~88 + X_68~88 + X_69~88 + X_70~88 + X_71~88 + X_72~88 + X_73~88 + X_74~88 + X_75~88 + X_76~88 + X_77~88 + X_78~88 + X_79~88 + X_80~88 + X_81~88 + X_82~88 + X_83~88 + X_84~88 + X_85~88 + X_86~88 + X_87~88 + X_89~88 + X_90~88 + 0 <= 3500;
93
+ S_91: X_1~91 + X_2~91 + X_3~91 + X_4~91 + X_5~91 + X_6~91 + X_7~91 + X_8~91 + X_9~91 + X_10~91 + X_11~91 + X_12~91 + X_13~91 + X_14~91 + X_15~91 + X_16~91 + X_17~91 + X_18~91 + X_19~91 + X_20~91 + X_21~91 + X_23~91 + X_25~91 + X_26~91 + X_27~91 + X_29~91 + X_30~91 + X_32~91 + X_33~91 + X_35~91 + X_36~91 + X_37~91 + X_40~91 + X_41~91 + X_42~91 + X_43~91 + X_44~91 + X_45~91 + X_46~91 + X_47~91 + X_48~91 + X_49~91 + X_50~91 + X_52~91 + X_53~91 + X_54~91 + X_55~91 + X_56~91 + X_57~91 + X_58~91 + X_59~91 + X_60~91 + X_61~91 + X_62~91 + X_63~91 + X_64~91 + X_65~91 + X_66~91 + X_67~91 + X_68~91 + X_69~91 + X_70~91 + X_71~91 + X_72~91 + X_73~91 + X_74~91 + X_75~91 + X_76~91 + X_77~91 + X_78~91 + X_79~91 + X_80~91 + X_81~91 + X_82~91 + X_83~91 + X_84~91 + X_85~91 + X_86~91 + X_87~91 + X_89~91 + X_90~91 + 0 <= 10000;