stochplam/Makefile010064401520710000145000000007150761177544500156050ustar00altencthusers00004270000025# Makefile for PLAM (Programming in Logic And Modelling) # Insert the right name for invoking the corresponding Prolog system. # Then type either "make plam_swi" or "make plam_sicstus3" # in order to make the plam system. # The supported Prolog-Systems SWIPROLOG = pl -G0 -L0 SICSTUS3 = sicstus3 -f default : plam_swi plam_swi : $(SWIPROLOG) -o plam -c plam_swi.pl plam.pl stochplam_swi : $(SWIPROLOG) -o stochplam -c stochplam_swi.pl stochplam.pl stochplam/README010064401520710000145000000031621000201121500147620ustar00altencthusers00004270000025This package is an extension to the program PLAM by Peter Barth and Alexander Bockmayr. The extension is written by Fredrik Altenstedt alten@math.chalmers.se PLAM may be obtained from ftp://ftp.mpi-sb.mpg.de/pub/guide/staff/barth/plam/ This extension may be used modified and distributed for any purpuouse. Note that this program requires PLAM, hence you must adhere to the usage rules of PLAM. 1. Installation. 1. Get PLAM, SWI-prolog and get them to work on your system. In order to reduce the number of error messages, you may remove the statements :- use_module(library(lists)). from plam.pl and plam_mps.pl. List functionality is included in newer versions of swi_prolog. 2. Add all files bundled to this file to the directory in which you built PLAM. 3. type make stochplam_swi If all goes well you should now have a file stochplam. 3 warnings is to be expected as we redefine som PLAM predicates. Warning: (/users/math/alten/tmp/plam-0.1/stochplam_routines.pl:534): Redefined static procedure check_p_constraint/1 Warning: (/users/math/alten/tmp/plam-0.1/stochplam_routines.pl:557): Redefined static procedure init_blackboard/0 Warning: (/users/math/alten/tmp/plam-0.1/stochplam_routines.pl:579): Redefined static procedure eval_add_constraints/3 2. Differences from plam. The differences are described in stoplam.ps 3. Examples. Some examples are given in sp-examples NOTE the write_smps function is slow and should be avoided for larger models. It may still be used to produce the core and time file of the SMPS format. stochplam/sp-examples/004275501520710000145000000000001000201106000163415ustar00altencthusers00004270000025stochplam/sp-examples/#finmod.pl#010064401520710000145000000030420761177544500203160ustar00altencthusers00004270000025 :-plam. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Set definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set investments. set periods. set invperiods. set succperi succperiods(P):-periods(P),not(set_first(periods,P)). invperiods(P):-periods(P),not(set_last(periods,P)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Parameter definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% param initwealth. param target. param reward. param penalty. param return:[investments,succperiods]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Variable definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% variable above_target:- >=0. variable below_target:- >=0. variable amtinvest:[investments,invperiods]:- >=0. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Time definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% designate_timeset(periods). designate_period(above_target,P):-set_last(periods,P). designate_period(below_target,P):-set_last(periods,P). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %objective function %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% objective min:profit:- penalty*below_target - reward*above_target. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %constraints %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% subject_to budget:- sum(investments(I),amtinvest(I,p0))=initwealth. subject_to balance:- forall((set_succ(periods,PP,P),not(set_last(periods,P))), sum(investments(I), return(I,P)*amtinvest(I,PP)-amtinvest(I,P))=0). subject_to scenario_value:- sum((investments(I),set_succ(periods,PP,P),set_last(periods,P)), amtinvest(I,PP)*return(I,P)) -above_target+below_target=target. stochplam/sp-examples/farmdat.pl010064401520710000145000000010500761177544500203470ustar00altencthusers00004270000025% set periods periods(P):-member(P,[p1,p2]). %set reqcrops reqcrops(wh). reqcrops(co). %set ocrops. ocrops(be). crops(A):-ocrops(A). crops(A):-reqcrops(A). plant_cost(wh,150). plant_cost(co,230). plant_cost(be,260). yield(wh,wh_yield). yield(co,co_yield). yield(be,be_yield). sell_price(wh,170). sell_price(co,150). sell_price(be,36). purch_price(wh,238). purch_price(co,210). min_req(wh,200). min_req(co,240). quota(be,6000). avail_land(500). penalty(be,26). mark_random(wh_yield,2.5). mark_random(co_yield,3). mark_random(be_yield,20). stochplam/sp-examples/farmmod.pl010064401520710000145000000021260761177544500203630ustar00altencthusers00004270000025:-plam. set periods. set reqcrops. set ocrops. set crops. param plant_cost:crops :- >= 0. param sell_price:crops :- >= 0. param purch_price:reqcrops :- >= 0. param min_req:reqcrops :- >= 0. param avail_land. param quota:ocrops :- >= 0. param yield:crops :- >= 0. param penalty:ocrops :- >= 0. variable sell:crops :- >=0. variable buy:reqcrops:- >=0. variable pl:crops:- >=0. variable ex:ocrops:- >=0. objective min:profit:- 0-sum(crops(P),sell(P)*sell_price(P)) +sum(reqcrops(P),buy(P)*purch_price(P)) +sum(ocrops(P),ex(P)*penalty(P)) +sum(crops(P),pl(P)*plant_cost(P)). subject_to mass:- forall(ocrops(P),yield(P)*pl(P) = sell(P)). subject_to max_land :- sum(crops(P),pl(P)) =< avail_land. subject_to min_req:- forall(reqcrops(P),yield(P)*pl(P)+buy(P)-sell(P) >= min_req(P)). subject_to quota:- forall(ocrops(P),yield(P)*pl(P) =< quota(P)+ex(P)). designate_timeset(periods). designate_period(pl,P):-set_first(periods,P). designate_period(sell,P):-set_last(periods,P). designate_period(buy,P):-set_last(periods,P). designate_period(ex,P):-set_last(periods,P). stochplam/sp-examples/farmran010064401520710000145000000004760761177544500177600ustar00altencthusers00004270000025node(1,0,1,3,[ ]). node(2,1,0.33333333333333333333333333333333,0,[ wh_yield-(2.5), co_yield-(3), be_yield-(20) ]). node(3,1,0.333333333333333333333333333333333,0,[ wh_yield-(3), co_yield-(3.6), be_yield-(24) ]). node(4,1,0.333333333333333333333333333333333333333,0,[ wh_yield-(2), co_yield-(2.4), be_yield-(16) ]). stochplam/sp-examples/findat.pl010064401520710000145000000011540761177544500202030ustar00altencthusers00004270000025:-plam. %set investments. investments(I):-member(I,[stock,bond]). %set periods periods(P):-member(P,[p0,p1,p2,p3]). initwealth(55). target(80). reward(1). penalty(4). return(stock,p1,rm_return_stock_p1). return(stock,p2,rm_return_stock_p2). return(stock,p3,rm_return_stock_p3). return(bond,p1,rm_return_bond_p1). return(bond,p2,rm_return_bond_p2). return(bond,p3,rm_return_bond_p3). mark_random(rm_return_bond_p1,1.13). mark_random(rm_return_bond_p2,1.13). mark_random(rm_return_bond_p3,1.13). mark_random(rm_return_stock_p1,1.155). mark_random(rm_return_stock_p2,1.155). mark_random(rm_return_stock_p3,1.155). stochplam/sp-examples/findat2.pl010064401520710000145000000004110761177544500202600ustar00altencthusers00004270000025:-plam. %set investments. investments(I):-member(I,[stock,bond]). %set periods periods(P):-member(P,[p0,p1,p2,p3]). initwealth(55). target(80). reward(1). penalty(4). return(A,B,Out):- investments(A), succperiods(B), do_mark_random(rm,[return,A,B],1,Out). stochplam/sp-examples/finmod.pl010064401520710000145000000030770761177544500202200ustar00altencthusers00004270000025 :-plam. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Set definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set investments. set periods. set invperiods. set succperiods. succperiods(P):-periods(P),not(set_first(periods,P)). invperiods(P):-periods(P),not(set_last(periods,P)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Parameter definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% param initwealth. param target. param reward. param penalty. param return:[investments,succperiods]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Variable definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% variable above_target:- >=0. variable below_target:- >=0. variable amtinvest:[investments,invperiods]:- >=0. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Time definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% designate_timeset(periods). designate_period(above_target,P):-set_last(periods,P). designate_period(below_target,P):-set_last(periods,P). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %objective function %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% objective min:profit:- penalty*below_target - reward*above_target. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %constraints %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% subject_to budget:- sum((investments(I),set_first(periods,P)),amtinvest(I,P))=initwealth. subject_to balance:- forall((set_succ(periods,PP,P),not(set_last(periods,P))), sum(investments(I), return(I,P)*amtinvest(I,PP)-amtinvest(I,P))=0). subject_to scenario_value:- sum((investments(I),set_succ(periods,PP,P),set_last(periods,P)), amtinvest(I,PP)*return(I,P)) -above_target+below_target=target. stochplam/sp-examples/finran010064401520710000145000000020750761177544500176040ustar00altencthusers00004270000025node(1,0,1,2,[ ]). node(2,1,0.5,2,[ rm_return_bond_p1-(1.14), rm_return_stock_p1-(1.25) ]). node(3,2,0.25,2,[ rm_return_bond_p2-(1.14), rm_return_stock_p2-(1.25) ]). node(4,3,0.125,0,[ rm_return_bond_p3-(1.14), rm_return_stock_p3-(1.25) ]). node(5,3,0.125,0,[ rm_return_bond_p3-(1.12), rm_return_stock_p3-(1.06) ]). node(6,2,0.125,2,[ rm_return_bond_p2-(1.12), rm_return_stock_p2-(1.06) ]). node(7,3,0.125,0,[ rm_return_bond_p3-(1.14), rm_return_stock_p3-(1.25) ]). node(8,3,0.125,0,[ rm_return_bond_p3-(1.12), rm_return_stock_p3-(1.06) ]). node(9,1,0.5,2,[ rm_return_bond_p1-(1.12), rm_return_stock_p1-(1.06) ]). node(10,2,0.25,2,[ rm_return_bond_p2-(1.14), rm_return_stock_p2-(1.25) ]). node(11,3,0.125,0,[ rm_return_bond_p3-(1.14), rm_return_stock_p3-(1.25) ]). node(12,3,0.125,0,[ rm_return_bond_p3-(1.12), rm_return_stock_p3-(1.06) ]). node(13,2,0.125,2,[ rm_return_bond_p2-(1.12), rm_return_stock_p2-(1.06) ]). node(14,3,0.125,0,[ rm_return_bond_p3-(1.14), rm_return_stock_p3-(1.25) ]). node(15,3,0.125,0,[ rm_return_bond_p3-(1.12), rm_return_stock_p3-(1.06) ]). stochplam/stochplam.pl010064401520710000145000000053020767336746700165020ustar00altencthusers00004270000025:- ensure_loaded(plam_reduce). :- ensure_loaded(plam_misc). :- ensure_loaded(plam_mps). :- ensure_loaded(plam_simp). :- ensure_loaded(plam_build). :- ensure_loaded(plam_show). :- ensure_loaded(plam_termexp). :- ensure_loaded(plam_commands). :-set_prolog_flag(float_format,'%.5e'). :-ensure_loaded(stochplam_routines). % set declarations must be such that S in % findall(X,set(X),S) % is instantiated to all declared sets. % A set is by default one-dimensional. It can be declared n-dimensional by % set x/n. :- op(900,fx,set). :- dynamic '/'(set,1). % param declarations must be of the form % param(p:[S_1,...,S_n]). % where p is the name of the parameter and % S_i in S for all i % optionally we allow % param(p-[S_1,...,S_n]) :- E1,...,Em. % such that each Ei evaluates to a list of constraints. % some common abbreviations are supported. :- op(900,fx,param). :- dynamic '/'(param,1). % variable declarations must be of the form % variable(v:[S_1,...,S_n]). % and otherwise like in param :- op(900,fx,variable). :- dynamic '/'(variable,1). % There must be a single predicate objective which is of the form % objective min:S. or objective max:S. % where S is an expression that evaluates to a linear term. :- op(900,fx,objective). :- dynamic '/'(objective,1). % subject_to declarations must be of the form % subject_to name :- E1,...,Em % such that each Ei evaluates to a (list of) constraints. :- op(900,fx,subject_to). :- dynamic '/'(subject_to,1). %%%% supported primitives % primitive constraints evaluate to themselves % tricky by calling forall in order to have template reduction '>='(L,R,C) :- forall(true,L >= R,C). '>'(L,R,C) :- forall(true,L > R,C). '=<'(L,R,C) :- forall(true,L =< R,C). '<'(L,R,C) :- forall(true,L < R,C). '='(L,R,C) :- forall(true,L = R,C). % standard relational operators as prefix ops for abbreviations like % ">= 0" in params and variables declarations :- op(900,fy,'<'). :- op(900,fy,'=<'). :- op(900,fy,'>'). :- op(900,fy,'>='). :- op(900,fy,'=:='). % forall satisfying Expression0 Template is instaniated and collected % in list. % template reduction does replace % f(X1,...,Xn) by Xn+1 and adds f(X1,...,Xn+1) to Expression forall(Expression0,Template0,List) :- template_reduce(Template0,Template1,Expression0,Expression1), findall(Template1,Expression1,List). % sum is like forall, but + is used instead of .(lists) and there is no nil sum(Expression,Template,Sum) :- forall(Expression,Template,List), make_list_sum(List,Sum). % product is like forall, but * is used instead of .(lists) and there is no nil product(Expression,Template,Sum) :- forall(Expression,Template,List), make_list_sum(List,Sum). % integer_sets :- op(200,xfy,'..'). :- op(200,xfy,by). s to a linear term. :- op(900,fx,objective). :- dynamic '/'(objective,1). % subject_to declarations must be of the form % subject_to name :- E1,...,Em % such that each Ei evaluates to a (list of) constraints. :- op(900,fx,subject_to). :- dynamic '/'(subject_to,1). %%%% supported primitives % primitive constrastochplam/stochplam_routines.pl010064401520710000145000000715711000201130600203730ustar00altencthusers00004270000025%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % These 3 routines are replacements for association tables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause returns an empty "association table" % '$_pre_rm' statements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% empty_assoc(t). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause retrieves data from "assoc table" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_assoc(Key, _, Val) :- recorded(assoc,data(Key,Val)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause put data into "assoc table" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% put_assoc(Key, A, Val, A) :- recorded(assoc,data(Key,_),Rec), erase(Rec), recorda(assoc,data(Key,Val)). put_assoc(Key, A, Val, A) :- recorda(assoc,data(Key,Val)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause transfers all mark_random statements to % '$_pre_rm' statements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% transfer_mark_random:- (clause(mark_random(_,_),_)-> findall([A,B],mark_random(A,B),L); L=[]), assert_list(L,'$_pre_rm'), (clause(mark_srandom(_,_),_)-> findall([A2,B2],mark_srandom(A2,B2),L2); L2=[]), assert_list(L2,'$_pre_srm'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause extracts the number of periods and sets $_finp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% extract_last_period:- (clause(designate_timeset(_),_)-> retractall('$_finp'(_)), retractall('$_perlist'(_)), retractall('$_permem'(_)), designate_timeset(Set), set_to_list(Set,Li), assert('$_perlist'(Li)), assert_list2(Li,'$_permem'), length(Li,Len), P is Len-1, assert('$_finp'(P)) ; format("No timeset designated\n ",[]), !, fail). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause extracts the period of all variables, and adds clauses % '$_per'(alias,period) for each variable, % and '$_alias'(variable,alias) for all variables. % the aliases are X1, X2 etc. % all variables are sorted after increasing period, and when the period % is equal, alphabetically %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% extract_per:- retractall('$_per'(_,_)), retractall('$_alias'(_,_)),!, extract_last_period, bb_get(vars,A), gen_vars(A,A2), default_per(A2,B), sort(B,C), assert_one(C,1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This clause extracts all random markers and adds entries % '$_mr'(A,B) to the database % we also add the nonsensical '$_mr'('$noname','$noname') % to make sure an '$_mr' exists, to avoid testing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% extract_random:- retractall('$_mr'(_,_)), (clause('$_pre_rm'(_,_),_)-> findall([A1,B1],'$_pre_rm'(A1,B1),L1); L1=[]), append(L1,[['$noname','$noname']],L3), assert_list(L3,'$_mr'), retractall('$_msr'(_,_)), (clause('$_pre_srm'(_,_),_)-> findall([A2,B2],'$_pre_srm'(A2,B2),L2); L2=[]), append(L2,[['$noname','$noname']],L4), assert_list(L4,'$_msr'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % supply a default period of 0 to all variables without period %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% default_per([],[]). default_per([P-A|T1],[0-A|T2]):- P==none, default_per(T1,T2). default_per([A|T1],[A|T2]):- default_per(T1,T2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % add list of variables to database %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assert_one([],_). assert_one([P-V|T],No):- name(No,N), name(Name,[0'X|N]), assert('$_per'(Name,P)), assert('$_alias'(V,Name)), N2 is No+1, assert_one(T,N2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % generate all variables, output is list of period-variable_name %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gen_vars([],[]). gen_vars([V:S|Tail],U3):- get_period(V,P), gen_var([P-V],S,U1), gen_vars(Tail,U2), append(U1,U2,U3). gen_var(A,[],A). gen_var([],_,[]). gen_var([Pin-V|Vt],[S|St],Ut):- bb_get(sets,Sets), member(S/1,Sets), forall(call(S,B),my_v(Pin-V,[B]),V2), gen_var(V2,St,U1), gen_var(Vt,[S|St],U2), append(U1,U2,Ut). gen_var([Pin-V|Vt],[S|St],Ut):- bb_get(sets,Sets), member(S/2,Sets), forall(call(S,B1,B2),my_v(Pin-V,[B1,B2]),V2), gen_var(V2,St,U1), gen_var(Vt,[S|St],U2), append(U1,U2,Ut). gen_var([Pin-V|Vt],[S|St],Ut):- bb_get(sets,Sets), member(S/3,Sets), forall(call(S,B1,B2,B3),my_v(Pin-V,[B1,B2,B3]),V2), gen_var(V2,St,U1), gen_var(Vt,[S|St],U2), append(U1,U2,Ut). my_v(P-V,B,P2-C):- (P==none->get_period_list(B,P2);P2=P), v(V,B,C). get_period_list([],none). get_period_list([A|Tail],Put):- get_period(A,P), (P==none->get_period_list(Tail,Put);Put=P). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Clause builds element base, that is clauses $_elem, $_rhs and $_co_type %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% build_elem_base(Co,Out):- retractall('$_elem'(_,_,_,_)), retractall('$_rhs'(_,_,_)), retractall('$_co_type'(_,_)), esimp_term(Out,Ut,0,C), once(eval_random(C,C2,_)), (C2=:=0->true;format("constant term in objective function~w~n",[C2])), ass_list(Ut,'obj'), build_elem(Co). build_elem([]). build_elem([C-Exp|Tail]):- Exp=..[Op,L,R], once(eval_random(R,R2,Ir)), ass_list(L,C), mps_constraint_type(Op,Op2), assert('$_co_type'(C,Op2)), esimp_term(R,[],0,R3), (Ir==n->assert('$_rhs'(C,R2,n));assert('$_rhs'(C,R3,Ir))), build_elem(Tail). ass_list([],_). ass_list([E-V|Tail],C):- ('$_alias'(V,X)->true;format("suspecting ~w not variable~n",[V]),fail), once(eval_random(E,E2,Ir)), esimp_term(E,[],0,E3), (Ir==n->assert('$_elem'(X,C,E2,n));assert('$_elem'(X,C,E3,Ir))), ass_list(Tail,C). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause builds $_perc containing the period of each constraint (AND OBJ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% build_perc:- retractall('$_perc'(_,_)), forall('$_elem'(_,C,_,_),flag(C,_,0)), forall('$_elem'(X,C,_,_),('$_per'(X,P),flag(C,P2,max(P,P2)))), findall(C,'$_elem'(_,C,_,_),L), build_perc2(L). build_perc2([]). build_perc2([A,A|Tail]):- build_perc2([A|Tail]). build_perc2([A|Tail]):- flag(A,P,0), assert('$_perc'(A,P)), build_perc2(Tail). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause builds $_bo indicating wether a constraint is actually a bound %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mark_bounds:- findall(C,('$_elem'(_,C,_,_),not(C=obj)),L), find_single1(L,L2), assert_list2(L2,'$_bo'), assert('$_bo'(noboundforsurelkajsdlkjas)). find_single1([],[]). find_single1([C,C|Tail],Out):- find_single2(C,Tail,Out). find_single1([C|Tail],[C|Out]):- '$_elem'(_,C,_,n), find_single1(Tail,Out). find_single1([C|Tail],[C|Out]):- '$_elem'(_,C,_,_), '$_co_type'(C,'E'), find_single1(Tail,Out). find_single1([_|Tail],Out):- find_single1(Tail,Out). find_single2(_,[],[]). find_single2(C,[C|Tail],Out):- find_single2(C,Tail,Out). find_single2(_,Tail,Out):- find_single1(Tail,Out). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause removes duplicate bounds. It will also tidy upp bounds to make sure % they are of form 1*x %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% proc_bounds:- findall(C,('$_bo'(C),not(C=noboundforsurelkajsdlkjas)),L), proc2(L,L2), sort(L2,L3), proc3(L3), assert('$_bnd'('$dummy','$dummy','$dummy','$dummy')). checkbd(n,_). checkbd(_,'E'). proc2([],[]). proc2([C|Tail],[X-T2-E3-Ir|Out]):- '$_elem'(X,C,E1,Ir1), '$_co_type'(C,T), '$_rhs'(C,E2,Ir2), !,checkbd(Ir1,T), modop(T,E1,T2), esimp_term(E2/E1,[],0,E3), imerge(Ir1,Ir2,Ir), proc2(Tail,Out). merge_bnd(_,_,'E',E1,E2,_):- not(E1=E2),!,format("Multiple equality constraints"),fail. merge_bnd(_,_,'E',E1,_,E1). merge_bnd(n,n,'L',E1,E2,Out):- Out is min(E1,E2). merge_bnd(_,_,'L',E1,E2,min(E1,E2)). merge_bnd(n,n,'G',E1,E2,Out):- Out is max(E1,E2). merge_bnd(_,_,'G',E1,E2,max(E1,E2)). proc3([]). proc3([X-T-E1-I1,X-T-E2-I2|Tail]):- merge_bnd(I1,I2,T,E1,E2,R), imerge(I1,I2,I3), proc3([X-T-R-I3|Tail]). proc3([X-T-E1-I1|Tail]):- assert('$_bnd'(X,T,E1,I1)), proc3(Tail). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause builds $_map giving the constraint number, when % sorting out the bounds %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% build_map:- retractall('$_map'(_,_)), findall(A, ('$_no'(A,_),'$_perc'(A,_),not(A=obj)), L), assert_maplist(L,1), assert('$_map'(nomapforsurelkajsdlkjas)), assert('$_map'(obj,0)). assert_maplist([],_). assert_maplist([A|Tail],I):- '$_bo'(A), assert_maplist(Tail,I). assert_maplist([A|Tail],I):- assert('$_map'(A,I)), J is I+1, assert_maplist(Tail,J). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % builds $_per_list which is a list containing all periods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% build_per_list:- retractall('$_per_list'(_)), '$_finp'(Lp), build_per_list(0,Lp,Ut), assert('$_per_list'(Ut)). build_per_list(P,LP,[]):- P>LP. build_per_list(P,Lp,[P|A]):- P2 is P+1, build_per_list(P2,Lp,A). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % extracts aliases for all constraints. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assert_aliases([],_). assert_aliases([N-SetL|L],No):- v(N,SetL,Name), name(No,NL), name(Cname,[0'C|NL]), assert('$_alias'(Name,Cname)), N1 is No+1, assert_aliases(L,N1). build_constraint_alias :- findall(noname-C,clause(subject_to,C),NoNameL), make_cnamelist([],T1,NoNameL), findall(S-C,clause(subject_to(S),C),L), make_cnamelist(T1,Ut,L), assert_aliases(Ut,1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check if A is a defined set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% is_plamset(A):- bb_get(sets,S), member(A/_,S). %writelist([]):- % format("list []\n",[]). %writelist([H|T]):- % format("list [~w",[H]), % wrl2(T). %wrl2([]):- % format("]\n",[]). %wrl2([H|T]):- % format(",~w",[H]), % wrl2(T). make_cnamelist(A,A,[]). make_cnamelist(In,L3,[N-F|L]) :- F=..[forall,Q,_], check_1_cname(Q,[],Li), findall(N-Li,Q,L2), make_cnamelist(In,Ut,L), append(Ut,L2,L3). make_cnamelist(In,U2,[N-_|L]) :- make_cnamelist(In,Ut,L), append(Ut,[N-[]],U2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % append an elemt to a list if it is unique, not by value, but by instance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% app2([],B,[B]). app2([H1|T1],B,[H1|T1]):- H1==B. app2([H1|T1],B,[H1|T2]):- app2(T1,B,T2). append_w_check(Li,[],Li). append_w_check(Li,[A|T],Lu):- app2(Li,A,L2), append_w_check(L2,T,Lu). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Pull out the free variables in an expression. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check_1_cname(Q,Li,Li) :- var(Q). check_1_cname(Q,Li,Li) :- atomic(Q). check_1_cname(Q,Li,Lu):- Q=..[A|B], is_plamset(A), append_w_check(Li,B,Lu). check_1_cname(Q,Li,Lu):- Q=..[A|B], A=set_succ, B=[_|[_|C]], append_w_check(Li,C,Lu). check_1_cname(Q,Li,Lu):- Q=..[A|B], A=set_nth0, B=[_|[C|_]], append_w_check(Li,C,Lu). check_1_cname(Q,Li,Lu):- Q=..[A|B], A=set_ordered_pair, B=[_|C], append_w_check(Li,C,Lu). check_1_cname(Q,Li,Lu):- Q=..[_|B], check_cname_list(B,Li,Lu). check_cname_list([],L,L). check_cname_list([F|L],Li,Lu):- check_1_cname(F,Li,L2), check_cname_list(L,L2,Lu). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % assert a clause Clause with a list of arguments from the list % example assert_list([[a,b],[c,b]],myclause) adds myclause(a,b) % and myclause(c,d) to database. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assert_list([],_). assert_list([A|Tail],Clause):- Cl=..[Clause|A], assert(Cl), assert_list(Tail,Clause). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % assert a clause Clause with one argument from the list % example assert_list([a,b],myclause) adds myclause(a) % and myclause(b) to database. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% assert_list2([],_). assert_list2([A|Tail],Clause):- Cl=..[Clause,A], assert(Cl), assert_list2(Tail,Clause). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause returns an atom consisting of % N and P % get_num_name('PER',1,A) gives A=PER1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_num_name(N,P,Out):- name(P,L1), name(N,L2), append(L2,L1,L3), name(Out,L3). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Change to make list, to give | instead of _ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% make_list_name2([],L,L). make_list_name2([E|L],L0,L2) :- name(E,EL), append([0'_|EL],L0,L1), make_list_name2(L,L1,L2). % v2. used to construct variable names. % given a name and a list of inidices it makes a variable_name v2(Name,[],Name) :- !. v2(Name,RL,NameLL) :- reverse(RL,L), make_list_name2(L,[],LL), name(Name,LName), append(LName,LL,LNameLL), name(NameLL,LNameLL). % override definitions to check validity of constraints, % evaluating possible random expressions check_p_constraint(A >= B) :- eval_random(A,A2,_), eval_random(B,B2,_), A2 >= B2. check_p_constraint(A =< B) :- eval_random(A,A2,_), eval_random(B,B2,_), A2 =< B2. check_p_constraint(A > B) :- eval_random(A,A2,_), eval_random(B,B2,_), A2 > B2. check_p_constraint(A < B) :- eval_random(A,A2,_), eval_random(B,B2,_), A2 < B2. check_p_constraint(A = B) :- eval_random(A,A2,_), eval_random(B,B2,_), A2 =:= B2. %%%%%%%%% Override init_blackboard init_blackboard :- bb_put(sets,[]), empty_assoc(E), bb_put(assoc,E), bb_put(params,[]), bb_put(vars,[]), bb_put(integervars,[]), bb_put(constraints,[]), retractall('$_elem'(_,_,_,_)), retractall('$_mr'(_,_)), retractall('$_msr'(_,_)), retractall('$_rhs'(_,_,_)), retractall('$_bo'(_)), retractall('$_per'(_,_)), retractall('$_perc'(_,_)), retractall('$_per_list'(_,_,_,_)), retractall('$_alias'(_,_)), retractall('$_bnd'(_,_,_,_)). %%%%%%%%%%%%% Override eval_add_constraints, as it has a bug %%%%%%%%%%%%%%%% eval_add_constraints(V,_,_) :- var(V),!, format("cannot evaluate variable~n",[]),fail. eval_add_constraints(true,Cs,Cs) :- !. eval_add_constraints((A,B),Cs0,Cs2) :- !, eval_add_constraints(A,Cs0,Cs1), eval_add_constraints(B,Cs1,Cs2). eval_add_constraints(C,Cs0,Cs1) :- C =.. [Op|Args], append(Args,[Constraints],NewArgs), Call =.. [Op|NewArgs], call(Call), (Constraints = [] -> Cs1=Cs0 ; Constraints = [_|_] -> append(Constraints,Cs0,Cs1) ; Cs1 = [Constraints|Cs0] ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Routine builds the core problem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% build_core:- transfer_mark_random, build_model(A,B,C),!, extract_random, (C\=[]->format("error: integer variables in model~w~n",[C]),fail;true), A=..[_,O],!, extract_per,!, name_constraints(B,1,NC),!, build_constraint_alias, ecl_constraints(NC,CA),!, build_elem_base(CA,O), build_perc, build_per_list, mark_bounds, gen_all_num, build_map. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Here we create unique variable and constraint numbers, % and link them to constraint and variable aliases. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gen_num(N,[A|Tail]):- assert('$_no'(A,N)), N2 is N+1, gen_num(N2,Tail). gen_num(_,[]). gen_all_num:- retractall('$_no'(_,_)), findall(A,('$_per_list'(L),member(P,L),'$_perc'(A,P),not(A=obj)),Out), gen_num(1,Out), findall(A2,('$_per_list'(L2),member(P2,L2),'$_per'(A2,P2)),Out2), gen_num(0,Out2), assert('$_no'(obj,0)). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Here we dump an entire problem. % the idea is to read it into a c-program to do writing of files quickly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% write_prob:-write_prob(default). write_prob(Name):- build_core,!, gen_all_num,!, get_num_name(Name,'.splam',Name2),!, tell(Name2),!, format("VARS~n"),!, write_prob_va_per_name,!, format("ENDVARS~nCONSTRS~n"), write_prob_co_per_name, format("ENDCONSTRS~nRAND~n"), write_prob_rand, format("ENDRAND~nELEMS~n"), write_prob_elems, format("ENDELEMS~nRHS~n"), proc_bounds, write_prob_rhs, format("ENDRHS~nBO~n"), write_prob_bo, format("ENDBO~n"). write_prob_elems:- findall(A2-B2-D-C, ('$_elem'(A,B,C,D),'$_no'(A,A2),'$_map'(B,B2)) ,Out), length(Out,Len), format("~w~n",[Len]), write_prob_4_list(Out). write_prob_rhs:- findall(A2-Op-C-B,('$_map'(A,A2),'$_co_type'(A,Op),'$_rhs'(A,B,C)),Out), write_prob_4_list(Out). write_prob_va_per_name:- findall(A2-B-Na, ('$_no'(A,A2),'$_per'(A,B),'$_alias'(Na,A)) ,Out), length(Out,Len), format("~w~n",[Len]), write_prob_3_list(Out). write_prob_co_per_name:- findall(A2-B-Na, ('$_map'(A,A2),'$_perc'(A,B),'$_alias'(Na,A)) ,Out), length(Out,Len), Len2 is Len+1, format("~w~n",[Len2]), bb_get(objective,_-Obj-_), '$_perc'(obj,Obper), format("0;~w;~w~n",[Obper,Obj]), write_prob_3_list(Out). write_prob_rand:- findall(A1,('$_mr'(A1,_),not(A1='$noname')),L1), findall(A2,('$_msr'(A2,_),not(A2='$noname')),L2), append(L1,L2,L), setof(B,member(B,L),Out), length(Out,Len), format("~w~n",[Len]), write_prob_1_num_list(1,Out). %write_prob_bo:- % findall(Xno-Op-R-Rhs, % ('$_no'(X,Xno), % '$_elem'(X,C,E,_), % '$_bo'(C), % '$_co_type'(C,Op), % '$_rhs'(C,Rh,R), % (E=:=1->Rhs=Rh;Rhs=Rh/E) % ),Out), % write_prob_4_list(Out). write_prob_bo:- findall(Xno-Op-Ir-E, ('$_no'(X,Xno), '$_bnd'(X,Op,E,Ir) ), Out), write_prob_4_list(Out). write_prob_1_num_list(N,[A|Tail]):- format("~w;~w~n",[N,A]), N2 is N+1, write_prob_1_num_list(N2,Tail). write_prob_1_num_list(_,[]). write_prob_1_list([A|Tail]):- format("~w~n",A), write_prob_1_list(Tail). write_prob_1_list([]). write_prob_2_list([A-B|Tail]):- format("~w;~w~n",[A,B]), write_prob_2_list(Tail). write_prob_2_list([]). write_prob_3_list([A-B-C|Tail]):- format("~w;~w;~w~n",[A,B,C]), write_prob_3_list(Tail). write_prob_3_list([]). write_prob_4_list([A-B-C-D|Tail]):- format("~w;~w;~w;~w~n",[A,B,C,D]), write_prob_4_list(Tail). write_prob_4_list([]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tell wether entity is random. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% is_random(A):-!,'$_mr'(A,_). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tell wether entity is srandom. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% is_srandom(A):-!,'$_msr'(A,_). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 % own definition of what constitutes a number, extended to random atoms. % to be used with esimp_term. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% enumber(A):-is_random(A). enumber(A):-is_srandom(A). enumber(A):- number(A). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % access function for period of variable-names and indices, checking for % existance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_period(A,B):-once(clause(designate_period(_,_),_)), designate_period(A,Mem), '$_perlist'(Li), nth0(B,Li,Mem). get_period(A,B):-clause(designate_index_period(_,_),_), designate_index_period(A,Mem), '$_perlist'(Li), nth0(B,Li,Mem). get_period(A,B):-'$_permem'(A), '$_perlist'(Li), nth0(B,Li,A). get_period(_,none). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % access function for value of random markers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% g_random(A,V):- (clause('$_mr'(_,_),_)-> '$_mr'(A,V); (clause('$_pre_rm'(_,_),_)-> !,'$_pre_rm'(A,V); fail) ). g_srandom(A,V):- (clause('$_msr'(_,_),_)-> '$_msr'(A,V); (clause('$_pre_srm'(_,_),_)-> !,'$_pre_srm'(A,V); fail) ). get_name(N):-clause('$_name'(_),_),!,'$_name'(N). get_name(noname). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % own version of simplify constraints, calling esimp_term instead %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ecl_constraints([],[]). ecl_constraints([N-C|Cs],[N-CL|CLs]) :- C =.. [Op,L,R], esimp_term(L-R,ST,0,NRHS), RHS = -1*NRHS, esimp_term(RHS,S2,0,NRHS2), S2==[], CL =.. [Op,ST,NRHS2], ecl_constraints(Cs,CLs). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % esimp_term, simplification and linearization % constructs from a term a list of coefficient-variable terms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% esimp_term(T0,_T1,_,_) :- var(T0),!, format("esimp_term: variable must not occur in term~n",[]), fail. % special to avoid -1*(-1*blablabla) esimp_term(-1*(-T0),T1,C0,C1) :- esimp_term(T0,T1,C0,C1). % special to avoid 1*blabla esimp_term(1*T0,T1,C0,C1) :- esimp_term(T0,T1,C0,C1). % special to avoid blabla/1 esimp_term(T0/1,T1,C0,C1) :- esimp_term(T0,T1,C0,C1). esimp_term(-T0,T1,C0,C1) :- esimp_term(-1*T0,T1,C0,C1). esimp_term(T0,T1,C0,C1) :- enumber(T0),!, T1 = [], cond_add(T0,C0,C1). esimp_term(T0,T1,C0,C1) :- atomic(T0),!, T1 = [1-T0], C1 = C0. esimp_term(L0+R0,T1,C0,C2) :- esimp_term(L0,L1,C0,C1), esimp_term(R0,R1,C1,C2), esimp_term_merge(L1,R1,T1). esimp_term(L0-R0,T1,C0,C2) :- esimp_term(L0,L1,C0,C1), esimp_term(R0,R0a,0,Neg), esimp_term_multc(R0a,-1,R1), cond_sub(C1,Neg,C2), esimp_term_merge(L1,R1,T1). % special mult to deal with *0 esimp_term(L0*_R0,T1,C0,C2) :- number(L0),L0 =:= 0,!, T1 = [],C2 = C0. esimp_term(_L0*R0,T1,C0,C2) :- number(R0),R0 =:= 0,!, T1 = [],C2 = C0. %special mult to deal with *1 esimp_term(L0*R0,T1,C0,C2) :- number(L0),L0 =:= 1,!, esimp_term(R0,T1,C0,C2). esimp_term(L0*R0,T1,C0,C2) :- number(R0),R0 =:= 1,!, esimp_term(L0,T1,C0,C2). esimp_term(L0*R0,T1,C0,C2) :- enumber(L0),enumber(R0),!, T1 = [], cond_add(L0*R0,C0,C2). esimp_term(L0*R0,T1,C0,C2) :- enumber(L0),atomic(R0),!, T1 = [L0-R0], C2 = C0. esimp_term(L0*R0,T1,C0,C2) :- enumber(R0),atomic(L0),!, T1 = [R0-L0], C2 = C0. esimp_term(L0*R0,T1,C0,C2) :- esimp_term(L0,SL0,0,CL0), esimp_term(R0,SR0,0,CR0), (SL0 == [] -> esimp_term_multc(SR0,CL0,T1), cond_add(CL0*CR0,C0,C2) ; SR0 == [] -> esimp_term_multc(SL0,CR0,T1), cond_add(CL0*CR0,C0,C2) ; format("esimp_term: unresolvable nonlinearity in ~w~n",[L0*R0]), fail ). esimp_term(L0/R0,T1,C0,C2) :- esimp_term(L0,SL0,0,CL0), esimp_term(R0,SR0,0,CR0), (SR0 = [] -> KCR0 = 1/CR0, esimp_term_multc(SL0,KCR0,T1), cond_add(CL0/CR0,C0,C2) ; format("esimp_term: unresolvable nonlinearity in ~w~n",[L0/R0]), fail ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % conditional add, adding two expressions together, note not evaluating. % used to avoid increasing number of zeroes in expression %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% cond_add(T0,0,T0). cond_add(0,T0,T0). cond_add(T0,C0,C1):- C1=C0+T0. cond_sub(T0,0,T0). cond_sub(0,C0,-C0). cond_sub(T0,C0,C1):- number(C0), C0<0, Q is -C0, C1=T0+Q. cond_sub(T0,C0,C1):- C1=T0-C0. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % own version of terme merge. used by esimp_term %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% esimp_term_merge([],L,L). esimp_term_merge([C-V|L],L0,L2) :- esimp_term_merge_one(L0,C,V,L1), esimp_term_merge(L,L1,L2). esimp_term_merge_one([],C,V,[C-V]). esimp_term_merge_one([XC-V|L],C,V,L1) :- !, (XC = -C -> L = L1 ; XCC=XC+C, L1 = [XCC-V|L] ). esimp_term_merge_one([XC-XV|L],C,V,[XC-XV|L1]) :- esimp_term_merge_one(L,C,V,L1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % multiply coefficient-variable list with constant %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% esimp_term_multc([],_,[]). esimp_term_multc([C-V|L],M,[CM-V|ML]) :- CM = C*M, esimp_term_multc(L,M,ML). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % evaluate an expression containing random markers. % output is value of expression, and marker r if expression % was dependant on random variables, and 0 otherwise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% eval_random(A,V,Ir):- number(A), V is A,Ir=n,!. eval_random(A,V,Ir):- g_random(A,V), Ir=r,!. eval_random(A,V,Ir):- g_srandom(A,V), Ir=s,!. eval_random(A+B,V,Ir):- eval_random(A,V1,I1), eval_random(B,V2,I2), V is V1+V2, imerge(I1,I2,Ir). eval_random(0*_,0,n). eval_random(_*0,0,n). eval_random(A*B,V,Ir):- eval_random(A,V1,I1), eval_random(B,V2,I2), V is V1*V2, imerge(I1,I2,Ir). eval_random(A/B,V,Ir):- eval_random(A,V1,I1), eval_random(B,V2,I2), V is V1/V2, imerge(I1,I2,Ir). eval_random(A-B,V,Ir):- eval_random(A,V1,I1), eval_random(B,V2,I2), V is V1-V2, imerge(I1,I2,Ir). eval_random(-A,V,Ir):- eval_random(A,V1,Ir), V is -V1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % merge markers signifying if expression is dependant on random variables.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% imerge(r,_,r). imerge(_,r,r). imerge(s,s,s). imerge(s,n,s). imerge(n,s,s). imerge(n,n,n). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % give a list of all integers between N1 and N2 inclusivly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% intset(N1,N1,[N1]):-!. intset(N1,N2,[N1|L]) :- succ(N1,N11), intset(N11,N2,L). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause gets a list of all elements in a set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set_to_list(Set,List):- findall(A,call(Set,A),List). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause gets the first element in a set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set_first(Set,Elem):- call(Set,A), !, A=Elem. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause gets the last element in a set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set_last(Set,Elem):- set_to_list(Set,L), length(L,S), nth1(S,L,Elem). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause gets a pair of successive elements from a set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set_succ(Set,A,B):- set_to_list(Set,L), nth0(Ind,L,A), I2 is Ind+1, nth0(I2,L,B). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % clause gets an (all) ordered pairs from a set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set_ordered_pair(Set,A,B):- set_to_list(Set,L), nth0(I1,L,A), nth0(I2,L,B), I1=a <-> x<=a/-1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % we should have no division by 0 modop(_,0,_):- !,format("zero entry in bound~n",[]),!, fail. modop('E',_,'E'). modop('G',V,Out):- (V<0->Out = 'L';Out = 'G'). modop('L',V,Out):- (V<0->Out = 'G';Out = 'L'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Below are the routines needed to get write_smps to work. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wether entity is srandom. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% is_srandom(A):-!,'$_msr'(A,_). %%%%%%%%%%%%%%stochplam/stochplam_swi.pl010064401520710000145000000014200761177544600173510ustar00altencthusers00004270000025% simulates needed predicates of SICStus3 for SWI-Prolog % we need system and shell predicates %:- use_module(library(system)). %:- use_module(library(shell)). %:- asserta(library_directory('.')). % as usual; different names.... file_exists(X) :- exists_file(X). % the blackboard primitives bb_put(K,T) :- retractall('$_bb'(K,_)), asserta('$_bb'(K,T)). bb_get(K,T) :- '$_bb'(K,T). bb_update(K,O,N) :- bb_get(K,O), bb_put(K,N). % we define our own :- redefine_system_predicate(between(_,_,_)). % between between(L,I,U) :- between(L,I,U,1). between(L,I,U,S) :- integer(L), integer(U), integer(S), L =< U, gen_between(L,I,U,S). gen_between(L,L,U,S) :- L + S > U,!. gen_between(L,L,U,S) :- L + S =< U. gen_between(L,I,U,S) :- LS is L + S, gen_between(LS,I,U,S). stochplam/stoplam.ps010064401520710000145000005363270761177545000162010ustar00altencthusers00004270000025%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: stoplam.dvi %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMR17 CMR10 CMBX12 CMMI10 CMSY10 CMEX10 CMMI7 CMSY7 %%+ CMTT10 CMCSC10 CMTI10 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: /usr/pd/tex/teTeX-1.0/bin/dvips.bin stoplam.dvi -o %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.08.06:1131 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: psfrag.pro %% %% This is file `psfrag.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% psfrag.dtx (with options: `filepro') %% %% Copyright (c) 1996 Craig Barratt, Michael C. Grant, and David Carlisle. %% All rights reserved. %% %% This file is part of the PSfrag package. %% userdict begin /PSfragLib 90 dict def /PSfragDict 6 dict def /PSfrag { PSfragLib begin load exec end } bind def end PSfragLib begin /RO /readonly load def /CP /currentpoint load def /CM /currentmatrix load def /B { bind RO def } bind def /X { exch def } B /MD { { X } forall } B /OE { end exec PSfragLib begin } B /S false def /tstr 8 string def /islev2 { languagelevel } stopped { false } { 2 ge } ifelse def [ /sM /tM /srcM /dstM /dM /idM /srcFM /dstFM ] { matrix def } forall sM currentmatrix RO pop dM defaultmatrix RO idM invertmatrix RO pop srcFM identmatrix pop /Hide { gsave { CP } stopped not newpath clip { moveto } if } B /Unhide { { CP } stopped not grestore { moveto } if } B /setrepl islev2 {{ /glob currentglobal def true setglobal array astore globaldict exch /PSfrags exch put glob setglobal }} {{ array astore /PSfrags X }} ifelse B /getrepl islev2 {{ globaldict /PSfrags get aload length }} {{ PSfrags aload length }} ifelse B /convert { /src X src length string /c 0 def src length { dup c src c get dup 32 lt { pop 32 } if put /c c 1 add def } repeat } B /Begin { /saver save def srcFM exch 3 exch put 0 ne /debugMode X 0 setrepl dup /S exch dict def { S 3 1 roll exch convert exch put } repeat srcM CM dup invertmatrix pop mark { currentdict { end } stopped { pop exit } if } loop PSfragDict counttomark { begin } repeat pop } B /End { mark { currentdict end dup PSfragDict eq { pop exit } if } loop counttomark { begin } repeat pop getrepl saver restore 7 idiv dup /S exch dict def { 6 array astore /mtrx X tstr cvs /K X S K [ S K known { S K get aload pop } if mtrx ] put } repeat } B /Place { tstr cvs /K X S K known { bind /proc X tM CM pop CP /cY X /cX X 0 0 transform idtransform neg /aY X neg /aX X S K get dup length /maxiter X /iter 1 def { iter maxiter ne { /saver save def } if tM setmatrix aX aY translate [ exch aload pop idtransform ] concat cX neg cY neg translate cX cY moveto /proc load OE iter maxiter ne { saver restore /iter iter 1 add def } if } forall /noXY { CP /cY X /cX X } stopped def tM setmatrix noXY { newpath } { cX cY moveto } ifelse } { Hide OE Unhide } ifelse } B /normalize { 2 index dup mul 2 index dup mul add sqrt div dup 4 -1 roll exch mul 3 1 roll mul } B /replace { aload pop MD CP /bY X /lX X gsave sM setmatrix str stringwidth abs exch abs add dup 0 eq { pop } { 360 exch div dup scale } ifelse lX neg bY neg translate newpath lX bY moveto str { /ch X ( ) dup 0 ch put false charpath ch Kproc } forall flattenpath pathbbox [ /uY /uX /lY /lX ] MD CP grestore moveto currentfont /FontMatrix get dstFM copy dup 0 get 0 lt { uX lX /uX X /lX X } if 3 get 0 lt { uY lY /uY X /lY X } if /cX uX lX add 0.5 mul def /cY uY lY add 0.5 mul def debugMode { gsave 0 setgray 1 setlinewidth lX lY moveto lX uY lineto uX uY lineto uX lY lineto closepath lX bY moveto uX bY lineto lX cY moveto uX cY lineto cX lY moveto cX uY lineto stroke grestore } if dstFM dup invertmatrix dstM CM srcM 2 { dstM concatmatrix } repeat pop getrepl /temp X S str convert get { aload pop [ /rot /scl /loc /K ] MD /aX cX def /aY cY def loc { dup 66 eq { /aY bY def } { % B dup 98 eq { /aY lY def } { % b dup 108 eq { /aX lX def } { % l dup 114 eq { /aX uX def } { % r dup 116 eq { /aY uY def } % t if } ifelse } ifelse } ifelse } ifelse pop } forall K srcFM rot tM rotate dstM 2 { tM concatmatrix } repeat aload pop pop pop 2 { scl normalize 4 2 roll } repeat aX aY transform /temp temp 7 add def } forall temp setrepl } B /Rif { S 3 index convert known { pop replace } { exch pop OE } ifelse } B /XA { bind [ /Kproc /str } B /XC { ] 2 array astore def } B /xs { pop } XA XC /xks { /kern load OE } XA /kern XC /xas { pop ax ay rmoveto } XA /ay /ax XC /xws { c eq { cx cy rmoveto } if } XA /c /cy /cx XC /xaws { ax ay rmoveto c eq { cx cy rmoveto } if } XA /ay /ax /c /cy /cx XC /raws { xaws { awidthshow } Rif } B /rws { xws { widthshow } Rif } B /rks { xks { kshow } Rif } B /ras { xas { ashow } Rif } B /rs { xs { show } Rif } B /rrs { getrepl dup 2 add -1 roll //restore exec setrepl } B PSfragDict begin islev2 not { /restore { /rrs PSfrag } B } if /show { /rs PSfrag } B /kshow { /rks PSfrag } B /ashow { /ras PSfrag } B /widthshow { /rws PSfrag } B /awidthshow { /raws PSfrag } B end PSfragDict RO pop end %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: CMTI10 %!PS-AdobeFont-1.1: CMTI10 1.00B %%CreationDate: 1992 Feb 19 19:56:16 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMTI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 45 /hyphen put dup 65 /A put dup 73 /I put dup 77 /M put dup 80 /P put dup 83 /S put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 120 /x put dup 122 /z put readonly def /FontBBox{-163 -250 1146 969}readonly def /UniqueXX 5000828 def currentdict end currentfile eexec 8053514d28ec28da1630165fab262882d3ffd20326947b1065649b533eb5e9e3 a88a87fe987918a687950b26f647d6e08bf14d983ed1d4a8ca1e2da8d985f944 2eb916f5b6ed0697ac7c33e1e36a3bf460d34ce45f1631871097cb04f18e3889 4cf4ac1538eb19481311d24fe3be7beaa4a3730e8b4831fe59d6d9ce2e46116b 629c7ba2f9ce3ecba2f43bc162a5a077ca1b2882a42afdcec3f4b75b5d63e0bc 8e5dc95257766d8ea467ad9cbaf47be60f797580cced6884b3a68f70c91f4fdf 80fd00ed9139e7f480dc3a76af72ad9b434187730bdfaefe4cbfe5c7edcaaf24 9204fd703011932e5a3c27be468b7dab69daa18dbbb6335ab8ddfdc607961c7c 02582763fa069d43563ba17704029945cf42fcb19cf78c51df0ec4d851086d43 c1ab38e865ef36865fff3a08b01cbcb070ba4893f7482dc7819ad03d337e520e 7d8cd83bb8ac7aff4df36751f4f12aaaea2b6d7260c09a26e987c904003e0723 7dbcc4a8e4e85cd3259f40d3caf55c742cbb40ad0db1044c20a4f122a63f7b81 1d945bfa69662189ce4d089464d2ead9f6ed60b581b04114d5d45e97be27a576 35154e9b8464f2a0df18da855eb51b8f64d3054b0b2e84621f025a0776d16fed b988a43d2d64c32768dd106b9f541ae8e68ac0bb7399e16f4d4ba074b2152d0a 4e9b5bfc21bfa0d531e28165e518ffc054dd4ed0d74eca079d20e79670419f92 e03bcbfeecf3554d661596f6f29e12170804d15a250d917ffe7a8b6e8fa53047 1ed97ba56481589a65ca13619129f1e26affe6c22f0c38540f8ce37efb6e9e9b 60b51a5a9cb4454fd7c7f92f2f9437159687ab590f35b946a54491a7739c9269 e0f1fb48b129811c82edb3171cbd5105fe65906974db8a7da92f4f43dc7f6b36 6981146d86d23613a0b38d9d6191db9fea0172e982cb1cc50e382f69da1b377c 1be9407f88a2a761b56f398467a057f35d18c01cc377e0061822b94abb98feaf 33e32c9bc59416e65491cb08cd8de429deca10ec4765d20faea23f130f5226ac 4d27d24db0385cc31b8b3227812d2c2fd223d0b86eb936ff0bdc45a281c544fb d7798b4aa264d33ce1e3eed7c77fc4942637b524a072aaf76b4aa25c250c8496 d0787d1139a647e7165191dd7ef7d25d830220b8ba0e91b1019c1541cd052faa de1157d53f434b7002e64cc5ce2039c3501c39cc7cf670fd4c035bf168cac15a c193001d2679b098a1dabfd898e859a404dce7670dca5dd834330ba37339fcca aafcbd0f8ecbef0e19d100bc3bef82fd49e0f462fab99bbba1e7cce3fb4faf8f 90fdba13e1ae181144b9c953b0a8a66d9b184d71ad0bdc5d342c55d1a6f34afe b57848511de552c6f74bc020e60e8bf82098076d91661a05a024ab4444d4eacc 4d0536309a614be245ac399038431fc5bbcf92b63dfedd50179ded3497d6462f 2d32643c57a14cb45502e7b74ba713c3eefa75843e3b8984069454dbd912924b 43c29fd1733130fc48e2dd8ce59a86273ae55a18494289ac42a0730524f87273 0723030265968d3d9829852d4940fc913fdc144339894e95bedafc6d57310b18 a82f0da02bd9c35d2645ec37f7c48cb1b75e93d307a12b55e33e39104ed41de5 18663837a8c24fb697a90e81640494995adf9dfd505dd138afc6e4765f2eaba3 53086d02e81e10fa2cc89e9e82c5196afc44cfab8716d92c835edb518b6a0e8d 3d014264cff889a14ba0fe72a82b98fce8475a54bca182e69d997aa45b99d44a a733263d23d8d8092720761e5216420f989140a59aa5cdda0a1f538e868b1dcc f2f17d05707d677b9d6555b9a311a14ce502c676dd6725b1102b6bb5d2faa536 f60ccba8ed82fc659ce17730fe9c1f09966b71140dfee5744923eb697e6672d0 706709447bbf49dc25a40ce48f1ee0e14038a2f759ab492248a491246ac953a0 1cd026058fc229938380bc99a1ce246e292aaef100f7d18b4668d8b57dc3cb75 e6e9ea8b70ae7947b61f8ccb99343d1313eb8dc213ecd65c35160a4507f15046 bbde96665fec2c79cabc10b642a6e0cb7f9dbe515cd7458237745d0eb269214c 63f471e1f13c85fefb96edaf503198cacb95da2c83fc7a53f413d9f76ffb8d3b 8190ef25f732be416048c4607c57a31970edae99ae8eeffd7341f96f5354215c 2e10ec0b68e880974261935f939ab171f52268eacc15e46f29943d0fce45be0f 5fea0c492b36c1d2d39e1eb2100625956f1ac25bbe4bd3f797fb56af9bb74135 3e71ae5f4c4f3a0856b8d22d06524626086b74855c2cf8261d4f6c7fcf5e54a6 76b2d9ddec7086ea9f44923205725b9f26a623771a9cc8077cc6e00dc0c34476 607c81b357d0f90dae66ff5b3131496714a446a546745a0b2e194494e9a780ae 01650b17e3a8a0bc0ea94e5efda11ca9bbd838a57f3e66261faced193d80fded 91f5020908cd065b12b41b9edb6f8caf20484d7b2e2982716e493a29d08c4234 2bb67263433fd6490e1224ee4ee4d2038c0307926c1a683d137b5324f444b937 e8df9fdccd4b39bdc22546b5b7f617202bc8dbe997c6aed6515052fdca3ae41c 7bd764f5a819869b7e551118a18e4f415b644e3213647a9ce33028d0fade6992 65ae684419fd41d0da111fff4c8079156f2a60f888bb72ab6c6eb1358ee0243f 1a7eaa8532cdf56bcb086cf8baa4b1d73b6fe6c7928ce68201bac5a7b7b7b55d 7334d11d656e3714ea5a66353221c087805010535f17290f710ec2456d8ef3b0 6d90950dda13d0b1e8e583824dc38c67023673faa286969cd677a2ccd10b31a4 de1e738a9f0b34eaea4565da597465afc40deb4e7998a262bc2122e05167e066 b8148f15dbfa908baf9e2dc89ccfac43d1abdc223c250d3929cc0248a8ce0971 951d6db13f8aa959723d0726d5b3016fd979abda6b9ef81c2411b345c84b68e2 891bbbc122d9b7e06a47e949045f2fddbcc0acad18849f20e3a95c4020d18d32 4415f9b7259a9085b80c65d566cbc7c3a88372789374272ed760571a75a5a69b 46730467ef9569cc3af39a7cfea46f2a6e516072e117474b0b4024abad6c7977 5d12a4284ba767f02404cf4647a154924ffe9c1b29f17f758fc7d26aa0bd4a0f 55dab349c3228e975141409d72101c27916238bf8582be150a988d887964da3f 75071f6212ca523ea0f2ceb0581ebd9672306202a1e87e8109847b7d89e6f251 e23729aee2d5803268bb44962a9ddc07238f265935598c8cfb6ab792923ac5ec ad60b04ba0f3ceda3753d9c725bfb37b7bc0fdc660623af6b7f927f82d9ae7fa e6332580ca153a7f36c16c96b2b0978e705d9b4468c221e53401528259e53d1a c46367e9b9a767622bdc7213e7b9193d361b86ff53ace21a2c734aedf5b455ec 77c980bac3b369e16cd3805ef7bf51594a025e427640806448330bd1f0391717 d202617ddec8817f30a576c5f5f7575e6c3b172038134e9d8647606af1d0447d a295e79979802e94c3ab054591d54f4cd6cb2666c3f18f9adc26addf41aad1b9 ff592580a5bb28b695c9d958e6827a0ea5045dbebefa42048c125e6dec29359c 35732736972408e6f60182c2d89e832f522be8df8c9e5a3935707ccc06daf6b0 ffbe5e301ee61841e7f56008018c365fd2a80078782830cc806cf110e2b60e1b 2e39f97ec0c43b30530a47180f7e8905633222fabd93132584fc14aeb3b1eca2 65110a8b32244c539bef1ca8f8a35dd03dd551276c4884c5285ffd4f0ff42a67 b4e03ea9632874bb1a168f070795fd2727d0744c86cc133812fda675c8d538b4 c4f381ff558ea0537a99ab3e8c087744d970b8fecb76c1a9c5221e0f8dcd8588 ee8a1e4f6f44dd5a2b1d20fb429010970e93eb33890d00775df12b6b2cf0c895 81cb264f9736d95ac170a1fa9fe5e996ac919510576cf8535001d1fb1af6562d 5bdf0b9b38a7c1b773d745c5c32268bc1d5119d9d687771de58dd172cd5d8a53 d7f0805fcc5fc798305660d7306f385ceaa9b8598b23f0293213f2812879a12a 42ae73fddece0feef101b1ded9e010480f8cea5b59e69db57321057a0ffde98f 1e55f7d26fab7bdcbdf0ba832cb045fe3e442a2df2b65acb6a9c1b0ec89de31e df70929f78b750a5f483530a395b33057acbb845cf85cd84e7fafb83e285bc36 ed321aeaa4457e10a842279b4ceab9145b420ac785ed61ec9c60624f4fd1852b 4e74ecaaa7ab5249fe529df83fd8085695c100597041022a47ba4e787a4e22d0 3e00f80528ab4e8f768302bef4e3aacb7f0db8d7693a1b5d81e3f95c888c44f9 2b0e054713ef82f23258f954c25dc0e3a2d0965e615a6d0f148ea6160d8c3f7a f6908051c1352862b5974f5dde3c0ce2173799869b8bba0cbbd71f175fbf8b92 53f054efcf4bf926c34e9c03704b029f433857a22c7d009b50f4c3df46d2f581 fcbc56a8ba9e27686b61108b514c92434d7afb142f3d6c3bfceb1891c02c8536 424cf17ac33d592b87793590ccff40587cd1377c6d7323a0c5022bd47884d151 544025c707d5f7a8d024a95fe617ab1694abe34dac0c1768e6414cf790840a80 a9b517475925c546b7d5e40e01e1763efe0821027f8005f69484696c5002ddf3 2cd79fa51aacae772ae878aaec712c17fb93e3439fa49b5f1ac7bc8c5ba5d6c7 a67a950cc3b05f56a1a510fa13ef4e8ac935bbd73d4f8125d62449b012b5fe32 39a4705a7be5a6cc6a12e69a2cdf1cda132d1a5af058a3107eb0254f6bbab519 37e939a51fa30b2662c42777e314a532fb470ad6116863f99e91ca6e2b60101f 50c5863472670fbd1c1b6466b2efd5ac5401d06639668c666c4372604523fbb3 e95ec485a2a7b6bd4245c7f49b9daaaefc97e5640ae477b1c22619bc53b13482 00ac73fefec147e4cfbfe87f8a69046dffe74769153612371ac773eaad440bc9 43425aa78ec9e547ca33bd0e10871d1ff2bfb69b43e759d4810aba2f182b2164 65c325b0cb16325919a9c39d3c3f75205a3ed7ea5cccee6da1f65c95010a700f 06b84f96abcf6f00e54a7296231322c07b456297027061610cd032d025222f7f c50c0387c720ad5afe436d2b094392627967ff16ed0a26872b800258f4066271 c3cbb92167b7e392400fe32fd614650109de7e875464844d7b55efb999d7b56f d9d2b921914f20a8c15b314f8d347ad9b3914c049c83089310b3692ee4a4edaa 4667fd0708df3d267ded0c33ecd2a7dd6ec322c18fae0ccb5e9f8aa09e0517ec f64eec9c2cd6d2c19a30736ddad0a9d0fc49616c1eb40bd26ef0f0f20b57aae4 95e8e2d19942ca4020d04ef14baf8a4b6982f4eb4bd190421ddd0fe7eac97333 609df02c55ec2c9466bfed47f3819129bc29915bf1b489febb331917a3d3a0a8 76658d50a89b19e27dda7a9846757bfc4402b5e82f7e7c8501a04a1186349aa1 639867ebea06c1cb18be44182950b9feea185d1a0604dca33ee342546d246e02 aa0ed14015404cb213379ab86f707a5ffebb571a199cbfbb90034bca2ac62c63 0b097fec5870590e4784385d8208e5e12e99f781fd99ce147b2e8f115123743b b4238a124f8c7a17fb75ebfcd823fb4de8cea8e5c45c5da55651d6e0dd51e8d1 e506d6e9e991127c2601569f6fbe7eee49f475a258e0c69c0aabe68f4f7912b1 73aa496a1d612b5ac07fd7de5a5320a9174f6be8a77ca36e048cb218ad2d2995 2027aaa046fde4b9fd2408165fc3aace90beba99d3f1db3d30aca02fdf441b76 8de0389bd4127d4ba04d48bc9a3573a2e7c5dbc0f16fe3820dc9524edc361a33 c9fb6d6fe42fffaaf2e438f0761cbfe1d0446da4745d9ade1af128f8b4183e17 bba121def1a0b9fadd5ff55216528e0a23aa2fc2fb069eb61370e71a1fb48e43 72a8766c094b3390260d1a93d55d65d91a18724553906f46c9bbe3c90b288bbc 2ac7b2c11c59528b5329eed3d3022b1e48aa3eaa671eb5be387f9595e7f1a167 130b2e170872393547f767c94fe13582d45379945c7f5bdcc8ace69c968fdc20 5012ee81b75b19864abfeb4491c228b18a011593144b5e13fbd71495447e4e7e 4eed9e619c8ff8b0a4629e25899f33c5a05dc7802a31f6254efc619751c47627 2268b8138c93143e98e8a41f77fce3b1255d1e2b1c1a4293692765d4e7d48c17 04c215ff4e7607a4f6feedfed512d52a142d5b857937aadb8b04c580e6459f2e 6e4456ccf70ca56284a27826d4d0ab9176d557018a619ae01cfec964037a2e51 0dcb31c5bdbfe9ea45e44348c58eb9b684c9a71d107a2fda32986c499983d0f0 6fd264bf15df4924aa264c3f528f532ec475240c7e11b9bedf5977f5c4b867d7 0fbad8ae8dc84398f8c10e7035ec20cf1420ea30f09d9580a44960c8553feb87 829abfae8070e8f381211d786bd4f78e8fec8bb32378100d8e90bf90390ea9b3 90d43c4a3ac6c7de48798bba201cd590b9d446e121c2575ba229aeb068522f98 f0cbd59ed441c8010b46f959f28bc5103af6f51aca2f106e6ae18c871cf90c50 14945065406acd062019bd81e0929bf51ce265eb9954b8d626e3ddeb560568c1 feb9b8c9dda2591b247e1e159e6e268b4a3b3e96df828d3ff6871a69c6e5c56d a2d6046e59e8ba6c88cb5105bece8e9f85a89eeac2f10e0658454df194490b9b a72f75c0244d085c7f256f23d6787ceafa56c149dc32b5b6bc2cd13259a538ba 8676d8c85b52380e9480009f1acb17624bba4072d7724eab3708261bc5b88706 59b83ff11ea2a3d23fba85eceea9a1b2cce1b8ef2db23180233d103c3b857a0e 430371b6ada3ee7e2d1758c6ffb4f6192f3da7f70095b09e49ecbca680635b80 1e464310d24e5750ad0f6ea1b3d3de7922de1002796c4ae71a439a60c26e7fa1 16894a51cf1c82fc99ac05e3e91d00e7e03a5822461fc390cb0be3b4f9ac5224 3665d0d4f726bfb7a078a92c87230f278fe283e21f29e9268dbfc90771c349fd bf017440b80e82a541877a8c12754e263f86dff7490098b385315777f7ee0b75 8f339117149b0c81bf2e4a4708e7e4b0adbd038149fbe9d5eb2b086b3093c12f 366487f706bc922a692a3d801035d77b3bd81a88010246f5cc094579a71fb260 ce4e3bfe615f4405114a0823fc1b3e8f7c13c12c9e2d93d279eeffa752cddc5a 9029bc2e4b72cc43fe01498d15a8b13494051b732574d73b46c8b00bfe609057 09ef28d141ef3a18dfd6e8707c03eb1651da8d5ee40fcd54f7e815d135a03ad7 d2a98f98055c0441db3f68e7b3194f205ea3f92223fa260c32077fd87a464a90 495aba7938765cd2329fbd41bad7a63e7a4765d2afb24f5112fe2c33cce10b62 b0bc2e2626c6c87f6434552f0403e61567779f7e30cbe2acb815f9378ffde3c3 7673e795c48b270966b2652be9cb89a695166eec164c313369a5b872ce6fae6c 3e7472b78b003f74d26be98b44e3e728abe1ec327547ef4ef54ffd323f7e544a 6df89e4f556ad528ef38773eb6e169cb7457f4448abb10a2e22b08b031f848ab 53e499aa531b2f87aedbc1352dfd673bdfecc4f8a4f2c4564867d6c717d2fd0e 43fe94ae2c50d70acb6d922d68f68382d8e5a469b5864eb4f11b554bdb939490 6f5cd1425e7674148dadd0850ed9f286af80dba4d4af75d6de048969c87237b0 59ba5f2f119332a062fa2900e9f9cbd2cbdebe3658bda76edc132b7f78f7d33d c474531fbdcd621207a398c5e375c88b9db0e9b56771b78335f1cbc893128dd2 1127a5eff7e872876daaaeff5b805ee73e247e82736767aac4a65d06c7e9f39e 62ccad9ad68a24afe0169d86af572038ad4ad16fb6b97ccf900826f7fb2b3419 6f93e76c0ce671c30542cb5e375cd34fb423f00dd5c7bce258eba959d4ec07c7 3f219825bc23d3f524aac25d2a5731ef99245a26c9b26475fd780304ae626368 9b2573ffd3ead1c1ffabd3a033a309b244986af3de70711907468fc3b4bb6961 a6604622c0bf448044ab35730ce58620f82e9f9e7991d3b5a76f25a04f364059 9485e759c2b1acc36b4e3af7e12cadd4c86151237fe6dd59845dbe280cd27960 deaa2accc68b111cfc8d894eb6abfe67483032a8195cd4136a026d194af13cdd c5307e771532f6b10161be723c4aa64f0214b7e04c5204a338179406bc66ef39 9deb6a516bfb5aff1383a0a9ab37f5e909293496231b86e339c2c54f001db192 4705e526b7b9ecf2e16866eb65573ab6e98e96808db2ceb9b7b1b6ccf7f77488 a5dfce60d7f2cfe81d6d9fb6587a9aadebd1409fe497ac43900272432f3e3fce 4a7a4ebb56622d7fdd5bfd30a77d761bc7de9e4d00e1ad969fa0c3b17c227682 82a282ee743aec568fe671b2436174665dccdf0891606f02525bff3f8aa2d998 e8b44b0d886851a01074cc76ec9a796f8a981af35a8c308996beaae295c79dae 1635058b1584ce21b0e4827aca8fb21b2b009abf6ef6a628c1e6d2ea0f6759f2 5b4a3b3cb914f661484b8588a56706f5e1af5efeb970e5c5e9f786de2ce16743 07ab9b7292083a6e8397fc386fab9af3c292b8a3379e31706d66e30bc3f91be8 877170b3336861c563e035086bb23ace3d04a27c8a308a9856b19e71895eacdf 34949fc6ed0ec2da2a47fc87b68daf22f91cec315f5706fc66f403dd3390fdd3 4fbaa94a46c96158cdffb77e370e1732d8d12cac4313477c08ee22deacbfc154 d028f612e7d72e9b37e4fff5910a3d725e178e7671f3f561a400488d7d1c5536 3550cb8d14fe5290acbbc83bdcfe4662e2e4424f67748144a7a4c13ce7ea1c38 f31a459fa86087c178 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.1: CMCSC10 1.0 %%CreationDate: 1991 Aug 18 17:46:49 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMCSC10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 65 /A put dup 66 /B put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 80 /P put dup 82 /R put dup 83 /S put dup 87 /W put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put readonly def /FontBBox{14 -250 1077 750}readonly def /UniqueXX 5000772 def currentdict end currentfile eexec 9b9c1569015f2c1d2bf560f4c0d52257bacee583a5c939393e012707b47e0c1f a47d284a1edc9d01a497d772bca8c543388e6dc0d1e2c4944740470e0914f65e fb0737b0851b2ba713a9a00b36d07da6bcb52920b9b59efe587734027a3c5e65 66aad332fe6fbcced1417802822a3b81d6187875263d6bbda04bbcf6e4870fee ad60f104bb3c5a766610dd11aea64a6b107b0b04439fa2888b8cc39232bb83f7 695aba81f0260cd5248b9e649cd800bcb325468c79ffacb9cd3037a112066957 7889d67fff57549064b985d67ede2fb03272083723541051ebe936eff01a4ab3 cd845d565dfdf25d9ddd2792db17f52f894bea484480f06c832140fdd6c3af0e fef0584c6b78b5e2bbb9a752f10581fd1c48cb498a822afb18cddebba34695b9 b418010368fdfb7bf758d50f3af03360b81c776325c33c9c81130b1e1be840cf 68c71ffd091dccc0df7b507fe8953dc3836af0da08ff9ff3e9cf7288d9eb8baf ffac546a0fd987ae8e0bcf7b759f4408e13524f478de5896d816cb0ad2904271 cbec82a5ca50f0598502b434ecd94531b4a65181b5b3afcb650904b15157737a a4386f1a7f1252caf2adbd5c8162bf3b065c01ca471d520c884ebbe1b29f9549 134e285dea2fe158c15a08a744cdda00bb6c62158262e24702803d9e1dc1d3a3 1383085631154b077fc20488ee3aa03f47ed2766644330b94133f2f9389b99b8 96d3707d1c5bb227fd3bbdf3a6ff572bf07164107c7a1c0710a5c7cfb67282f9 c238100fa138b75c553d7cbef17e2292a320d3d86a6210e6e3a1e590b10dac6e 177094d5dd163db623d7b344478752f6f3d7d5b3fa92e6bc72dc6fc343d2f946 9153e3d14c5a6d6b1d9ca52947b789cb4cf6196a02973aff0b097333f8d615c0 a1726ab7e31c378eab77150faa28cce535afe3ae5798402ca51cbd18dedc2c43 5281d0781351df30f4d11761579676449ae4a47a10f677cdd31ca9120fc2606a 9025d3cc09d58856a9bbfb17669f706ff8c7efe37a3656c9b20609cccb58b309 0595ca5666833f2bbf884aac1cd632fce69b4e0ea2e0a25b9c4d471f0e322e09 4cefda321359fcf0ddf32442a0321e628d1d3eaddd01986ad3a96710c071c973 c626b510983f613094594116e0eaf9be9014bd5085f4531548ce6223f7bae2f7 14ebc7f48409fb687b359734324f1f394eaceca21b577e347deb31d178d42f11 d8a7f953724bce484c5eba2e3ea1db359686ca8d72356c7933fceee017e04e3e 084242b9fd8203aac27249768dde45488958bc0edf81e90c7c954efc7cdfb4c2 0d7cb10bdfaef25787a4f4ca00595ffe63a7c6af9fcaeed86275ebb4abae3d52 c35e64c695437607029b31373b1f623118ec34a044eb64c870801b498964911f 9b12060ced14aa2d2e75fd9bea620f4f8f866b8d76265730ea5d9e6ad6da892c 1b2422e826635126093de6f52c59b5af0bf90992a21e857d450824e17247c734 6788fcbbd51c597c79033dc53a07831501596858aff74e3c8ea94103d9521f22 021953a683936298e65ea5fc75ab7f8e862f1d2d2bd1ded67b59de9648fbfb4c 8effb378dc29c8ca30a0c5fb0a21f3ba9e4578f8d69ea134bfefafdbf1a86186 420d5c340b6359327bd9c5087784a6e2ef5cd96d9b48fd91b1f910bf5cfefafd 15a11ee62002993bc2f23ae2e28ddbfdf33b5c139c020e8cb4662dd71a840fde 71ff5d3f4c54d5e2da8b5262cbea84f881233a5c14cbc621f2f9fed7de6f8f2d 6fe8fca027ceba0c6c236a4e5e755b79d855550f3354115682ee6159fd3006ab 07bfdaa0bbb723cbf6090e973265098e9a9f0255ac3aa36c6deb17e9286f24bf 0f328cbb1ea2e198f96e6476efee8b562d329305bd705fc73e8c6de60cc70842 001bbe4a5e2a3058edb4d0c1942959c81af55b21093d2524468971e8d21f35bb d5c60e770a0966b29031c89274147d7cffff56407594a230be0c0a2c1887c350 6b45328e181e4c84dc8dad59db4e4a2885081bcbde3c56597afb8bed0f1484e0 1319e111d2bf0998b4d751c813b7affdcdf6f0cbafb6a35f59485b36a792e0d0 1564c5993aff56f6d7785502bb31a856d92e2bec1c91c3bcc4d3fab9b8d42b4a 493f5e851b2bed70b36e5db66ef11dbe82068fb9a446dcdae606dc2d23bc2c68 a99c2f6b6de013f5bc8ea6aa729d59fc37fa0f02e5f6d8af012cd9d50116ce1d 8ba0f8448376ad3014255e566239d7dd3e857c7116f32e9a9789d967cb8a78be 1d0b3f79fd7524ca64dabc682cb76d11f334b880351c50f47550791810a9627d 0c92a38bd2643f332d3094753d28480084da77f41bd4b65b2e2088446259a6a5 0f4eb49b1935ea38cbf56ab10c65c3c33d4aa9dcd1155990d8f618fbda904df1 05b4af2df42e669fc0c14329b9e4f3d4a94266764fa6ce24ace47c3807642088 db7e210435526e97a594e2a65e9639f0c1b1d73157fbca93747538db157eb626 4f763c93572bf41960912bc6f484a316681fe21f9d5363812dc024911a191603 0b38dead9897c2ee712fe6a6a241fff96a8975da4518b5bf8e8271ba3f227fa4 a5f076008ff6c4d1ee7a9b2edc16d001f694545bcad84a724c4d5e00a00bc557 9b2c0994ff8bb237b530df752c4cd1d2d066101e2d88902927b38bf3a55506ab 68a6573d6b73f0aa8a7f584c9a4ce40a9d21ccda0d8b7eb578867932976c9827 1ff84382d5472d6a08f86bdb4320f5b5ff0da257d17b61a317c0dac80fe9604b b1394a5fa7161b3e036bbb618d40ab083a1add82db9d8f4b6a66e0400d7ec25f 60fe7eec444cfa8ac8919ab4d7334d0f982480939748cbe037082840d9f32aad 68ac9e9a458a18c8b4063bc67a2c0ac634e4045022883a1dbfdde6be24df2ec3 667852251c39f55c47af547a4784698763bf9ec20a615f7825108104191d48c1 236f87dcda789432c9154163171fbd931c470e3d3aa66fc0722f2df9277aee44 323bcedd008a185b6581090c7cac031fc034ecbf2bcad534935fccb70d07762f 4fa05f6c8762e4311e7c20d9f1c6359500955f78cc0ccff9f1d36de01fcd87cc b58b9ff5010ae98768ccd61f7b85355d7e3f1ff48e7bb29441b8decef240e2ef 71613ecb14030191fbc30154750fa4935bf26c86cbed8fbdaeb25f8027099b85 65c12fde03b5dda2d111d3f4d99c9d6ddabcb0142e8e2f6cb41af619734fb5d6 df90f6e7b17918d807b7d622af227de468e0e6b910a3ecd4c74338000d737e31 4f77ed9a8252b8e8b6c8cd2c99c83eba16604742e327ed459f4a173f07b902c6 3de74fbde47efee780d63699a561a56ea681b39f567cfe555fa091a2eafcab8f 310026c1000377a16ede4edf051222c310e863b2e3e348b0d5058677ba5346ea 0432f62d2b859d0681c32d53dd351f8caba3a8e762b990871ad2ec6b5485cd68 1caf65fa97ce7be4c214164dc690455d6bec9761e33bb166cd329d9e5aa82a4d a02c35cf12c91e36ffc8819fd2892dcfaf29b3af45fa60c576737db3d5d0dd9d 1f4d27be8beb3540619580b17c881664df664c87a2c39fbfe6549c346b09f997 92cb14f1aa2f848a090732b90c5228fcd8724f78290c332a9bf4593e7233ab2a b84633c501629dd7ff15fbbba78bd06d968856a92a6f10bdabf7ec4dceb27534 584c8506ba20607af2078bef7952c4b1632bb042de38b3319527261f7fea1d80 df0d41f9a393a5c796dda61386711852a08309aa42efeb40d78ff54f4f5b3934 18db143511e40d3b48830dd778bc7ff7f6b6e236fd3870fe03b581b97b638206 6bdfbeaf2419d95fe2607144e2145c0dc17e6034b6fed3e4a769b9ad7c33a851 791e4451faaae37c6d0bca3dc946dbc3d720961eda958192e2aefcda298e8eb7 b1023d7427f281a1f36192abd4399db950db9c12d2fc0e1f22bce11fbf12fd8e 593ec577a9d9aff95dc7af3efe545a3580238e5d5b19a070d561f21995dfd065 c84e3082cfa54eb8b90046fe76cd9eb41a8c6546e80559c14c2f87f0e0df00db 482c9283cf46dfd6575df6214c20ff63877ba3dca2d309b4edadfc788133621a e66fed1e2e5b2198b60bcfba2fc1909ad0f18dc66555de7f91cbb3840e989338 3eaeb67f1bb5755adc7a41d39a8cbebd9bc9b4849fe83f2153b5cacd5160b936 0660a250113207111e5e8fe175a6e33225dc289feab785f762b9757b8dae1ca0 f8dc0d27b93a0770f20c5df6b41d0a6eb9b90e29f51807e85bf1e6549311ddb3 b40291f4164a3665201136bd140814b862eed08ce89b2467653cfa4afa454218 278110fc939e06e9a2622a4295f8f305206b70fda5770ecd5606f5b362e68cd9 485db1b954e3909f98b27f81594f9f333c7d90f2dab0f5347773ef11738936aa 599d0631b25d3b6b983e11e2e42191487675f6e66a9bcc2e6ace6625c5a912d0 f2705ff10062efbb9090cc96de5cad09d5c943de716027fcadbee36550123983 aa0f7d347d195c5e8c47ebd61e233d7a15515c5d19f3bc063982f5e8e2ad23ae 6838d3b12c544d3f4366d49a4b9ab2b12053e3d5d21acf84aa33e2a334a97dd9 39a886e5238bf859c8e46084985e3a5ea18a497f2309ad6e028a0ff76a1a427c 000f043ec324e76da1428ae3b13d7445fcd51963265b82a67112a508058cabd5 8ed09291144a1420b3254c6a6988b2fbd4138a2f8db65928eeb8eea4089ff223 a05b75aac5e63556ecf4512019aa93abb5c42dac5c8872d08a7155e9bbfe1954 2ae51dffb25373205beb821055e09d5b742f8aa1db70145fa887c7a74fb5c75a e7c689c52614ee59d38662000847d99e0dd53db44c922df9a704df4340c3c3d7 c9dae47cd482e4785431d6eed8472f63fbfab4b4e7582580ffc5aae99064f7eb 949666731788f55ea350d7bec029106e24ead5e829cbce31a14167f9fba4538e fd6b3d75d504d20ce336f994365c852f850e2c8b0777cdfe6452bbf663baaa00 a7bd344d848eba9cbd33ca9ccad2e67b6c6f0efb4b82cff110df0b6a0505c8b4 9a02a2e133739b26bb2bc6f5885d5a3a7fc6cd66ac165e3c33399eae9de2618e 8c4e82b0a9eaa3751dd8095052f88f750c75d2548f2cf6a294c681ca6d0eb267 0b0228e893ebc051615f5022a9d362252f3bbb09b7a8adefcc886c6c335713b2 001d4a351027f98af90b8e64ceb24b5ebf11b537c87a37386b103976b1d71d28 1dcc8fbad329ef17ce40d0c0c9f772af9bb621457ecb25e4752e7a72ef2604c8 e2025bcc262ca02a70d9aeb9b279ec0f3389ba5299020a71072b16c6affd2548 43c236f31b77c247cf6696ed0ec81dc57a316d6f249421fa53d7c704befafaf1 8fe12dc31de2d196d7fd4d9e942a68f532fe2575ae7e35394a35ac4c5d054ca1 40da63c5cf83aa9df349a653432760c2ad17501bbf6099bb08064bff5a88c6c0 7f8f443fd9d5311e5f59d09a2df3e88eb3ced77cd9e5853aef5b876ff82d97e8 5dba6bacccf329c0f69c1330143bb4f71efc72caf47cee9ec8b8b9618cc866d0 51dca7e5ab2a0dcc7e6372afd7d405c5fbae342a035e4ca25896a9ee28e5ff35 5484a5e92adf9b22426b2ac1200de07b9e7862abcfe2516b337177f8d9d241e2 62bd6275d22d026e62622617ee0601d8d5b86dbb2eb187f21ff2ef55d57b5d82 bff41834bbe0520ed15690ecbc155ec1f98fdd045620124c98ebbca2cfef88c1 159062053ba8c6a708f4793f54704828872bbe7aba545621ec9537f1c23ba029 5406521118f62663dd47c4f56b3a9aa34ea16f4b2b98fa93dbdaca29ccb02252 d270180e989a08b337fc3c63d4eb2fc3b0b5a1bc2e8af22d125ec8999d2572e4 cdd1744ff00ceb7b3473acc9a2139e780baed7caea06b3105c3d97c41d5a7bb7 6cd9c6bf67d2431e6e18dea6695271daec29693998f33ac7d3255dc21173d738 69ddf4d64852f58372e8f507b6ae90b6ff8cc46d5471b26d7ed99764d3a5a952 c691a17052f6a55b20b0850d1fe1d5a2a5a7cca60112be3366fd84c2526912b8 e206285d6e9b9fdede7d341b9f4884979d04fff027107432c1f532e48ed6b240 e672ae6416ee590879ff8e28188f6125e580f33d3cf0d33dac4cf901a56a60c3 994129be085a7d18b1c0306b2a17a42cf6e426320b7cc350d1953e7463b6453a 921a912b62bed329e52b7d205f021e4c7afcee65c59421cd2addb2736395bdde 16b8602c7e29cefec64fb325b0237108d3f83771dad985d74a20f436bb18823d 1d85c1538c35b03822f80a730f5f753810ecbc47e781d1a6962fe434b5f6b572 0d84681a3f1d734ffede6b473cc42d05a60319b24fe788e6a2f3bac7e5daf21b 8faf76f460aff0b026c68573fd59551af3c71a8f950522db2c67dcfea4dc8698 7c0bb2f1f978334e888816d77f716c779685fb4a5a2962cec9ec850026bac4f2 ca6b694a03ded4161e6a5bfcc8301f11e5e9b016b07a54a6652a3cfdee3d3a9e fa0cd7a8ad6ed236b82a00d25c1469f978af3c6cdd7e4e9ebdc8694c1a73f7f4 d09bf7f2715e74bf5a720cfa948a40ffe1c7c5383d94123ec655f4e6effa352b 7c95be533e63e080b03d8a3d8feda261b1ea2a387c9b4b22a48b8dbf621a7aa3 09d86cc6402bedabc88493b50f7ce3bec14eca487c149c95d48fd45dfd17ab44 5c0a4d078ba11682a977cf47f4a49c550b650a74d1d3bca1b68e5d9277029a93 a80954b3b0f88efdb95e0c3e28b736204bbbd3af7e0a755cfe5ca06860c3d91f 86960579658aac2cbb3c5af1422d415f63e832e03c88630612d254a22d72df6f 2c3acb2abcd281b24b25d44aa5eaa163ce2db72095fef6ff00c4259f4e5e05e9 a2e7d3adf8a81d86cd75655276406012c1fcaf73abeaae41afd8e99dc3ab1aa7 8f3fdc2d91a13e23397e4ffc0a509388614396ec734fb03b9c3bbe562c91026f b42152518ebaf6fb2e7e24d324317eed50b775cfa832701deb89e1c70741cad8 55611fe5545e7646854c5540929ff134251cbed8a2c25074ddc9683939195156 1a858706e952df5ec5c1f03334cd5481b15bfd63d258a55d3dc4597766cc8cfc ec725608c49c16c523813ff3495301d8ad32b0beafcc8c2f37ad1e3db4fc30a7 3d5ff74c1bf570fa63b8f94d7b555fbadfa3a485feb72dee0afcdeb5a751501c a428ee6f1de82c5854d9aa1bc4aa01715ca18e4f52c8202a2718bef539632dcc 2ce00bf3d1a8b3bccd3db0d811a0630d5e62bce448ef4abcfd3e5fda2d5cd8b8 7e62be2377bb51f4b78786946f5cf07cde9eddb3aedd2e17d10ca2e201feb4c6 cef6d0251126fcf272c413cd6857670d9349d6920be8c100c342097379ec9afa f4863943fb40d06db4a108391a5fcf532df836a4fe4d8b9ff7fdd6702619720b b361c0a686e45c13f47a238a8250e5f3c8af9d1d1b96c3b49db947296b002b02 d99ecac8122ce2dcfde42c7dc75bff1b19e9e215b685327c539d5d09909e84d5 a1c166fe49a4cb395bcd14bd296e3c06b95e89f662707d44653a788d3e9a1d0c 80b85e5e58947abebfed320c3075c2a01921c57efa4bfdb4709601870f14d36a 6329b5f265609732995291e6c73a4e3435db9ed1cb4d0583dad5560f910b38fb c80fd499dbc7cd72d0ee8125cf971cd8cf67152286cc1da36e805556bd97363b 1b730f0be4b0aa61cc8dfc80c2cc7f01632c12603a032bae27bed0ce5a0b9d32 876b7fdc379d8f63fe1bda3b628cf1134a7e948678ba5c455c9cd4cef0d1f624 d0dfb8de3208c5e35b9508edf2d39bb9ea91e448af78a146054f9fd034e88160 db7a7e2a1d2b5cefcf466c59a390de7924c5a0b96382e45667f214d5d1db5132 27bd1773a14612a92f22f094cbc0ec8ea03e4e51621933312f78c1aec5766a86 adbe28c8e12e899ce6903991841a8465d08b9c866ee54da60e2a5238f916c3d3 2819c17a4022e82b9915e8d21ba19fa8c4d45bce111bb2d9f05424933434a7d5 9d1b9c31c8dde847553f94c1e34bef754aac9f314041491ff6b3a5d3ae03144e e19f510db0cb8edb2a23f9a912fe99da28f41885924d41976daf505392b82077 b77471b3b98d3354077160994d9da744fe2059edd5ccfa6839e9b6023ab064a0 38c8ece172f094ab2af1592b96a03e25e21dc5aa7e1d5f23b7a5d71a53719036 e93036c68eab1242f841f55fa1a43b3054ed76aaf42c5b7c77773001234b1e3f 401d2b3a54de94f28894fce180c3e1bcbb5a1b418ebeb72e9453e46feddda2ba 9a61b89115d91f6589c56f20a53f66530c7bfab22ab7320a034b565582706d00 db5b05f16de76758d892a8fc7e971daea999f222f2c8388e46a82af94f8b4280 5c2ff25251a8d3a02fda1f0714eba98af932dd4c732faceff5bdbf23d0858276 433608251d4605de7cf46eee62247d67fbbfaf5e00cc320712cb5c602319b4ff a71da2cff0e8e4c8d8ca1df2d0af54a96d205d355e2b6edd3618d2510cdfb42c 2a7a3ee63f5b728f66275f11d49ef9960bff9f2d91cb48fe9080688ce933f994 36874d053dae9aa2e8eee810591f2f7d126a73749e16cb94f8aa8174accef526 f026d91e9fa000e6066593da1d68497002019e5158e99adbc93179996365c8e6 f705add1bc24ad9e24ec84f48ce11237aaaf782a9c266eda9669311df07ef284 fdc13650a9a9fde65352516858a2305ab12637904c0e4a6dd98939f2c59d6385 4da2cc66c0e36526106fefee6d07d772c78914e06e30ebc7f7588e1e92d99467 63e12bb402e41dd403efb3024808c3c0a0235fe81a0c38e6c5507cf3522f30be 3dbe6a6a4c2b93f60f103d5ad9b409273b5041c584d6d3dfd033df800b238125 9fc8bee1b9ef1bd76dbc4208f4e04f7d00af61f5bb710bf3d4e32b2ba608c04e 21423739c23a9fce6c3d049413729396ee1876be16d20c45e8eed2847b99b214 b6079cec75de4162ebbdca6d367b1d228ee513dda4467daf71ac48695a9fbebd 8fa738ddaa0e72b710163cdb215d67b92055308de758e3d387f6928df173c585 c046e351c1618780f3b4e0a75e888ab9f490a4be7d436025bf0c654220a9a4b6 8f69a9968dc865f099ff37e251cedfe3eea16e6100d2e99123d106ffb53f8f93 957b61bdbf50b238d5347dd29f1212fc0a7b25b421b51282fba49364744ecd4f 4eaebfc0b73a641e8ca524f7c23dd5f6609429a58bdb5e53ca31ad2d2d773777 bc3a22240ba818c2c29d6013962e9041135ee71482b04faeb98802346ffcb961 7bfc6008ca287de997356b7310bb891b08676871c07d63761c9b9673d484ca12 73db42761d5482cd5ec4268043ea2a92860635abaaf84cc6cfb36ae25c65094b 2ac6a66b4abeacb7fb92968db6e310ad86f427752fdab4560b63a4104eacdb55 39705c38896e8a787fd43ba1d466e65e0ab9ae343bbf6271bc8912c2cc8bd2fd ebd93cb614d3e76bdedfcd041b9c360a6cb2f076fb090ed00fee64a7c5781945 1d3faaa1d0dba0f45c92659ed19a29fc9ad589d5ab9423ea9146a350d2d2fe16 5b2334d8390f746914f462c68d3011c74e6fe4cc9b2026042008291fa3fe6dfb f7aa1e243304c9bda9f952fcfab16bc73e0856427b97c8b8958e52f02cfb715a 477e311d5cb06659fa904df7878d8192f16be1402a63ba45c0a66cef7b52a20e 3aa30bdf9c36c6cd4c1287951890efcd8bcc3d0e0b7b47b2be4078834c8ec73f 8b94557462b3c36ae8c5b5c76136737a709fd7b29c62d50138dabe8bb284b394 e307793162c2f261a4314b34c2685331250a7b1f1fed3ea4247143a598e2d90d 743b8289b281c339b00e471ae122bda710f7397f21333b37269f07152faeb5c9 6866e0adae9327f4a5e94c045f2b3ee75f2555f7f8246d6212ccf19d26839dec ac06c0c527ad2455f3999703908c90ae1032677b3d6fa0bed92ae8e9d6c951ed 5e5aa0ce8d7bc74c375a65a0be402da4586cf1453f62c761e04dce88dccb0392 88320d1f37dcb56c8a1025ff28fe1c62aba2430b20dfe0d1809eed804b278f39 e8f2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.1: CMTT10 1.00B %%CreationDate: 1992 Apr 26 10:42:42 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 37 /percent put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 86 /V put dup 88 /X put dup 91 /bracketleft put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 124 /bar put readonly def /FontBBox{-4 -235 731 800}readonly def /UniqueXX 5000832 def currentdict end currentfile eexec 8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8 97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc 8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011 b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415 50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e 784c6bf7389803d9450b0c21756a017306462c563d51ecefaacd079732f12c29 315e4b9623a5752c6f1d8145869e120d910b2644887cea7e30b15676a92537c2 9d3aa80dc30082aba94b40990b82fb1a877e805e0c8c48f61e9f2edac05b944e e4d8084ec1d5cc517aaeec5b3ea379dd011eeb454cecab3ad2443c887c582789 72355673e503affe0394fc7db31de364e4f56c24033c7df2265c56445ec63a1d 5695a6041ea1b94407e1cdb7c5635603a4fd047e6edcaeb2d0da6c9e0e9396d5 1a4a58e8fdc1578730f992435560a6e2d3e3687703ee2f78f5896389ac8470bc 806169eb01762e89b6dc9adf857ead656620e2589aae722c37a2ed7a2941c360 b067ee34d8d5ca3bf68db725614d936bcb207781f4d4ec2ac67b13a5ad161f3f 059add7b5e3d904831e31c20c04546fae83ca93a35989e65c201756888f727b9 7e5313c9870ec96e4cec3901ea03a5c744754485e7d169bbc98bf872d0796e18 9d43b712950c3786257d8be06ab6080b9d9392313298327549a8a41c00a2cea3 690b4a333e45aa815a64facae1c2b44640860b8b8687afbefdbd5b4a541a7251 4ee7d3e0752af3e96a88c95d31fa16d34ba2f02fdb0088b165844f02611c734a dbcc2037bf741fdea7e8bcdc130c70c33772f777d8bcddf4611db99001ccff14 d7af2bb05defc3480bdab312a0eff2f375afb4e0df2f803c594b7c93f71ca4af 861ae1711932fef19bfe2f9b7adb69d68e5a70ea4d1a3d5bd85231b16993f65e fb37a0a823f0542f8c2340a073dc1be4a8347f9d3068a6435cd8278b0db1809e 8af9664c2c989b9f16873c009449b6284b85da4dee11c96a05ba83292f0edbd9 2cf674aad6ac1a5ff966ffc37e88a66048deed053565b55ef6bdb8c2f2f67832 f8939a32442ea54f13d003494d6350a2864b427a9126a9c26a031909fe53fa84 63b80c3ffd536c9a5dd29ceb03148dbc24c0033ae3542e26551168a474b72c73 a7e2c34e90c8b7c4125d8657cd89e0449b5969f05212e64175cce0f9faa61069 ed82a8ef9276f14e2a08d8dc7e5a15f1707902c2b2f41cb1fafaa593385c2ea4 1499e485ac560bdf047680f9ce615f750000e1c30ff1b6ac44e0a4425d941622 24e74d9a481598245aa1a2b368da7c1f71bba518d1327a44d8b4770fa08ff5f9 1134098c0f6d7aa2c2270ca47c418152e453602628fa113422c703ec5648a554 91d86aaaaf1ac92fc3e64e0e403a73c84cb4fb0a0232e1a153b61bc15d3597ca d921e3b3b1d02a8dcb0bc8b62d67765e1fe4e78acce9ecb284f8c18225d324e2 6c1658f7cadabdb3e1231fb1c1ecc63492f3d3de4defdb9352f17f36e6053b33 88e75f0a1dd6ed1a29681d66f23e2d7744832623960d919d3d43568232ce9312 5977aacbb8fe7894283ff2841be77c1ad9b5543d6802d41ca0414284cbd3bb3d 354deff981aed4f443aae0c448baad6439ae88fd1946510e3b63c45b99b4a574 ecfb451d7bcb8b70d4351c23b4f629673c18471e0cf890df367c1964d97be3fc 7a748717b85a08861ba0b9b391fe883e5ca814d0a177ffd6254de8b52c5996e3 434de464afbfa04362cfc23593dae5f564a629e735bb6e9431f7f3a947466e47 66c853e76e0f70716dce014a67cfd57e1d7153a2a814504d96f7530917e21c54 4983c17fd20c4c3ba3ebcdb4f21fa6b601a721ed0cf863cd9df35492dcf9714d 9cc574ec0cfabd0ebbb8af259da4d6a3aa4917f2624856b3d812d8e1627f0f0f 77874df1a5c233740f66096e66d9e0645257a16c9b6a7b9cfdc0c3ecaa6ab87b 2186d732e1c6f13ec1b9e5873de31eb56bd8e34695e915c8df8ebda11f2be8f4 2867137d24ec7c10bb5f05e7ecc48613c2810f5b80411090719f0354742749cf 947d02cae376d3701d39ffae46389534af9c9e4bf5a4951816d1343e85718b27 4bf646ced8871c72ba2d0e911c7f03fed02d58a0898fac07822c9f4a597667fa 7fb89028464cde24310942b19c518f093ad8a2a9c209aab55a37a363309b0c76 8540cd8ed8dd6ebf8f3ea91af446bc9984899d4419e0b70bccc4f83c29229171 5990157098a13d5d64f3b9a564c6116db14e7b30ee6fa45869c1f9bcd8c42462 4893dc5113373d3a639a2d75c9fc161f25381290c795749a669a97aa2bf7de59 929614331e58564da4d4f21e74830947aaf2fc517d896b335397708452a15355 ec651c57a2e0b1bfe5ea9f6013c19e297f053a74fb97799dc9e37902a572e044 60d1caf4e047ae019a6b16905f53af81ed4cb5510976f32de56426f6ead3e8c3 f76652bb092cdaa34fe18e5ac6ae289cd0ef9acbb3bfecdef713f17e80b833bd 4d957c9be6b9d00157a7a39e533a19d8c25943480a3b6d81eb59682be3665e4e cc11b19abfc327640d1353246dbb52cc0998057a7399b0d367a35550fb90ed0e f07885310a4073f40a465f07381798e95d7ac86a4c43aee5f9b7d76d64e51e1c 450769a73e4d1614e5b07442f87ab3bdf1fe1c025c00b4940465b5c5c9d6aef1 03c7a8ce05a52c07a5cb68805a2307531aa9669cafcc96462c5ed1ba2d3118e7 1a0f71cfb4b925992060aaa6dc91cd9bd462f035934e223537f2d05dfa6e0b9b 1d52d4c740fac25b7bcf5e63a9d341eb77b1ebebb60656ef8c2353c2f6f9b109 0ee5b759e55fa3d74130fb29ae36726f04dae44ba1b28d906e17d99f33cc67d4 750b0b82d699c3075051c12ff473d107f9ec38756dac83ced399a8a7b5628e83 797d4825ac91e24298cc2e86f588bd0eb39ca21bd53ab4597af3b4193f8af4b9 38e0609484bb35c68c29b19c96f95011c5dd3e28f092c3cd182530765584ab34 7432a32ea3da503bd332214deaa62779e9b01c5899f8392b4757cb2f58eb8a95 478f8e7d4d0f966ed0302f444e9e75b6792b1060af60322fe1b5a79612e163d5 3774a96a676bf7bbc0fa219e14227b05b4abb9dd6c6fa52038cf5e2c0b733169 45afddae4b40a43cb75cfb6f623bf72bd5c6e55c22ac01a26484585da26048ac 6c675f71bcf3866003a52d35dade7c63fad5bdbc395f964176256c37e9a1ac9e ac22c6aa67ce77a4c0bccfe9296fd37e0f371237064aad1717d0690a01c1863e 7d82dfe08a605f0fd2e02a0f23cc7b203582fa27cfedc5a6032bca8872faec10 9418a8b09dc94152821934f0f57c1ab61145966406951f0f9f55c6c625276110 7f3756272beab898bbf3a34960c3c800ddb8402b2783d3ec4420ab9b84194a18 6563e8fcc813afc4cd002dfb547a48adb0d39900592099dfe0a91393612a253e e70ae928bfab2a8141d7c94b3c3c06d61ba8af873b22a77e4e721bca4e670a43 2dab32604b0e6561626bfa91f24cc6087db652e76d005794cf5edbd06794a6ba f23ab076ea17c21acd1bac5593058c3f4a54754a6722e0f908095768ea758b9a 6771cca34c99457780690e9f553dad82f357443e08565d51961dce8717fa5317 62d41cabcf2cd5df1eb47b5e50b7e117f57b7e698bb17cc4477f473117e0a70f a3fa56bd09f7f2433a8ae7ea0867b7bd2ebae6daed0a3b5837d549f46ecc8c29 9ee05d60f1e4484946b32596d488cc2fc7005a58b152ffd9d2e4ca536b4fff21 e03e321ee491419cab8837520308115407a563b79830f08dbe282b3e157ec360 a4bfb661a0965c9b799054ec612444bef1b3842e23fdb57e2244774c34e8f6ec bbf28a19a97d0fd2b34ebb9a7e43c994dcea9a5d1df247fab43908bf46be4fa7 69b6d0e93228a436444c7cbb134f41113b3489bb5dbd999da2b89de5f16ddb8d 4bc8c6ef4523c3bcfb7ca3104892f4ede670a51d4c0ef899505e7434a4143cf7 6fc177dcfe8b750fab8f6eb9e1490e092ad6732574a6b63905a4fcc05d83c823 d18a9c256a61ad4db243e650d6c66fb053ebb60f1f0d7e3a0f29880d209d0b5f b2a91b82c397c40f15388f649c476d1b065bc1f99398a35ace7c9b254ec875c5 d6f89886a2371587da9bb3cc9d069071007d7f1917edfe51615c430b4545bd25 3cdc9560f3dfff5a429efd58021d1b33b4891a1cef42409e06db7b70e0f44b12 66a3237ac88eb1c4f6c1583bdde2633ec704a0dd5c26d9b02394c10300f6eefd c575b43dc735242ba7eb9903b7dfd0894e69e5dbc78824c9987538b4f15564eb 440ce8d42d05fbd1935ad83d4af6e7c90bf9fb847559110626806e3d4c776f49 eedc1c3ff30b395194342ad6ab160596fb3d82b77fe302990003a8c1850f99a0 9828a7765336b2724aa9d0dbeb369a5d530766dcfcb5f798e311d793ea9721ed a3c1604a62737aa1aa67e427ec2b5ee92dd96ebea041c6ad2e42a50d1b80dfd2 c91b1247a9d7b7906122a3d5ef7c9fea1f388a6a8fc9ed0dec3f92446260b7cd 82b23dbc5aea73e6a294e4df828773cbcca000465a15ddc85097dc2504104fdd 6885169828471329d9b8960122c9aa366867a21793d9a5dee0ad3ea8325ef375 cfb6fcb385c9c4a4f551c02e0e0d753fe75dcf2436dfee0dfcd041e5f2516ec5 c655d431ac1dcbddf4fa57b2ceb15f6ef5f9d33b00abdd2ca7bff417c896889f 0a1ba9c72a27e8ea0124235a3b14971f508972d26a4d690951628e9dee692b60 75ec3751ea2372d24029c65857e8da9da6b506217289eca96d8073101ecdc040 dd8ba578a805ec7e2f7cee48a7b150f3c724991c6b987ec1845f9256203714dd ade10b126762eb0f7a43345633cc795cb0bcc0d72ad5a2d251e50e56018b6f39 790696cb9de9fc09405138617596f225786c3faf3bb00f148c8dbfecdebfaf89 763d393598089093a90f91f7117c3f43001e8dfc5f6324b5a185883f90ade63d afb13ae70f122e783c123dc5a1ae12ff56a394e08b6dd2cf867a0b51865d061c 5b2ac37f670ddc392c4c4c3ee3afe12cb3ac35414c03ff459d537b79b70e04d1 cdc5adb11a7a50255e4642d8cee6d5aa2616446ebf90b09d93513bb853dccd8e 7f82e4bab59406ad7daaa97f89f90ade10639db9bd31b061af379306afb7ec23 d8987c47bc38028c502dbea482efb1c0c3f5d98ea2f082487d8a0b277c7a37ea aa41739e27b7eaa05dfafdea3a6725e02978275ca57b4aeb3c78751d54fef9ea 2bde9a62aa9f4bf22670539b2748abec1cb94c02b6935a3d5e41239ce60309e1 f1158a0973ac68c720d9160dd05db9a9912e16e871dd0f7460168a1bcc5a6f2b c03f2ab94ba12bee7006304dff4ede29116514e81f53bb04efc423912a037f7c 3b6cec7d4248fe9384fb18015e385a36c62dfc62f3570c77e9142e207b37c61d 5f5f78b0f624b2c2eac2299a3f7a0e1bca764bc7567a9df6350f1e40c4660963 4327c497a4f66ecbd38ee95c5ccd8d6fa1d0dc651257ec083bdd2b0f0657dea0 ae85f3cf5051f4769e0208fc01327894a33e081a533e39a5c9f77e4382ee5e35 459b9160128fe4413aa495a7cce2e744a1bd087c8dc4e50fc0208f20dbdeb7e1 6c61f53b4b642f636faff40e023ecacb9fd8bd89458b30ee63a39301aefe0ef5 870b6cb8462fe9e934836dcdea60f9c6a79d09869d12d915be9e8193e2ed0c87 9a108012206c63fcef9abe45251766084e17efe18583168ad269cbe0a8fe7fc7 93f9c4191c238f8a17ca939b72966dc580ddd01e74309458bcb7e4612f0a2426 c4bcf38f40da54e4bc3fcc9dc8a734bd34c68ecdd2d14854958a39d9c470dfaf e01148f85e1a64f03f9d1c8065c41fda17e37ab9072436d18bafbdb18e8b50bd 306f526741093999681bf3bf436da25f6a80aecf196217b6a56e6824b75e3968 e6b50e1c85e18302b38a0c0eb2cb56aa213b82461bdce5ae20d1953174be0e5a 51ada4e0f480ca1a99155dc3cc0574660b2e61834eda908af9d40ab2e67ccf76 4cd1678dfec22b45c537f68630d19ecca4a5abee5bf6212813a5ff0b6439e8ba 914e06a055f699a0429c75a164aa9ab8e0b28672d3f42c049259d2fb1a45df4b 520f795805f8ed2512f6491615d95c2b6611f1e77c40e5cfc7bb6836ace8d307 648c820b3951e9f31577d34a992edd0b5959bffc67270c43a178260179f49111 f170a8c2e88911ce147401af405d91db778e0611298f3a2239b8cc6d178f3ff6 22cd63ee613a707392806240f4a9ab5731be42a90994d34cb5b2ef281d4d2b31 485c7c2932ba22cc1e88611f0b691fd55c8fb129f2db732016dfe1e422d3d706 5d82b2e4b4a1461be9b3f1516f9bacf90d8aff64dba692cd057d5326113c4059 7e98713cb0dc2cb93ec27eb24be4c9461392094076f84889ee5f542376100456 823ce043381166ac568ae904cedd7e78b97572f711015b7def3bc631b25dfabc 4ce95888ec82bf1a2b152a85526c96b41f48abd37e9000d120219988ed0c9d7d 599be3fbf8c926b0b04fcea945d00b13c59a3ea6a10aed7a2e51813a273dd63c fa8164701cef603eda5951b07c68e476ed4d026310f2c08253751532b68cda16 ed90293189bfd8a6b49a7dca0d338049b90487003d0f94f556715b401eb7f7bc e3fbdebb93a832391d036fb1670833946f399a079b2dbd4460dedf92370d9bc5 f70bad640ea1814117e3fcd9d89eaf495feaccf5af133dd914a550321107a06e 846b4247e5b82fd5dca0976177fad70c78ba8e617370020699002d2b7964aef9 6994151511f21698e771dc0f6a761a89c1cc1658dff4eb129ec9618d8894eba8 5af2a9382bfd48395009063eef7c52785afc827442c637105344792382277a67 e3127a52d2992a818ee19bb5ced705efdcfb125d77ac25f188766124b7d9e837 223fcee812ff5f8739d8d32484af7ed990d46d6d7eb1d1f18fb15d3a66909a73 4c9b117c3e48b571f1ded3c2785eb49e70fb6c7a4d5561c1e62e93fc23d9512a e55084fd4f7bbe7c9cabe82eaa0c57465266dae288b17626bdd2a51503200d58 a5f0a293d446c7da298113658f397d88b29e897147b95251161298fc9ea39703 cad05a92156f0132f27107234c82d6ad2477499e581028be89c48586f9581ec4 6dc159e2f4c6f479d0d7832a7c97d36b7e3d57c252ebbb87885254b867bfe9ef bcecf6d1c8b80a52c00809bb7103504cfc7e4a6a989bbc8716bf49a7d0f23a73 2686c7288a6984b3f4ea5353e6f770eec868cdb74f71a1556b99fd74b26f8247 1942a748d6853486c058fdea7492a7da195089e807a691cfaf2b608387d90278 5781470c549fb01b962ac6e287aad8eef25f06ca91bf7a13eb8a78c4dc2552a2 2248ba6c3441f7a754d8529471c617b7e5daea224bd5ec50643ca8c062ac7b27 02cbc35055e06a39dd65ac7c9730d78843fb1c5069c208cb8639f7b3b6822441 96aa3d4f0ce2f0d98d83094d4c59f5119508ed977f7415b0c471bd7af39eeda7 62a82e1cf5fd1a9a835f1cc03a74736ab8997e946242012bdc573184110c2213 aaa3010c95027ece0417129708517a4a972a9a45441396e267835a02a6837e7d 8256837c65083b823b7bc1aca2c8594fb735f12710bef98d3e55607a55e81f15 ece4e0da2808b76126f9a9154151575f138c7264762da25e52d2e81cb33ae02e a55713f3b1f43726d8ccf698381fa4ced408a87b92383d0cb328a36aca8d74b2 8156a00831abf93cbdc811092a67e5b480c230a986fee9d20354b8782ea7a983 befd7c33cf3426b36f439306568430bb4fa6f98d4343560421126e3e40c11b40 78420357cd0d51c678fac1fb7e2614e4f5ce78520402d1c0861a5834c85f378a 21110de2c6607bd5ba293b002e2528e29d0044b8ae88404964a8c46ffd1e46ab b1d5bbb07c4e2423f0de308a149f33fd137b06bd6997f409e146b1e99e3784ab 072bea24640aa94cf539f25510bfbf0e8221bc4ed9b869fcc4ba74ec4123a53f d735c216d01af62202f17151d371eb65cd0739026a3a64ac207dc72f84fbf8f8 00586e7c05e2c26d4e7e695685c56258048d2da21499241dc9bef37390ea5867 30a15ddc22ab7b15b291944d30d0e3bdc0c76f5189a6dbb0256c8cd13a972a06 0a766b0dddb4b144dac40c7a0552e9fc05a3f56f96d13eb4c9eab78a0130ac6c bdab97842b7e54d413aaf92e2b96addfa0e906a302074971bc36577a6d7478f5 4c7539090950bd7312718a8541314678a06accb534f85bfc2d30d9cc3771e9dd 2fca9de7c64dcddeec1b1fd25cb8b898fcf5b43898a243666a32dde51679c157 9d49d512c8aabc75f0b224501896e2fd60713e7c00d3e64ea6983b0d1bf99fc1 55b9edb2ecd7ba596ad2e5dd7996bbeaeb3bf5801dfe7bb253bd179ee5dce700 8cfb61eb7c2321c1b363a4ae6378e38131b86a85c2199c3d67d968b0e0e303b4 fac1b5fdf6b111dda01f4ff9857aa8b8d658a88949e99b578c896b80aaad4001 fbd2059ab205058b74f7fc9792b2f0a9b22df6ad724b0ff87770ffa2d55cfb23 c586fe700910062849defc8ef44a698553a1efecd5e48a4ab720ffece00edaca 8135045fdd910785064d2fa32f52fe7b1235d3a8203cf45f5bb1a921e3509eb3 80b3e52511ba042534c41f4fb4367846296ac7c9da67219e6ea1cacaa6e7d060 028aa552deb3d5fc2ee049e4a00619393b9afa2ea185c44c99a3e0aa892f2cdd 974868df0b7134d70202361fb4ddd31aa0ff4603dad85f348b3b084e01d7f151 f4bd3b0257d1dd9369cadb0b033fdefabbf3e6ecf141d56cec889ed9fe0062b5 2bf15cc82ed9d5aed39684f5f71bc2fb53c3a2808819294bf754d3489b7840d8 544a636ae5325c1b7ff2d3206217c3989af439b4b1f27f16506c2c42e7b24a67 88c1cb4edff41fe7eb94c7ae16802fdbc83d2d6f0db1f9589ab041bc47927207 c08c026d44a6a860a70c009b723898da97f2b63b566629fe2f7b99b1f8c7d401 5972b2b7a35c3612c22207aaa40dcb89631f95ce3d6ca050868f3d682b2981f9 43e946cc6c8bab1f5ae6cff373c25a9de5a568a0f684c8ddfb57264c243ef15a 1670e7835a6e654d16534af3b474a7754ac086f14938ddbea82fa6d233f84efa 1801b52a6f52f90c48c3fa806aa0a1381f5306d426f8def6645e55ad36b47770 f46b8f0c4986137a2c5e8f377c8352f0bf74a128f23bd180eeb6a955c656b03c c9536ce76e65b9d814fbc47ca70c4731ef9318eb9bcf9c87c749998e6f8e8ae6 9350e1557fbcb970294657f5347cfe53b7f9c32f9debc9916532aaa4a60ab47d 0f58f7732779c4bbf7677ef6330d5dbb5187edc71c6cf927be5a697441ed536c 081566a103831871b518763d285b048a6eb903da89aee032fc41964d1c7106e5 9037e5253da126857203a6ff82a27b3fee33bc624ac0f4a88e70062a7563687b cc0d54122d9c94f8ce87e569624ef959320a60c00d4efaf1b777eca8c8f9b450 13ce729d4a8b6490d8923d8610b60fb25169698ac821da075c06b37b43aa9f70 aff52cbf57b2189ff75d7cb00ea75dd4e9d598e5767b55e6a49f7428df79f8ca a97c9ac43c3353cf3def983695891be97c98513c79cd29583b2f2a31e7b0bf2c 4d137e19ccd40b62f01ef2258572ae1a7615e7c589a2b215cef71059f16f0ced 21dba7f218b4e52ee9e461199e0cda4d523ed494451ee671e39225bc8e1109fc dfc73b9a6b2e4af54231435435584a2714ac5902ab52e4d5343970ad391540ed e7eec8fee0653238c6576c82a3437d590f26f8a32d9b0c323b84d1ca9a402836 01a5aaddda2e9858ff2686182b732ab84f546cfd744d59e015f39753299c1d0b d85f09d3a22f64ccf1e1ffaf8ad36c2b3117a816a25e6dc2d4b86c19b699c319 08fa9a3e90d8d11e779e1425424c04e5fee6671b406be021809fa2ec5a0e55bc 5e47943722af6156081bb8bfc7e1cb79fb4af9d5d7b2acfa459a78819cb622c1 3726e121df51170ebcc74f2574e54c195abb124d455313a29a97b5c62882a5c1 f95a8795264995fa749a89f65c4db1bcf5ac8dab4313b771bd9ac881d362d1b3 a1b96c7a1f3517021be3b06e1d5044db776092cdd3379d90b5276df420643cab 94abfd75006f2af13e20bf8eb3d3c60884a4a33cecf7a7d4f2c013ba7bbff95f ddfd412a7175103b7eaed2d6bd6d3f0f1e00ce7090ba42fbcc476501cb655f8a 76d194f4d57e5e736498507161edbde9af418ba3e6b7c77861205d99359c5c2a 8e520d307ab1b9a6eeae9c2426dfb09ba6110c528e956d7ac03b91794af6411e 7b557dec4febd9d152ec9e37da7c84b40b5ffa04f0c14388e7853ae914aad200 a7f22fcf91fde5e8030a6ca59d0818d3e9e6421cb802d719486f2d682aa07b64 71dab06e879aafa839a7364a828fb7d5b32a6d3363b890d2a94ed543a4c1902e e5e732978fc1f6ad1c8f10c966bd075d177b327c9b64f623764b06e5bf7ec10a 6a9946a653c02bb1728aae1a81b8f9bcc0fb3fbc03354511566dc22c86021765 905be49b96f7a6e9d954fde9c35b6be4b4e7a9b0d84b477391d4a5bf9e8fbe33 23625f15b64eba3e811d5f5a85c93dc29bcbeeeead39e1a34a93ecacde995a8e f37c1e1e5be9d8d6390a46cd87fbbaa2b756802a574dc1efefd0e5f1e529a69b e82640239f3749f88981c0d9836ed1caedf454e59b9b02ec67b86756391a0f54 a65f216640a89bc5f1c0b797248d9a1fcecafabf06ccf785fda9471c1916643d 70a34188f80f12c1c311fcd5925f9033e18e3c6e448fe2cbac99e6ad9c8c41c2 16a9bce199b406e12db8dd0b0851ca2e1d687c17102b1483b46f1490e41e67db d0c172f2b912f411580c0284a64b8b9f4086defae2325b3d5a4afd425ab955b1 0cbf681b1bf47bae68a49b59bcef41a094b30d71d2eca007cbdbea8db483fda7 5566b0cd871c80edaae6b387b02941b17bb18c4e69101f52c84f330154385bae cb62eb3494afcf0651285868ea6c9abf671bdb4950270cb1f6332c93d17a04c2 b5778a9d10124467314ba5c8678f6e7c7e615baa4b8c4977d1b81c0f9d5aa100 6e81ccb50153449d850d4037070488c764efdc95aed5fee60c795b137f5e42e6 6171415ed9378ab64ba13712c8e98df7327ea16fbb47ba6ed291f6629b84d042 0e939109a09540865486e6898a13f6e0a96fd9027f7a6c1940b5fde9ab04f314 5ea4bb46272ca07d62afb590baf3ef4c4db3daa74569cc6a9dda928a7ad3ba13 a81234840df9764a1c515e6504a4ff8ad10325c8b4646981623fa573415762c3 4b5874bd89fe8bcb50b6a1f21b3dfbe609fe30a42b330772d9473c982a5881b0 9acbfe0db708f730e03c3cecd721a4f534ee66eeb4d394fd797e0c90f7744ac8 32a3e2f05a3cc7a87d2e3c98a68929875fba70f1afd1f048b839dfe391236e5d 3daee6a2b108baeb21cc525b7ffdfb586da23928773680706954b14a8f519b37 c2139eb329e720e682a9b6a05c3847c9c7fd3831085162680f7da3f12db4fd8a 7c99c102122006c619830d45974575567898787c1af8306de670137319372363 e1829094fcddd078ff4bb25cdd6b42202693669a5e75c9986d837b2300bc6e5a db28adf9fde225a756eedbcbb47c8302b7c8e667351954bf1f5bef13a856d2f3 17e6b546673e4d3143c28c5506a3a502de6f840c57614992f85e7477749596ee 5d37fedba2c42ef0da13df393cf2e69a632907e01cf099495bcbfb02ac3e6b5f 5f58084939de91b0e96010bee181010ae0b471f172bab41e1f04e9d0c1f567a5 15b0f8f6d7befa99e8d125d0f0f57817622cccdc598a229c22b606685857964c fa5e06d9209b2281260ead3095b1e701ebf45f569c237513dda07bb67beab976 26c628a7b22833594f0efcb420c8bdb0d97b10a0813f0a6ab2f8c8cd0c7fcf44 41eb5eff736e58fb0169f2be6e929b4699b89f612702311acd595ecccdbb4e86 c5ae96e668ba57a98d8c341ccdbbedf8956b1ef9d14cef50c5b1fb97ccd4b90d a435619eb3463dfc01ab43994f4528d632001810dd35ced2b7889d5a8795edfe 97abf8add3ef6a7dc545346ce2ef8051c79957ae5d543c9b6e23283c1332dfb5 4557c30572bb4a60c1855672cc8d28bdf17b224acaa796982e9757fafd1d509b cb66091b3bb76929c23ade8835c1690c36b15dd4cf8edc34a5d1f1a41accc4c3 2010c40d514376e55790d2e2eaf3f92a96dcaa53f2e1a2d153f9001f31fda736 511c080d3c729b805ed23210e907075dc474912b9c840e86b426ff81dbcd8b65 39042faa9e6eb1b6514aeb8308721cdb61b00a257c0fa4c119b46e0e7e3b133f 183be953f257f5e88a68ad01325f81e8327c6f0073ed6c48087a243189351806 4b3ddf22a1a606121c67ab25185c99a7a59425da1bb9461cf5c0973aad288c2d fffb1a5e6f6fa0217a17ddf6b4d78a057dc6dc22564deeedc80058644aec1d1e 3f6bf1061d7859f068949f776fae4e782a5dc35b9aeacd7251133f9e038e876a 51ec55f0e731800d0a2b4b3669b84b5adf2d88bc0736957c57eebcd2d2607f08 2894f883d6fa6464f8043a66f21b06c10c973d5fe904d16b2487b77ddbb39b2b 760bbe8a77d5fefad36b4030bc6072f0d97ce6939c3de5d8ea32a31c3e618b56 5935fe7b6f9026f1a363142e9dc35d9eb48ceca9154d0f6d7875212288acd0f7 898a37693925af980c16ca1c8b082ea1f6118dce8580dd216caf68e80c0b5c7d 374e58144c60251fdc793555d657622fb56507f21f45be5a98623874747f2861 4597e8fbf2a546e0b038686864b62c586d40d26d5eea22a6eb5371d8fc83f3c7 ca85d7781259a5ac5ea36aecbb3e7df15bd1be301c337c4fc3626e66049f056f 990e993ec2901fb13e7b248d1cc21a4b0e70c143751de7db0eed6f0b5c794009 62fe7fcdb9df77c0ec20bb9e082e95d1739a879807c788c5918129a4761b351b 202361fae03c4dc14bb37cfda66cb57efe58fd3e9f617c1c98b11590a7ae908f ef8d0dc01c2c87b82a7d0a6388f38b9591d5bd0d9bedc28dc1f9f83655236067 877b509222a475340e7b742926479305d4fe1077d9e4c412fbcc06a68473f8d5 d8389e883c4951a50a0da6ae85fc257b98ccab6683a8a993e62622730a60f2bc 4f3b6d1c34f1ba305d42182a44012c3ce401fb45ffff6f7c094ef343cd00f7b0 0b442cdb4de135ce3e3fa0b324892ac97c739836c3d680e41f77a0a71ca96b22 24290e1dafc8659d1e1e3c68fa3ac91c48b1bcdb605bcd48b5637c9b62628af7 91ada17c57b62f3e2e7b36c616b06e3d27f7e17a4956c097afa8b2adb326370b 541737b59e2bb5999b14d7e9db06f6f70aed746ed181a84216bb18468809cc0e 9919c430ce087aa54ea199c55ae91fc98f0de25575338f9e77acafa153cb4b3e c67b5ed8083930d75771b8a02b2bd30e69c180ace8febd76a3956a3756fcc644 8b2615d9ddf5fb992b64bcbc55ad021d7987cabc9bbcf09df8103df755674ff4 267dc0c0b332cbfe06e80d39161e9563ffcb62887082c49806c31c8e2c3804eb 0d3d258e384bae367222fccbe074302889c4df0f7a0f8b1154542769e7a1924f 77f945b1329aadc0907f6baf1b3e84ac2f8d2ad33dfcd498fb6044d8d40929e5 540c77f42d18e9f7de09f4c3f6c1c104fbbdb218409085e642d69322658a87fd e41df9d8bea1eadc9d1982bbefbe4cc562cec9a42b5a0c9e827db6d5ef05df0d 59da7db68c8bcee1e1629c00219d136cc29e702c038be48ccc22ff21ddb6d452 688734c833b6e54fc40de4b7a738066127a9c49cdcda15e0984dc49d2f1097c2 0c0396b483bc3adc7ef0b1fe4e5ab880b2d803018dad819d1e90fbe0f00c168c 54576b36d44c6461422eccc34ceacb73c2e0571f12f239e235e32b3e7a53f9fd ae0bef48383102d86e0eb6c3a8e300d1b42efc41d05c0518dc95f4b85b4d6af6 2dda888267068308acdbc9e01323f11b4f953274c573da5c926136315d8b4fa8 17a1bb509b8cfb46b91955611d80ee6765a03dbd52a6823274cc2f337cd6fd17 c910f1edd3f24567d25049874fb05d110a4443faf7df8f3b9ff2ad75ce75f774 c56857fdd7a59116b2282db8db2f66cc929ca21bb66b5390c0bb433c37e41623 95e0c27c9933059df2b46b143c6f772d8adbe2ae3adfd867fa32a14166a7d7a0 144197fcb9d1a2aa7e8590bcf86ac9d58d83a9a7bf836dfc975de6359f8bbe8c 0e52a6033f7df1021d5f30f324a3760d6d83661e61d031b976157aa47aa7fed4 d979d7eab9c5999085d4582646ab8669a7ebd23898eeb556738ef0bebd440ddd 2a238d63375993ad5b6bee4e9bb7af7ecce51f67f408f765227ffd81d542aa49 eab419481fbf9effd0c11aacd784c25ffb68887d329c3e5efc5534d4aa74e07b 8046311280101f8dcf54705ca866e9b02c4597cf3b36e8d04fca7b67d84759d0 7b72718bae575f23a43724abbbd84d7ef253859fea8f047eda0c1ffe5bdab292 41c9d8c704b2639a22e91307149ed9922c4d539dee8c0cf8614765170869faa1 56bc47a319189fe7a38f629ef77ddd1ccd67ad441d5428646deb6db4bb7e47ea 50e1449c60caa5afa292798a1d51e8053185b609beaf31c826610fcec0faa9a6 171bf66d2e5da681379e0c438ace0c435e07bf056e58f9cf561081f6b7584923 374cba977db79c9214c2fedc43ce48c758baa4b9ee41c0446f5ce182a3fbb702 3c1137bcd0f20e3df52e2af770ebd54769ba3e35657704271e15d1672ce8868c 6fff13eaa5eb6cb0e35c8adda1c697454f18b9107781abf60e678054eeca58e7 94ca39cd1cdf0022a86ce376411fc58eb3ba8ade19ab737383322a17fddcc0a0 278c6f40482cb8db57eb0453793d2771fd769ce80c9746ca87a271f8b5bc82ba e9fa4bf8fe235c4186d04d78f54642b49e13a97934456d517ee208e5098e40a9 29a7d9ba166909551912a8f4b3c98d92a550c6d116fb9ae17370ab23aa06b125 a86d3fac30905e2adaff14ad365ee4e75fadcc58f843447dd86a734c22ee3f0b 660b743eebdcf30698c633c4252e4e60817072e14f4b6956c99fac2afa6a1c1a c02af377c1759bb1bba7ed707916239c51de509bb4e6502ea4ace4734007b187 037866d35a6834f17ec3a9f47e49b831edd7a51556a9e6ed8d9be8cd28897ee7 61b20bc9dc30f09a30535fd195afda0dc7428487185ca254f95760d5da7a935b bff7e6c1d58d2a367ba13c1dd17daff01308fbedcfc6e48c0e7b29a246809147 c56f22fea86b3d41adae270bb26a0befe21c19e454206bfd577f33b6764616ad 8b5baeb91da2b1f1a8927c96f6b4ae83ba6a7f064fdfb73e66e849ed8e9621f9 aa8bf66c65f3641d8e57c1e8485fd69735c08839932dbaa91a73ef028df04128 978b20b13eecd2f26cfc99694e63e264e82b068d8607d268d71cce92c95eadc5 fd9d2a0d4d67d0ffcdcb9dad948f60eb13605530555f45a081e5f05748b2251c 2145ddc70b1d2b5ffc307317fe917b6436ea9f8513296e909d5b749d9d942876 0c1b36166718af2153069a2345694c58090371fd573b7467e64f59d1535c632b 26be7f35cb5b1e5a925f6a84ed27fca8e18fe06dd54036a1b8ae0c424c016ed1 26fae58a11366d7cafb999f70ff5333e518bc4084716c116016f0b846e206c61 179b919976d9fdd465eee9a6cf74d70e91096bd98799953c7145cee6332bf0be 2b7f0f3aeb60922f5e67dcb18c0beb87adc77378da910fd9fec9ff99cfae71ab 88920615b68b3e65404d70d26db44d0f4b13a24d4bb70bbe09a67c9e8638175f 998e9d5b649897331b4d87736b101dde09e02dd351d4a41901e4d4334529e75f fe0eb22b487496d4f1f045566f778d01188aa96f64022f005622e161b2f642fb 40ac868e06b127e5bc2a98bb837f5f9f2a92c9d2f53fbcad9d0b1f6fea9b7ac4 5c4e7d347eabf4d1ceb20e87e95f37d035caa7d31cd07fbdae193a1bf30c3dc4 deba00bf7138aa8e37be415f1663845f8547041bf2500dea61bda13457c6c994 06cf1c0b06235e8e1e5873e3c47c9bfe3f5c6ee2663583e7185c765ca5659c22 2dcb33f740732e35561da5c394cca3e16ea68ac16f5b29ffed35e64e951bdd02 086c38ec87478ebdb1729728b09821bca07c5c97 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY7 %!PS-AdobeFont-1.1: CMSY7 1.0 %%CreationDate: 1991 Aug 15 07:21:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY7 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 50 /element put readonly def /FontBBox{-15 -951 1252 782}readonly def /UniqueXX 5000817 def currentdict end currentfile eexec 9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352 05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23 b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145 d026957276530530a2fbefc6c8f73e9b697ddc0351763500e23c4d170ea8a2d2 75ad0b6b23097f02fa803c1f46f9ac10fe0e527c431b11b1b9a50e874896cca6 17fe3e255960846bc319ca68b9b930a45d5d0fc36b352c3443ab6f7793b38d2c 7fb9c409ab7980ead55e9f8f6b83c70088d1fa6d7f2214da8928e40b96334ad2 72d1b5db9d1355a579b26a8dac21f021e393d7d837a95deb8de92ed818a8b80b 98ee9cdd8a3c57ad7d6eb7a82f43eaa6ec520eefa7302e750edc4b495f70bba2 24a2182eec37f1a1c5dc8e20973007150237daa6bf03d498826777eeebe09014 ebfe05a8731e1a421cfc513d47d673e3d94d805f5d0668ffa265e0962cb5a75a 4a93d9b872c2d3ac4391eedd46c6cae184e1af981f95ce21241446bb759e8f38 1ac28c54373f977cde0faf6e34c78373a20110a296a42677dd5eb3e0daaf95e2 c1b22c0265ce104c2dbee2720a1f395352d6722d5a72e89f1841386686f97311 86519cbdc8d33b3a91570f84bd1dd7b080477967949ddaf7e904c9f06d2e6760 656ef9d0805e253130330baba746c6f0a76be26f53ad48d5a7422e6359248dcd 936fb6203fd1db666e89e85556ebf6692f8df368244821be60dec60cf52a0e8d ae46598a5d586bdf65299c6b31dc4f5acb9f55dc11531b08395a21300ef6b14b ba989b9ca90485da253d0cbdcb173412f24789dc63dc897344d94f5a55ca0b99 80685c108ec137a7996490bea6a675a40b431a30edb05404c8d726c8c5016e 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI7 %!PS-AdobeFont-1.1: CMMI7 1.100 %%CreationDate: 1996 Jul 23 07:53:53 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI7 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 73 /I put dup 105 /i put readonly def /FontBBox{0 -250 1171 750}readonly def /UniqueXX 5087382 def currentdict end currentfile eexec 80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98 74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730 48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f 15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427 bdd7da12534ba078ad3d780414930f01bdaae649990604a33aa9eaffbe5b5489 e5c7c9ff9d9be01b08220832c41caac64816b53bbc087ae4b621d2b44b21ae5e 3f7fe4ddb05c675abfe30510eee4a7c874bb57b2ffe521a6875eddfdfd18c781 25bfca5a097aad361dd94df46f14026c25ea988194899b95001209cb7009cead 4b4ea03473ea120e7a7e341d4e3926796347fdb3a124c29660ac09f4648b313c b58e824884382f24ce08d2edc686923acace1201c16a07a42803288cd0b946f7 546510e95b1fa1cc96f0bf72aa823d8e83d7c68c752c82a54c752eed2b1e699d e9db1830272ffbf2f4996ccc2d6fe2ae272798989525ef3b67b0d09bffcef749 a805e5f76578222b9c4a8a09b13189a16ab746ddef7875f1ecf83e568f493d82 ff729baa1e0834dbec30a35d3c49c9b10c5e1d90c6e3c8fb737df5ceb3299d96 0fb79632f91f257753b4d2e34e3f54a26c7b950981fb7fe4dee3315db63e75b0 24b4d318baec8aac9cde186f6d65767df1dba35124287c2e805bc660a3a22772 0ae4fa097f1d75107441c0a0fbb9eec17d5516fa03b98756b7df7ac7eff9c7a2 364b9f691ed5cb692dfff9dd80c761e9c4d5d6061782b327302c053ce1cd09ba 0605ebf761cf9b730524e1994e7dfaa956799d522ec53d5acba27a35c4d28279 617771938ece58c5ab664aa00c1bc4efba2d15504247a68e3af0f9bd59a387b3 80db88cca083b06f5af70d768d1699826fb12ce12efc2b4c70923e052dbb964f 5fa957c3ce225c0fda64d9b5321ee1ade207c1cc93105096cc73118f4082594c 8ecddeb0d7bfde6f70bc62f10407c26a476ed88be7999d64a15912493829a9de 62c71f5a34fbf5a843e311873cd98817dc9f8a4aeb7e0738b5de10043f5cfea7 147e63b9abf3eb818128e9889ca384f115247195c398dabc619611c8d330d0a0 ab60c2bad6ba29f90db43fade41f89d7617033f206c026a4e53c6777acb0882c 83d82b2b55459db1d5a380ec59c0fed7fa95474dc18c24619f5049a6f67d2ca0 f175ff4ef225ce58240d220cd75c30a97d1af0238a7ed254a54b1c27d560e038 47e50a5e30ff6b9f63b75392161d13183dbae1b5dd79223e1413f6e355708780 75b395ca11cb6960d8a03d8b00a57b40ac37ae10b3e1737d2f1623893729128c 1100840faeb19f5fbb932078726284caa42f38625ee5ebd0900b0cf3f9678188 2f1b4bbad1c952f189e1ba469eab666c1e23536f104be5db5c687e9787bebaba 0c3758eb52d57d52019eedcd7ff33ad6993b6591eca07e1c944f0586dedfc7c8 be49a9987d583a97d578795f08358bd9c226482b33cdcff1f0ce2e0a159d7f97 037a4d80fcb296f561026dd9d4885d73f50fc18db37c63d758e76a7b2dc80402 4acb3f89afbc24707251fa0cba728d60d1972bfb438be9d018bea8e21ed1f063 61ed51fa3b88aada7b49b8278fc9d8f2a456b9003148acae006bc7cd7641b930 6897a1fa9bd4bbb5b343140964bf5dc6ad7643ec28bba8f77f03d583166bd89d c951f8fa0f1cdbe5519120122d1fff59b3e46f331e7a3075e63c3b82baea9d79 1a0b2f2d4a39b77a02c2aedc7a27034eea230b6c691e6c46b353e69555b8c3bc 2ca1b77f58b75a29960fbdbe 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.1: CMEX10 1.00 %%CreationDate: 1992 Jul 23 21:22:48 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMEX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 88 /summationdisplay put readonly def /FontBBox{-24 -2960 1454 772}readonly def /UniqueXX 5000774 def currentdict end currentfile eexec 80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4 d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828 e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4 7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80 523f59a30d195fcf9b9fce4ffafc6d5649664203ab24acb938d58d246707ffe7 d62f04bec4b70c21ef75beb2b812622b3c74e969d72d3cd11bd7106294a99caf 0b1629bc7d4de6b96ca82930831d64575f23f4ad06a0e45e315b1d392411be8d 6d73c998789ff258a07a3c8c2057325784514c845500bfd1a971310cfc11d41c 1a167dbd5ff012c60add4e87325f6e5299032a839de65fb1473a166aae1876a4 414a434f22c1d241591fb36f857df6fa930608750ffc0c54f44994662b1f00f1 400bf752ea8d83ffc4cb77a290bc2d99981ae59a191748ba5c7ba1a9d2583fd2 1398452b6ff5d83a059f7eadcd2ef744e9dd22bdf9c79d049bf06835e878c32b 7765c69bdd8ef4deb4ea7cfff4cf9354a4ddffa689de961d16772491c7afbd7f ffde42400764c68e954ee5c455a5687959829bc3b319b2147deaab3628662c80 30c5e02fea09609abe4eaa12e217bc3af673f1bc36a7039eb13fcacb4218fe0f c5a3f9452d4edf46cc91db67b624d4f2d37502fb9f11af4da18ca40b61097f95 d44329375467ed13c5cb585ec53f62b83ef9502cc755af44bf32b87b8ae9f3f2 f8dbf72dab90acafbacd280db6aaffaefdff6d5eff26669bac56280a950560e3 d01714ba38659b0e4e28bf8cdc1f15ff7e3ea9d95a6afbbe3d8e6905aa6d531d 6b6dcab89e2036cc492c65f76ddcc3cfcff33fde3d9ffd10f7a90530fd5c7683 4329baa902e701ca42717476298c9ff511b1941244bb1dfd0e5cab92a43970cd 1bdb292eadd055c97972844fdcdb0aa06401e7b2632b9d134f96bce0064860f3 9859da7a9a82be0a840672a1331212752ae1b521b693b384a72dba8d37a86eaf a0341e7fc5f6ef7a8c566aacb91e8bf5005c18837894c4eacff41dba54e071ca 83fe249b6aa6921340879a644a43e13b3ef9b1db789a062b37835a96c2ced7ee 50320bea2d3fca3d6ebb9a3bf3154cd11489aedebbc2c525153949bf33a9fb16 5a6aeebb1910e08ba05bfbf47a5a8506790edca009e4927288e8919cbf92e428 d4b0d462124ec2b4cdb49fa37a030b64e1b85b7cc19a4baff176f2f45737e03f a41e6b068dcc5c26f539fd5926883e94430f0018d5bf9a50902d8bc5df0c6695 fa3dbbd6684d15d63b5172ca84108e8a12d6476a97b3ce2feeb426a1f2bfc7aa 75c3245cd5abc9c9ea10c91786d14d9316782bb114404c7a59a7f3d010ed437b 23ad80ca9bc0b134e6ef0ffcea86e58da6bbd2325b47f0af6caa6d4eed342e2f 0a09d360cf3d2626ec5745b2d5b5c63f6ef3d90a59d6ad274516f1e44287b9b5 9a47be39fd701e4cb1b23b35c99d517ae2608097ee02d6b39a79255869c81b27 27a5d5ac856f03e2a35ceaa882695c20d42ac191 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 50 /element put dup 56 /universal put dup 102 /braceleft put dup 103 /braceright put dup 110 /backslash put readonly def /FontBBox{-29 -960 1116 775}readonly def /UniqueXX 5000820 def currentdict end currentfile eexec 9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352 05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23 b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145 d026957276530530a2fbefc6c8f67052788e6703bb5ee49533870bca1f113ad8 3750d597b842d8d96c423ba1273ddd32f3a54a912a443fcd44f7c3a6fe3956b0 aa1e784aaec6fce08dae0c76da9d0a3eba57b98a6233d9e9f0c3f00fcc6b2c6a 9ba23af389e6dfff4efec3de05d6276c6be417703ce508377f25960ef4ed83b4 9b01b873f3a639ce00f356229b6477a081933fef3bb80e2b9dffa7f75567b1fa 4d739b772f8d674e567534c6c5bbf1cf615372be20b18472f7aa58be8c216dbd df81cc0a86b6d8318ca68fe22c8af13b54d7576fe4ca5a7af9005ea5cc4edb79 c0ab668e4fec4b7f5a9eb5f0e4c088cd818ecc4feb4b40ec8bd2981bf2336074 b64c43046fe6e8a202c241f339425066bbc9f56c37232c6abc503843fd3a8dc1 e0acefd8ef849cc136948ece005ee47648027fe3939d63f663f0bf647dfc622a 7d10685e5451ce813365a9ddfd828ceebbd06ea663e292edb3167c5dc01786f1 12c20a6b1338151a05ba385c44cbeb7ec7fdd0723027ffbd36339109fa5fe8cd 1e61d37b855f805e66bf644e593cd29f689887a8e584b52274bcbd5dfe294b71 b84336481e9f59783f52ec4a540a9b9b04cb942ecefd3be306af30f92fcc2fc8 1089a7a346391780482390e8570fd1cbda6ffb63aecbe9b50e5affa135253760 ab2122d756f2f150194994764e6ac975a668fbdc29d010058d2ad86e81364eeb e6d7237f54b21242140ae8ec70869f7183d8f25c793920871108dcb0b34f68d5 db752da649b4c3b9eefb410a3303843448fa88b6c639bf34e581956ef2824b77 33e3549a95c1b4fd029c626f834d44b3a014ab378dcecd2a468dca1b236f4b8d f10fe004e2e352b90baa98b616f5a9eaa8a71f8d553f973e6c689de9940071a8 52a83ac22e1a98bd58e92bd294bf174534df28c0a2aefa3aef6a43f01e177cae f286f195b9426bf76e7ef241c2b9f688243c4a9183500e7615ad739148a333a0 2c39a4ab86749c19c79b3b415999e816a520c664c1eacf1259df976f475b7e87 e3829ecf6c16bfa930864c62f02ceccd28cfe58b7c4c45b8af251fcb0b42cdb5 4eb506642dc16b3ba530f9e28ccd82c374e95747ce3dbf3f26e3334e0b725d96 5e30790bc072f5dac94e054896b9485a06cb4bdbf304db38f8c28c523584ff18 c96ac0ad276a5d2a56d72993e3e71f7d629069ea2f3198fcff75d1a1c56c52ea a4e77034c76d68b0d1031aee1690b37a39d53206000c47a6659778b9f0ce9890 4b661a1a497f851c393b1dfc2d0d281e8bc91fdd544489bb6ce37f937b158ac9 9cef26b401a18b86ce78105f4b05b51b5616d1a368b58d5ffff3b18ce7e7f71a ed84aeb732f00014b06bc0318bfebe54f84c702a6893b762a9cf28e9864dec8c 39ea1655cec8b2baeb9491f352a56a97a60076690b77525ab6e47ca208456c0f da05579032d90c409a6aa243239cc70bc883ea40294a8a3441050d76b854f8c2 df4a30311d8cefd69fa62918bfaa650037a1d0c4c4c596a2255438c60ab09bf4 363c6669af4ce2be870b813872a43fabb89f59607e74bd1cedbbd9c23ddb2782 31283f8101c7ee0e3d7e51dd642ffa4e760e6d89b9511e0c450950242d5c7ba5 53da3c6f2650b1f5aebf4d8413f87f48d2ee1d0a1c64d8ea435cce254041b915 7ba63f5d3ab2f8e78aaeab4124b98adfb1e5217a3c5ec0e1720303c67a140917 503181d6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 71 /G put dup 72 /H put dup 73 /I put dup 78 /N put dup 84 /T put dup 98 /b put dup 104 /h put dup 105 /i put dup 112 /p put dup 115 /s put dup 116 /t put dup 117 /u put dup 120 /x put readonly def /FontBBox{-32 -250 1048 750}readonly def /UniqueXX 5087385 def currentdict end currentfile eexec 80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98 74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730 48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f 15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427 bdd7da12534ba078ad3d780414930da4f8d58abefd45db119b10eb409dd89792 3c6e705479464a4b310b58348c4b42393988fef4925cf984423aaf65fea9f0e6 4629953bcf50b919d968d99bd185f83112b2759cc411764e9bde677f57c5ee5a c555448d5f81a16259ded1e11bf4119d53e8ab07a802df900d3a2d5ccc1c6876 d29c5e9effb7af3ef83400b0910c07873a8c56fa7b1eb1ba426043b00cc95dbe dc6e136cbbbcb3f67509964f9f281ebf81fe5b018122eaf66c4a838487e82e18 6e006093042848a903efb3469ab6b4049767aadb95c30408dfd58d8a10f4cb22 168decd9f3ee100f07b49aa44c92139b669cc312ba20192454eb2375be6284b0 26659d964b96ae82d4942e758027fcf23c25ed01115af27ce7f20efe2a822bb6 84004f20243a49c9e93301fc21b80815c033c3e2ba58ef53da2157d524b395f2 b37abca13bc6a2f42e824ab7e47106176b0d6db267fbb795ac7425582df2e3dc 55863468a9200742bd7b552c48f8cf58bc21343bd3b95abfa140f33f37c6f3f7 8b0d8a5154eb7c1f62ec598267f13e841a3e64172663935ac8b665d86540d316 ddece329c008049c5e74b27d59022c5515059bc3b89370b1bc6a169c888bb325 e0b74282d6f053a50da4024ed1e433271a32ab8c17d41c632b41cf9f3ecd5fe1 24daf7aea7ce8a63047b245822930d517df7baaafa69d2d17f7d93cebd45416d f3459365434123a76ccf883a4973bab19807e1f0c4bab03a45f7ed69ff2660ff 3963e4def11001eec4238c368a39d874fd30b3c14f4186ec7700fbce22abe468 eb32baf7b0164f8f21a9b5e706b91411faaa44467cb2180ab03de375c1ab93e9 76e11ab92fdd4a7280a6d1a8dc65c4c89d04c8ed6988045a2a3de9a4c7b1efd3 75b465dd26678c82e37fb073c606bfd7cfeb535dddbacf575f46e39fe944df10 d14476c27831da7bc0bddc22caafc30f7270dba20fc878783e6f28e35006e7fa 020a8a8f464de56a64426537c9d8fa4cea1952383397aa536f71afc90f7d0b53 0f47d1371ab4968051de83f082aa9395018f6d967c2bc4cafb8eb89ba92b581e 6b34d219d5fafd52cdd79eae79685de4392ca09c70e63d34b011da2842e6443c b8f120deea467d99770592048b920dbac3d4802f2f69e1f737faab6b0a3948e8 a1aec1f4ec3510046838ebb014186ab6a52951a86f28bee1d43f6d3e90b5e324 d8654b92f5cd2a30a0f092d527c362d3e2c1a3c528a8cd8a69b25831234305ca b905a64c63b577b8cb32ca1afc0db73f4506f0318fa36302235fa73af9dd24c8 1d6fbcb2532e1e31df5cd8872a0a609793e7569365e402e29e155c673292b86d a7f697e45dbf787ddc6363983773b970e9a5b4559c401d47aad1bc122f7a46f5 d024730a87f2af9bf25a3e7111556adf79503ace2e1a141e7836dde9032b0e3f f5f8eb98ae64565086cf61ee5c711ac0d60773fb87c59e94fd820285212b34c7 f7398a6270cf394480c6b892f7c22f3cd090dce98ee768a9c3c9cf9d8c8c38ec 9f0b1d144638a7f6607fc6d4449cbae9215ed4a768e71c105e2d4b89e7100e33 685fbe99d1121aebc329b5e0c837e8539ff9a828e703bb19f62eb253eb2a14ea f1866f0374b0c77f1567ec150e2a1189dc9e04ca436cf6f5efe4b14ab4f0397f 63a30376c83926ede1cec82e7eac39e59b5ed15ce8e72e29079987758b3be332 f1e4bb3caf944cbe44c14e957a335a02ad237d41d65d5d70162f05d515878bc6 a2e339c7fe5e482d7543397edbc24cd051a9738950595d073cbe3d8f05dd3a13 17c721460cd4984cac5bf6d4f1347e03bf9642f01f7134118e55ca50cd803697 026db0241d2e463ebedcae35d95ad27fe78c5a4e2f9535d8d4d4d6280ace7c3c d5ddb2ca5dc702f930540ea1a68e36225b51149757f738ee822b68c014d8e928 d976535bbcae3e89e2c35c5c460a7c7a3b270f85e62f1d86d10288582f4f0ebc d3ae6348f4da60efa220fa3d995cfcfc11370a9c0faab0de2f23372e7248dc3a 270e89e7462ec59a1a7711df4c3ac6f498691f39e699b77a81516f8021ac5e61 567a95d08c078faeb2a150269cbccb300abd99ca5d7e253fa760b762913c6f77 9a712539dd10d1a5529607eec91d719bef4dd163e356a41b77e31978d6133777 22b2af5027c3ae79f1acf2683bef2d51b7f33fd7b7c92d05aa3e7f6e0fc6533a fff59ab471a09db3bb85f4d77557ecfa04f0960de8ed9c9e6f48a08922583856 3103c5653a29443b782a533bf6b52958f6b4cbfe9a14fafe3d48b6d7e4eccccb b472b3807a25a247ea37dbee821eeb54c5fc977767f9bea1ba047312c1d89ac8 92655fc33a13bce16e2ad7bd546a658d8aaa1aa45560a4e5abca46c128d7e4fe 431d1c7836e8d0bd362dd0c401fbc2b61848201170ddcfbbc2a4f1e6b3ec7ef9 3612069b09ce9fb0d397827a369426aab47acb3c2b461780668c086e6eb46479 78c7e6db24b8747e21a15ceef0f9f7e08887389789c0c2290fe0a825aaf9951d fd3262b7311dfd36970af5d32cc0d7aa0628b2e6ae610572c841d94ef5b35e48 4a1c6fed91b9fe755f7debfb6fbc5739dd75934bd9d9b485df51b46141891abd b7858004ae97d82bba073d7d0423b94e24aedd50dddec6a85693e3c17dfe9b22 dca56aa40750d4d86b0c53f06bf5ab1fc634ebbc25b1bb6ca4cf4cac4ba283fb ae2a4545124d28b1ddd7d765dadce64bf3b250becc452b6fdc29582626f11009 439b4bffe4be45f2db6e70d79b166f7a0b6fb0539cd473028efbc893271a5b34 fec4184e8465e5ccced9e69bdcf3e61fa592c2e07911ddaacc73a2f17a459fba 96dafbf77c8fbee6f1196fc381ba6b5d471ffc467bced35e5d8c4f2db067b767 6bca165cb62f217e9803ad136e092be940de8876e6811b3d36068e0efed8897c e0eff7840b794a1ca0bde48f283d5a6bdfe5e3b67ed0920d58484f8708839de5 945b48f49ae52cdcaa8eddaf47cae715c5a95430d22770c79a2e0333bff04b77 2b3ba300a1277ff24c3028ac17fb39b820e3ffcba9213b44331dd2666db2b996 b5732f0cf30cad7cb1240dfe94dea260078b0ab6fdf37e56396f2cab16188c49 9f621c59649a1517bf4995a205ccf6dc02076777c3794697d8d0a787e0469869 a1c60d97bfb067671aab89eb86121afe9d5f47ae8eee0ba34810a480ce92c73f 7bb930a74361a2e1b37c7cf88ee5923f38bcb14b5969a39a1de054ee3afc60c3 6325e29ca1a9a9179c136a0d094522a09544135b2c0bce8e6ad4b385115f9c5a 2e315082a2ee9085934eba73f7821180617b7db8e55b1cf014feaef755e833e3 269a1a6e5859ac4ac11eccd64eb6185518dcea292dd52c84ea112c941403378e 1333e0c0dcf437966b42e9465c5b48aa46b562af8d67cf8db68647c70e000c4b d9d267133c74117eacdae2cdd638abdb9ef67d3a08ee2b2dc48296b40cc23e78 eea6e30271e4469d14a19f63720a6170d54054f92a0e251919c5bb9bdce83a46 b922d3da4d6394dd28fabbab81a68c003fddab7852fdc1c8a87a64d5a12fd276 76929db8658b197d4d6515797428ac2f9fc70a49b15c9f8ed3307c29ffb6d53e 44fd44e3ac1f1a29a9184df25fca449e2ef94997637cc1a5df3d2eb4ed2db3a9 33000cec124dad4418dc353c74794dd408de45e7ea564123ccb784d63d0e7398 a8aadbafeffa1a4b631d5b380180626e84d70e429bc02587e34a0914d0a07163 4fa0269c8a1ef9fa6ede6017f272b3036754554b35c2710d831c73481cde5492 e9ae49b5f7a0db0b084ed108a6342dd87f62a4e839ea967da06c40c2172013e7 07e6cebdd548d038402b404d3e2651749e4e889a5bee3f0db58143183b764bb7 56ef086d345b2a508e5bacbc108e36f63c6c7f7a376025d02fe32df8e9f86400 d649cd4c078acc29bdbbb8da0f2ecfea3bc15fa377b6828756a414bb37b42d71 99cede834130dff21b16fbef7a4655e0b4f2e5aac1916ccfc9b40c90614a933c 749b93c3d1a0bd9cf477244b9d1c845142664c92127152db5a2dae153a2e79e4 2483851fcf6ccb59b0f8cad6c7fef9c5092acefe302a56b20cd2905b5dda49d1 b4fdf83437e347ad013321ce007d8ebaba7b5e0b4b49e177ea7a79401ffc8710 908c9a5d4139c94a64faf4477fa4a77f9042bfbe4e893d3d75b210978a24ec6e 5468af6c80817645ac412f52c06f8cfd6a2aef731fb4795b49b11c8d174d7540 0702600c12d04ad3e8c54b9d43882a047f9d08a840da9eaa725d249854bb3f1e 80958c3d74e624e20d40476583386d36177c0bc38624d73cf6c29b45a79a5431 8f59b4d49af1ee053398e86c4690b2da0f8a8939354069359ec38fe2e4c3991c 2e74c5762d41694522eda410e34464c5b5806d4222e3f1cf2b620c5ba5734eed 339f03a2d05c52d6a054ac61eaa589a4db0da9fd05d754662257f76c882a7d52 dabb41a3fcb27849b12c64c2b9591111836208a07f2344f095afb0862c4b202c 6483bcb1f92b8982de01108677c1a8e7ecd52b7d3ec969b17f6b7f1db583883f fad93d4d4b2a0c527bd092602d164b135866f18b81fdbc185e7fbbbd7f511290 e3b87b8e16ad383f13a391bb5dc0a0172b71c3f5efde869b0066eb8a6bceefa2 29d11dbb22dfbc870f72703afe3749ca1e1a7fd6c0291a6944cf4ea7880bcad0 d7f2fd4eaed98a633df26c3247148abf73e8115e8fee9531b6485fe0bca89039 a6b3b0b888f8d262031e16db2cfb02535cf5a0ecf175961edc5c0c8b8ec3be12 004721bba55e225ec2508dc88aeb7016615dba907241f07b6072231268ebd494 b09c6963f9ea5968d2918bd26b5d2c34b0c9b8ffa702fab70360f1bcb96aaf8c a0357988ab86052e6ed74822d2d004e6ea7722f3fa311a52e6548eb467323db3 067e8419cc451520255043f1ea0235e68646078e1b1f461e7a114c56948d3998 cc0d635ed0ca1024f2e01f08dc3b1d690013224f11a7dc254a7eb7cb096f1cbd 0f81b9bd53081f9edd4e041f71fa606cc73c902998aa5af8ae534c3a9b8a95f5 d42a1ef4a7a1b20ce4acf80a0f3d3c55ae0028bc88a7a96eaac047555fdd44a3 affc3d05bf34d54a9f23b14c865e939e2bd7cdbd03a0c4bc3ffb5e7d45c4df36 b9e7301c9311deeaaf6783195bc89dd2cf17a5c9a9145520a248d7a735131479 52afe9e769399aee361173d0d8eeb4e59f91745c85059a4090d1cbf370abfdbb 994cd1e37764246e99780f7a4f0998030780b59bc43d492b6d80567d941ab0a9 237136841c91b48ce850e368b245fa3169090b67724d44d6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.1: CMBX12 1.0 %%CreationDate: 1991 Aug 20 16:34:54 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMBX12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 65 /A put dup 67 /C put dup 68 /D put dup 69 /E put dup 76 /L put dup 77 /M put dup 80 /P put dup 82 /R put dup 83 /S put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put readonly def /FontBBox{-53 -251 1139 750}readonly def /UniqueXX 5000769 def currentdict end currentfile eexec 9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0 0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3 79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3 2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8 b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d 823385fe55f3402d557fd3b4486be79011d1f5bfae5c1f476ee6f05eb1d2caeb 269958b194521197b312fcced4867f3c8fbd030bd715d8ffda1dcd454b174e7a 1a97b59fe770e67702519d9d9b23d61ac08424d555242a8ca08c49aef300945d 99b999a79ce74804ae6bfde623f4463371442f6523a5f6ce19c839a708c02513 2e22c696c8ccade45680e5197189d0f98e7f0d5f955e353970b392cf530a68cc 56b0035ddfbf206c3074beeb0739dcbca272a6e629fb7aea2c5ba7bae50c7b4c a595df78200c352997ec3ee564df229fbb5473f5e8ccb1cc0153e9a7e299a8ea a29b69d1b622b1f0cffc58291248759607d91150cb0651120970dc9f743bebef 44f6ae92facec57658999c8bf01f60611560043962c0695e1bb87d090e0fdaab 659d6557208a660be9aeef8ae55f71b8bc76394d792967e41bd8023b6e7f8c3d 9987d5e54c53bf2bbb32855b946473b44833bd78873df8e4c7e668ffff25aabb 8da4148f744b9d0524d6cb8281247b3052cc5d66f3f1bcf8a56a3fb446ea587b d8be30257652cee035628aeddfd8283b5ad21b8b1480ad24d898970ac8a1e33e 543ce4e3c48f9ee621c5ce3e8ae930f890011b630866c988606068d9e92396eb f51bb3db204505fc3d09d4701ac703a14d92bbfe27bd7411b363a88e33a8e9a8 025ac31f21e73dc52b333b918d0b1270c54873a490222d041a66e0192612be6d 2c88958a8f70c10390146ee5091df020ab97675e8e6acf98b28b539cd0a20d24 a42f535ae44b8f5e9290b38fc6b02e1bbbdf1aca96558c2dd5afbec53f03ab51 fbce958ed4a65b17fbc03f9defd4aea4a15229f3c320876235f2d8b69bda5f48 03a2798790d35b394c63295997dd487bc603cdd10d18f3e3fcc7f17d2a6afc77 f1d7f6cf69d2a86b104b9d3b260e4a78716927a485ad8a650d610e68378f4514 3610b087981f0a0655090163dd2dd4d0030faf6a953896a9cb2cd033ec9ebc50 c89cd852166036147cb91c1017f096186d822cb5a7a3e5b7db21e906d306deb3 ea53a3eddf587aaa5dd0d64746e98f5d953a0acdaca432eed2c879c7fddfc046 1d315d3a385a7cdca49ed9de8fc863e35f176342d3ea14e8bfc8c53e37d0bff3 8f356cc5752b5710eecef8f3ac5d3a07f26a8a509e39ab7aef020955733cd6c2 53f4a3756d9ab11c4af8acee4a2a8dae9fa6f06609cd86792f1f33a554d061b0 a847328f5fe54c552ff714e8a6e8077f6652f12c459eae3e6d7a41cc30cf49d3 c0a34cd066e35581ada29476a2ed3bd5b6bd1edb45691dd1fa7f0ec6ff1ca93a 200787eb647d8104fe3e1b1d778edc4de0d194c283220f5729e87bc45705cbc9 61a871a3c505192ad2fca602ddd24210bcf3e174051765e1aa127a4272839a44 63621fd7999bf7817ccec4a96d1a46289b29a389fd8708bd3d9f866ad0f3faf7 ee4eae1412d5f1b9e0080aeb0f0dd0f0175b836e96248dfb9839be5d0f1848c7 b14aa709d8546d02b97cd4159e4408d815d166b981bedd103d58e0b092109146 7d9a6c71345ebb620680e59b8462e5a062fc57b28a521c9e0e6d2671bea4d7d4 88c22a2d1d466cb5a2ae63e05157125c840542f8a9a1dd718fa1a0c000d5caa6 1388802bce9d2833f734a47cfc1a16cb8363f13c7def97d4e916c7b1006ed249 c545019de88eca30d8e92ad1e3c79c57a3dd7667a770f315c31b7aa72467bb3d c0758a4e473b0ac2daaac298ca604f855c25e47692116664ca8ed6d6f029cf54 844b20e99a705b08ee7534f0c292f8159a5fc43cc3d4e9541a2bc278749ece14 43155568882b46243f6fd24bad032624d3d9edf397569403abcc14a3522ba8e9 43875d09d736d9f8b4d9bc80b410c7c8e90c95d92320858c9022478753dfdf07 65855c12b6a7c13725617e40ebd55c47df433f856c9da76a539774b42bc28e26 4b37781ba240e2851612795f61f19f392815cef3b96f4d98dbdaf34ccff2db74 eff3a4324bea785d24d4a3940eb05bd1abf679dd7104754621bcc05a6f6dcfae 8fd30b6fb011e1593b8707364b40fdce4080a867c23d25b3f1ad288e8ead9294 c535e4afeff16d935538423cac05592b61bffdb9622ae868712fa9c18287280b beb4691fe58a3e82959c18caaa19ce49849420732bcaf2665f7546f398c6de72 61d39ce6f3c3c7630b842afdd8dff6a0f6394b3fd1dba27438905da2b1f39319 530ecd9940fc27fb6becbf6107d2b6614b1673a75db92de0784c2f757135e724 15ad3ec4fb438bb4b7e6f9d025cf51555401b13fbf2e169c02ea92022e235a08 92e9483f655fbd5f5560dc1c2d3d92aef3c3570b3ce807c03376b5d9ff4f61c3 671e409151d64fc925e5fdd5939f3da0f66e579f2a430a136bcbeed420d27f3d 995abace1803f5ea0cab1b6a87f9c430f3fc3db284755454799dce1bc4ae5ddb ad38c3c259b80a1ce64fe084b005510a1f6273eae205894b8fca927fa6011459 353349755a815ce55eb51dd62fb8b6b1ab01bfa5d1eafa6afe0049460f530a87 1e729a52250e3dff29629b2bdaf031f2f649f7012df59a9d95c1811054a02f03 f5cfa8c2d8f0aad878625680eba249d3c09852dfc5a23e6fca47629654e31a64 c345ec6a9c1e7b0abf42113606eb86d287bc1a56f7dbcf99db4819e6ea586379 5e1d1067756891f1fe082da6b85d229770d7166f93ef16804576edcf8857b0aa 0b5004ff581856073ecf2be310abafcd7e7cdc4b9e73b8a509f83acbe43f3904 6b6db0b6624cf7322640a95518fd4f6ee2d3922b08d21fac72d39ea5fa9dcbc7 c74e3e6f6ea7f122e4f178ab6c40eb8136d5f933ace2e0b3b58ff6d16404b14a 9bc8bb4d530499d7ec7aebbf599d25d8cbb4fb61afcd4e48dfdff199bfc8cd6f fd7316373728faa9b176285243cfd7c689c7ebbbe7232c5f24f60dc734d73595 f68904449b11c59efd25203d5bd8454efeac650439588a46639b847fc5d53fb7 e9b6af42ec3ae5e7f79ebeea4eddd3138f5dd74e10878580e7d1a8b6c567e0aa 18a412003d77c481e326c0240f46d3c10961ed8e8b5f146b5ac919cf667940ab edeef8467790a2e1ac269fc9b79632fdf38e0c7ed3436a9269f0214e48e20d33 98d67ce65e45a01f7568149b4176a4b11a67cd9fe910e1428da0c0419de0dc01 07b0409c5035994a4eb40bd810f5916eeb7f8813106bd495b1befb181dbcba94 604ab57ce9dde3973ef399832ca82c976c8e4ee3f2d12b1ebe0ee115777563b4 e052c2530c5984407baa8be982068ea2c33e74537e3e0a0e6c48bbf8cb8a8cba e0343add774249031947ce9ecd252e9039d3e64662f5e13f4bac834048c29018 0cf8866f0e6f3b77ce523d0b1e08304eefb4765488964a1d9f14a0ae6a297cc0 3f7e92553ce53561d7d41781fb0b927d5df8df1dd574721eeaae554641db6dfb 7d2451816c9a44facbe13f0885045e6a514941c23dbae203d5c5a54e41f982ef e08435283ed5ab8dbfe2baa3a3a4743a161b099b70277a82c75e5c36482b4bff 80cc531d628acced383dffab979f6fc8f0eea8035948c1761c33db52ee527802 197dfddcef0587f78cb9f4e3458bf95babf8d1f023c0b619b71824a384e0f489 d7089feea66605b5777d2ee59c36ebcf6548be357a6c4966818dcb0b29be419a fceaeec98ac7b5dcd069d67433d5d03e7e8e5b2c4ec555bec49fd79ffccba3b7 ab9eb33513d2a0e0e29931f9a8ad77805e968390264d1344e1f2a9e44a874c16 246737cd44fd9c8dca32366c5192f8ee9084429cb8b7e4951bcf390c50816a1c 4c05c687a05540eef03938bf48c1248676155b8af0365afd1824e24047dd1054 63db9d98bab50e2e44b87149faa413cac0e92f84106dc6305cc3d948932ba5ee 258e4b6829ca9475e3d1d14de1e6e5586d2adabf76d1ca1cb3a00ad6bc235126 e1e1ab70ac68effd70500fcd3eade2906cca25e1d2fa5429e3726f07e2633633 78d9dbed388d42a8f253711c02f32c5c504e5cad13f457be752a474eef410752 2bfd28568a85516611061af90ae58820e66ab9f4e91a27e6dfd12f8eb6a72508 e33527d7bb943566f5a5f7daf40de082c5c6a9c5cf992f78ccdf07f972224e1f e0f9c6f1c77a1a0126d496a8300c9ca2850af85dc29eb807857402ed8995950d f65c6a34a19107b8b025d95834afa38a62f89bb089c5eae4657273d2ae5447b4 1f312b3ec7c5816cf3d561e63715cadc489d69a439b0e8da1dbf7e42e7c21322 cb661f1d0ecec51f6d9a485ee67e3c89fc2c05cfc87dc6c1ab423d657864a902 7a82cedc55e3dc8d9600eacbb5e7f1143f5b20a4f67e02ce42084406e77d770a 3b915fd14406bbc51b5439cdd0fa63555ded284663a061d58b353e220c6b49b6 50153cdea4882eb4c650dd8a27bc6706a60c416faf659fd2a24d2199546e805c 8da3b297649d98be48dc228ed0b96863017bd2c5a46b5248ddea0af1fdefb9b4 7c61cb5964da7c9670689277bac4b479eb0475c23ca5e1b2c1b406a71615e025 80ddbd9f28176ea728c6e92edc977f8a656c28115327f371f6840c99bc6b9701 7ece8e0e6c84b422486af3b8541e9aa7df65333a6764524f93f460fe2693bbb1 7d34c0b02ccfb1489bed223416b8e7af097c4fb00d7e1a17ab04b9eaa7f2ab28 d4e180250be2398bd061cf03217bf02fe7c26d9a9ad848cbca30a729e7651334 9ae02f2265f00f8ca8089b3f8c6c0f5462783a25929be7c751c8d48f71225631 d9a26a7429c1f0dda8363ddf923042847de5d88907095472322461dcaeea5671 6c5fdd815fd32aea3cfd24d5aea6267befd6b2177abd941ba13524bc3e8677ab d5de153ebf17cddd4d6f469308be6cd95e20c9f1dbf1ae1ff6bebcf7d2f6e5b5 0f3a187d5999c2942fe181d1fe63f2d703c341b489cf9e916757402a034fd02e 228492af96c2723cd6b4674a6420752c04258fa271b008ef18a6f404a157b613 316b8c68c1f12c7696bfa2701be80e31bb3b948161e901e9ac5c0e404101eabd b90fd90270474319229f4e04596bc84b67582caf41c69eb485b64fa19ceef2b4 69a0d2566e65321eb313313efb2eb1c3f41cf04b65aff1d190a8617721b25327 c2f2a0c4147e46740128454de6f854f68eee3f5adc56f9c0500c03fc25222f6c 2e153899a6dc2423f9a13629af68c3b5e5e3e74ccd8a388b54e177d76b82d6b7 d34c1a35c26c60a11b85ec597a8365e1a36dcbb981fa1eaa32b7051d516eace6 3f21d5ee1e2cab6ef8a9d00eec24c328f854cb26cd8077da74b7fd1dd8e807b1 1dfe1418f7eef6247a842d3b5f6bc235419b06cbf6175ef6f71658ae30a8e20f 6db60b5bab855d94904bc4bba8dad4b3cd70a3a530c1d8bd94b022e8e329f163 9e5039f8851181f7358b5586959156b445d254b09cd100584da6879226ad3511 2fb375f6e9c106334cda83f2f03cc5c8e9608d2ff2bce47ec25f5c65f51fe3d7 546165ce5fae438d60ac0ff30edb0d0f474d7d0a38fdca97d526e6f66443041a 8e4d4e56b76765f83e1fb91e4d63e9ba2a6ac5c192c024ee3b9c86d93f0f4b5a 788a1010355971f3568dd6df2fea4a901da91b9e08e898c6710b98f95b95268c 3acb51e9920a2123d5e552f7dec6dc54d5eda4c2c002b5551a8a7783bfc01097 a4f742507e89a3d33dec717c025194e857eff0a5d7f199a09e2245dd57f4ecb0 b36632534b1492d1ddd91d62094e4f9dc3a437f9b35302907c7ced9eab1226ad 87ce1e79dc53d94ec083497eea86b3b790d91ebc20dbbe243de20dcabc1c50d0 8e98dcf5e2e86ec6785a97958f9e97e01dd277f86796e267145d572825f0d74c bac531595957a45a09ddf9dea9e564d0aaaac6864ea42ed371d0318a58cb93b1 222d56dc1862bd3d95cb6ecdb8aaad79ce6bdec74378ff2e38befb621488fc3e 284764ecd72367aee2827ce0382598c89e353d992e66584a471b9410c984d8e5 b09ec2e8ee14701d02cc61a28ba92c3f43e53b8711935367267df1ea2fb84a5a 0cdfd64eef7e77a8b486e6b131d5718e4cec75b436cee73b11084c62b308045b 2a20719c127d2e5d1d8b49ebe6d0130ce7704bd8249740a40dfe62ce2e64d9b8 73b4758fa4952ce9a36395e771f28ca0aa78bbe3b449f93dc0317679b27f42b5 4cc87faeb968792b05b9f0db702e927cf8504891facc2d42df272c9c77955680 179a240c5c013f9160718cf3fa5f886bc6374ff4f547300c14f43e5e0dc87705 961cd9ee8bcf2170449438c55160a5bdc45d9f6dd85c235cbf34fb8d11c66252 234f16a30ef4608f4382780c30ca1af0cde79cdfcaeb908319d44c3a9b3b9fdd fa7c4041bddd62d3a664cb7d492126c7c9790f5063b00172ddf596971aafb1cf a2a7ee10fb9d6afc0032536d5afca0a62ad754a6bfe260fa53a5cfb79d08985a 63663f27437b3c604bbe4f4cca7b4731c135a15885997a2a47075044f3b8462d 9022166c2118483801c99739a00025ab9bd2e322d5d13a0b156920b7c34d296c d8b18156291c3330463098018e12d901029c242315a407acc840e8cbd26d1d61 5ac8d935c4317782f287e881c5b7339ab290754a19b462744a8645d85bd20a42 bda4a9a7f59a6f185e334421882fcabb3ed57e54db94525457b7613028b75caf 5de9a1e78edbae91ec7c35f458047bac0516ed251827d74381094a50a1e99dfe 331fcc4641f407e60ec7613fdc49a2e3e37ba61557a139b15e209bbdce474a7e d4c92f149e592493f738df716cf89755aa522e182db52fdf9b72bb1aea1f0abd 86d152793d99bb48fc9d01021505ef2cbf00cb7ff33dcca42a4d9b70440b2b5a 96243d8f8c343aff488cace5892144fce2126b987d7559f92aa436bd8ac480fa 06cb7c77e6fabf355e1549d7ab982b4c9a0bbc96f936a7c7ff81c74e2fd78aed d6f92dfe620f8591480b60801909e418062b4a6ac8412596d3446c33c3f704eb 5a8754f828ad0b0221565c60233f46c81fbca80d88aa411f3be4ee69fcf30c57 117d448518899dac244d637e6a3814c4666e2a953316703c13fe32df9b1029d5 0bdcc4c67d5515c9f4259078f5013c33992420d4d7ceac49ca55560bed278727 60cff9c1fbe7406713bc11d00c0b1bc351fd87343704804fb884cb95dada3124 474ba60eee267b9840029ec062249c73a2ad1a86ed970bd359bb3f8b57be5ca7 0fc33ddd45db8d678000397720896c7ab2f8e7485f646f94efcf3f2a046b5fc4 e14e9d0f81a4c6b4f4c44411f15f90c17746102271d576d65763f02c7a62e980 25e0d6b6027105f8de6b7db981dbd18edce5b2b38ba570ebf64490e81d8e20d9 7ba9c2cfda810d0c0aa4e32a3f610b47c80574afdce72cf7630e97c17d998613 4b9ba12d254efb56d188d5b3b2b3a1f7afc25e4ea98a6647f29b6a4fa3ca5aad 8494dc6fc1eddbb5aa5798372c446e04cc236a9d280a78c13b40919786d3693a 0163c2a3f0624ba75ba01cb6e58859600e9ddea9741f93c76edb53fc3fa3347f a3455881da118e113d2a72d265d795d2458365654e5607d582bb6d60f36be446 60d5600a6ef8419aeea540ee895a47f576246c52df3945e5a37dbdc9cc612952 20dd58b32c151249a7e900f3ca6fa20cf03b8f519f03e7bdb5d02b6a4607f368 6aca537c2d269f2ce590371ba351425f75dc908bf8bd8fa076c9006e286a7da0 e65b45ed78bc2b37049b357150591086d3acb7d13d4138700c1c7e2bbfc2b97e 5880e832b3d9ef0489444e40c3e27107b85f291f433d4b78beedcd696ea72369 3e6cbf073e3046992793f995978bffe72c354760d27546f97ef46c91c21140f0 43787921ecf75a46aeef08488df791d2d5df7791c86cf0fcd91214fa4019d3eb 3b1f1f2c824101e1e949d169297bc46ec63b073d98d0040c7107c1d887b38aee 5f95d5a9fb49f9b701662cbd480ea1ad97a607949ed11bc6d7f8ffcdd9968937 c74c33acb362c574ddc46dc38639c19f297cbe835962ba91f896e057857ca92c 5a81d4f8245e1d96d124d6d637690c91ed45279c3aaac0e05ed95ade3cd133c2 699ff43345131c014668cedd53911184d2d22a3d9fc39efd881f0e371d04f9b3 8e55ccdf4c1b7026b09339c0fa8e96326766a4a44af2f9383f5fda5e7ce9ff49 99c5bc4e943e038c51d8e51695a0d153fde327de1a2b5c4f4c7b00ef364f00e8 8053121396d268d9361ee8a2dcb9868ade9a5470e1f31abce0c454c8aa2d4277 2d80f6e42621e579a6260c846be6ed0ecc0987f1ac4706085b8f4445279f1217 172ced8fed13c3e69b2f3db6a3a946c9285ecb9a45178bb872886b3a756991a8 af120f8edf46a63ba5bc57573ebff906bfde56c5ddbc393689753681c3d79fae cc9ff1498cdc1d57c5a20ccf 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.1: CMR10 1.00B %%CreationDate: 1992 Feb 19 19:54:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 61 /equal put dup 65 /A put dup 66 /B put dup 67 /C put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 83 /S put dup 84 /T put dup 86 /V put dup 87 /W put dup 89 /Y put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 127 /dieresis put readonly def /FontBBox{-251 -250 1009 969}readonly def /UniqueXX 5000793 def currentdict end currentfile eexec 8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8 97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc 8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011 b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415 50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e 784c6bf7389803d9450b0c21756a017306457c7e62c1d269f306bd3402e266de fc3b5e7d8a8d2f5bf0fe6ddd40d07391df4fad4a6018dce29a2b8f692b29f202 3a7c0e66de8ed85c14f1f8492167357f51a7e84cc5d92e0fee4d81cf7fbc8de5 2d2e7bb57142033993f9c08c315abade8dbc4a732e84e142d3bee51557910e12 cd8aa37c459a5e6b7f5269f59078aba3be4641a11ac48d0b625c8325b38ec08e 4c9e5e7fed976a5650d99d82114f449b9ca14c4ec957702295a39a93ef93f618 99b8ea06b092c3c1e503e6e436e0a9fa22576c8930ab3dc8c20f5d82b69cddf8 ff4dacfa9c54bed5a3aa3ea5b129fe96be632843b9b6bc91b615581a985db56b 1e01ca60ee69ca92cf5c0882ece62edad3e106d835348822400f0b66af658f2a e56ed08f8b0010571807009b73ab12a8cf14ca6c71f03c2a48c500f9d62266af 154a6375ff600d9bac3f05ce34142d6867a79581c533176bb2f3117336671e2e 44638a97167e2ea9644e31ea16c2ad2990ea33c54001e0c8156e6de8ab6a4d40 a7137ba275f39589fea2e2db8256adc103d6f9cc038037a47e8fd469c5f98a5e 3c15bd4ace40d340018b1cff7d1ed8abb0ac57b5b5a2c20a51957b96c453edb7 dae5affd91a46d938fe0a13363001d844ded4323f1ee6d30012aea19b024a552 315505535c85dc26bad31e09c50e6512802976d298c4e90d0044c362e6bf3ab3 62a454ee93de25ce54411090c29e9d75c80ce26a84404bd9de3aee0e3f921ac5 87f907572b8354a5c3165eea7e8b2ba4e333802132f760b41a900c698eb3d273 8bea0aaf7aae96a558f08b61aec7c7d65b2889bb7b99800cffee5ba19ac90fce 11437be1ddfcf0bca5670b543b9644a71c8726d0c1005abdb96f6e0cf7caaa31 95017ca81519151c2c0b04f81e717c0691b63a76e9b25329ce2625b711cb7bf9 9d23ec2bb5ec8aefb8c1a3b422ad617b3da4d49685fd44cc21a1fe5e1541163a b3e1594601d63c7e98801d7746474377ce93f81404f3570afbd5dbfe77578605 917ab96963987e6efc2d3f99fa56ecae6422579852567f90cc90e4ef6d6f71d1 858270205477e221018a375ca83c572b3f972c5181d180b9a4ed08492497babf 4c4296fb4d93a43f689e296f664727b4f4e34be908ea67e0ae69d9cff26ec874 d99b880fd505a1343d3631f8506b38f254c2fb35daff445581af98eff2fb1063 fdf44f29036aa511b2cddc65220f60ae4fe9f5c3b591fb108821eeda236d5f0f 08f4b5eaeb3310b442329dc30671fb08bbb92992450500e98e582043b787fb55 cff8ac0161f1cec7e564c40f50225a26b91fa1e1ec76826dc4155ca02938105f d64074c26f9b88ac1593f3bb982e5aa2c9bd248a14c2f76ed76b6d536eb0b804 91b236139a8ed5b0f374a32c4dd6ce96fb8baecc3367ec2ac0b74cbc55823c7c 5bbb7e4709189990fe91231c7eac420db71f1b813435e1294131fc52ba25e21c 499ab94fb249b70e2c3662cf56f1ce586185694c042bc8c5256934d67d390c3e bfd7dd16167e94a32e43fa282c18245f4666bb6e51274e29b5dac2d00a8b6263 901f69dcec66928672af8e7a51e4ada76b77a4f4cb045de264ed48a5c7478572 1420f8b7648a2177a29e903fe3684393d7a251517127d857fd4d3658963d2811 263092e6d86db40fbb901c5df64c1dea654796c520191ae2d86d72328a2a99af 87086b2eaddf45a2bdb51cf4ce2e131566bfe40df463fe00e08d3269723e2bcf 102354049f322303f2f239fa6a42d0bce955979258aa6b1ac7dd2f08383e2b06 7f0703c7dabc209cfc6c714f5905a7e3e320ed11e7628095743b7726a18ed244 474476758915d35dd733be3bb3b7a835064a99e5e85baefb914bf409d8bd1e3c 5077b379b6c4a17eb9a029ab6459a16f54625847331b52a8ad5e5a138bc29ab3 c44aca65efd806d45fa242d9e660c3f657b423d82a11faf14864c7247d9035cb c2abd8a5262aaf8b4305bbb9ff07650661a7b4ab89d8cd744d8f5c5a6a02b80c bf883ab34f6e5c15cfd72a2faabdbe2d937c222863ea5361c9de43cdfbaabf7a ffcde3dc5252bfa3df51f38d35150065d2a3b742788524ede57ef457aabd0bbd 35cc4a4133b012882ad1854383aeac466b08d37611f8aee00b7fbc0430fc4ff4 b6bb5243e775e06e20f52dab438bdcefb765df264b498739b7800ec6f94aa85e 400f30c63ec3a4bdcb2980228b9c3a91607ed7b4724a04d5d75f7832383288ba 7774a022d7577ce889406d64d513157ce241aaed96afdad92df9784fe99f2d42 0bb330647abfee8e80338b36272237caf2fe512fe71fb3afbaa48ee80bda80ed 60f51a1b4a3bab62eef878fee7864127ee3cedd7162bb10d981f51ab56a28f42 a6b512dbc697080b531fc406342bc2a748317a348e72929ca7145260df68d402 904d82e5e27364ac1b7ad307ad69863d48bccc65803d214270cec8d3ae761760 84a82248767e534011f4b299ec8fba9576a1b9ab09668524a9cfca20b64dac3c 6ff4bff0c730ce0a893b12b39eb201628083bd51023e7bc1e1633db04d66b129 676558e8aa4593e50ea8ded311b6f13ebe2c006a7d0ce8a53f9ca66d6be783d2 f8c6a98901720cb786a2c86d81afbc5e7543cd497a5703255dbcb70fbba8b740 f1f51b0cb3a44dea17bc6b42ec97af2cad9f8bfb31f130fffd7ca2e518018116 b266fdb68461a035761b7da56f25c250df0724bd15cf76f4eab3aec684730a85 e39e1927f3653fe1daf48a36fc4adb355377f3fe0af8cf8f2c4265fc8ae41a2f fc12d09f51e15889cc9e461e7042e8f468daa880a1c93029c04c5ab4eae7745d 3d1c7cf35d8182ae5f7f82058e1089385c8905c16bf25a797c1cfaa38adf1b17 789cdc0ca618c6e593ad3c64d13285cff7df05e9e579cf7ae64507c57f087a4f fe4843d1349ff459ee77f06c7d1358b32a651aef988ec5245a9416149d2ad0c4 bf02b0624ff507fb9980907fa75277c42142055c247190eb5a659ed0a07acae8 343df505e9e69d13ae884b92e3e471e5a52f66389db728a1d4c396750259502d 5ff1a36a02c6d598afc27c28eccecd86e1638ba2726c2aea8b8d4b45cc5189be 70bdfee4673f44e046df6be91a5167ad88145f223105218b3f4b6133ed4a7fc0 a057c3bb57c64a4d71ecc062149bd43b58fb170d650833d55b81c41b3e84425f eb0823a64ab1d84bd56d484e4dd566e9b61f0dc1f74cb97c51143169469f9c5b ce9bf979bb642d5131cbd48e3737c147958892f08b2a77338b67b77b97ec1245 a3bdf854858cdbb8a6f95489ac5124de54c1c900c0af3eabbe5dbdf58bff1d1b 9f081a2777d362ee56eebccd0c5fede86781bf1aa7cc6e7763114a0c8e6b77e7 28fe81aea33cbbe127881b1ea27cb95efaa3fc9c258b2365f838d1e34a20b21d 86c945afdd95be3355250a746d8bd58cf256f9e2341ddbe205957d7fe5d7170c 468a222a93c97ae5e77f83b0d9f2953b15ede1a83427d2cad9fee9c852fd0481 cea19fd5d6142470dca3fed5b69a17baf3d17f475eaab0d887a931b63347ddad 9d4e9cbbe716e203b64b4e7d159bda8eb3ec02a5e3afd26f3a741cfdaea9420e a544cefda354b0369c38f0a11390bc04d9490dfa4a0a0c4ca3e7bdbf277170fd 5c06a7bc91f18c4ea54f126a1eb30518c4ffe22233b5c607b7d03385512d1ffa ad8d8844dac1b31932db3761ed14c6042979347fb54940908970e0e2ca6cf309 1a42d47e7034012bdb477440c27032a476e10ef3dd0a4c2a6c6f291d173f7729 e4f51cd46463f3a4486b727d35f1774c89bc04321b754443dfdfab43da1e2a98 463e7843d4e39b9c3dd9ed29be57c9031c94067f50eee814f26dcca2a3b46852 2686452e9d30691ee78fae8035c7a2729c2cc6f2abf4d3b9c77d62a917e1d5e4 b896b1dd2d4c37c510b20c5170b98b174f4dae5895699869956ae740089a2a6f a796272f46a81eab422c3619bba5d6a5fa9aafdb54934c9e508e83676203e366 36680e9f9c4a90bcc0d8078a83084297be59b7ac3e519704530ad27d7254a19f cb07187ea702fc585faed2d9e42188ed54be5fe1c4a5920d627d51eaa7dd8291 1c28166bc21ba1fb9c63224afd0e8cff6bc9e852e44aba445ff937997cb084d5 6d8ea6f038e0efe68f0dcfbc00ecffbeb45c37058cf61373e4f07ef60a7eaf25 6bdde6ddb81ee561f914d833e246c280fa7e8bbe6a483124927b4b43dffb4ee8 cc7def65dd8488fc590cf2c704d966a2505cfaa728ae180b3f09208ac135ff65 cb8c529cf2f2218f608012d36115fe3ffa931f08914d193cd8ea943ff0af847a 07629157b3340db418033fa828feb00661c3399610cf016b1d1ceadafe96d075 d0e345a76f2eeaa3e3c0349f312bcb0bea63ce1fb72efd84b76326e2c5c9e2cb 8ea59bf9bc55caca88a08c1ae60c323aac8e031026f269cbdcf752ea5b62f210 0001a28d12571cddd671c9d321a2a4affdce1c2160c31cc55a5c9ede53256cea 4efcbc88c659788c4555a794615d7484ce471ddea1692c1bfb315d1a93737411 6655bd88c50043760b87db1c87cc34d8cb545c7eb02c5ae32d6f10418dc47d34 420a41cfe59244a2b73648f12623b524b95136c814d6c92e8c5ff6b01a9fd77b 2e149e0344a3380ce2a03ed536b623b40f9564187e2cdfa963cc9c31b636eb02 1517dae477548dc7e45674e223038366ca2f8cabb24cf74f1929357c50c641a1 2634db931aab27b57f82aeb64db1defe37650531a51ad91c0064fdda575ff3dc 68b91016c2764c31e6e9e68ec77f2610c8b18e4b66b245c35420318fa580a25a b069c2d02819ce79e52ad0500840ede01d685a8cc369a61444f814b444c3d958 6efb19709b2f61969ede2957b4826e1564cf28af08220ed3ca1f14505e809461 25e62fbbe90ab572bafafd9dcc3e585dbc578bd3339697cd0754f65e88763b76 1415ac2fc3592362656bdbaae5ba2d4f1c3cc633cf2ea752be7e6a0227dd6494 db0328eb69dfe7ded70c45bba44972a065fbd9eed21a56d23470c03d9b6dcd90 c2effadd301e6d7a9b4af56a96a52b9fba6e8af2e83da2c3a0debfda264df7c7 0b7652864457d4eef6a01a9a67d3ba9387fcd7bf09415ac6ea273aa8afc2507a 427a9b25ea6d0c92811b29962c31a1c47ef001eaccdebe1c350afcfbcdf97066 0cdd75db270b7272aa3cfbfd08e6dff612a99f1ac4dd69aa8128c4be3dd3b0a6 ac34bd00b705602a50090bdcb758c48915174018d09a2ba09fa25c2c92afdf1e 809b4f8d114def66d8be49323447a53770b4ce97787b8d1b60846a4ab1e4bc4a 5b20e9c02a900dfba03ea1e188a5a9914ec34d856fc08e60fa230d35f32b9969 f906e3f0b55c63e9fbc1f1f5c9df635f60ba92b88dcd1542816658cdda6d6ab5 9861eb7951ae31a7836b2c9409104dbe2170ad4c450338292c27813dedb1c38d 1d541df63e3bddfe2d59fdcbba85cf16d80a349b91123c18510d671b7d4db1c1 511fb4ea69a1c207b425dbacbf087d3c26905427eea1642baad02775e46071ce 2f35eab288283ccdb86cde2948ac3186b208fcccc97f4b60397f67f8f54a140a 99da9d44fb5be2725cc1f29780666427a5779aee9b780a8e2b819a7eb9cd674d 1f3da3f6b99c63670928e6081177a4e9b18e86879f4155000b1e448998cd9654 3aaf1601cf4b2824b729f84b5155debccd19e65c9b8d278fdbcdc8238351b463 6dd8e2a9080696f90e8a839ee7d8f2b826607b9808dae4447ecb7be3b3550ca0 0b1b34f859fa109732c954d442ae4ffb89404afeca317852e3d4affe7872d83b a5252229d07fb91f342798079f7cebe0e250d0eb0b7508234910edcf385850ef 46512d970e3a1d0913482476ab26f9c317adc63df6acc3a95f32ab13b72a0a2f 6ff934d4df28f176e26daa900e11628b3241506150f5fe127082a194544111e9 4d01c31876950e167721be50da6e0c1cc1ded11cd839014cc1ed29227452d7a0 9b8463a63e2bfd782b3e2a5388f847bf8ef53f8cf68b69f1e6214631ad11f0f0 1f4e566238875c426fd456224de7b1ca8c49f9cb9e2b6ee05410d2cc9f67ad64 88ce1b26b8e01cf53bd3c4940090f7f89039278c450719255e3277ec6cd55955 fad21597d2ba2da106ec885f36102f6568eabfc6997f1268daf5c4f7217e0ed7 57e51a7b185ec782892f53a33d6cf4f4897ca9b81daacc1c865d9adb02a08a58 d410059d61cead211e78483cc74d6856f14875eb2391bce3588607fa5f56237e 3cd5755ddd992f70810eff5db7ffb5fed4550fffb36006613f666c17c0e6f19a d45c540d4496dbe0d862919548a7e07345d26c64bddccf0e0c369dce0818f9df c63a8fe3b40fb2788337c4b7e22d6457ad200ed01c070b85d92e34cba868b755 dfff708ae1841fee386eb4786d6d8bdc432808229ba251a8d95d8f6233c33431 77a95034fb12f5dc5195c8f248282874af4a49d134223bae9dc210b9505ecd9c 46d799713e61404ce9da700a311fe0edcaaa31642556fca0b21b522307d14e4f b9032beb5d0d2e1273230f44783f4221c3d37ebf96c2625d9506c6999c16ea11 15ac86f175643643ae6f4a8f88be9cb064671b7d936c737211937a524cc55c4d 9c89ceecaa06f421d95024638d364460d70fe2e39d5701e56ca218a1cb23f225 9793a21da22a629f72580ff6a102c331a8d30a32ad5398ce48aff7ac08cfbf9e e9f182c59bdb4d4c25ecce090412f390686876cc24fe6745bf40ab96e257427a 38d8dc702f227e31f4847807e42ffa37e8ad15518c0183c4ba348d9c3f98044f 77a4b169be578c18616b20b9de1729711eb5c4af7e6b5f1db6fb64a228a6d3db 1d084b5564753a9b256828f500a965e58d3ce88329ae1df1603647bf1d325fc1 44fbdcac60a3e337dc62863b55cebf84cbee193034aab0bffc298f95001886b9 1bde595d916e42fefa847563dab347eab3de90e606218950d250eb0e540dd57a 9872f0114c5a299661636cceb42fee50222a019d2b4c1d6ba9bcc01d2ab5b226 bf74d2c0207ade2b9705b5d963cfdac7a4fb59925d91880db99ea47199c6ea79 d89cbb385f47220d31d1616b2b3d93375331b4106b5dd874e2adff75ad6a8c69 0833cf77ee6332ff2c3617e5bbcb6f054c30036824782b659bbb9b7174401ac3 8bccc4e503354e092fc8c25f170d0dc3f5c1595f14b9b83707b857ac2f8d69fd d5e005b48c6229d9399fd7b07ad40f19e1fa3a25c7ad23439b5749f516cb5320 d25378fddde593e845b809f2af53ed97e61d1028e23b6b719652233f5316513b 7ea5c139825647dee898bd06d792c3b4c69d4185de71cc27c35fce3f5ff5f959 081f98ce7a0b1d0d8993ae5d73ed2df278be43e5691b020575d1c75b4119ee72 a00d5e37974354167739eb20263f3f983223fbe6397f8c4ce4066b668f4ea657 e3f5a8138d5725f642c4dcf5d8e22aca818243c15762426ecc8e69fc864ab7c9 00738e3573223644deaf26ce855461fe1dd0b74140207931c9a0e82215f5e76a 54109567ee7036aa1884deb1a17f66fc4f80b6661c326bee16219414cc555c78 cbc260476d7ef6e38af85a95123849a8f1d3d7fb72183eb05c7ebae3b1962ac0 3f38d0f23fde8297a32471f35b165ef692adc49aeaa224a45ae24436bd955ef9 e966220e2b3d863c1808d7e2305eca62f1738f631756940ac0ed73e4fdb26ca5 3d70d3335a3d652b88e4387feca44322bc3ca32853fea0d545a8a6f536c1e282 9ccb3eeef8669587112f8740ca3119cabeea3770f579f118390016e5c27c6e18 aa0e11936d5c1bf3789b11fa81a6972ec18ae4e5ec390c68f1a87776482575fc 0dbfc4f4d1258b6ee1a6d90f9353a95e0fa7ceee10820ff93d6a1a1882ea7908 d5648c13bfd9a0944e72ec7500e7f24a400a71294827b0aad7f0d2b56211f3da 42d16d25740d8a270422287cbd1309471d37f656db97aab7167509a471b68140 f8c86a7f8e20a4654809a431d90a4be26777730a564bbae2457988770f7499b4 2c115a5a2cbd37214bb90e88afed3b7f6152cd9add29b458f1a7305d61520e9e 020000ea8e1757f8dcca5afcdf22ea5aeb4230c2133f7303355929a495cff1a1 b8c6a892652c4c6e8d47f68ac6c964c677ccb5584c8128a720e0816b5b43b411 3f87ef5dde66886b1cc0824d4731190655a6e26d52d1fd01033a4a27c2ff6960 58037d87ce859ef43951c1e52113ac0eaf416d511ab2cfb898c0df209bd0da21 0569e0fa75de65344e82ef5e12998422919e3f3e3addfb5c4c9da88750f5abea eaad86cef1f459af4a20ad58e03e24fa186e8cd8a63a131ea74c219372fca27a c5b859eeff2f30e9cfa8a458ae3faa63144b11196807acfbaab04d4c0e60ad49 d0fb9adab277916b7f3d31cc70859c5b9346cb515084b9ce113966aea37b7279 0dc9a5978da21b7ca3587fe2003d274afa0117252175adaf195076725131efcf e4bf1da8dbec08dbf5350d2e9e5d52e478b2c4e7a99c13271a7da98e36ab60b0 21551501992d6c15dd776c9a1024803cd0190a5c47ba05595a1a9ed175fb0e90 240c2122bf7851070ac2f25bc18f29582cfc80831a8aa60f6bde4aaae69b719a 42ca010c6206f6d4bccf365d00054fc72d00245f1298fe25ca631ff1f315d71e 7798e9a34b1daac046398204a383cb39078b8fcc1ac349256b3eb71288fb703c 32038228104bf8cc948d571240a75934c1f1c5223c7e854dc72ea7fd8bbfe6ae 411b8b323da7b65411382f345b06f4611cbc670ad64ab84c76eb05f472067668 f2405094baf9485e3f2b02ed7d6848ea10718e7e3ed324d97c04bd143c19a34b 7ecedb6ac7f97e57c84734e5765b553daf9e37d0876eea2a63940f5afa943e12 d231f4429933cc951aa517681f5382d08d86f02aa2f3b873a964139b386a0faf 7f413dc36dbe990330261e765bc14dd660c8d3ece03a8a91ebb0cc93edcdb64f 02d7d2ab2329687d55a3d2c6e5846f4041c634a34aada038226eb770bb51e91e c48ba73cd958f67bd09780029989dbe112de70d38068fcf212e6ccd745b566ff de3f2286cb18c448ed3a085487e3330d2d98d626482416a94683593d4fa0789f 3b3bc8451a9dde29791ec5fc845286bb7b793586d19f1561f864936bde37b8f9 4aee3a8a0c866c4ba3e875988c98f98aaf805089dde93bee21ffd6d218637c44 ff1a24ba68b17a97498b9447386756f62b7d51ea8c419607fe89b25749064679 5ce875b99070c5240071cc117a8564fa6461b2cc78b30fcb191ba2e1f02bacc2 99ce8d539f1e87590c8fb6fb718775bfcefd17943f7543dfda767ff2227b9d26 389febe3db1e257a7d47b3a84e95dd827b5b870db5aa7d6d92411a3e59ddde04 b9b0c3ae001f18018021fe06f629eeb84c916d5670a37e435c7427ad49f992c8 2357a6c87c9d40fe4a5b4a0543c0b015c4ef1ccfa984cac1ccff45038d2faaff fd0efaf02d4ad5c60016ee70c4790778ceb7d47c5708eaef8a21ae19cf4ab9e7 662f302bcd21f3506ee757682aaa417493b7abafd881eb776bb2d40bb72d0197 577dafdeecb0b10576b9cecab80be0e5638940f51e701c7627dc1afa3c9631ca 9e523ae519c62dbe57670e53c4fb6a3bb5c90c03eca0d2105ae5fff566fdadea 5dfc26e07f274829ab0d420fcb263d815f24fe6271d2848f2e9dfe7d67a07de7 eca76ea225e54c1c2a02208816813a16d58a5d8aae6f29b69c94eafb342311b8 6b2a3120e77aa6b956ba8f433efddbd0cbbf7626449e97cad12ffc834490d145 bf6770bd4ba97d6f63beb2648d1d291d480334f462a10b1499119247e8b63666 63996525cffa6b6f5d0861ca39751720822f8cf2c5834ed960f49f5704dd8353 cfc9c908e7d4ec76a37d66c9527841757b238591259c561b05de25559e4a648e f905f6ac5ee1ae5c1649d64e25baa0096d28b6d196728601a804f5acd21b4195 f4f66c7d9aa5441a30bbe8f8a2e25ebc3e9a8ce1bbf81d4b18f95b1cef57e5ed 5cf69b4e18566cf7834ae5d22c7180a1515806e8cab11c2b3de0de2b1b06f0a1 05a481d834052c7128a5805c06339e594f852d048b98766230e3882facfc13c2 7974362ea34a6e84d78d0dd984b2bc0889107af48867e4e7b962d377c6ab9711 b39e7db4793186797578503cc58afca17b00cd9a4be30bf8d4d30aabddc2f62c ab39042b5b8c732dbeaa76e1cbb7f3ce0fe4656d8233059737bddb25d2ba348c e26e13d658c15a995ab6d1ee30a21ecffe3784f4616f7a4fda7264f44dfe0217 edbf9b8719d06f3df9ebe927e46f708305664a40316ef0b765151e7254231218 8a284fbfee39af586b30e5878f89c4b693e8597be6f1c277557666e4a38f2062 950a4174dbe1a33944df34cc4696fd49928bbfcac990dc6d64f1236e9f23a981 377ca608aa7659d7140673d690dc9fd9fc4ed3e29374206c348e20ce3eefa9ba 91a31d636e502a8522795b2d21ef0925189f9d9ce0ce66efe57d3bd22c5563c4 9110476f8929c317a2e45a4eb71eb636ed7c50f84fa8cc8433be9e92ccef6e18 23844103a2f6e865f1225f803e527d31e1d1ed6915258bdfc87d8b49f6336d8b 7a9eee3c552b361781f21d69d154dc06788e21853194cee11947913557104284 d8180da1e681ba2e2943b0695ef27b373a88581c524188aa8f1ebad4ba4a6fe8 4c20d504c683626168f2cdc7cbc928572b327cdc75c71e24d9532469860301b8 9a2faee5accce9ff0b3a8bebf89f88fcccd813d138a5efa238568e7e1e6357b1 6f819789c9c068c068ab4ec10d7c84e96ae4d34cfa8234abaf14aa5e67170ad1 1568f377b73a8785c0c2695f0fe04bfc8e9efb5e1d49dbf5743bed1a3943170c 7e132395d57194ce86f87b7b4933560ad7966f12e7e219d28774f1a5749aa658 3d197c717801fd2f8633e80ad380bab3ffadb2ebf870a89e5c51054b5fb39e4d a3f946da58bc93c0e1cd0beb0e680cb085a389306d4e97d767c3884e2e99844e 74f8848ec18ca4c06a3c747d22329ebf466717d366c844893b9ca3e490ccf73e dfa0037fa08ad47751388e860dc980345592430444b4eb7dda6f00f533339cdc aba5bb5ca7a814320dfe478aecc03ff31c6187962514b4be9e2e6784ca774e1c 3e696768294d7196433ea17a06e6cc72011ef61c6814aa5e116c7a6a2cc71c64 59f2d15eab74be46d7003d8b6fe4e06220ffbde901f4625102e83d53435df3a0 ce490f9aa22f8fd82fec719b7688519cd3a4b8cd13752520e05d23fa9be5561b ddbe61e1d125e50586dc8584edd3b705195d747a08b7a5eae5b41fe5a5c2b77f a34402a9b2e96e072b7c2a2c772b475e77181159ee369431726d62133b481d13 75b90994ea7795870cc272f40947e7981271720bef0a25d46df30492cde8ae3e d278e10cb1f6403ce0c303b08c0247ff89ea7b4f8d2deea028c64266a6bf2207 468a8ef88bf98e1c93fd20533fb7f5135217d4c964d21d7768837f2f89fa1b5a 30bf31af748939f448c0d5dc650c8dfda0d4a52aad5a202e267a9b3371d48376 797b84ac98436fa4ee0a7cb39801574907851bbb4347fdae024af7336f012bd2 8fe08be0b3973ac3f0ab5e9ab15c33a6c9f8b280566a5c797c16684d1c243ea0 ad70176f63fa9220655d195fb954f3845845831a1d12a6265ae564be154cfca2 e7f3567ff011ed69dea13147b9509c17ecf59724f3af947a0730395e5f3876b6 5961efc514ddcccd7d3da3f5b270e29d0e5eede54fb30e8913c6b321a22bc026 c0889819a1109a8e9c9f9699552714e39a35cd47b66247388faed19f12ab6edd a9f2a12a01df24cdb18b97ca22175b69e7e4a40aed3e5cbc797a19db4f79fa14 12cd6c6875cf1efa521d2c7df86287aaa967da0afca5ae34592bb9fce727c3cf 44d5c3219f385193de11d78d7cef5be6a14a683ddbed58f2b635b06b0a3679e9 40648fae50b30f61c9f90d161a90603760b32d304b3447cb155117780b649a93 d4f94f8e87e0833c878217e959ae8be17fe0792df5aba4ef4f6546c257e35bb4 ef72a9987b121278c2564dbe22f2fe8f4ff65630d6363f61c78aac6551dc2659 9e927030a1f2a13f9723f556e7a56bf2679ba6241ce000ed83c9868f763f2cd8 8b0adc5121bd5b143a5b9cb2f91a273dcec79e936e93dfa7d85739e538cb2ebb 0c3892d3bb24697f5dd81c3ee3e3de50086ecdb0fc1b33ffea565c9f3c8305a4 347cfc147698d5e5f15a906ca4500523779c4de2964dd30b9230fc12c3d37cb7 835439ca5e7cb95cdda9c78ca4bfb8d908165ebe62cb05e9001ce83035844a10 ab9b7004d5919d2164cf5055c0ecd3fb452f0c460c197bb4bea77253ee98d093 9378af58167dbd636bf253d24c9394b61008d1c7a49a0fb5062e4228ca47a6db 82dfc42517a90b0cec38e62083ac86e193904a72c3cb0f88fa61fc47975a142e 3b81aee828e3c79a2c46e02dead13afd37ea8d01d4769ea8c3063c7dff35b57b daeebf831aa934150515bbb3cacff9c5539df9c5971dfccb014f098f1b5978ea 3ff254d1eab2abdee199263b0570185b454397ccab009c572f30ce4a01dcc320 ea54e05b72e54d957770eb16ad8b72cba449650ffd6661112e22ad612b6a1d0c 334e7240b87cd6f8d5c7a39ac6ad6c89d4e84f6fa1e52a3b15badddf52650380 9b480fbea5c9be7e82b24d557854e8336c3a9ff89d7bd535f55be34d09e9fa8f 5476924445ee04d5b0d59d147477dc129cea5a901e5386a860d06bef06bdc8ed 93f6f264c37361d9374ace8572fec10291e7e3c2b73ff6d4a6c591dd9af9eafc 5dcce8e57f9d5d3a485297f6a679cac7e2dd32684944b552e223ac3a50ddb119 1bab57f179a8f4e71c5b5e5ec8879e7c8e6a7036e072ec25288a8de74599c128 35ba54cd35a54e7cfa4c9fc48f28beb9916378df3a067fb8480ae2b568440bc6 c6bfeda5c5db29f745983a1c308eb0c1d4528e25de7b5bc5fd9d7be738842c58 25f89ef09a9bff9c020732f4052b3a3a9ed1d0ba894c5fc88210a8fead2ca3c2 5f89047ff7c122fb68e5405d77f7fe985f483e98c77ebdbabae7ce27af4a2c40 645d277de4a3b832a960dd797ab67bef158ed4cc2f84daff614ffe6be8800f6f 5b3e9b8eb5e224fcf3ff01ecf6aa26c792725ca48374906a26edce14504cb5ac 262bb12f0bff519170216edcb7914d34152d63660ac672b5173085b7e277d0ef 2919eb18b528e72188288603f54dce49416ce6e13c943e8d02874e4c8bfd9992 60694192705436b1cb38f4b82e4a6062209e7ea99c2afdc28e1ec6d2b70038d0 1120d964dc10bd06a60424c721ca0b60f7debb47dc0228c8f2d5c7b4c0657b64 fd5cd608ccc210711b631ad068b424ed627502cca2c70380bff5e2440720686c f492b9328f3684df26f762bea9218f3baccc82534ca520d6d98a2aead388bd0b 963fbdcf1f6d50c9b8a522b5ba477d13476c346c391bc7a68d08a6797f901eed dbb73240d3712886b6e6d56abfcb54e6c95544daf6d1302c40e667cd3b3349a0 8073c0210fa61418e92a79422c5c0d418079a61ab8102f554c03152c03efd17b 9624a3ff0dbd7285924ed9dcd25bf3684dbbb16e78822d6a0b2621d419d1dbf5 d310e8e87bd0249690c0349fe3539699401ad78b10a1c0c12c2193bfde5cb477 9dd11c1d81bc5c540dfd9bb28b94cd535a22495f3322cd614e212ba8cc125e09 ab1e4e679697f15a89a73bbce8d6952cf976f82153b60b94ab6d0f59d891435e 9e1e149474aa238e01928fe1be1acefd7da3d5cccd7677801692f23a03dfa6d9 2010d46b56bca17860767d78913319fc17ff7974fad5c2b3ab8d3d160de068fd 853d1b5dcd1f4f199a9f6f8c0d420f34fe904e55c72dc02600ff4d70dcf33d12 bd8bafeb55a0301b269d3b490917dc4b1f431ab581306d543561bd67372632e4 f006996ffd2e19d02c7dff5b76ff11766dca2c2461df379e8e97711be33dbc07 5f982b291cf000376b8de91cfba457469ee1fff14f50c9a26a0ed582ffec1408 1aeee7dea9a6b94227a74d2445bc2e8236dbc7e2e892c072b0afe315f6c0d3f3 55af3bc2c68567ef83c0d39a35b4780517f568608c1928df93a73902a1433936 d636b512fc5186c5080973212f044fe81c11dded6c67891ae045e4e9560adff4 f5daf08ae1c37b437a15c0209cd2458a0b698920dd32124afd4c5bb1eebe17c8 f860a3c4dc2d7502992573ffd3a3de1f3bcc373dd653913379db29e8ec40c46c 2b6b5e274452f74db479289e095c0fc059f1468ff440bcd0b18eb1b5483ab764 05a3d80a2daca41ba3a315bc36c51c5b626649ba84524dd4ae87ffa87164cd91 7516f821320edc5ca3092e535257cf231e86369e718a99f82688618e36109d33 28b345ff68c874fe393973888beb4ea259820ddd1213aa511ec09518d37192de d7005759b1ee3aaa74cd576efb47a95ae011a88a774b1744a31ffe7bf5a9b117 ff29ac55be6d18cd5a51f2dc51f1b9f25ea92298c9b19c11928d2f74aec9451f c9bb2e8b1e5a955065f3566d2ecdfe91f3d9206045577ec34ed0ccc11c4cb62e bb3adda82bd1ace6f70b606f8f79f4e47b29e708830a32cafe8aa79e21c54bfe e2a32889fcfbba02927998bb49548bc7871b10824fc34604d533975d7266a5aa 6386f7601a9b22ce1fc74b05f4a1f7b8ecef41961ab3ee59a3e21919a926255c bf10d57383e8e7110ff4eb04796265b31144101e62fd98866938df7fc059cbdd 26cd629814b7009eeb7b39fbd6d2b26bda427be13fa0b7f5fa921d50f9b80c41 364f4e2da531b820e5ed5f6537976db3858a43e1e1779c633e8d0e2a68520fa2 9e4c7b86d60d81439b9903d4cf6f7cf3f11cfb580b91965cbc904dc175b9ae0f f01957a2ea10c5c5ef1ad43a4c211a134d0dbc7e3e3add0c6554f7f174613c85 1267b02cf5a2a3c7c62dae1f2aed996263ae4ff8334abd637794fbbf91bfcef7 3339014f1f9258a2ee61497822dab1c96fc30dbbf9d476e4caaf8b6c9b5bbff1 bbb2d4490f9b8c5b6bfc80a6e6cc5b80382a9c507dc24a6b0792f83bbfdb0aeb 06695ec119db913ec792f280ca9bcfab02aee1246cc6588d8e4be81a2b0dcfbe e58f9a82965bfe291325aae8beca7abdb2ab66556180ee727909a27082b2937d fc533a3a0b5015a9136531e8be14a76532af69a721c5ef321c9dbacd21461fc2 e0f29d25bcef5cb9079e19f1a679d8a342d9cd58795a01c785495c2c1c2a4ee9 2df1a7c3180bfc1df622a4eb1c138b5711539cef483c2932e869a87a8b94c81e caf3c8a381ccf7b97ab2f5419383e8704fe181dc15bf9ce3851c1d9e6691f1d7 8e0218cdafe41cec4e19ddb60faa1c3e5b4d81bae5e1cfd9c520f2c9dbea9c89 8b0fec6b3cb7d287274051b431bfa5cca0cee0cd2bbeb8d84fd0bee76e9b76a4 3b7bcbca069465cc1e22124ea46c30b83e865d16a67d171ce75a09514b048bcf 444162829ddef86aa9a1228ab4520d5655859586cb31bc966109cabbfa52454b d423a1ab985aedbbd9e1ff60769d5e59737f36ad1a0beef5a395567bcb7fff8a 828dc31d29f2ee610645cb141871777b056bdcd485c96ad4d5f8abac0c84d939 5cc2af817f34f782da3fc4fe5255f385fc605e13ca29a9cf0920738dfb5fb55f a87de9e7314067f997448d91e40956dc82111360cdb4b8c03ec8c24f6b9916be 177ee5625f36a833ae6984ca2435c7b645507cc30524a605d6e41058ecf4a2ea 2b30892653a54f116019f09914042fc73922802736899f6f0ecd6df33ad1be7c 4e35144532290c685fae470fb00197c7fa667daf592740f794a9fba4e6a7ed6c 58e2302509d3ea8dd50cba6b47ebb1972ffa7cfffd70b6187c77c3c06f4900a9 2f82fbd8461bf9c8cfe28d5b13a72b08f88fa0f7fc4e04a447b5143f6b2d64c5 be7203f9854fc07c2f9b09244e67333ba302a3c52929e46bcbb7756e1016e661 ddc256bb9db4b4b176e9e07d41f7fe34cca8437a4e0604d54463c1f835e0800e af21b9fbf1fe476ee6da697ddbddca3dc6b8750c2b62d48ee2c7417c86fe6cb5 592ec7a48b8eb7feb5956db6dfe0bfd7a0d1c8379df2b931673b50c94963cf86 4f733c22bc405389dc194288706b1c9c106788210a64314c6aa86062667436c8 b71603c55055cc16720ea753133931a73afe71f8eea3191b809aa3f0a3f13151 5a8946741e22cdacb220711cc7e7b8cd2d5f0b685952dc5febabf272fdcf9eb6 7db485353fd4c7f399165ec7d4a608adebe5f14f823cfe95a7e884c6c9597ebf 3d47cb73423460cc7c2d9309be39f12420954408a4075e2e9a1700d8e9e8c73e ad2c6ac7ec13f24af5529a6438e06e5b7553a7f7d43a6802aac68cd7616594c6 499d76fd462b1a343cbef1b9b2a710f7c51f07b7f5d07453f4a40c91b40a8587 dbbfcae3b27f2185ecbe0193c6354b4e7eb850e4ab15243af9b99482c15b302d c2b95beebec8801f0c4ec93da91a19675929431dd37cc562342ea3fd57dee74b 2fbbf4dfcce38673370bc2737739afc6676dfceccba6f18637cc9cee05772eae c894917a6ca925c23d93466d718d975c0c23fed5dd7675e719176fa63d848a33 345971c3dadbfb2baed4050424307747b212474144283d48caecef5ebbaf064a 6f0b77ca7e9146688e5a548da191b6ebaacc1ac60b56b4aaba79722a8966c174 82d9f8f107574c6fb955138721550c6816b4e444e88bbc21e43a15d876b97002 05a027c2bb2038a194f5e213f3735dfb819e08bf18566e9a76cf1b99b419a50d b2de162b944d826d307965bc72250d3c59254c177de1a03969b6bc5f6a65246b 1d4844507d2b452fe9171d4456d5732eb2f1af321be225608490f1df16fff625 c0961a60452685d2f31da956885ae6271a45eed90994052bcadf68a0fb3627fc 92229ea8eb114cf2fb3ed70ad4301bbe63d3f0d7852c0aa519189fb5ef819a7a 74cfd3d7c2123dfed8d2909c993d2a3230d89289121160512b09dbb130959d7a 51015ee4cb46a5eddf802b16b28126043c78ac4f493196cab2a11961d3ddb31f 018d2ef5fe8378510117253f12c3f4c294d2b27701951bd9c68075aba9169594 409d6a9ffb09db17eb063109667bdcea6477136d8694e00bd3fc70e06b994b65 bdb8ee0723b47ed1011bd2e52c6c8c576e3e520807d100f6f9a2c4b3d5c64302 d6217313b54d33536d9a048e0130e6de53d57104846173a50ae5687db0b7d179 57013f65d9328aaa9f5255e919da6f7e4c0fecd7b55b64a0da375b509992ca34 2a3947461916a8fc8cfad2cc08297519aff24b9cff264513d322ef1db7e524ad 82e6ecf097d72edd0aebdd13a10ed8197cafd175beea809d83eed2f01b40ae9d 3186629a5972565bde1d9b978ec3797f3cff9219e8b81263aed6bfc62000f58e 32c29f1f2b7bff4d0f5ce6b371ac19410f0753f49743785acd6b0e01ad7373d6 f841e2ed0c395e9a0ff0c6cab2ac9d3296ee6465efe4bd337321f531b40564ae 096ecd353ed0451904c2e4879a35fc5f6b29455a5fa6ab6716b019ba3067f52b 47b28f65af13491c12a13d09885c5e79da57b3b63a5a0b67779494c829105819 07eda366d4b3f83af40ce5d9a2185a34bef7808ee1889309665b006b9f9d4c0f 5ad778cc2d8ed36a9d249edf6cf88138a7bd85877ef8488dcd8780a832f2e452 77af54c3d157aefc7e0a36880a435f2c08e70c7e1930ab87953b06279554c764 35bd1356e13b3ca66298b6c6d05a76a684e62cffb982cfaa64e540d772aa6522 2deeeac479c7cab2be2818d0b26fcf727eb030267a1e5ac0cea4f974384a457c e30049a8b78a80991c81acfd26f4fe5809132b4206bd582b94ecb883601d7508 1979a10178b46c084f31504b48817b9857fee79e96544b1b1afb6d10487736e0 35085771f9bc01ac1e3331823ab4d2b43a9e5d 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR17 %!PS-AdobeFont-1.1: CMR17 1.0 %%CreationDate: 1991 Aug 20 16:38:24 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR17) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR17 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 65 /A put dup 76 /L put dup 77 /M put dup 80 /P put dup 83 /S put dup 97 /a put dup 99 /c put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 120 /x put readonly def /FontBBox{-33 -250 945 749}readonly def /UniqueXX 5000795 def currentdict end currentfile eexec 9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0 0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3 79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3 2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8 b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d 823385fe55f3402d557fd3b4486be356c29c3aec91ef17f5d31183b1e489f1fa 559a6693fbdd04d4f7e99886d8cb7cca13d4aa9ceb34a708af22e69ccef0e504 c3997075243585edf60b6447c8d01cffb04b6e3ddbaa7da5891286861322a795 e9d990fd56af2f5c2b35801a0b07874e4ac3170481d232e150443253c92a8b05 513d4a4154a99d91f629ccd30376500f5d16aaa9b203bad6350e4b19424c0e33 75f2949bc1927a6f6221252f8a96618e646aa1b0810753c98becc26b37837775 24bca72b818d314074c1c91f4e1f4148d3d703d12d179ee6970bd55d04aa9a9d 97f63f2c7dbd129ec2ed3ba5f8080270ea5854ea165dbcc061e2f47f1aaf0997 2ac9a689a2a9620b91b53f6b5092884372f5f7afca495f331138d85a97c5bb83 d8072dc88010fc89108b60bc06d4f93c722e8908d7ce3c1ea3c70e9e65edd769 7db17ce0e012ad37d4030f33d30a73fd655b7a2e572f3378ac933dd75082f2f1 68702be19bc60cef6bd5f0ada180d21408c04b7f7db9b6dbaefe09e809a80ddf a5366d10930d3e68ca53e4721ff525853f4c784f2c2c3aa0129a34d9df00debc ae4037e4c0fbdce3989f35964b4c07e7817b805bfe8c15f0c0ebf226cff606b6 2954f0f42dff8c214a6537ab666d25389c44db7b5866440bbfc137712bcdcc89 c68cd1adfd85648b1ed29bfb45a564b02172137feef782d604e0d7e1f1737c96 719cca9e4b9dfdc87e5999b886a15ac572183dfafd8c4176cd98430c204d4e7c e989e1dea814d3088a21d9ae6c5fe7ab3d399b2982fd605e65509a8ed6790c21 a08a23e53dbe70f676d0e7b2e8261b092dc3415ac785635d133d309ac670c0c5 5868fd863ce42542ff1e83e1fa20a7a0e5d680dec3a22700f7f48d2582b8411d 757d17ab7530ceec0c6727c6a80f2493196b0b36e727bd665f843b31b2027ac4 7e0ebf292120a957985e5e31c0b1a8f408ef10eda7a3177b6dfebe5402406e0a 7fb02b60a9d640ba12ecae0b532c4b1c0b350876aeaedcacff2cab4d0c4d8aef 9848962d8e388f36d3f5bda7f07b185d6ae203d2add25584e9cf1df003388592 1a1213ff9755e8508a4a3c94a89488f626b737685edfdc3f1ce71000fff21045 2750ced8499b524c02df7888dedf1bd645de3ef2f081f15cf7fb083d6697cd6b 298abfdb7429e1ea10b78f7ef08664903a3c6cd8f4e3a05f05b0f2da001d7031 81f32e356f21c40b3e833cbf5c4367f69500c51b07ab096f0ae562cf086be398 7a69f19dbc4483233799bfbebaf2b760c03c3c1feb1d0fc7309cee2e593598a2 88ac78136216fc77ae13db65cfe5828bca1af569d4c9b0d05390a6343a06c107 21f2155d29360423affe51f703711f46279735fe5b059feee3d107bafce80953 fc0113fad7835abd13787c3147b872fe1de1bf908c260db16593d764b35fa2dd 1bd3b0a070551fcecc9c1e1b042b0171a90d7b7469c96eea1ad7dfb38b50d784 96e8f02b328d7ac4e82000785546ac278c422a8353ea7b3693ca2d6bce6e925c 3688e4d382ed107fc4d9fdd8dc26d9f03314724e1df788310e6d24b353f9bb2e 66ee05984312312ee32d919387a96888ffa4138b5c9faded7f7cdb800da1e285 0d2fbbbaa4c9df6aca6fe0903880461080e5bbfef89c6d55ae48d479695bfb20 d502cac1a9d65f40c1d17ba98c11f7ae801ecf1b57a09364b83ecc97144579cb 24f018299e2deb6f6a2bae8c4eac7bae87c62643f5ebaa1b469477e36f5c8d00 29dac5a790f310c14763cc194cd902608cb99c88863b7b6aa6bc04aeb59275bb 1d43c2e4e79d3fbba891c60415af38c73240d479795cdf723fa168c4a121aee3 5478f88bdc35dfcf5198b99c2503ebdd65d0f7ca14062e7408b8062e112f6b95 414052697ec2ec516bfe2bbfd9c76870bb7c629c921989b0dcdc6318eb131954 d799add40f4ed64d30a3d980161435288abddcfb2beb32601c97a2cf77127c1b 2c18d53f6c13cfaac9857f495c626c1c6cf5d6b224b36867a9d5f9e490d7abdb d88d2054df2a65656104dcbd9a86e06a07d9dd90486899daaf6d65e12f9b4bf7 507e839b60e61a490b31a2541259095ca0fb5d2900d206f0f65755d16c3f07b5 4c07342e7fa98cafd796bf9810ea3d5054b6e99be231bef2ba9d5487b3b7550f 6663873934e8913ba1e8256410cdf59d8d88cb8d022189627103922b61e2b35a 86cd7ddd7e1922ec48ac91b0e199b469dd7dc1b89762b08346b679807cbccee7 e1e3ed11e83aed16a2986049c7d40ac3d3a8b49c68b534b7f183491117d009b8 85de513ca02a3a5ef21314d9e2393195cf6ab294f6be0534381abab156f1a2f8 9f52db7d1382a61e818a9a005b8c0a79145f4ab586f61a097c10f810de7bd1fb 7a2c794c5df313038f7b2b75452af816e340ee9a689bff08d5e5c8302579805e 492c2b6cbe5d00d4dcae382664790fd5f262825cc0d100d899995c17d6d4e344 8d2980c141abb1177f031e94ab33b80e6a42d4df44c2320861c654a3c483e8c3 87260aeceb7b04a5538d7570cd15e9b9d8b5f9532c6633794cbc259608c98aa0 fd8c737ff9b05fb487d5d593d3e244f25165564ae899a67bde62bae603a71481 97007cb05351566e392b2460db7505067ec8ef5f456723e39c866b29303889a7 f63ef4c5a06019f406cfae7b9817e2973351e41e04aab77040ef1df7fb065149 6d5cd76e704e7534e8471076b6c5c727ac507627ca8aa391605b113ce415811d f5c53596c93454d8ee6234ce7505b6c7cce5e52b94c88706790e47d55d4bb643 d8a417adfcce74ff85f87200a323e12a466b86760ae6ca411da080678aa289e5 8daa2ddad7b597e8672296b1b4bb770c723b22e2c5211b90a72739d2de2aee2b 669d2fb28b21f3a1f7aed728adcd2e3cc3ef268a34a6401d16568ead6a308ea1 793fc6d0d9d5757919e62c77d20505792a1cde9b9269120a76ff28a86265510b 575d3caa09ddb892323195fc144c038553fe89fea07b9d27238f2460f17b8c07 eb6e10428bb64058868c08b32c6d7b3cd11051135c9cde8f5fef8fd1a3f1a0a0 86dc66e52d45fe0242c801e60e803d798d37b60f76fb9ab5b8c1a51218a3873e 5798928525041f5ff47a4b36b1900fdfb90eea333588ca7f3c6872cfa1f90e39 ad6abe72118c19679b153fec935fda00774a81df124be16e18a593faf1c73ce3 441412f7ceaf77e24ef0ed1e28d2acfc369d45fe5c35e4e54970b5985d311d7e a3723d27041b5301ee2773dcaab6137f8884fbba99913e12caa62ae3a52ea1b0 1871a6cacd711d52402fc39886e2488a9f99a3e4ffb595ca7faa4c073837643f 025fa93753db11243b1c43bd858fdb1786f6dec7270fd3fa03b8cf244d99c237 eb9e6b4c3367e8ad83a0f532d37febf41b67346892de210096571d59657721c2 3840a10024df725dec37ff3b99339ba253ab4b706203f4e9214859a5dd8268a4 1342573dda8e9c7e00e808b70735a4e9855782475b83af716e73fb6160be56ad ef8e67e666f34704fa3f13c80ec97b0051dcdae1719c5fa50c1827d14295f49c d322f44bb19b432fc5f3a7aae74d2242a06c5e894d7614f8de9801246c62092a 274e6cc92560483f3d6976f2e7c4f01f334e80700703cd72a59e65d9c853e084 29213a6796b0a83fd32ec390a391067e717f6a36f571b49835b306b04d386601 e33d70b5f1f7365b674fe5eef5eb2a7c23efc7680c91eacf581c29a7f38d3b11 696d1f2975ec62c581202ecb469ee17dc30d6125ff09cbf010c85a883754efc5 e0baed3b614d7c17aa7c62de4291e7a4728a06c7c9f47cce94d0c54bcfa210ea 95401eafc13dd1465d3a0012ab5fe7602fc24c1a8103e5d62383e7063eb02663 8bcfc012cd5fd6278cb40d987da748f8b56609ab424e73949856fd9b5c4abb30 3b0b124fd7fafcaf55b7b1fa494d7db081c6a703b39471696574a1fb75596d91 7bfe40e77bd23755c4470e2fcb38588420f34246cb586b6c35e186113bfebcda 05a0048afa9e0b3c0836560aeb919609ee55bb0e8b814725ad99034249a7726e 5106162f059df31ea01285b317e3de51b4cc9762126e231aa8a5358ad1f51bcf a017f4371d5e0b3dc8474418cdf136e78eeac1e7307f1b83938e785cf22202de 30b5bb05304d20c61340dcdfc2673bc2e3725c9d837ae0f45edaba7ea865b4d5 fd389aa1641adc0c69db7876648a59459bff6d41593da44880c06bd68244bae7 462d6369e16d83dd4ce6df447f4ae8cd7603d37a8a4425403f315669765d79b4 cdf463bf008e390627811cf1d5de154679b1d532e8edd960f2b233707a627f85 9c6795bc5b9377a2d6c6b108b5b392b7ffa799818e5e8839384434ea4df05da8 a4987896988acb01d77c2789af26a2f2ec8b33d2ce221276aee8db176ef58133 4728a762ae72960d15424f228327f3f0031bb6820e16bf217e7f9b714aa7eb77 93fe34bb258f0c348e67dd625278cce8fa02ab15f95b72400a32897a6ace0e39 1963b0534494c342ad3e69f3bb285b4a2cb65123d88fb305f6f6d6347e5e8975 4986dc7c03410bc9fcd9479f70c6e41146a72f63d06e9271e8527322af614862 51177222dcc84e9148a84571fd11e189c87637d8b4b88cd71a10f73a8d40a31d cad6ecf54db1b4696a6a3c11b3fd0b891c6dc9e2da0934a7f8a659850d104dd4 ae696d4e309023d09b7809473902fd583f468242b99c4e6e6b34a8dc4f7d79fa 6dfecb80e0efa69d3f5ecc3a4049a48a8e9c50913b6e204b16ab5afe65c5213d 7494b2ec6a4a18066d1fd3f2952fdcf18b1c866f2573a3d747c22bd067e264a1 c226dd1111eec683674e09f37bb72ce5d7528e865803c3f31daf8a2bd1127563 35cedbd8c9ecd43fc4f72dd5c722d111ac955c78c5170109a8985ba3331b0672 b4025c80e4046162e39446f32d1c47d19a6108a05f8c558300afc4e43d24ac3e 7d10f9838e1e992a1d8eb5f27ff12de023b0e3f7def678acfa7766716bb57d39 a3524d7b69cd9c88f98f539eee9382efd924400583240a658bb8d540958154e7 4ab7e083830cd6e81545bbafc400fec10dc9f01c0fa0eb51ad12300f5e2edb16 588dddde34344038c36f8928ff04606be784e1419b19a264969eb15fb6618ea7 98eba8fe101b4afb1e128f63911c4a2613bf4d0a1e9e9b4472751239a5282bc9 eefb9d70f783c0ca365010c53649a1d4c23196fb1b093134ad2b5276e93ccf76 23a546196060bc63b3c75f6d9a121b0c97ba45d9dac46663c7784f64649a818a 60a7be20e82f951ce7d24151291cc3237cb01fc36217d40556ebf5735e53609a d3c745b6fdf0b2710e66943938bdee3ebde429511c4fde2c728bd33378e7e3e2 75f9acd91bc032e65ef4db7dea4baa837589ebe604299f321253026d7f952809 0ded8f430d0f726a90c26f2dc5358a662c53b36a30bc8c7c52421f42366b4fc0 d2f8ed0d2b38be8e5d99179cb7772abd2c297d25db5d1cbefbeaeddd5dec48d9 f032accfef4387fd4d4af24251c51b477090b691fffb66291d7adbb5ed29ea55 c24b744555982f7d4083f8dd04f795714847a8b5fba7c1d7db21ee598080c926 f47432c6e8671705928fe3c014a69d2f1600cdb1579dae81dbae76f37d1623b4 075c61d9c5152f2a4fb5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (stoplam.dvi) @start /Fa 133[34 1[39 2[45 28 34 35 1[42 42 47 68 21 2[25 42 38 25 38 42 38 38 42 13[47 2[56 2[74 3[32 7[62 19[30 45[{}26 83.022 /CMTI10 rf /Fb 134[51 51 1[51 51 49 38 50 1[46 53 51 62 43 53 1[25 51 53 1[46 52 49 1[51 9[92 3[51 66 1[62 2[82 57 70 47 1[68 71 59 62 69 1[64 68 18[27 1[27 44[{}37 83.022 /CMCSC10 rf /Fc 131[44 2[44 44 44 44 44 44 44 44 1[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 1[44 1[44 1[44 2[44 1[44 1[44 44 44 1[44 44 44 44 44 2[44 44 44 1[44 44 44 44 44 2[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 1[44 44 44 44 44 44 44 2[44 37[{}69 83.022 /CMTT10 rf /Fd 205[45 50[{}1 58.1154 /CMSY7 rf /Fe 150[23 31[29 73[{}2 58.1154 /CMMI7 rf /Ff 167[120 88[{}1 83.022 /CMEX10 rf /Fg 145[42 6[42 42 45[46 5[55 49[65{}6 83.022 /CMSY10 rf /Fh 135[47 2[48 30 39 2[42 6[29 48 5[36 13[49 5[67 4[36 69 65 11[23 23 58[{}15 83.022 /CMMI10 rf /Fi 135[71 97 1[75 52 53 55 1[75 67 75 112 37 2[37 1[67 41 61 75 60 1[65 13[75 100 1[92 2[128 81 6[88 103 97 1[102 10[67 67 67 67 67 67 49[{}33 119.552 /CMBX12 rf /Fj 128[42 3[42 37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25 23 46 42 25 37 46 37 46 42 3[23 1[23 1[62 1[85 62 1[60 46 2[57 65 62 76 52 65 1[30 62 65 54 57 1[60 59 62 3[65 2[23 42 42 42 42 42 42 42 42 42 42 1[23 28 23 65 1[32 32 26[46 46 48 11[{}70 83.022 /CMR10 rf /Fk 135[83 3[61 62 61 1[88 79 88 133 3[43 88 79 1[70 1[70 1[79 13[88 2[108 2[146 99 10[119 65[{}19 172.188 /CMR17 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 742 238 a Fk(Sto)t(c)l(hastic)52 b(programming)f(extension)i (to)e(PLAM)515 503 y Fj(This)40 b(pap)r(er)g(describ)r(es)g(some)g (additions)g(made)h(to)f(the)h(algebraic)d(mo)r(delling)j(language)e (PLAM)h(imple-)515 603 y(men)n(tded)28 b(b)n(y)g(P)f(Barth)h(and)f(A.)i (Bo)r(c)n(kma)n(yr)d([1)o(].)38 b(W)-7 b(e)29 b(will)f(only)f(describ)r (e)h(the)g(extra)f(routines)h(pro)n(vided,)f(for)515 703 y(a)g(list)h(of)f(the)h(capabilities)f(of)h(PLAM,)f(please)g(refer) g(to)h([1)o(].)515 1060 y Fi(1)134 b(Extra)46 b(language)g(constructs) 515 1325 y Fj(As)27 b(sto)r(c)n(hastic)e(programming)g(deals)h(with)h (stages)f(ordered)f(in)i(time,)h(w)n(e)e(need)h(to)f(add)h(supp)r(ort)f (for)g(ordered)515 1425 y(sets.)40 b(All)29 b(sets)f(are)g(already)f (ordered)g(in)i(PLAM)g(but)g(w)n(e)f(add)h(some)f(extra)f(commands)h (to)h(access)e(elemen)n(ts)515 1524 y(based)g(on)g(their)h(p)r (osition.)515 1707 y(In)g(order)f(to)g(demonstrate)h(ho)n(w)f(the)h(c)n (hanges)f(to)h(PLAM)g(w)n(ork,)f(w)n(e)g(presen)n(t)h(a)f(short)g (example)h(tak)n(en)f(from)515 1807 y([3)o(].)515 1989 y(In)f(this)h(example)f(w)n(e)g(are)f(to)h(in)n(v)n(est)g(money)g(in)g (t)n(w)n(o)g(di\013eren)n(t)g(assets)f(to)h(meet)h(a)f(kno)n(wn)g(goal) e(in)j(the)g(future.)515 2089 y(The)k(outcomes)g(of)h(our)f(in)n(v)n (estmen)n(ts)g(are)f(unkno)n(wn,)j(and)e(w)n(e)g(ma)n(y)g(rein)n(v)n (est)g(our)g(money)g(o)n(v)n(er)f(time.)49 b(The)515 2188 y(problem)29 b(is)h(divided)g(in)n(to)f(three)h(p)r(erio)r(ds)f (\(four)h(stages\).)42 b(In)30 b(the)g(\014rst)g(three)f(stages)g(w)n (e)g(in)n(v)n(est)g(or)g(rein)n(v)n(est)515 2288 y(our)g(money)-7 b(,)30 b(and)g(in)g(the)g(fourth)g(w)n(e)g(pa)n(y)f(a)h(p)r(enalt)n(y)f (for)h(not)g(meeting)g(the)g(requiremen)n(t,)g(or)f(get)g(a)h(rew)n (ard)515 2388 y(for)h(exceeding)g(the)i(target.)49 b(W)-7 b(e)32 b(assume)f(that)i(w)n(e)e(ma)n(y)h(in)n(v)n(est)f(our)g(money)h (in)g(sto)r(c)n(ks)f(and)h(b)r(onds.)50 b(After)515 2487 y(eac)n(h)24 b(in)n(v)n(estmen)n(t)h(p)r(erio)r(d)g(the)h(w)n(orld)e (ma)n(y)h(dev)n(elop)f(fa)n(v)n(ourably)f(or)h(unfa)n(v)n(ourably)-7 b(.)35 b(In)25 b(the)h(fa)n(v)n(ourable)d(case,)515 2587 y(one)33 b(SEK)g(in)n(v)n(ested)h(in)g(sto)r(c)n(ks)f(will)h(yield)f (1.25)g(SEK,)g(and)h(one)f(SEK)g(in)n(v)n(ested)h(in)g(b)r(onds)g(will) g(yield)f(1.14)515 2687 y(SEK.)27 b(In)g(the)h(unfa)n(v)n(ourable)e (case,)h(the)h(yields)f(will)h(b)r(e)g(1.06)e(for)i(sto)r(c)n(ks)e(and) i(1.12)e(for)h(b)r(onds.)515 3044 y Fi(2)134 b(Example)46 b(mo)t(del)515 3309 y Fj(With)28 b(the)g(follo)n(wing)f(notation)521 3575 y Fh(I)483 b Fj(Set)28 b(of)f(in)n(v)n(estmen)n(ts)g(\(sto)r(c)n (k,b)r(ond\),)521 3741 y Fh(N)452 b Fj(Num)n(b)r(er)27 b(of)h(in)n(v)n(estmen)n(t)f(o)r(ccasions,)521 3907 y Fh(T)34 b Fj(=)23 b(0)p Fh(::N)k Fg(\000)18 b Fj(1)41 b(Set)28 b(of)f(time-steps,)521 4073 y Fh(G)454 b Fj(Initial)27 b(w)n(ealth,)521 4239 y Fh(H)450 b Fj(T)-7 b(arget)26 b(w)n(ealth)h(at)h(end)g(of)f(horizon,)521 4405 y Fh(b)483 b Fj(Premium)27 b(for)g(exceeding)g(target,)521 4571 y Fh(p)477 b Fj(P)n(enalt)n(y)26 b(for)h(failing)g(to)h(reac)n(h)e (target,)521 4737 y Fh(x)p Fj(\()p Fh(i;)14 b(t)p Fj(\))312 b(Amoun)n(t)27 b(in)n(v)n(ested)g(in)h(asset)f(i)h(at)f(time)h(t,)521 4903 y Fh(s)p Fj(\()p Fh(i;)14 b(t)p Fj(\))320 b(Yield)28 b(of)f(asset)g(i)h(b)r(et)n(w)n(een)f(time)h Fh(t)19 b Fg(\000)f Fj(1)27 b(and)h Fh(t)p Fj(,)521 5069 y Fh(h)471 b Fj(Shortfall,)521 5235 y Fh(u)g Fj(Surplus,)515 5501 y(this)28 b(problem)f(ma)n(y)g(b)r(e)h(form)n(ulated)f(as)p eop %%Page: 2 2 2 1 bop 998 366 a Fj(maximize)82 b Fh(ub)18 b Fg(\000)g Fh(hp;)965 516 y Fj(Sub)5 b(ject)28 b(to)83 b Fh(G)24 b Fj(=)1600 437 y Ff(X)1609 616 y Fe(i)p Fd(2)p Fe(I)1734 516 y Fh(x)p Fj(\()p Fh(i;)14 b Fj(0\))p Fh(;)1438 670 y Ff(X)1447 848 y Fe(i)p Fd(2)p Fe(I)1572 749 y Fh(x)p Fj(\()p Fh(i;)g(t)p Fj(\))23 b(=)1890 670 y Ff(X)1899 848 y Fe(i)p Fd(2)p Fe(I)2024 749 y Fh(s)p Fj(\()p Fh(i;)14 b(t)p Fj(\))p Fh(x)p Fj(\()p Fh(i;)g(t)k Fg(\000)g Fj(1\))p Fh(;)97 b Fg(8)p Fh(t)23 b Fg(2)h Fh(T)29 b Fg(n)18 b(f)p Fj(0)p Fg(g)p Fh(;)1438 902 y Ff(X)1447 1080 y Fe(i)p Fd(2)p Fe(I)1572 981 y Fh(s)p Fj(\()p Fh(i;)c(N)9 b Fj(\))p Fh(x)p Fj(\()p Fh(i;)14 b(N)27 b Fg(\000)18 b Fj(1\))g(+)g Fh(h)h Fg(\000)f Fh(u)k Fj(=)h Fh(H)r(:)515 1389 y Fi(3)134 b(Mo)t(del)45 b(form)l(ulation)i(in)e(PLAM)515 1654 y Fj(When)28 b(w)n(e)f(express)g(this)g(in)h(PLAM)g(the)g(syn)n(tax)e (will)i(b)r(e:)515 2101 y Fc(:-plam.)515 2201 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 2300 y(\045Set)42 b(definitions)515 2400 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 2500 y(set)g (investments.)515 2599 y(set)g(periods.)515 2699 y(set)g(invperiods.) 515 2799 y(set)g(succperiods.)515 2998 y(succperiods\(P\):-)o(pe)o(ri)o (ods)o(\(P)o(\),n)o(ot)o(\(s)o(et_)o(fi)o(rst)o(\(p)o(eri)o(od)o(s,)o (P\)\))o(.)515 3097 y(invperiods\(P\):-p)o(er)o(io)o(ds\()o(P\))o(,no)o (t\()o(se)o(t_l)o(as)o(t\(p)o(er)o(iod)o(s,)o(P\))o(\).)515 3297 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 3396 y(\045Parameter)d (definitions)515 3496 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 3596 y(param)i (initwealth.)515 3695 y(param)g(target.)515 3795 y(param)g(reward.)515 3894 y(param)g(penalty.)515 3994 y(param)g(return:[investmen)o(ts)o (,su)o(cc)o(pe)o(rio)o(ds)o(].)515 4293 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 4393 y(\045Variable)f (definitions)515 4492 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 4592 y(variable)g (above_target:-)e(>=0.)515 4692 y(variable)i(below_target:-)e(>=0.)515 4791 y(variable)i(amtinvest:[inves)o(tme)o(nt)o(s,)o(inv)o(pe)o(rio)o (ds)o(]:-)d(>=0.)515 5190 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 5289 y(\045Time)k (definitions)515 5389 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 5489 y(designate_timese) o(t\()o(pe)o(rio)o(ds)o(\).)515 5588 y(designate_period)o(\(a)o(bo)o (ve_)o(ta)o(rge)o(t,)o(P\))o(:-s)o(et)o(_la)o(st)o(\(pe)o(ri)o(od)o (s,P)o(\).)515 5688 y(designate_period)o(\(b)o(el)o(ow_)o(ta)o(rge)o (t,)o(P\))o(:-s)o(et)o(_la)o(st)o(\(pe)o(ri)o(od)o(s,P)o(\).)2266 6036 y Fj(2)p eop %%Page: 3 3 3 2 bop 515 400 a Fc (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 500 y(\045objective)39 b(function)515 600 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 699 y(objective)h (min:profit:-)863 799 y(penalty*below_tar)o(get)d(-)43 b(reward*above_tar)o(ge)o(t.)515 998 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 1098 y(\045constraints) 515 1197 y (\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045\045)o(\045\045\045)o (\045\045)o(\045\045)o(\045\045\045)o(\045)515 1297 y(subject_to)c (budget:-)863 1397 y(sum\(\(investments\()o(I\),)o(se)o(t_)o(fir)o(st)o (\(pe)o(ri)o(ods)o(,P)o(\)\))o(,am)o(ti)o(nve)o(st)o(\(I)o(,P\))o(\)=)o (ini)o(tw)o(eal)o(th)o(.)515 1596 y(subject_to)g(balance:-)863 1696 y(forall\(\(set_succ\()o(per)o(io)o(ds)o(,PP)o(,P)o(\),n)o(ot)o (\(se)o(t_)o(la)o(st\()o(pe)o(rio)o(ds)o(,P)o(\)\)\))o(,)1081 1795 y(sum\(investments\(I)o(\),)1081 1895 y(return\(I,P\)*amtin)o(ve)o (st\()o(I,)o(PP\))o(-a)o(mti)o(nv)o(es)o(t\(I)o(,P)o(\)\)=)o(0\))o(.) 515 2094 y(subject_to)g(scenario_value:-)863 2194 y (sum\(\(investments\()o(I\),)o(se)o(t_)o(suc)o(c\()o(per)o(io)o(ds,)o (PP)o(,P)o(\),s)o(et)o(_la)o(st)o(\(p)o(eri)o(od)o(s,P)o(\)\))o(,)1256 2293 y(amtinvest\(I,PP\))o(*re)o(tu)o(rn\()o(I,)o(P\)\))1038 2393 y(-above_target+be)o(lo)o(w_)o(tar)o(ge)o(t=t)o(ar)o(get)o(.)515 2934 y Fj(The)25 b(syn)n(tax)g(ma)n(y)g(seem)h(strange)e(at)h(a)h (\014rst)f(glance,)g(a)h(consequence)e(of)i(all)f(statemen)n(ts)h(b)r (eing)f(v)-5 b(alid)26 b(prolog-)515 3033 y(statemen)n(ts.)36 b(It)25 b(do)r(es)g(ho)n(w)n(ev)n(er)e(quite)i(readily)g(relate)f(to)h (other)g(mo)r(delling)g(languages.)34 b(Some)25 b(shortcomings)515 3133 y(of)37 b(PLAM)g(b)r(ecome)g(apparen)n(t.)65 b(One)37 b(ma)n(y)g(not)g(use)g(deriv)n(ed)g(sets)g(directly)g(in)g(parameter)f (and)h(v)-5 b(ariable)515 3233 y(de\014nitions,)43 b(whic)n(h)d(mak)n (es)f(it)h(necessary)e(to)i(in)n(tro)r(duce)f(the)i(sets)e Fc(invperiods)d Fj(and)k Fc(sucperiods)p Fj(.)70 b(All)515 3332 y(statemen)n(ts)27 b(ab)r(o)n(v)n(e)f(are)h(normal)f(PLAM)i (statemen)n(ts)f(describ)r(ed)h(in)f([1])h(except)f(the)h(clauses)515 3574 y Fc(designate_timese)o(t\()o(pe)o(rio)o(ds)o(\).)515 3674 y(designate_period)o(\(a)o(bo)o(ve_)o(ta)o(rge)o(t,)o(P\))o(:-s)o (et)o(_la)o(st)o(\(pe)o(ri)o(od)o(s,P)o(\).)515 3773 y(designate_period)o(\(b)o(el)o(ow_)o(ta)o(rge)o(t,)o(P\))o(:-s)o(et)o (_la)o(st)o(\(pe)o(ri)o(od)o(s,P)o(\).)515 4015 y Fj(The)f(designate)p 1028 4015 25 4 v 29 w(timeset)h(clause)f(states)h(that)f(the)h(set)g(p) r(erio)r(ds)f(is)h(to)f(b)r(e)h(used)g(as)f(the)h(time)g(indexing)f (set.)515 4198 y(The)i(designate)p 1030 4198 V 29 w(p)r(erio)r(d)h (clauses)e(state)i(that)g(the)g(v)-5 b(ariables)28 b Fc(above)p 2698 4198 27 4 v 29 w(target)f Fj(and)j Fc(below)p 3402 4198 V 29 w(target)d Fj(b)r(elong)i(to)515 4298 y(the)f(last)f(time)h(p)r(erio)r(d.)515 4480 y(A)k(v)-5 b(ariable)31 b(or)g(parameter)f(that)j(do)r(es)e(not)h(ha)n(v)n(e)f(an) g(explicit)i(p)r(erio)r(d)f(statemen)n(t)f(asso)r(ciated)g(with)h(it)h (ma)n(y)515 4580 y(inherit)27 b(its)h(p)r(erio)r(d)g(prop)r(ert)n(y)e (from)h(the)h(indexing.)515 4763 y(If)g(it)g(is)f(indexed)h(with)g(a)f (mem)n(b)r(er)h(of)f(the)h(timeset)g(set,)g(it)g(will)g(get)f(the)h(p)r (erio)r(d)g(of)f(that)h(index.)515 4945 y(In)g(addition)f(other)g (indexes)g(ma)n(y)g(b)r(e)h(declares)f(as)f(b)r(elonging)h(to)h(p)r (erio)r(ds)f(b)n(y)g(using)h(the)g(clause)515 5175 y Fc(designate_index_)o(pe)o(ri)o(od\()o(a,)o(b\))515 5405 y Fj(whic)n(h)33 b(states)f(that)h(a)g(v)-5 b(ariable)31 b(indexed)i(b)n(y)g(the)g(set)g(meb)r(er)g(a)g(should)f(ha)n(v)n(e)g (the)h(p)r(erio)r(d)g(b,)h(where)f(b)g(is)g(a)515 5505 y(mem)n(b)r(er)27 b(of)h(the)g(set)f(sp)r(eci\014ed)h(in)g(designate)p 1975 5505 25 4 v 29 w(timeset.)515 5688 y(The)36 b(order)f(of)h (infering)g(p)r(erio)r(ds)g(is)g(as)g(follo)n(ws,)h(if)g(a)f(v)-5 b(ariable)35 b(p)r(erio)r(d)i(is)f(giv)n(en)f(using)h(designate)p 3780 5688 V 29 w(p)r(erio)r(d,)515 5787 y(this)30 b(p)r(erio)r(d)g (will)g(b)r(e)g(used.)44 b(If)30 b(designate)f(p)r(erio)r(d)h(is)g(not) g(giv)n(en)f(for)g(a)h(v)-5 b(ariable,)29 b(eac)n(h)h(index)g(will)g(b) r(e)g(exam-)2266 6036 y(3)p eop %%Page: 4 4 4 3 bop 515 201 a Fj(ined,)34 b(starting)e(with)h(the)g(leftmots)g (index.)51 b(If)33 b(the)g(index)g(has)f(an)g(asso)r(ciated)f(p)r(erio) r(d)i(giv)n(en)f(b)n(y)g(designate)515 301 y(index)i(p)r(erio)r(d,)i (this)e(p)r(erio)r(d)g(will)h(b)r(e)f(used.)57 b(Otherwise,)35 b(if)f(the)h(index)f(is)g(a)g(mem)n(b)r(er)g(of)g(the)g(timeset,)j(the) 515 400 y(corresp)r(onding)25 b(p)r(erio)r(d)j(will)g(b)r(e)g(used.)515 583 y(If)g(a)f(p)r(erio)r(d)g(is)h(not)g(supplied)f(in)h(an)n(y)f(w)n (a)n(y)g(a)g(v)-5 b(ariable)26 b(is)i(assumed)f(to)g(b)r(elong)g(to)h (the)g(\014rst)f(p)r(erio)r(d.)515 941 y Fi(4)134 b(Data)46 b(in)f(PLAM)515 1205 y Fj(All)28 b(nonrandom)e(data)h(and)h(set)f (de\014nitions)h(are)f(k)n(ept)g(in)h(a)f(separate)f(data)h(\014le.)515 1388 y(The)g(syn)n(tax)g(of)h(the)g(data)f(\014le)g(for)h(our)e (example)i(is)515 1654 y Fc(:-plam.)515 2052 y(\045set)42 b(investments.)515 2152 y(investments\(I\):-)o(me)o(mb)o(er\()o(I,)o ([st)o(oc)o(k,)o(bon)o(d])o(\).)515 2351 y(\045set)g(periods)515 2451 y(periods\(P\):-memb)o(er)o(\(P)o(,[p)o(0,)o(p1,)o(p2)o(,p)o(3]\)) o(.)515 2650 y(initwealth\(55\).)515 2750 y(target\(80\).)515 2849 y(reward\(1\).)515 2949 y(penalty\(4\).)515 3148 y(return\(stock,p1,)o(rm)o(_r)o(etu)o(rn)o(_st)o(oc)o(k_)o(p1\))o(.)515 3248 y(return\(stock,p2,)o(rm)o(_r)o(etu)o(rn)o(_st)o(oc)o(k_)o(p2\))o (.)515 3347 y(return\(stock,p3,)o(rm)o(_r)o(etu)o(rn)o(_st)o(oc)o(k_)o (p3\))o(.)515 3547 y(return\(bond,p1,r)o(m_)o(re)o(tur)o(n_)o(bon)o(d_) o(p1)o(\).)515 3646 y(return\(bond,p2,r)o(m_)o(re)o(tur)o(n_)o(bon)o (d_)o(p2)o(\).)515 3746 y(return\(bond,p3,r)o(m_)o(re)o(tur)o(n_)o(bon) o(d_)o(p3)o(\).)515 3945 y(mark_random\(rm_r)o(et)o(ur)o(n_b)o(on)o (d_p)o(1,)o(1.)o(13\))o(.)515 4045 y(mark_random\(rm_r)o(et)o(ur)o(n_b) o(on)o(d_p)o(2,)o(1.)o(13\))o(.)515 4144 y(mark_random\(rm_r)o(et)o(ur) o(n_b)o(on)o(d_p)o(3,)o(1.)o(13\))o(.)515 4344 y(mark_random\(rm_r)o (et)o(ur)o(n_s)o(to)o(ck_)o(p1)o(,1)o(.15)o(5\))o(.)515 4443 y(mark_random\(rm_r)o(et)o(ur)o(n_s)o(to)o(ck_)o(p2)o(,1)o(.15)o (5\))o(.)515 4543 y(mark_random\(rm_r)o(et)o(ur)o(n_s)o(to)o(ck_)o(p3)o (,1)o(.15)o(5\))o(.)515 4809 y Fj(The)23 b(statemen)n(t)h Fc(initwealth\(55\))17 b Fj(simply)24 b(states)f(that)g(the)h (parameter)e(init)n(w)n(ealth)h(has)g(the)h(v)-5 b(alue)23 b(55.)35 b(The)515 4908 y(statemen)n(t)26 b Fc(return\(bond,1,r)o(m)p 1607 4908 27 4 v 25 w(return)p 1896 4908 V 29 w(bond)p 2101 4908 V 30 w(p1\))f Fj(states)g(that)i(the)f(parameter)e(return\(b) r(ond,1\))i(has)g(the)515 5008 y(random)18 b(v)-5 b(alue)19 b(rm)p 1124 5008 25 4 v 30 w(return)p 1381 5008 V 29 w(b)r(ond)p 1592 5008 V 30 w(p1,)i(and)e(the)h(statemen)n(t)f Fc(mark)p 2595 5008 27 4 v 30 w(random\(rm)p 3021 5008 V 27 w(return)p 3312 5008 V 29 w(bond)p 3517 5008 V 30 w(p1,1.13\))d Fj(tells)515 5108 y(us)34 b(that)h(a)f(t)n(ypical)g(v)-5 b(alue)34 b(of)g(this)h(random)e(v)-5 b(ariable)34 b(is)g(1.13.)56 b(These)34 b(t)n(ypical)g(v)-5 b(alues)34 b(will)h(b)r(e)g(used)f(when) 515 5207 y(generating)26 b(the)i(core)e(problem.)37 b(In)28 b(the)g(sto)r(c)n(hastic)f(problem)g(this)h(v)-5 b(alue)27 b(will)h(b)r(e)g(replaced)f(b)n(y)g(the)h(random)515 5307 y(outcomes.)515 5489 y(In)d(order)f(to)h(de\014ne)g(the)g(random)f (v)-5 b(alues,)26 b(w)n(e)e(write)h(a)g(\014le)g(giving)f(data)h(for)f (eac)n(h)h(no)r(de)g(in)g(the)g(scenario-tree.)515 5755 y Fc(node\(1,0,1,2,[)2266 6036 y Fj(4)p eop %%Page: 5 5 5 4 bop 515 201 a Fc(]\).)515 400 y(node\(2,1,0.5,2,[)515 500 y(rm_return_bond_p)o(1-)o(\(1)o(.14)o(\),)515 600 y(rm_return_stock_)o(p1)o(-\()o(1.2)o(5\))515 699 y(]\).)515 899 y(node\(3,2,0.25,2,)o([)515 998 y(rm_return_bond_p)o(2-)o(\(1)o (.14)o(\),)515 1098 y(rm_return_stock_)o(p2)o(-\()o(1.2)o(5\))515 1197 y(]\).)515 1397 y(node\(4,3,0.125,0)o(,[)515 1496 y(rm_return_bond_p)o(3-)o(\(1)o(.14)o(\),)515 1596 y(rm_return_stock_)o (p3)o(-\()o(1.2)o(5\))515 1696 y(]\).)515 1895 y(node\(5,3,0.125,0)o (,[)515 1994 y(rm_return_bond_p)o(3-)o(\(1)o(.12)o(\),)515 2094 y(rm_return_stock_)o(p3)o(-\()o(1.0)o(6\))515 2194 y(]\).)515 2393 y(node\(6,2,0.125,2)o(,[)515 2493 y(rm_return_bond_p)o (2-)o(\(1)o(.12)o(\),)515 2592 y(rm_return_stock_)o(p2)o(-\()o(1.0)o (6\))515 2692 y(]\).)515 2891 y(node\(7,3,0.125,0)o(,[)515 2991 y(rm_return_bond_p)o(3-)o(\(1)o(.14)o(\),)515 3090 y(rm_return_stock_)o(p3)o(-\()o(1.2)o(5\))515 3190 y(]\).)515 3389 y(node\(8,3,0.125,0)o(,[)515 3489 y(rm_return_bond_p)o(3-)o(\(1)o (.12)o(\),)515 3588 y(rm_return_stock_)o(p3)o(-\()o(1.0)o(6\))515 3688 y(]\).)515 3887 y(node\(9,1,0.5,2,[)515 3987 y(rm_return_bond_p)o (1-)o(\(1)o(.12)o(\),)515 4087 y(rm_return_stock_)o(p1)o(-\()o(1.0)o (6\))515 4186 y(]\).)515 4385 y(node\(10,2,0.25,2)o(,[)515 4485 y(rm_return_bond_p)o(2-)o(\(1)o(.14)o(\),)515 4585 y(rm_return_stock_)o(p2)o(-\()o(1.2)o(5\))515 4684 y(]\).)515 4884 y(node\(11,3,0.125,)o(0,)o([)515 4983 y(rm_return_bond_p)o(3-)o (\(1)o(.14)o(\),)515 5083 y(rm_return_stock_)o(p3)o(-\()o(1.2)o(5\))515 5182 y(]\).)515 5382 y(node\(12,3,0.125,)o(0,)o([)515 5481 y(rm_return_bond_p)o(3-)o(\(1)o(.12)o(\),)515 5581 y(rm_return_stock_)o(p3)o(-\()o(1.0)o(6\))515 5681 y(]\).)2266 6036 y Fj(5)p eop %%Page: 6 6 6 5 bop 515 201 a Fc(node\(13,2,0.125,)o(2,)o([)515 301 y(rm_return_bond_p)o(2-)o(\(1)o(.12)o(\),)515 400 y(rm_return_stock_)o (p2)o(-\()o(1.0)o(6\))515 500 y(]\).)515 699 y(node\(14,3,0.125,)o(0,)o ([)515 799 y(rm_return_bond_p)o(3-)o(\(1)o(.14)o(\),)515 899 y(rm_return_stock_)o(p3)o(-\()o(1.2)o(5\))515 998 y(]\).)515 1197 y(node\(15,3,0.125,)o(0,)o([)515 1297 y(rm_return_bond_p)o(3-)o(\(1)o(.12)o(\),)515 1397 y(rm_return_stock_)o (p3)o(-\()o(1.0)o(6\))515 1496 y(]\).)515 1862 y Fj(Eac)n(h)24 b(no)r(de)h(in)g(a)g(scenario)f(tree)g(is)h(listed)h(separately)-7 b(.)34 b(If)26 b(w)n(e)f(lo)r(ok)f(at)h(the)h(\014rst)f(line)g(of)g (eac)n(h)f(no)r(de)i(de\014nition,)515 1961 y(the)32 b(\014rst)f(n)n(um)n(b)r(er)g(is)g(the)h(ordering)e(n)n(um)n(b)r(er)h (of)h(the)g(no)r(de.)48 b(This)32 b(n)n(um)n(b)r(er)f(will)g(not)h (in\015uence)g(the)g(output)515 2061 y(in)26 b(an)n(y)f(w)n(a)n(y)-7 b(,)26 b(it)g(is)g(only)g(used)g(to)g(trace)f(errors)f(to)i(sp)r (eci\014c)g(p)r(ositions)f(in)i(the)f(data-\014le.)36 b(The)26 b(second)f(n)n(um)n(b)r(er)515 2160 y(indicates)i(the)h(stage) f(of)g(the)h(no)r(de.)37 b(The)27 b(third)h(n)n(um)n(b)r(er)f(is)h(the) g(\(unconditional\))f(probabilit)n(y)g(of)g(ending)h(up)515 2260 y(in)c(a)g(no)r(de.)36 b(The)24 b(fourth)h(is)f(the)h(n)n(um)n(b)r (er)f(of)g(c)n(hildren)g(of)g(eac)n(h)g(no)r(de.)35 b(The)25 b(ordering)d(of)j(the)f(no)r(des)g(is)h(a)e(depth)515 2360 y(\014rst)k(searc)n(h)f(of)i(the)g(scenario)e(tree.)36 b(Ho)n(w)27 b(the)h(no)r(des)g(are)e(ordered)h(ma)n(y)f(b)r(e)i(view)n (ed)g(in)f(Fig.)37 b(1.)869 4420 y /PSfrag where{pop()[[0(Bl)1 0]]1 0 -1/Begin PSfrag}{userdict /PSfrag{pop}put}ifelse 869 4420 a @beginspecial 0 @llx 0 @lly 602 @urx 413 @ury 3401 @rwi @setspecial %%BeginDocument: bilder/nodefile.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: nodefile.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Wed Mar 14 14:54:58 2001 %%For: alten@chestnut.math.chalmers.se (Fredrik Altenstedt,1000) %%Orientation: Portrait %%BoundingBox: 0 0 602 413 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -39.0 524.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 9722 m -1000 -1000 l 11673 -1000 l 11673 9722 l cp clip 0.06000 0.06000 sc 7.500 slw % Ellipse n 3112 4312 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 3000 4350 m gs 1 -1 sc (2) col0 sh gr % Ellipse n 8362 4312 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 8250 4350 m gs 1 -1 sc (9) col0 sh gr % Ellipse n 5737 2287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 5625 2325 m gs 1 -1 sc (1) col0 sh gr % Ellipse n 1087 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 975 8325 m gs 1 -1 sc (4) col0 sh gr % Ellipse n 2437 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 2325 8325 m gs 1 -1 sc (5) col0 sh gr % Ellipse n 1762 6262 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 1650 6300 m gs 1 -1 sc (3) col0 sh gr % Ellipse n 3712 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 3600 8325 m gs 1 -1 sc (7) col0 sh gr % Ellipse n 5062 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 4950 8325 m gs 1 -1 sc (8) col0 sh gr % Ellipse n 4387 6262 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 4275 6300 m gs 1 -1 sc (6) col0 sh gr % Ellipse n 6337 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 6225 8325 m gs 1 -1 sc (11) col0 sh gr % Ellipse n 7687 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 7575 8325 m gs 1 -1 sc (12) col0 sh gr % Ellipse n 7012 6262 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 6900 6300 m gs 1 -1 sc (10) col0 sh gr % Ellipse n 8887 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 8775 8325 m gs 1 -1 sc (14) col0 sh gr % Ellipse n 10237 8287 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 10125 8325 m gs 1 -1 sc (15) col0 sh gr % Ellipse n 9562 6262 428 428 0 360 DrawEllipse gs col0 s gr /Times-Roman ff 180.00 scf sf 9450 6300 m gs 1 -1 sc (13) col0 sh gr % Polyline n 5475 2625 m 3300 3975 l gs col0 s gr % Polyline n 6000 2625 m 8100 3975 l gs col0 s gr % Polyline n 2850 4650 m 1950 5850 l gs col0 s gr % Polyline n 3375 4650 m 4200 5850 l gs col0 s gr % Polyline n 8100 4650 m 7200 5925 l gs col0 s gr % Polyline n 8625 4650 m 9375 5925 l gs col0 s gr % Polyline n 1800 6675 m 2400 7875 l gs col0 s gr % Polyline n 1725 6675 m 1125 7875 l gs col0 s gr % Polyline n 4425 6675 m 5025 7875 l gs col0 s gr % Polyline n 4350 6675 m 3750 7875 l gs col0 s gr % Polyline n 7050 6675 m 7650 7875 l gs col0 s gr % Polyline n 6975 6675 m 6375 7875 l gs col0 s gr % Polyline n 9600 6675 m 10200 7875 l gs col0 s gr % Polyline n 9525 6675 m 8925 7875 l gs col0 s gr $F2psEnd rs %%EndDocument @endspecial 869 4420 a /End PSfrag 869 4420 a 869 4230 a /Hide PSfrag 869 4230 a 129 4288 a Fj(PSfrag)26 b(replacemen)n(ts)p 129 4317 741 4 v 869 4321 a /Unhide PSfrag 869 4321 a 869 4420 a { 869 4420 a 869 4420 a } 0/Place PSfrag 869 4420 a 1515 4603 a Fj(Figure)h(1:)36 b(T)-7 b(ree)27 b(structure)g(from)h(the)g(example)515 5060 y Fi(5)134 b(Commands)515 5325 y Fj(The)27 b(program)f(ma)n(y)h(b)r(e)h (used)f(in)h(t)n(w)n(o)f(mo)r(des.)37 b(In)28 b(the)g(\014rst)f(mo)r (de,)h(writing)f(the)h(command)515 5591 y Fc(write_smps\(outna)o(me)o (,r)o(anf)o(il)o(ena)o(me)o(\))2266 6036 y Fj(6)p eop %%Page: 7 7 7 6 bop 515 201 a Fj(will)22 b(pro)r(duce)g(a)f(set)h(of)g (SMPS-\014les)g(\(see)f([2]\))h(describing)g(the)g(problem.)35 b(V)-7 b(ariable)21 b(and)g(constrain)n(ts)g(will)h(ha)n(v)n(e)515 301 y(alias)h(names)h(\()p Fc(X1,)43 b(X2,)24 b Fj(...)36 b(and)24 b Fc(C1,)43 b(C2,)24 b Fj(...\))36 b(as)24 b(the)h(SMPS)f (format)g(has)g(a)g(maxim)n(um)h(of)f(eigh)n(t)g(c)n(haracters)515 400 y(p)r(er)h(name,)h(a)f(limit)i(quic)n(kly)d(exceeded)i(since)f(w)n (e)g(need)h(to)f(include)h(the)g(indexing)g(in)g(the)f(v)-5 b(ariable)25 b(names.)36 b(A)515 500 y(separate)26 b(\014le)i(\()p Fc(outname.alias)p Fj(\))23 b(is)k(written)h(connecting)f(these)h (aliases)e(to)h(the)h(true)g(names.)515 683 y(The)f(second)g(command) 515 948 y Fc(write_problem\(pr)o(ob)o(na)o(me\))o(.)515 1214 y Fj(will)f(not)g(use)h(an)n(y)e(random)g(data.)36 b(Instead)26 b(it)h(will)f(giv)n(e)g(a)f(\014le)i(named)f Fc(probname.splam)20 b Fj(This)27 b(\014le)f(con)n(tains)515 1314 y(algebraic)19 b(expressions)g(for)h(all)h(matrix)f(and)h(v)n (ector)f(elemen)n(ts)h(describing)f(the)h(problem.)34 b(These)21 b(ma)n(y)f(b)r(e)h(used)515 1413 y(later)g(on)h(for)g (custom)g(made)g(solutions)g(where)f(problems)h(are)f(generated)g (either)i(via)e(supplying)h(random)g(data)515 1513 y(from)31 b(databases)g(or)g(other)h(sources,)g(or)f(when)h(the)g(random)g(data)f (is)h(generated)f(on)h(the)g(\015y)g(from)g(random)515 1613 y(n)n(um)n(b)r(er)26 b(generators.)34 b(This)27 b(ma)n(y)f(b)r(e)h(b)r(ene\014cial)f(if)h(the)g(problem)f(is)h(to)f (large)f(to)i(b)r(e)g(k)n(eept)f(it)h(in)g(the)g(w)n(orking)515 1712 y(memory)33 b(of)i(the)g(computer)f(at)h(all)f(times.)58 b(It)35 b(will)g(then)g(b)r(e)g(enough)e(to)i(sa)n(v)n(e)e(the)i (random)e(seed)i(used)f(to)515 1812 y(create)26 b(a)i(subtree.)515 1994 y(The)f(format)g(of)h(the)g Fc(.splam)d Fj(\014le)j(is)515 2243 y Fc(VARS)515 2343 y()515 2443 y()g(;)j()d(;)j (;)863 2542 y(.)523 b(.)610 b(.)515 2642 y(ENDVARS)515 2742 y(CONSTRS)515 2841 y()515 2941 y(;)h()e(;)j()863 3040 y(.)697 b(.)1046 b(.)515 3140 y(ENDCONSTRS)515 3240 y(RAND)515 3339 y()515 3439 y()f(;)k()863 3539 y(.)1090 b(.)515 3638 y(ENDRAND)515 3738 y(ELEMS)515 3837 y()515 3937 y(;)c (;)f()j(;)j()863 4037 y(.)305 b(.)523 b(.)435 b(.)515 4136 y(ENDELEMS)515 4236 y(RHS)515 4336 y(;)o(;)38 b(;)43 b()863 4435 y(.)305 b(.)g(.)435 b(.)863 4535 y(.)305 b(.)g(.)435 b(.)515 4635 y(ENDRHS)515 4734 y(BO)515 4834 y(;)o(;)37 b(;)k()863 4933 y(.)174 b(.)261 b(.)436 b(.)515 5033 y(ENDBO)515 5282 y Fj(The)27 b(statemen)n(t)g Fc()e Fj(means)i(that)h(w)n(e)e (will)i(ha)n(v)n(e)e(an)h(r)g(or)f(an)h(n)g(indicating)g(w)n(ether)g (the)g(en)n(try)g(is)g(random)515 5382 y(or)g(nonrandom.)39 b(The)29 b(statemen)n(t)g Fc()d Fj(means)i(that)h(w)n(e)f(will)h (ha)n(v)n(e)e(an)i(L,E)f(or)g(G)g(indicating)h(the)g(t)n(yp)r(e)515 5481 y(of)e(constrain)n(t.)2266 6036 y(7)p eop %%Page: 8 8 8 7 bop 515 201 a Fi(6)134 b(Some)46 b(w)l(arnings)515 466 y Fj(Note)23 b(that)h(this)g(soft)n(w)n(are)e(is)h(of)h (less-than-b)r(eta)f(qualit)n(y)-7 b(.)35 b(The)23 b(write)p 2726 466 25 4 v 30 w(problem)g(command)g(probably)g(has)g(less)515 566 y(bugs)28 b(than)g(the)h(write)p 1238 566 V 29 w(smps)g(command,)f (as)g(it)g(is)h(the)f(one)g(I)h(ha)n(v)n(e)e(used)h(the)h(most,)f(and)h (it)f(is)h(less)e(complex.)515 665 y(When)32 b(using)f(the)i(soft)n(w)n (are)d(it)i(is)f(probably)g(b)r(est)h(to)g(mak)n(e)f(a)g(pure)h(PLAM)f (mo)r(del)h(\014rst,)h(lea)n(ving)d(out)i(an)n(y)515 765 y(extenstions.)54 b(When)35 b(this)f(mo)r(del)f(is)h(readily)f (accepted)g(b)n(y)g(PLAM,)h(the)g(con)n(v)n(ersion)d(should)j(b)r(e)g (less)f(of)h(a)515 865 y(hassle.)42 b(This)29 b(has)g(the)h(b)r (ene\014t)g(of)g(using)f(PLAMs)g(higher)g(abilit)n(y)g(to)h(detect)g (errors)d(and)i(giv)n(e)g(usable)g(error)515 964 y(messages.)35 b(The)28 b(extended)f(v)n(ersion)f(will)i(usually)f(just)i(crash)d(on)h (error.)515 1322 y Fi(References)515 1537 y Fj([1])41 b Fb(P.)34 b(Bar)-6 b(th)36 b(and)g(A.)e(Bockma)-6 b(yr)p Fj(,)33 b Fa(Mo)l(del)t(ling)i(mixe)l(d-inte)l(ger)f(optimization)h(pr) l(oblems)f(in)g(c)l(onstr)l(aint)644 1636 y(lo)l(gic)45 b(pr)l(o)l(gr)l(amming)p Fj(,)i(tec)n(h.)c(rep.,)k(Max-Planc)n (k-Institut)41 b(f)r(\177)-44 b(ur)43 b(Informatik,)j(Saarbr)r(\177)-44 b(uc)n(k)n(en,)44 b(German)n(y)-7 b(,)644 1736 y(1995.)515 1902 y([2])41 b Fb(J.)29 b(Bir)n(ge,)h(M.)f(Dempster,)h(H.)e(Gassman,)h (E.)f(Gunn,)h(A.)g(King,)g(and)g(S.)g(W)-10 b(alla)n(ce)p Fj(,)26 b Fa(A)h(standar)l(d)644 2002 y(input)i(format)i(for)f(multip)l (erio)l(d)h(sto)l(chastic)g(line)l(ar)f(pr)l(o)l(gr)l(ams)p Fj(,)f(CO)n(AL)e(Newsletter,)g(\(1987\),)g(pp.)h(1{19.)515 2168 y([3])41 b Fb(J.)d(R.)h(Bir)n(ge)g(and)g(F.)f(Louvea)n(ux)p Fj(,)e Fa(Intr)l(o)l(duction)f(to)i(Sto)l(chastic)f(Pr)l(o)l(gr)l (amming)p Fj(,)i(Springer-V)-7 b(erlag,)644 2267 y(Berlin,)27 b(1997.)2266 6036 y(8)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -39.0 524.0 translate 1 -1 scale /cp {closepath