# This is the main file of the program. # Global variables are: # MPL_CTYPE, MPLf, MPLft, MPLb, COMPATIBILITY_GRAPH, MPL_CoefflnZeroList, MPLGlobalCoordinates, MPLnumberofvar, MPLvariable, MPLArnoldEq, MPLLowestArnoldEquations #========================================== # Changes since version 1.0: # Version 1.1: # - A slight change in the procedure MPLPrimitive: The maximal length of # words in the integrand is now determined automatically. Therefore the third argument # of the procedure is removed. # #========================================== MPLVersionNumber:=proc() return "1.1": end proc: # Print the name of the program: printf(cat("MPL Version ",MPLVersionNumber())); printf(""); # All additional Maple-packages are read here: with(difforms): with(linalg): with(LinearAlgebra): with(SolveTools): with(ListTools): with(FileTools): with(combinat): #with(Threads): # Basic definitions: define(bar,'multilinear', bar(1)=1, bar(1,1)=1, bar(ONE)=ONE, bar(0)=0): define(barlog,'multilinear', barlog(1)=1, barlog(1,1)=1, barlog(ONE)=ONE, barlog(0)=0): define(base,'multilinear', base(1)=1, base(1,1)=1, base(ONE)=ONE, base(0)=0): define(tens,'multilinear', tens(a::anything, 1) = a, tens(1, a::anything) = a, tens(a::anything) = a, tens(a::anything, tens(b::anything, ONE)) = conc(a,b), tens(a::anything, tens(b::anything, c::anything)) = tens(conc(a,b),c)): define(conc,'multilinear', 'flat', conc(ONE)=1, conc(1)=1, conc(a::algfun)=a, conc(c::anything*tens(a::anything, b::anything))=c*conc(a,b), conc(a::anything, 1) = a, conc(a::anything, ONE) = a, conc(ONE, b::anything) = b, conc(a::function, b::function) = bar(unbar(a), unbar(b))): define(expansion, expansion(va::anything, u::integer, ONE) = 1, expansion(va::anything, u::integer, tens(a::anything, ONE)) = EXPAND(va, u, a), expansion(va::anything, u::integer, tens(bar(a::anything), b::anything)) = integr(conc(bar(a),b), va, u, EXPAND(va, u, a)*expansion(va, u, unconc(b))) ): define(multipl,'multilinear', multipl(tens(ONE, a::anything))=a, multipl(tens(a::anything,ONE))=a, multipl(tens(a::anything,b::anything))=a*b, multipl(tens(a::anything,b::anything)*c::anything)=a*b*c, multipl(a::const)=a, multipl(bar(a::anything))=bar(a), multipl(ONE)=1): unbar:=proc(expr1) return op(expr1): end proc: MPL_CTYPE:=2: #################################################################### #################################################################### # # BASIC OPERATIONS # #################################################################### #################################################################### # The following creates the list of all coordinates of the type 'ctype' # (e.g. ctype=1 produces simplicial coordinates, ctype=2 cubical coordinates ...) GetCoordinates:=proc(variablename::symbol, n::integer, ctype::integer) local i, output; output:=[]: defform(variablename=0): # simplicial coordinates t: # construct the sequence [0, t[1], t[2], ..., t[n], 1] if ctype=1 then for i from 0 to n+1 do if i=0 then output:=[op(output), 0]: elif i=n+1 then output:=[op(output), 1]: else output:=[op(output), variablename[i]]: end if: end do: # cubical coordinates x: elif ctype=2 then for i from 1 to n+1 do output:=[op(output),variablename[i]]: end do: # For the purpose of testing other parts of the program, we introduce test-coordinates v[0], v[1], ..., v[n+1]: elif ctype=50 then defform(variablename=0, e=1, b=1, f=1): for i from 0 to n+1 do output:=[op(output), variablename[i]]: end do: #here further types of coordinates can be included else output:=[]: end if: return output: end proc: # For some purposes, the coordinates have to be available as a global list: SetGlobalCoordinates:=proc(va, howmany) local i: global MPLGlobalCoordinates: defform(va=0): MPLGlobalCoordinates:=[]: for i from 1 to howmany do MPLGlobalCoordinates:=[op(MPLGlobalCoordinates),va[i]]: end do: end proc: # Procedure for deriving all Arnold relations for cubical coordinates and a given n. # It uses ArnoldCubical and may be called by MPLInitialize. CreateArnoldCubical:=proc() global MPLArnoldEq, MPLLowestArnoldEquations: local i, j, output, NewRhs: # For MPLnumberofvar<13 the equations are read from a list which is stored in MPL.txt. # For MPLnumberofvar>12 the equations are derived using ArnoldCubical. This may be the reason for long computation times. if MPLnumberofvar<13 then MPLArnoldEq:=MPLLowestArnoldEquations[MPLnumberofvar+1]: else output:=[]: for j from 2 to MPLnumberofvar+2 do for i from 1 to j-1 do NewRhs:=ArnoldCubical(MPLft[j], MPLft[i]): output:=[op(output), NewRhs]: end do: end do: MPLArnoldEq:=output: end if: end proc: # MPLCoordinates is the user-friendly wrap around MPLInitialize. MPLCoordinates:=proc(variablename::symbol, n::integer) return MPLInitialize(variablename, n-1): end proc: # The following declares the coordinates due to choices by the user. # The option to use other than cubical coordinates is still kept here from # previous versions, but not supported by most of MPL. # The default value MPL_CTYPE=2 selects the cubical coordinates. MPLInitialize:=proc(variablename::symbol, n::integer) local ctypeword: global MPL_COORDINATES, MPLnumberofvar, MPL_CTYPE, MPLvariable: MPL_COORDINATES:=GetCoordinates(variablename, n, MPL_CTYPE): MPLnumberofvar:=n: MPLvariable:=variablename: if MPL_CTYPE=1 then ctypeword:="simplicial": elif MPL_CTYPE=2 then ctypeword:="cubical": if nargs>3 then if args[4]=true then CreateArnoldCubical(): end if: else CreateArnoldCubical(): end if: elif ctype=50 then ctypeword:="symbolical": else ctypeword:="undefined": end if: if nargs>2 then if args[3]=true then printf("%s\n",cat("You are using ", cat(ctypeword, cat(" coordinates: ", convert(MPL_COORDINATES, string))))); end if: end if: end proc: # List of differential 1-forms in the basis of the total space: MPLFormsTotal:=proc() local i, j, output, counter, newterm; userinfo(1, 'basic', "(n, ctype): Creates the list of basic forms of the total space Omega_E;"): output:=[]: # simplicial coordinates: if MPL_CTYPE=1 then for i from 1 to n+1 do for j from 0 to i-1 do newterm:=(d(MPL_COORDINATES[i+1])-d(MPL_COORDINATES[j+1]))/(MPL_COORDINATES[i+1]-MPL_COORDINATES[j+1]): output:=[op(output), newterm]: end do: end do: # cubical coordinates x: elif MPL_CTYPE=2 then output:=[op(MPLFormsBase()), op(MPLFormsFiber(true))]: # test-coordinates v[i]: elif MPL_CTYPE=50 then defform(e=1, b=1, f=1): counter:=1: for i from 1 to MPLnumberofvar+1 do for j from 0 to i-1 do newterm:=e[counter]: output:=[op(output), newterm]: counter:=counter+1: end do: end do: # further coordinates ... else output:=[]: end if: return output: end proc: # List of differential 1-forms in the basis of the base: MPLFormsBase:=proc() local i, j, k, output, counter, newterm, newproduct; output:=[]: # simplicial coordinates: if MPL_CTYPE=1 then for i from 1 to MPLnumberofvar+1 do for j from 0 to i-1 do newterm:=(d(MPL_COORDINATES[i+1])-d(MPL_COORDINATES[j+1]))/(MPL_COORDINATES[i+1]-MPL_COORDINATES[j+1]): if (not(i=MPLnumberofvar) and not(j=MPLnumberofvar)) then output:=[op(output), newterm]: end if: end do: end do: # cubical coordinates x: elif MPL_CTYPE=2 then for j from 1 to MPLnumberofvar do for i from 0 to j do newproduct:=1: if i=0 then newterm:=d(MPL_COORDINATES[j])/MPL_COORDINATES[j]: else for k from i to j do newproduct:=newproduct*MPL_COORDINATES[k]: end do: newterm:=d(newproduct)/(1-newproduct): end if: output:=[op(output),newterm]: end do: end do: # test-coordinates v[i]: elif MPL_CTYPE=50 then defform(e=1, b=1, f=1): counter:=1: for i from 1 to MPLnumberofvar+1 do for j from 0 to i-1 do newterm:=MPLb[counter]: if (not(i=MPLnumberofvar) and not(j=MPLnumberofvar)) then output:=[op(output), newterm]: counter:= counter+1: end if: end do: end do: # further coordinates ... else output:=[]: end if: return output: end proc: # List of differential 1-forms in the basis of the fiber. # The boolean argument fixes, whether it is the lifted fiber or not. MPLFormsFiber:=proc(tilde::boolean) local i, j, k, output, counter, newproduct, newterm, tildeterm, BasicForms; output:=[]: # simplicial coordinates: if MPL_CTYPE=1 then for i from 0 to MPLnumberofvar+1 do if (not(i=MPLnumberofvar)) then if tilde then tildeterm:=d(MPL_COORDINATES[i+1]): else tildeterm:=0: end if: newterm:=(d(MPL_COORDINATES[MPLnumberofvar+1])-tildeterm)/(MPL_COORDINATES[MPLnumberofvar+1]-MPL_COORDINATES[i+1]): output:=[op(output), newterm]: end if: end do: # cubical coordinates x: elif MPL_CTYPE=2 then for i from 0 to MPLnumberofvar+1 do newproduct:=1: if i=0 then newterm:=d(MPL_COORDINATES[MPLnumberofvar+1])/MPL_COORDINATES[MPLnumberofvar+1]: elif i=MPLnumberofvar+1 then newterm:=d(MPL_COORDINATES[MPLnumberofvar+1])/(1-MPL_COORDINATES[MPLnumberofvar+1]): else for k from i to MPLnumberofvar do newproduct:=newproduct*MPL_COORDINATES[k]: end do: if tilde then newterm:=d(newproduct*MPL_COORDINATES[MPLnumberofvar+1])/(1-newproduct*MPL_COORDINATES[MPLnumberofvar+1]): else newterm:=newproduct*d(MPL_COORDINATES[MPLnumberofvar+1])/(1-newproduct*MPL_COORDINATES[MPLnumberofvar+1]): end if: end if: output:=[op(output),newterm]: end do: # test-coordinates v[i]: elif MPL_CTYPE=50 then defform(e=1, b=1, f=1): counter:=1: for i from 0 to MPLnumberofvar+1 do if (not(i=MPLnumberofvar)) then if tilde then newterm:=MPLft[counter]: else newterm:=MPLf[counter]: end if: output:=[op(output), newterm]: counter:=counter+1: end if: end do: # further coordinates ... else output:=[]: end if: return output: end proc: # The following creates a list of words, where in each new word two of the neighbour-entries are paired. PairNeighbours:=proc(word::list) local i, j, output, newword; userinfo(1, 'basic', "(word): creates a list of words, where in each new word two of the neighbour-entries are paired."): output:=[]: for i from 1 to nops(word)-1 do newword:=[]: # As the pairs stand for wegde-products, no word is added in this case of a pair of two equal neighbours. if not(op(i,word)=op(i+1,word)) then for j from 1 to nops(word) do if i=j then newword:=[op(newword), [op(j,word), op(j+1,word)]]: elif not(j=i+1) then newword:=[op(newword),op(j,word)]: end if: end do: output:=[op(output),newword]: end if: end do: return output: end proc: # Wedge products are given a canonical order: OrderWedge:=proc(term) local i, j, output: output:=term: for i from 1 to nops(MPL_COORDINATES) do for j from 1 to i do output:=subs(d(MPL_COORDINATES[i]) &^ d(MPL_COORDINATES[j]) = - d(MPL_COORDINATES[j]) &^ d(MPL_COORDINATES[i]),output): end do: end do: return output: end proc: # Creates a list of words, where in each new word two of the neighbour-entries are wedge-multiplied. WedgeNeighbours:=proc(word::list) local i, j, k, output, newword, OmegaE; userinfo(1, 'basic', "(word): creates a list of words, where in each new word two of the neighbour-entries are wedge-multiplied."): output:=[]: OmegaE:=MPLFormsTotal(): for i from 1 to nops(word)-1 do newword:=[]: # No word is added in this case of a pair of two equal neighbours. if not(op(i,word)=op(i+1,word)) and not(simplify(op(i,word) &^ op(i+1,word))=0) then for j from 1 to nops(word) do if i=j then newword:=[op(newword), OrderWedge(simplify(op(j,word) &^ op(j+1,word)))]: elif not(j=i+1) then newword:=[op(newword),op(j,word)]: end if: end do: output:=[op(output),newword]: end if: end do: return output: end proc: # For a word of elements in the fiber, each element is lifted to the total space. Lift:=proc(word::list) local i, j, OmegaF, OmegaFtilde, output, newword: userinfo(1, 'basic', "(word, n, ctype): For a word of elements in the fiber, each element is lifted to the total space."): output:=[]: OmegaF:=MPLFormsFiber(false): OmegaFtilde:=MPLFormsFiber(true): # We assume that the elements of word are in OmegaF. We lift it to OmegaFtilde: for i from 1 to nops(word) do newword:=word[i]: for j from 1 to nops(OmegaF) do newword:=subs([OmegaF[j]=OmegaFtilde[j],MPLf[j]=MPLft[j], normal(-OmegaF[j])=normal(-OmegaFtilde[j]),-MPLf[j]=-MPLft[j]],newword): #if word[i]=OmegaF[j] then output:=[op(output),OmegaFtilde[j]]: #end if: end do: output:=[op(output),newword]: end do: return output: end proc: # For a word of elements in the total space (Omega_F_tilde), each element is 'lowered' to the fiber. Lower:=proc(word::list) local i, j, OmegaF, OmegaFtilde, output, newword: userinfo(1, 'basic', "(word, n, ctype): For a word of elements in the total space (Omega_F_tilde), each element is 'lowered' to the fiber."): output:=[]: OmegaF:=MPLFormsFiber(false): OmegaFtilde:=MPLFormsFiber(true): # We assume that the elements of word are in OmegaFtilde. We lower it to OmegaF: for i from 1 to nops(word) do newword:=word[i]: for j from 1 to nops(OmegaFtilde) do newword:=subs([OmegaFtilde[j]=OmegaF[j],MPLft[j]=MPLf[j], normal(-OmegaFtilde[j])=normal(-OmegaF[j]),-MPLft[j]=-MPLf[j]],newword): #if word[i]=OmegaFtilde[j] then output:=[op(output),OmegaF[j]]: #end if: end do: output:=[op(output),newword]: end do: return output: end proc: # ZMatrix is an auxiliary matrix of coefficients of Arnold relations. ZMatrix:=proc(rows,columns) local i, j, newrow, output: output:=[]: for i from 1 to rows do newrow:=[]: for j from 1 to columns do newrow:=[op(newrow),0]: end do: output:=[op(output),newrow]: end do: return output: end proc: # MPLshuffle(word1, word2) creates the list of all shuffles of word1 and word2. # We use the name 'MPLshuffle' because 'Shuffle' already exists in Maple (and gives only one random shuffle). # MPLshuffle has no userinfo, because it is called recursively and would print the info-text with each call. MPLshuffle:=proc(word1::list, word2::list) local i, j, a, b, w1, w2, part1, part2, output; output:=[]: #Cases with empty words: if (word1=[] and word2=[]) then output:=[[]]: elif (not(word1=[]) and word2=[]) then output:=[op(output),word1]: elif (word1=[] and not(word2=[])) then output:=[op(output),word2]: elif (word1=[1] and word2=[1]) then output:=[[1]]: elif (not(word1=[1]) and word2=[1]) then output:=[op(output),word1]: elif (word1=[1] and not(word2=[])) then output:=[op(output),word2]: else #For nonempty words we write word1=[a, w1], word2=[b, w2]. a:=op(1,word1): w1:=subsop(1=NULL,word1): b:=op(1,word2): w2:=subsop(1=NULL,word2): part1:=MPLshuffle(w1,word2): part2:=MPLshuffle(word1,w2): for i from 1 to nops(part1) do part1[i]:=[a,op(part1[i])]: end do: for j from 1 to nops(part2) do part2[j]:=[b,op(part2[j])]: end do: output:= [op(part1),op(part2)]: end if: return output: end proc: # MPLShuffleProduct is intended to be applied by the user for shuffle multiplication of combinations of bar-terms. MPLShuffleProduct:=proc(term1, term2) local i, j, k, term1list, term2list, coefflist1, coefflist2, wordlist1, wordlist2, newcoeffs, newwords, shuffleresult, position: # First we check if term1 and term2 are lists. If not, we apply BarToLists. if type(term1,list) then term1list:=term1: else term1list:=BarToLists(term1): end if: if type(term2,list) then term2list:=term2: else term2list:=BarToLists(term2): end if: coefflist1:=term1list[1]: coefflist2:=term2list[1]: wordlist1:=term1list[2]: wordlist2:=term2list[2]: newcoeffs:=[]: newwords:=[]: for i from 1 to nops(coefflist1) do for j from 1 to nops(coefflist2) do shuffleresult:=MPLshuffle(wordlist1[i],wordlist2[j]): for k from 1 to nops(shuffleresult) do newcoeffs:=[op(newcoeffs), coefflist1[i]*coefflist2[j]]: end do: newwords:=[op(newwords), op(shuffleresult)]: end do: end do: return ListsToBar([newcoeffs, newwords]): end proc: # The following few procedures serve for the translation of # differential 1-forms to internal symbolic notation: FiberToSymbols:=proc(word) local i, newword, OmegaF: newword:=normal(word): OmegaF:=MPLFormsFiber(false): for i from 1 to nops(OmegaF) do newword:=subs(OmegaF[i]=MPLf[i], newword): newword:=subs(normal(-OmegaF[i])=-MPLf[i], newword): end do: return eval(newword): end proc: SymbolsToTotal:=proc(word) local i, j, newword, OmegaFtilde, OmegaB: newword:=word: OmegaFtilde:=MPLFormsFiber(true): OmegaB:=MPLFormsBase(): for i from 1 to nops(OmegaFtilde) do newword:=subs(MPLft[i]=OmegaFtilde[i], newword): newword:=subs(-MPLft[i]=-OmegaFtilde[i], newword): end do: for j from 1 to nops(OmegaB) do newword:=subs(MPLb[j]=OmegaB[j], newword): newword:=subs(-MPLb[j]=-OmegaB[j], newword): end do: return newword: end proc: TotalToSymbols:=proc(word) local i, newword, OmegaFtilde, OmegaB: newword:=normal(word): OmegaFtilde:=MPLFormsFiber(true): for i from 1 to nops(OmegaFtilde) do newword:=subs(OmegaFtilde[i]=MPLft[i], newword): newword:=subs(normal(-OmegaFtilde[i])=-MPLft[i], newword): end do: OmegaB:=MPLFormsBase(): for i from 1 to nops(OmegaB) do newword:=subs(OmegaB[i]=MPLb[i], newword): newword:=subs(normal(-OmegaB[i])=-MPLb[i], newword): end do: return eval(newword): end proc: # The coproduct of bar(a,b,...) is # tens(bar(ONE), bar(a,b,...)) + tens(bar(a),bar(b,...)) + ... + tens(bar(a,b,...),bar(ONE)) # where bar(ONE) acts as the empty word. MPLCoproduct:=proc(inp) local i, j, preloutput, oneelement, output, newtens, BarTable: if not(has(inp, bar)) then return 0: end if: BarTable:=table(): BarToTable(inp,BarTable): output:=0: for j in indices(BarTable,'nolist') do if j=[1] then output:=output: else newtens:=tens(bar(ONE),bar(op(j))): preloutput:=newtens: for i from 1 to nops(bar(op(j)))-1 do newtens:=tens(op(1,newtens), unconc(op(2,newtens))): if nargs<2 then preloutput:=preloutput+eval(newtens): elif args[2]=i then oneelement:=eval(newtens): end if: end do: if nargs>1 then if args[2]=nops(bar(op(j))) then oneelement:=tens(bar(op(j)),bar(ONE)): elif args[2]=0 then oneelement:=tens(bar(ONE),bar(op(j))): elif args[2]>nops(bar(op(j))) then oneelement:=0: end if: end if: preloutput:=preloutput+tens(bar(op(j)),bar(ONE)): if nargs<2 then output:=output+BarTable[j]*preloutput: else output:=output+BarTable[j]*oneelement: end if: end if: end do: return output: end proc: # Older version using lists: Coproduct:=proc(inp) local i, j, preloutput, oneelement, output, newtens, BarLists: if not(has(inp, bar)) then return 0: end if: BarLists:=BarToLists(inp): output:=0: for j from 1 to nops(BarLists[1]) do if op(BarLists[2][j])=1 then output:=output: else newtens:=tens(bar(ONE),bar(op(BarLists[2][j]))): preloutput:=newtens: for i from 1 to nops(bar(op(BarLists[2][j])))-1 do newtens:=tens(op(1,newtens), unconc(op(2,newtens))): if nargs<2 then preloutput:=preloutput+eval(newtens): elif args[2]=i then oneelement:=eval(newtens): end if: end do: if nargs>1 then if args[2]=nops(bar(op(BarLists[2][j]))) then oneelement:=tens(bar(op(BarLists[2][j])),bar(ONE)): elif args[2]=0 then oneelement:=tens(bar(ONE),bar(op(BarLists[2][j]))): elif args[2]>nops(bar(op(BarLists[2][j]))) then oneelement:=0: end if: end if: preloutput:=preloutput+tens(bar(op(BarLists[2][j])),bar(ONE)): if nargs<2 then output:=output+BarLists[1][j]*preloutput: else output:=output+BarLists[1][j]*oneelement: end if: end if: end do: return output: end proc: # An auxiliary procedure for the separation of lists in a list of lists: PullListsApart:=proc(ListOfLists) local i, j, Coeffsa, Coeffsb, Factors1a, Factors1b, Factors2a, Factors2b: Coeffsa:=[]: Factors1a:=[]: Factors2a:=[]: Coeffsb:=[]: Factors1b:=[]: Factors2b:=[]: for i from 1 to nops(ListOfLists[1]) do if type(ListOfLists[2][i], `+`) then for j from 1 to nops(ListOfLists[2][i]) do Coeffsa:=[ op(Coeffsa), ListOfLists[1][i] ]: Factors1a:=[ op(Factors1a), op(j, ListOfLists[2][i]) ]: Factors2a:=[ op(Factors2a), ListOfLists[3][i] ]: end do: else Coeffsa:=[ op(Coeffsa), ListOfLists[1][i] ]: Factors1a:=[ op(Factors1a), ListOfLists[2][i] ]: Factors2a:=[ op(Factors2a), ListOfLists[3][i] ]: end if: end do: for i from 1 to nops(Coeffsa) do if type(Factors2a[i], `+`) then for j from 1 to nops(Factors2a[i]) do Coeffsb:=[ op(Coeffsb), Coeffsa[i] ]: Factors1b:=[ op(Factors1b), Factors1a[i] ]: Factors2b:=[ op(Factors2b), op(j, Factors2a[i]) ]: end do: else Coeffsb:=[ op(Coeffsb), Coeffsa[i] ]: Factors1b:=[ op(Factors1b), Factors1a[i] ]: Factors2b:=[ op(Factors2b), Factors2a[i] ]: end if: end do: return [Coeffsb, Factors1b, Factors2b]: end proc: # For a linear combination of bar-terms, the following procedure returns a list, where the terms of the input # are sorted by the length of the words. SortByLength:=proc(inp) local i, j, outp, inpArray, maxlength, newTerm, outpLengths, outpTerms: outpLengths:=Array([]): outpTerms:=Array([]): inpArray:=BarToArrayCollected(inp): maxlength:=0: for i from 1 to ArrayNumElems(inpArray(1)) do if nops(inpArray(2)(i))>maxlength then maxlength:=nops(inpArray(2)(i)): end if: end do: newTerm:=0: for i from 1 to ArrayNumElems(inpArray(1)) do if (inpArray(2)(i)=[1]) then newTerm:=newTerm+inpArray(1)(i): end if: end do: if not(newTerm=0) then outpLengths(1):=0: outpTerms(1):=newTerm: end if: for j from 1 to maxlength do newTerm:=0: for i from 1 to ArrayNumElems(inpArray(1)) do if (nops(inpArray(2)(i))=j and not(inpArray(2)(i)=[1])) then newTerm:=newTerm+inpArray(1)(i)*bar(op(inpArray(2)(i))): end if: end do: if not(newTerm=0) then outpLengths(ArrayNumElems(outpLengths)+1):=j: outpTerms(ArrayNumElems(outpTerms)+1):=newTerm: end if: end do: outp:=Array([]): outp(1):=outpLengths: outp(2):=outpTerms: return outp: end proc: # The same purpose as the previous procedure, using tables: SortByLengthTable:=proc(inp) local i, j, outp, inpTable, maxlength, newTerm, outpLengths, outpTerms: outpLengths:=[]: outpTerms:=[]: inpTable:=table(): BarToTable(inp, inpTable): maxlength:=0: for i in indices(inpTable,'nolist') do if nops(i)>maxlength then maxlength:=nops(i): end if: end do: newTerm:=0: for i in indices(inpTable,'nolist') do if (i=[1]) then newTerm:=newTerm+inpTable[i]: end if: end do: if not(newTerm=0) then outp[0]:=newTerm: end if: for j from 1 to maxlength do newTerm:=0: for i in indices(inpTable,'nolist') do if (nops(i)=j and not(i=[1])) then newTerm:=newTerm+inpTable[i]*bar(op(i)): end if: end do: if not(newTerm=0) then outp[j]:=newTerm: end if: end do: return outp: end proc: #################################################################### #################################################################### # # ARNOLD RELATIONS # #################################################################### #################################################################### # The following few procedures serve for the construction of Arnold equations. BasePosition:=proc(Indexi, Indexj) return (((Indexi-1)^2-Indexi+1)/2)+Indexj: end proc: BuildBaseReplacements:=proc(vars, varc) local i, j, k, RepForm, output, AuxProd: output:=[]: for j from 1 to MPLnumberofvar do RepForm:=0: AuxProd:=1: for k from 1 to j do RepForm:=RepForm+d(varc[k])/varc[k]: AuxProd:=AuxProd*varc[k]: end do: output:=[op(output), d(vars[j])/vars[j] = RepForm]: output:=[op(output), d(vars[j])/(vars[j]-1) = d(AuxProd)/(AuxProd-1), d(vars[j])/(1-vars[j]) = -d(AuxProd)/(AuxProd-1)]: end do: for j from 1 to MPLnumberofvar do for i from 1 to j-1 do RepForm:=0: AuxProd:=1: for k from 1 to i do RepForm:=RepForm+d(varc[k])/varc[k]: end do: for k from i+1 to j do AuxProd:=AuxProd*varc[k]: end do: output:=[op(output), (d(vars[j])-d(vars[i]))/(vars[j]-vars[i]) = RepForm+d(AuxProd)/(AuxProd-1), (d(vars[j])-d(vars[i]))/(vars[i]-vars[j]) = -RepForm-d(AuxProd)/(AuxProd-1)]: end do: end do: return output: end proc: BuildFiberReplacements:=proc(vars, varc) local i, j, k, RepForm, output, AuxProd: AuxProd:=1: for i from 1 to MPLnumberofvar+1 do AuxProd:=AuxProd*varc[i]: end do: output:=[d(vars[MPLnumberofvar+1])/vars[MPLnumberofvar+1]=d(varc[MPLnumberofvar+1])/varc[MPLnumberofvar+1], d(vars[MPLnumberofvar+1])/(vars[MPLnumberofvar+1]-1)=d(AuxProd)/(AuxProd-1), d(vars[MPLnumberofvar+1])/(-vars[MPLnumberofvar+1]+1)=d(AuxProd)/(-AuxProd+1)]: for j from 1 to MPLnumberofvar do AuxProd:=1: for i from j+1 to MPLnumberofvar+1 do AuxProd:=AuxProd*varc[i]: end do: output:=[op(output), (d(vars[MPLnumberofvar+1])-d(vars[j]))/(vars[MPLnumberofvar+1]-vars[j])=d(AuxProd)/(AuxProd-1)]: end do: return output: end proc: ArnoldCubical:=proc(Form1, Form2) global MPL_CTYPE: local iInd, jInd, SymbForm1, SymbForm2, bs, fs, GSign, RhsCoeff, RhsBase, RhsFiber, Auxform, nVar, BaseRep, FiberRep, varc, OldAndNewExpansionOrder, ctype, OldMPL_CTYPE: if Form1=Form2 then return 0: end if: varc:=MPLvariable: nVar:=MPLnumberofvar+1: SymbForm1:=TotalToSymbols(Form1): SymbForm2:=TotalToSymbols(Form2): GSign:=1: # If SymbForm1 is not greater than SymbForm2 in the order of # Omega_F_true then switch places. if op(SymbForm1)2 elif op(SymbForm1)>2 and SymbForm2=MPLft[1] then GSign:=-GSign; jInd:=op(SymbForm1): RhsCoeff:=[-GSign, GSign, -GSign, GSign]: RhsBase:=[ MPLb[BasePosition(jInd-1, 1)], MPLb[BasePosition(jInd-1, 1)], MPLb[BasePosition(jInd-2, jInd-3)+1], MPLb[BasePosition(nVar-1, nVar-2)+1] ]: RhsFiber:=[ MPLft[jInd-1], MPLft[1], MPLft[1], MPLft[jInd-1] ]: # Case c: MPLft[j] wedge MPLft[2], j>2 elif op(SymbForm1)>2 and SymbForm2=MPLft[2] then jInd:=op(SymbForm1): RhsCoeff:=[GSign, -GSign, -GSign]: RhsBase:=[ MPLb[BasePosition(nVar+1, jInd-1)], MPLb[BasePosition(nVar+1, jInd-1)], MPLb[BasePosition(jInd-2, jInd-3)+1] ]: RhsFiber:=[ MPLft[nVar+1], MPLft[jInd-1], MPLft[nVar+1] ]: # Case d: MPLft[j] wedge MPLft[i], j>i>2 elif op(SymbForm1)>3 and op(SymbForm2)>2 then jInd:=op(SymbForm1): iInd:=op(SymbForm2): RhsCoeff:=[-GSign, GSign, GSign, -GSign]: RhsBase:=[ MPLb[BasePosition(jInd-1, iInd-1)], MPLb[BasePosition(jInd-1, iInd-1)], MPLb[BasePosition(iInd-2, iInd-3)+1], MPLb[BasePosition(jInd-2, jInd-3)+1] ]: RhsFiber:=[ MPLft[jInd-1], MPLft[iInd-1], MPLft[jInd-1], MPLft[iInd-1] ]: end if: # Translate back from symbolic notation to actual forms. BaseRep:=BuildBaseReplacements(vars, varc): OldAndNewExpansionOrder:=MPLExpansionOrder: OldMPL_CTYPE:=MPL_CTYPE: MPL_CTYPE:=1: MPLInitialize(vars, MPLnumberofvar+1, false, false): RhsBase:=SymbolsToTotal(RhsBase): RhsBase:=subs(BaseRep, RhsBase): RhsFiber:=SymbolsToTotal(RhsFiber): MPL_CTYPE:=2: MPLInitialize(varc, MPLnumberofvar-1, false, false): FiberRep:=BuildFiberReplacements(vars, varc): RhsFiber:=subs(FiberRep, RhsFiber): MPL_CTYPE:=OldMPL_CTYPE: return TotalToSymbols(PullListsApart([RhsCoeff, RhsBase, RhsFiber])): end proc: GetArnoldRhsCubical:=proc(Form1, Form2, outputexpr, symbolic) local i, NewEq, EqNumber, SymbForm1, SymbForm2, Auxform, GSign, SignS1, SignS2, SymbForm1Abs, SymbForm2Abs, outputList, output: if Form1=Form2 then return 0: end if: SymbForm1:=TotalToSymbols(Form1): SymbForm2:=TotalToSymbols(Form2): SignS1:=sign(SymbForm1): SignS2:=sign(SymbForm2): SymbForm1Abs:=SignS1*SymbForm1: SymbForm2Abs:=SignS2*SymbForm2: GSign:=SignS1*SignS2: # If SymbForm1Abs is not greater than SymbForm2Abs in the order of # Omega_F_true then switch places. if op(SymbForm1Abs) j. Then the corresponding Arnold-matrix is the one at position ((i - 1)^2 - i + 1)/2 + j in the # list of matrices. GetArnoldMatrices:=proc() local i, j, k, h, counteri, counterj, counter, output, newmatrix, Coordinates, OmegaB, OmegaFtilde, GenericRHS, SolutionList, LHS, ArnoldEQ, NumberOfMatrices; userinfo(2,'arnold',"(n, ctype): The list of all 'Arnold-matrices' for given n and type of coordinates. There is one matrix for each possible wedge-product of two elements in Omega_F_tilde, and the matrix-elements are the coefficients in the right-hand-side of the Arnold-relations."); output:=[]: OmegaB:=MPLFormsBase(): OmegaFtilde:=MPLFormsFiber(true): NumberOfMatrices:=binomial(nops(OmegaFtilde),2): # simplicial coordinates: ---------------------------------------------------- if MPL_CTYPE=1 then counter:=0: for i from 1 to nops(MPL_COORDINATES)-1 do for j from 0 to i-1 do if not(i=MPLnumberofvar) and not(j=MPLnumberofvar) then # create a new matrix with all entries zero: newmatrix:=ZMatrix(nops(OmegaB),nops(OmegaFtilde)): # change two of the matrix-elements appropriately, according the Arnold relation in simplicial coordinates: if i>MPLnumberofvar then counteri:=i-1: else counteri:=i: end if: if j>MPLnumberofvar then counterj:=j-1: else counterj:=j: end if: newmatrix[counter+1,counteri+1]:=-1: newmatrix[counter+1,counterj+1]:=1: # add the new matrix to the list: output:=[op(output),newmatrix]: counter:=counter+1: end if: end do: end do: # cubical coordinates: ---------------------------------------------------- elif MPL_CTYPE=2 then if MPLnumberofvar>3 then print("The computation will take more than just a few minutes."): end if: print(cat("Of ", convert(NumberOfMatrices,string), " matrices the program already generated: " ) ): GenericRHS:=0: SolutionList:=[]: for k from 2 to nops(OmegaFtilde) do for h from 1 to k-1 do newmatrix:=ZMatrix(nops(OmegaB),nops(OmegaFtilde)): LHS:=OmegaFtilde[k] &^ OmegaFtilde[h]: # The Arnold-relations are obtained using the procedure GetArnoldCoefficients. if LHS=0 then output:=[op(output), newmatrix]: else SolutionList:=GetArnoldCoefficients(LHS): if not(SolutionList=[]) then counter:=1: for i from 1 to nops(OmegaB) do for j from 1 to nops(OmegaFtilde) do newmatrix[i,j]:=SolutionList[counter]: counter:=counter+1: end do: end do: # We expect everything to work, but for the case that the Maple-procedure RationalCoefficients # fails at some point, there is an error-message: else print("Error: Not all Arnold-matrices could be generated by 'GetArnoldMatrices'."): print("The problem occurs for the left-hand side:"): print(LHS): end if: output:=[op(output), newmatrix]: end if: print(cat(" ",convert(nops(output),string)) ): end do: end do: # symbolic coordinates (for testing-purposes):----------------------------------- elif MPL_CTYPE=50 then counter:=1: for i from 1 to nops(MPL_COORDINATES)-1 do for j from 0 to i-1 do if not(i=MPLnumberofvar) and not(j=MPLnumberofvar) then # create matrix with all entries zero: newmatrix:=ZMatrix( nops(OmegaB),nops(OmegaFtilde)): # for some values of n we invent fantasy-matrices for testing purposes: # n=2: if MPLnumberofvar=2 then if counter=1 then newmatrix[1,1]:=a[1]: newmatrix[1,2]:=a[2]: elif counter=2 then newmatrix[1,2]:=a[3]: newmatrix[2,2]:=a[4]: elif counter=3 then newmatrix[2,3]:=a[5]: end if: # n=4: elif MPLnumberofvar=4 then if counter=1 then newmatrix[1,1]:=a[1]: newmatrix[1,4]:=a[2]: newmatrix[3,5]:=a[3]: elif counter=2 then newmatrix[2,4]:=a[3]: newmatrix[2,5]:=a[4]: newmatrix[3,3]:=a[5]: newmatrix[3,4]:=a[6]: elif counter=3 then newmatrix[2,2]:=a[1]: newmatrix[2,4]:=a[2]: newmatrix[3,1]:=a[3]: newmatrix[3,3]:=a[4]: elif counter=4 then newmatrix[1,1]:=a[1]: newmatrix[1,2]:=a[2]: newmatrix[1,3]:=a[3]: newmatrix[1,4]:=a[4]: newmatrix[1,5]:=a[5]: newmatrix[3,3]:=a[3]: elif counter=5 then newmatrix[2,1]:=a[1]: newmatrix[2,2]:=a[2]: newmatrix[2,4]:=a[3]: newmatrix[3,5]:=a[5]: elif counter=6 then newmatrix[1,4]:=a[4]: newmatrix[1,5]:=a[5]: elif counter=8 then newmatrix[1,2]:=a[5]: newmatrix[2,2]:=a[3]: newmatrix[3,2]:=a[4]: elif counter=9 then newmatrix[1,1]:=a[5]: newmatrix[2,2]:=a[4]: elif counter=10 then newmatrix[2,4]:=a[1]: end if: end if: output:=[op(output),newmatrix]: counter:=counter+1: end if: end do: end do: # further coordinates ... else output:=[]: end if: return output: end proc: # The Arnold matrices for the given weight and coordinate-type are generated and written to a file. StoreArnoldMatrices:=proc() local ActiveFile, OpenedFile, newstring: userinfo(1,'arnold'," The Arnold matrices for the given weight and coordinate-type are generated and written to a file."): if MPL_CTYPE=1 then ActiveFile:="MatricesSimplicial.txt": elif MPL_CTYPE=2 then ActiveFile:="MatricesCubical.txt": elif MPL_CTYPE=50 then ActiveFile:="MatricesTestcoordinates1.txt": else return "There is no file for the chosen type of coordinates yet.": end if: # If the chosen file does not exist yet, it is created now. if not(Exists(ActiveFile)) then fopen(ActiveFile,WRITE): fclose(ActiveFile): fopen(ActiveFile,READ): fclose(ActiveFile): end if: # If n is smaller or equal the number of lines in the file, these matrices have already been # stored and can not be added again. if (MPLnumberofvar <= FileTools[Text][CountLines](ActiveFile)) then print("These matrices are already stored."): elif (MPLnumberofvar > (FileTools[Text][CountLines](ActiveFile)+1)) then print("You first have to store the matrices of this coordinate-type for lower weights."): else fclose(ActiveFile): OpenedFile:=fopen(ActiveFile, APPEND): newstring:=convert(GetArnoldMatrices(),string): writeline(OpenedFile, newstring): fclose(ActiveFile): print(cat("The matrices were generated and stored in file: ",ActiveFile)): end if: end proc: # The Arnold matrices for the given weight and coordinate-type are read from a file. ReadArnoldMatrices:=proc() local i, ActiveFile, OpenedFile, newstring, output: userinfo(1,'arnold',"(n::integer, ctype::integer): The Arnold matrices for the given weight and coordinate-type are read from a file."): output:=[]: if MPL_CTYPE=1 then ActiveFile:="MatricesSimplicial.txt": elif MPL_CTYPE=2 then ActiveFile:="MatricesCubical.txt": elif MPL_CTYPE=50 then ActiveFile:="MatricesTestcoordinates1.txt": else return "There is no file for the chosen type of coordinates yet.": end if: # If the chosen file does not exist yet, an error message in shown. if not(Exists(ActiveFile)) then print("Error: The program tried to open a file that does not exist."): else # If the matrices are not contained in the file yet, an error message is shown. if MPLnumberofvar>FileTools[Text][CountLines](ActiveFile) then print("Error: The program tried to access matrices which were not generated yet."): else fclose(ActiveFile): OpenedFile:=fopen(ActiveFile,READ): # Go to the n-th line by successive calls of readline. for i from 1 to MPLnumberofvar-1 do readline(OpenedFile): end do: # Read the n-th line. output:=readline(OpenedFile): fclose(OpenedFile): return output: end if: end if: end proc: # GetArnoldRHS(form1, form2, expr, symbolic): Derives the right-hand-side of the Arnold-relation, where the left-hand-side is form1^form2. # The Arnold-matrices are obtained from files, previously generated with StoreArnoldMatrices. # The boolean variable expr fixes whether the output is given as three lists of factors (expr=false) or as one expression where # the wedge-products are written explicitely. # The expression has the form of a sum over terms c_i * b_i ^ f_i where the c_i are scalar coefficients # (i.e. entries of the Arnold-matrices, possibly times a sign), the b_i are elements of Omega_B and the f_i # are elements of Omega_F_tilde. For expr=false, the the three lists contain the c_i in a first, the f_i in a second and the b_i in a third list. GetArnoldRHS:=proc(form1, form2, outputexpr::boolean, symbolic::boolean) local k, i, counter, counterF, counterB, signfactor, matrixnumber, output, OmegaB, OmegaFtilde, ArnoldMatrices, ArnoldMatrix::Matrix, found1, found2, foundmax, foundmin, outputcoeff, outputF, outputB; userinfo(1,'arnold',"(form1, form2, n, ctype, expr): Right-hand-side of the Arnold-relation, where the left-hand-side is form1^form2. For expr=true the output has the form of an expression. For expr=false the factors are sorted in lists."): if MPL_CTYPE=2 then return GetArnoldRhsCubical(form1, form2, outputexpr, symbolic): end if: output:=[]: OmegaB:=MPLFormsBase(): OmegaFtilde:=MPLFormsFiber(true): ArnoldMatrices:=parse(ReadArnoldMatrices()): # There will only be a non-empty output if form1 and form2 belong to OmegaFtilde. # The variables found1 and found2 are the positions in OmegaFtilde where form1 and form2 are found. # They are zero if the forms are not found. found1:=0: found2:=0: for k from 1 to nops(OmegaFtilde) do if (not(symbolic) and OmegaFtilde[k]=form1) or (symbolic and MPLft[k]=form1) then found1:=k: end if: if (not(symbolic) and OmegaFtilde[k]=form2) or (symbolic and MPLft[k]=form2) then found2:=k: end if: end do: if found1=found2 then return 0: elif found1+found2<2 then return []: else #The left-hand side of the Arnold relation is form1 wedge form2. #If form1 appears earlier in OmegaFtilde than form2, we obtain an additional sign. if found11 then BarLists:=BarDiff(SymbolsToTotal(Lift(newword)), false, symbolic): for k from 1 to nops(BarLists[1]) do output:=output + (-1)*inputcoeffs[i]*BarLists[1][k]* tens(BarLists[2][k], bar(op(Lower(BarLists[3][k])))): end do: end if: end do: end if: return output: end proc: TotalDiff:=proc(inputterm, symbolic::boolean) ##option remember: local i, j, k, m, output, inputlists, firstpartlists, inputcoeffs, inputwords, outputcoeffs, outputwords, wordcutfirst, BarLists, newword, loweredword, IntW1, IntW2: userinfo(1,'bar',"(word, n::integer, ctype::integer, expr::boolean): The integrable words, derived from an input word in the forms on the fiber."): # The inputterm is assumed to be a linear combination of words. We transform it into a list of lists. inputlists:=BarToLists(inputterm): inputcoeffs:=inputlists[1]: inputwords:=inputlists[2]: output:=0: if nops(inputcoeffs)=0 then return output: else # First part of psi: output:= output + MPLdInternal(inputterm): # Second part of psi: for i from 1 to nops(inputcoeffs) do newword:=inputwords[i]: if nops(newword)>1 then BarLists:=BarDiff(SymbolsToTotal(Lift(newword)), false, symbolic): for k from 1 to nops(BarLists[1]) do output:=output + (-1)*inputcoeffs[i]*BarLists[1][k]* tens(bar(BarLists[2][k]), bar(op(Lower(BarLists[3][k])))): end do: end if: end do: end if: return output: end proc: # User-friendly symbol map: MPLSymbolMap:=proc(inp) return SymbolsToTotal(IntWordsRecursive(inp)): end proc: # Actual symbol map in symbolic notation: IntWordsRecursive:=proc(inp) ##option remember: local output, TDterm, inputterm: inputterm:=FiberToSymbols(inp): TDterm:=TotalDiff(inputterm, true): output:=conc(expand(evalindets(TDterm, 'specfunc(anything, tens)', proc (h) options operator, arrow; subsop(2 = IntWordsRecursive(op(2,h),true),h) end proc))): return output: end proc: # ... returning a table: IntWordsRecursiveTable:=proc(inp) ##option remember: local i, output, TDterm, inputterm, prefactor: output:=table(): for i in indices(inp, nolist) do prefactor:=inp[i]: inputterm:=FiberToSymbols(bar(op(i))): TDterm:=TotalDiff(inputterm, true): BarToTable(prefactor*normal(SymbolsToTotal(conc(expand(evalindets(TDterm, 'specfunc(anything, tens)', proc (h) options operator, arrow; subsop(2 = IntWordsRecursive(op(2,h),true),h) end proc))))), output): end do: return output: end proc: # The unshuffle map: MPLUnshuffle:=proc(inp, va) local i, j, k, SortedInput, outp, inpList, maxlength, fn1, fn1List, fTens1, oldxi, xi, fTensList, Co, fTensNext: outp:=0: # Sort the input by the length of the words. SortedInput:=SortByLength(inp): for k from 1 to ArrayNumElems(SortedInput(1)) do if SortedInput(1)(k)=0 then outp:=outp+SortedInput(2)(k): else # Initial step of the iteration: fn1:=restrictF(SortedInput(2)(k), va, 0): fn1List:=BarToLists(fn1): fTens1:=0: for i from 1 to nops(fn1List[1]) do fTens1:=fTens1+fn1List[1][i]*tens(ONE, bar(op(fn1List[2][i]))): end do: outp:=outp+fTens1: ###if SortedInput(1)(k)>0 then # Iteration: oldxi:=SortedInput(2)(k)-SymbolsToTotal(IntWordsRecursive(fn1)): fTensList:=TensToList(fTens1): for j from 1 to SortedInput(1)(k) do Co:=TensToLists(Coproduct(oldxi, j)): fTensNext:=0: xi:=oldxi: for i from 1 to nops(op(3,Co)) do fTensNext:=fTensNext+Co[1][i]*tens(Co[2][i], restrictF(Co[3][i], va, 0)): xi:=xi-Co[1][i]*MPLShuffleProduct(Co[2][i], SymbolsToTotal(IntWordsRecursive(restrictF(Co[3][i], va, 0)))): end do: oldxi:=xi: outp:=outp+fTensNext: end do: ###end if: end if: end do: return outp: end proc: # For a given tensor-product of bar-terms, the following procedure takes the integrable words of the right part # and shuffles with the left part. This can be used to check the MPLUnshuffle procedure as it is it's inverse. MPLSymbolAndShuffle:=proc(inp) local i, j, outp, TensList: outp:=0: TensList:=TensToLists(inp): for i from 1 to nops(TensList[1]) do outp:=outp+TensList[1][i]*eval(MPLShuffleProduct(TensList[2][i], SymbolsToTotal(IntWordsRecursive(TensList[3][i]))), ONE=1): end do: return outp: end proc: # The following are auxiliary procedures to check the integability condition. # (not entirely reliable but also not used by other parts of the program) IsBarWedgeZero:=proc(inp) local i, j, auxexp, BarLists, testpoly, newterm: BarLists:=BarToListsCollected(inp): testpoly:=0: for i from 1 to nops(BarLists[1]) do newterm:=1: for j from 1 to nops(BarLists[2][i]) do if has(BarLists[2][i][j], `&^`) then testpoly:=testpoly+BarLists[1][i]*BarLists[2][i][j]*auxexp[j]: else testpoly:=testpoly+BarLists[1][i]*denom(BarLists[2][i][j])*auxexp[j]: end if: end do: end do: return simpform(normal(testpoly)): end proc: CheckIntegrability:=proc(inp) local i, j, BarLists, dList, WedgeList, testterm: testterm:=0: BarLists:=BarToListsCollected(inp): for i from 1 to nops(BarLists[1]) do if BarLists[2][i]=[1] then testterm:=testterm + BarLists[1][i]: else dList:=BarLists[1][i]: for j from 1 to nops(BarLists[2][i]) do dList:=BarLists[2][i]: dList[j]:=d(BarLists[2][i][j]): testterm:=testterm + BarLists[1][i]*bar(op(dList)): end do: WedgeList:=WedgeNeighbours(BarLists[2][i]): for j from 1 to nops(WedgeList) do testterm:=eval(testterm+BarLists[1][i]*bar(op(WedgeList[j]))): end do: end if: end do: return IsBarWedgeZero(testterm): end proc: #################################################################### #################################################################### # # CONSTRUCTION OF A BASIS # #################################################################### #################################################################### # Computes the basis of words in the lifted fiber of length 'weight'. # Auxiliary procedure for MPLBasis. MPLBasisLiftedFiber:=proc(var, nvar, weight) local i, j, k, fiberforms, setchoices, setperm, barterm, listsymbols, newsymbol, newfiberforms, vbasis: MPLInitialize(var,nvar-1): fiberforms:=MPLFormsFiber(false): newfiberforms:=fiberforms: vbasis:=[]: for k from 1 to weight do for i from 2 to k do newfiberforms:=[op(newfiberforms),op(fiberforms)]: end do: setchoices:=choose(newfiberforms,k): listsymbols:=[]: for i from 1 to nops(setchoices) do setperm:=permute(setchoices[i]): for j from 1 to nops(setperm) do barterm:=bar(op(setperm[j])): newsymbol:=MPLSymbolMap(barterm): if not(member(newsymbol,listsymbols)) then listsymbols:=[op(listsymbols), newsymbol]: end if: end do: end do: vbasis:=[op(vbasis),listsymbols]: end do: return vbasis: end proc: # Computes all shuffle-products of elements of two vectorspaces. # Auxiliary procedure for MPLBasis. MPLShuffleVectorspaces:=proc(space1, space2, maxweight) local i, j, k, h, set1, set2, Shufflespace, newproduct, outp: outp:=[]: if maxweight>nops(space1) or maxweight>nops(space2) then print("The desired weight is higher than the maximal weight in (one of) the given vectorspaces. Therefore, the full vectorspace of shuffle products up to this weight cannot be computed."): return: end if: for i from 0 to maxweight do Shufflespace:=[]: for j from 0 to i do if j=0 then set1:=[1]: else set1:=space1[j]: end if: if i-j=0 then set2:=[1]: else set2:=space2[i-j]: end if: for k from 1 to nops(set1) do for h from 1 to nops(set2) do newproduct:=MPLShuffleProduct(set1[k],set2[h]): if not(member(newproduct,Shufflespace)) then Shufflespace:=[op(Shufflespace),newproduct]: end if: end do: end do: end do: if i>0 then outp:=[op(outp), Shufflespace]: end if: end do: return outp: end proc: # Constructs a basis of the vectorspace of integrable words in letters with # nvar variables up to a lenght given by the argument 'weight'. MPLBasis:=proc(var, nvar, weight) local i, initialset: if nvar=1 then return MPLBasisLiftedFiber(var,nvar,weight): else return MPLShuffleVectorspaces(MPLBasis(var,nvar-1,weight),MPLBasisLiftedFiber(var,nvar,weight),weight); end if: end proc: #################################################################### #################################################################### # # SERIES EXPANSION # #################################################################### #################################################################### # For a chosen variable va, restrictR sets d(va)=0, va=u. restrictR:=proc(inp, va, u) local output: if has(va, MPL_COORDINATES) then output:= subs(d(va)=0,inp): output:=subs(va=u,output): else output:=inp: end if: return eval(output): end proc: # For a chosen variable va, restrictF sets all other coordinates x=0 and d(x)=0. restrictF:=proc(inp, va, u) local i, j, DelCoordinates, output, ReplaceCoords, ZetaTerm: output:=inp: ReplaceCoords:=[op(MPL_COORDINATES), op(GlobalCoordinates)]: if has(va, ReplaceCoords) then DelCoordinates:=subs(va=NULL,ReplaceCoords): for i from 1 to nops(DelCoordinates) do output:=subs(d(DelCoordinates[i])=0, output): ####output:=subs(DelCoordinates[i]=0, output): end do: end if: ZetaTerm:=0: if u=1 then for j from 1 to nops(ReplaceCoords) do if not(ReplaceCoords[j]=va) and not(inp=ONE) then ZetaTerm:=ZetaTerm+RegularizedZeta(inp, ReplaceCoords[j]); end if: end do: end if: return eval(output + ZetaTerm): end proc: # The following procedure adapts the order to which a series expansion has to # be computed automatically to the problem. It is used internally as extension of # the standard series command. betterSeries := proc (expr, place, orderNeeded) local compOrder, expansion: for compOrder from orderNeeded to orderNeeded+20 do expansion := series(expr, place, compOrder): if orderNeeded <= order(expansion) then return expansion end if: end do: error "Could not expand %1 to order %2 at %3", expr, orderNeeded, place end proc: # The following procedure series-expands combinations of bar-terms at 0 or 1: MPLexp:=proc(inp, va, u::integer, ExpansionOrder::integer:=1) global inpexp: local i, collectedinp, output, symbolicexp, LogTerm, integr, pref, word, seriesterm: output:=0: inpexp:=inp: if not has(inp, va) then return inp: end if: # Error-message if u is not 0 or 1: if not(u=0 or u=1) then print("Error: Limits and expansions have to be evaluated at 0 or 1."): return: end if: collectedinp:=collect(inp, bar,`distributed`, normal): if type(collectedinp, `+`) then output:= map(proc(x) if has(x, bar) then pref:=eval(x, bar=1): word:=[op(op(selectfun(x, bar)))]: else pref:=x: word:=[1]: end if: # If bar-term is a logarithm: if ((nops(word) = 1) and (denom(op(word))=va or denom(op(word))=1-va or denom(op(word))=va-1)) then seriesterm:=convert(betterSeries(pref,va=u, ExpansionOrder), polynom): output:=seriesterm*ExpLog(va, u, bar(op(word)), ExpansionOrder-ldegree(seriesterm,va-u)): # If there is no bar-term or if there is a bar-term, but it doesn't depend on va: elif not(has(word,va)) then output:=convert(betterSeries(pref,va=u, ExpansionOrder), polynom)*bar(op(word)); # All other cases: else output:=convert(betterSeries(pref,va=u, ExpansionOrder), polynom): symbolicexp:=integr(bar(op(word)), va, u, MPLexp(PartialDiff(va, bar(op(word))), va, u, ExpansionOrder-ldegree(output,va-u) )): output := output*eval(subs(integr=IntegrExpl, symbolicexp)): end if: end proc, collectedinp): else if has(collectedinp, bar) then pref:=eval(collectedinp, bar=1): word:=[op(op(selectfun(collectedinp, bar)))]: else pref:=collectedinp: word:=[1]: end if: # If bar-term is a logarithm: if ((nops(word) = 1) and (denom(op(word))=va or denom(op(word))=1-va or denom(op(word))=va-1)) then seriesterm:=convert(betterSeries(pref,va=u, ExpansionOrder), polynom): output:=seriesterm*ExpLog(va, u, bar(op(word)), ExpansionOrder-ldegree(seriesterm,va-u) ): # If there is no bar-term or if there is a bar-term, but it doesn't depend on va: elif not(has(word,va)) then output:=convert(betterSeries(pref,va=u, ExpansionOrder), polynom)*bar(op(word)); # All other cases: else # symbolicexp:=integr(bar(op(word)), va, u, MPLexp(PartialDiff(va, bar(op(word))), va, u )): # output:=convert(series(pref,va=u, MPLExpansionOrder), polynom)*eval(subs(integr=IntegrExpl, symbolicexp)): output := convert(betterSeries(pref,va=u, ExpansionOrder),polynom): symbolicexp:=integr(bar(op(word)), va, u, MPLexp(PartialDiff(va, bar(op(word))), va, u, ExpansionOrder-ldegree(output,va-u))): output := output*eval(subs(integr=IntegrExpl, symbolicexp)): end if: end if: return output: end proc: # Regularisation by wrapping the expansion and eliminatin logarithms: MPLExpand:=proc(inp, va, u::integer, ExpansionOrder::integer:=1) local output: if not has(inp, va) then return inp: end if: output:=MPLexp(inp, va, u, ExpansionOrder): output:=evalindets(output, 'specfunc(anything, ln)', proc (h) options operator, arrow; RegLog(op(1,h), va, u) end proc); if u=1 then output:=normal(subs([ln(epsilon)=0, bar(d(epsilon)/epsilon)=0], output)): else output:=normal(subs([ln(epsilon)=0, bar(d(epsilon)/epsilon)=0], output)): end if: return output: end proc: # Expansion of logarithms: ExpLog:=proc(va, u::integer, inp, ExpansionOrder::integer:=1) local i, BarLists, FirstFactor, SecondFactor, output, s: output:=0: BarLists:=BarToLists(normal(inp)): for i from 1 to nops(BarLists[1]) do FirstFactor:=betterSeries(BarLists[1][i], va=u, ExpansionOrder): if u=0 then if match(denom(op(BarLists[2][i]))=va, va, 's') then SecondFactor:=ln(va): elif match(denom(op(BarLists[2][i]))=va-1, va, 's') then SecondFactor:=-betterSeries(-ln(1-va), va=0, ExpansionOrder): elif match(denom(op(BarLists[2][i]))=va*B-1, va, 's') then SecondFactor:=-betterSeries(-ln(-denom(op(BarLists[2][i]))), va=0, ExpansionOrder): else SecondFactor:=betterSeries(op(BarLists[2][i]), va=0, ExpansionOrder): end if: elif u=1 then if match(denom(op(BarLists[2][i]))=va, va, 's') then SecondFactor:=betterSeries(ln(va), va=1, ExpansionOrder): elif match(denom(op(BarLists[2][i]))=va-1, va, 's') then SecondFactor:=ln(va-1): elif match(denom(op(BarLists[2][i]))=va*B-1, va, 's') then SecondFactor:=betterSeries(ln(denom(op(BarLists[2][i]))), va=1, ExpansionOrder): else SecondFactor:=betterSeries(op(BarLists[2][i]), va=1, ExpansionOrder): end if: else print("Expansions are only supported at 0 and 1"): end if: output:= convert(FirstFactor, polynom) * convert(SecondFactor, polynom); end do: return factor(output): end proc: # regularized loragithm: RegLog:=proc(z, va, u) if z=0 or z=Var0 then return ln(epsilon): elif u=1 and z=va-1 then return ln(epsilon): elif u=1 and z=1-va then return -ln(epsilon): elif u=0 and z=va then return ln(epsilon): else return bar(d(z)/z): end if: end proc: # Explicit computation of the integrals which appear in the algorithm for the series expansion: IntegrExpl:=proc(word, va, u::integer, inp) local output, input, R, N, IndefInt, LimitTerm, auxvar, TestInput, returnvalue: input:=inp: # If the integrand has the form (1/y)*ln(y)^N the output is (1/N)*ln(y)^(N+1). # Else the procedure integrates from zero to y. if u=0 then TestInput:=eval(inp, va=epsilon): if match(TestInput = R*(1/epsilon)*ln(epsilon)^N, epsilon, 'returnvalue') then IndefInt:=eval((R/(N+1))*ln(epsilon)^(N+1), [op(returnvalue)]): else IndefInt:=int(input, va): end if: elif u=1 then input:=eval(inp, va=auxvar+1): if match(input = R*(1/auxvar)*ln(auxvar)^N, auxvar, 'returnvalue') then IndefInt:=eval(eval((R/(N+1))*ln(auxvar)^(N+1), [op(returnvalue)]), auxvar=va-1): else IndefInt:=eval(int(input, auxvar),auxvar=va-1): end if: end if: output:=IndefInt + u*Reg(word, va): return output: end proc: #################################################################### #################################################################### # # LIMITS # #################################################################### #################################################################### # RegValue computes the regularized value at 0 or 1, # using MPLexp and RegLog. RegValue:=proc(va, u::integer, inp) local seriesexp, output: # If inp is not a bar-term, the usual limit at u is taken. if has(inp,bar)=false then return limit(inp, va=u): end if: # Compute the expansion with MPLexp. seriesexp:=factor(eval(MPLexp(inp, va, u),csgn=0)): # Introduce RegLog for ln and evaluate at u. output:=eval(subs(ln='RegLog', simplify(seriesexp)), va=u): return output: end proc: # For two integers r and k, rPartitions returns all possible sequences [i1, i2, ..., ir] with i1+i2+...+ir = k. # Here all i are greater or equal zero. rPartitions:=proc(r::integer, k::integer) local i, j, partitionlist, output, newpart, oldpart: partitionlist:=partition(k+r): output:=[]: for i from 1 to nops(partitionlist) do if nops(partitionlist[i])=r then oldpart:=partitionlist[i]: newpart:=[]: for j from 1 to nops(oldpart) do newpart:=[op(newpart), oldpart[j]-1]: end do: output:=[op(output),op(permute(newpart))]: end if: end do: return output: end proc: # For a sequence with one or many zeroes at the right end, (cases treated with equation R2) aTOn returns a sequence, # where the first number is the number of zeroes at the right end, corresponding to the number k in eq. R2, and all other numbers correspond to n1, n2, ...,nr. aTOn:=proc(inp) local i, counter, zerocounter, stopcounting, output: if inp[nops(inp)]=0 then # At first we count the number of zeros at the end of the sequence. zerocounter:=1: stopcounting:=false: for i from 1 to nops(inp)-1 do if inp[nops(inp)-i]=0 then zerocounter:=zerocounter+1: else if not(stopcounting) then output:=[zerocounter]: stopcounting:=true: end if: end if: end do: # Now we collect all n. counter:=0: for i from 1 to nops(inp)-output[1] do if op(i,inp)=0 then counter:=counter+1: elif op(i,inp)=1 then output:=[op(output),counter+1]: counter:=0: end if: end do: end if: return output: end proc: # For a sequence of numbers giving the n-notation, i.e. the notation obtained from aTOn, # the following gives back the sequence of zeroes and ones. nTOa:=proc(inp) local i, j, output: output:=[]: for i from 1 to nops(inp) do output:=[1, op(output)]: for j from 1 to inp[nops(inp)-i+1]-1 do output:=[0, op(output)]: end do: end do: return output: end proc: # Similar to restrictF above: restrictFZero:=proc(inp, va) local i, j, DelCoordinates, output, ReplaceCoords, ZetaTerm: output:=inp: ReplaceCoords:=[op(MPL_COORDINATES), op(GlobalCoordinates)]: if has(va, ReplaceCoords) then DelCoordinates:=subs(va=NULL,ReplaceCoords): for i from 1 to nops(DelCoordinates) do output:=subs(d(DelCoordinates[i])=0, output): output:=subs(DelCoordinates[i]=0, output): end do: end if: ZetaTerm:=0: if u=1 then for j from 1 to nops(ReplaceCoords) do if not(ReplaceCoords[j]=va) and not(inp=ONE) then ZetaTerm:=ZetaTerm+RegularizedZeta(inp, ReplaceCoords[j]); end if: end do: end if: return eval(output + ZetaTerm): end proc: # Regularization: Reg:=proc(inp, va) local Copr, output, word, pref, collectedinp: if not(has(inp,va)) then return inp: end if: output:=0: collectedinp:=collect(inp, bar,`distributed`): if type(collectedinp, `+`) then output:= map(proc(x) if has(x, bar) then pref:=eval(x, bar=1): word:=[op(op(selectfun(x, bar)))]: else pref:=x: word:=[1]: end if: Copr:=Coproduct(bar(op(word))): output:=eval(evalindets(Copr, 'specfunc(anything, tens)', proc (h) options operator, arrow; pref*restrictR(op(1,h), va, 1) *RegularizedZeta(restrictFZero(op(2, h), va), va) end proc), ONE=1): end proc, collectedinp): else if has(collectedinp, bar) then pref:=eval(collectedinp, bar=1): word:=[op(op(selectfun(collectedinp, bar)))]: else pref:=collectedinp: word:=[1]: end if: Copr:=Coproduct(bar(op(word))): output:=eval(evalindets(Copr, 'specfunc(anything, tens)', proc (h) options operator, arrow; pref*restrictR(op(1,h), va, 1)* RegularizedZeta(restrictFZero(op(2, h), va), va) end proc), ONE=1): end if: return output: end proc: # RegularizeZeta applies the equations R0, R1, R2 and R4 to any sequence of zeroes and ones to get the regularized multiple zeta value. RegularizedZeta:=proc(barinp, va) local counter1, l, m, i, j, h, k, r, summation, inp, output, binomialfactor, aTOnSequence, Partitionlist, newn, newinp, newbarinp, prefactor, firstprefac, BarSeq: if barinp=ONE then return 1: end if: for i from 1 to nops(barinp) do if (has(barinp, bar) and not(op(i, barinp)=d(va)/va or op(i, barinp)=d(va)/(1-va) or op(i, barinp)=d(va)/(va-1))) then return 0: end if: end do: # Transferring the bar-input to a sequence of zeroes and ones: BarSeq:=BarToSequence(va, barinp); firstprefac:=op(1, BarSeq): inp:=op(2, BarSeq): # We consider four cases and apply equations R0, R1, R2 and R4 as in # F. Brown: On the decomposition of motivic multiple zeta values. # # Case 1: if all numbers in inp are equal, the result is zero (R0) # We find such cases by summing over all elements and checking if the sum is zero or nops(inp). summation:=0: for l from 1 to nops(inp) do summation:= summation + inp[l]: end do: if summation=0 or summation=nops(inp) then output:=0: # # Case 2: sequence of the form 0,...,1; directly apply R1 to get a multiple zeta value elif inp[1]=0 and inp[nops(inp)]=1 then output:=SequenceToZeta(inp): # # In all other cases we apply R2, but in the case 1,...,1 we first apply R4: else prefactor:=1: newinp:=inp: # # Case 3: sequence of the form 1,...,1; apply R4 to get to the form 0,...,0 if inp[1]=1 and inp[nops(inp)]=1 then prefactor:=1:#######(-1)^nops(inp): newinp:=[]: for m from 1 to nops(inp) do newinp:=[op(newinp), 1-inp[nops(inp)-m+1]]: end do: end if: # # Case 4: sequence of the form 0,...,0 or 1,...,0; apply R2 to get the form 0,...,1. if newinp[nops(newinp)]=0 then # We determine the numbers k, r and all partitions i1+i2+...+ir=k. aTOnSequence:=aTOn(newinp): k:=aTOnSequence[1]: r:=nops(aTOnSequence)-1: Partitionlist:=rPartitions(r, k): prefactor:=prefactor*(-1)^k: output:=0: for i from 1 to nops(Partitionlist) do binomialfactor:=1: for j from 1 to r do binomialfactor:=binomialfactor*binomial(aTOnSequence[j+1]+Partitionlist[i][j]-1, Partitionlist[i][j]): end do: newn:=[]: for h from 1 to nops(aTOnSequence)-1 do newn:=[op(newn), aTOnSequence[h+1]+Partitionlist[i][h]]: end do: # It may be that the output now corresponds to a sequence 1,...,1, requiring the use of R4. # So we call RegularizedZeta recursively to cover these cases. output:=output + binomialfactor * RegularizedZeta(nTOa(newn), va): end do: # From case 3 there may be a prefactor. output:=prefactor * output: end if: end if: return firstprefac*output; end proc: # The following transforms a word with letter d(y)/y and d(y)/(1-y) to the # corresponding sequence of 0 and 1. BarToSequence:=proc(va, inp) local i, prefac, outputlist: # If the input has no bar, we assume that it already is the desired sequence of zeroes and ones # and just return it: if not(has(inp, bar)) then return [1, inp]: end if: # Else: prefac:=1: outputlist:=[]: for i from 1 to nops(inp) do if op(i,inp)=d(va)/va then outputlist:=[op(outputlist), 0]: elif op(i,inp)=d(va)/(1-va) then outputlist:=[op(outputlist), 1]: elif op(i,inp)=d(va)/(va-1) then outputlist:=[op(outputlist), 1]: prefac:=prefac*(-1): end if: end do: return [prefac, outputlist]: end proc: # To a given sequence of numbers 0 and 1 the following procedure associates a symbolic # function zeta(...), representing the multiple zeta value. SequenceToZeta:=proc(inp) local i, counter, word: counter:=0: word:=[]: if op(nops(inp),inp)=1 then for i from 1 to nops(inp) do if op(i,inp)=0 then counter:=counter+1: elif op(i,inp)=1 then word:=[op(word),counter+1]: counter:=0: end if: end do: end if: return zeta(op(word)): end proc: # By the following procedure, if the set of zeroes and ones contains more ones, the set is 'swapped' such that # we obtain an MZV with more zeroes. The procedure is used to simplify results of RegularizedZeta. SwapZeta:=proc(inpzeta) local i, j, inpsequence, numberones, prefactor, newseq: # Assuming the input is zeta(n1, n2, ...), get the corresponding sequence of zeroes and ones. inpsequence:=nTOa([op(inpzeta)]): # Count the number of ones in inpsequence: numberones:=0: for i from 1 to nops(inpsequence) do numberones:=numberones+inpsequence[i]: end do: # If there are more ones than zeroes then swap: if (numberones>nops(inpsequence)-numberones) then prefactor:=(-1)^nops(inpsequence): newseq:=[]: for j from 1 to nops(inpsequence) do newseq:=[op(newseq),1-inpsequence[nops(inpsequence)-j+1]]: end do: else return subs(SymbolicZeta=zeta, inpzeta): end if: return prefactor*subs(SymbolicZeta=zeta, SequenceToZeta(newseq)): end proc: # Cancellation of logarithms of zero or spurious poles # (assuming they are not allowed to occur or cancel): ReturnFinite:=proc(inp) global MPL_CoefflnZeroList, MPLepsUp, MPLepsLow: local i, CoefflnZero, newinp, EpsSeries, newCoeff, lowdegree, oldOrder, TestSeries, OrderOfExpansion, OrderZeroTerm: oldOrder:=Order: newinp:=subs({ln(epsilon)=0, bar(d(epsilon)/epsilon)=0}, inp): ########newinp:=subs({ln(epsilon)=lnZero, bar(d(epsilon)/epsilon)=lnZero}, inp): OrderOfExpansion:=1: # To determine the required orders of the expansion: TestSeries:=convert(series(newinp, epsilon=0),polynom): if ldegree(TestSeries,epsilon)<0 then OrderOfExpansion:=-ldegree(TestSeries,epsilon)+1: end if: EpsSeries:=convert(series(newinp, epsilon=0, OrderOfExpansion),polynom): if EpsSeries=0 then lowdegree:=0: else lowdegree:=ldegree(EpsSeries,epsilon): end if: # Extraction of the pole-terms in epsilon: if lowdegree<0 then for i from 1 to -lowdegree do newCoeff:=normal(coeff(EpsSeries, epsilon^(-i))): if not(newCoeff=0) then MPL_CoefflnZeroList:=[op(MPL_CoefflnZeroList), newCoeff*epsilon^(-i)]: end if: end do: end if: OrderZeroTerm:=coeff(epsilon*EpsSeries, epsilon): CoefflnZero:=normal(coeff(OrderZeroTerm, lnZero)): if not(CoefflnZero=0) then MPL_CoefflnZeroList:=[op(MPL_CoefflnZeroList), CoefflnZero*lnZero]: end if: Order:=oldOrder: return OrderZeroTerm: end proc: # Wrapping procedure for ReturnFinite: EvalBar:=proc(inp) local i, TestTerm, EvalBarTerm, BarLists, newinp, output, newoutput: output:=0: newoutput:=ReturnFinite(inp): return eval(newoutput, lnZero=0): end proc: # The user-friendly procedure taking limits at u=0 or u=1 of an arbitrary bar-term. MPLLimit:=proc(inp, va, u) global MPLepsUp, MPLepsLow: local i, TestTerm, TheExpansion, output, vasymbol, vaN, TermLimitInf, BarLists: output:=0: if u=0 then TheExpansion:=subs(va=epsilon, MPLExpand(inp, va, u)): elif u=1 then TheExpansion:=subs(va=-epsilon+1, MPLExpand(inp, va, u)): elif u=infinity then vasymbol:=op(0,va): vaN:=op(1,va): TermLimitInf:=VarChangeInfinity(inp, vasymbol, vaN): TheExpansion:=subs(va=-epsilon+1, MPLExpand(TermLimitInf, va, 1)): else print("Limits can only be computed at zero or one."): return: end if: output:=eval(EvalBar(TheExpansion)): return output: end proc: #################################################################### #################################################################### # # Primitives # #################################################################### #################################################################### # starN(N, barterm, ...) takes the wedge-product of the N-th and (N+1)-st letter of barterm # and computes the right-hand-side of the corresponding Arnold relation. From there, the # base- and fiber-part are inserted as new letters in barterm. starN:=proc(N::integer, barterm) local i, j, output, BarLists, RHSLists, newword: output:=0: BarLists:=BarToLists(barterm): for i from 1 to nops(BarLists[1]) do if N=1 and nops(BarLists[2][i])=1 then # If the word has only one letter, it is only lifted for taking the primitive, which means starN has nothing to do. output:= 0: elif N < nops(BarLists[2][i]) then # If the second letter is in the base, the letters are just swapped. if not(has(BarLists[2][i][N+1],MPLft)) then newword:=BarLists[2][i]: newword[N]:=BarLists[2][i][N+1]: newword[N+1]:=BarLists[2][i][N]: output:= output + BarLists[1][i] * bar(op(newword)): # if the letters are equal, nothing is added to the output. # Else: elif not(BarLists[2][i][N]=BarLists[2][i][N+1]) then RHSLists:=GetArnoldRHS(BarLists[2][i][N],BarLists[2][i][N+1], false, true): for j from 1 to nops(RHSLists[1]) do newword:=BarLists[2][i]: newword[N]:=RHSLists[2][j]: newword[N+1]:=RHSLists[3][j]: output:= output + (-1)*BarLists[1][i]*RHSLists[1][j] * bar(op(newword)): end do: end if: end if: end do: return output: end proc: # star uses starN as building block to build up the primitive, in the sense: # star(w) = starN(1,w) + starN(2,starN(1,w)) + ... # where w is the concatenation of the arguments fiberform and barterm. star:=proc(fiberform, barterm, maxlength::integer) local i, output, oldterm, newterm: oldterm:=TotalToSymbols(conc(bar(fiberform),barterm)): output:=oldterm: for i from 1 to maxlength do newterm:=starN(i, oldterm): output:= output + newterm: oldterm:=newterm: end do: return output: end proc: # User-friendly wrapping function for the computation of primitives: MPLPrimitive:=proc(fiberform, barterm) local maxlength: maxlength:=max(indices(SortByLengthTable(barterm),nolist)): return SymbolsToTotal(ComputePrimitive(fiberform, barterm, maxlength+1)): end proc: # Actual primitive computation: ComputePrimitive:=proc(fiberform, barterm, maxlength::integer) local i, LiftedBar, LiftedForm, output: LiftedForm:=Lift([fiberform]); #LiftedBar:=IntWordsRecursive(barterm): LiftedBar:=barterm: output:=star(op(LiftedForm), LiftedBar, maxlength): return output: end proc: # The following procedures test the primitive procedure automatically. ComputePrimitiveTest1:=proc(form1, inp) local psiB, LHS, RHS, concatword: concatword:=conc(bar(form1), inp): psiB:=SymbolsToTotal(IntWordsRecursive(inp)): LHS:=SymbolsToTotal(ComputePrimitive(form1, psiB, nops(concatword))): RHS:=SymbolsToTotal(IntWordsRecursive(concatword)): return normal(LHS-RHS): end proc: ComputePrimitiveTest2:=proc(form1, inp) local LHS, RHS, basebar: basebar:=bar(a,b): LHS:=SymbolsToTotal(ComputePrimitive(form1, MPLShuffleProduct(basebar, inp), nops(inp)+nops(basebar)+1)): RHS:=MPLShuffleProduct(basebar, SymbolsToTotal(ComputePrimitive(form1,inp,nops(inp)+1))): return normal(LHS-RHS): end proc: #################################################################### #################################################################### # # INTEGRATION # #################################################################### #################################################################### # ParFrac computes the partial fraction decomposition of prefactors of bar-terms. # It decomposes the output as two lists, the first list, containing the resulting # prefactors and the second the corresponding bar-terms. ParFrac:=proc(va, inp) local i, j, BarLists, Prefac, outputcoeffs, outputbars: outputcoeffs:=[]: outputbars:=[]: BarLists:=BarToLists(inp): for i from 1 to nops(BarLists[1]) do # partial fraction decomposition of the prefactors: Prefac:=convert(BarLists[1][i], parfrac, va); if type(Prefac, `+`) then for j from 1 to nops(Prefac) do outputcoeffs:=[op(outputcoeffs), op(j,Prefac)]: outputbars:=[op(outputbars), bar(op(BarLists[2][i]))]: end do: else outputcoeffs:=[op(outputcoeffs), Prefac]: outputbars:=[op(outputbars), bar(op(BarLists[2][i]))]: end if: end do: return [outputcoeffs, outputbars]: end proc: FindForm:=proc(deninp, forms) local i, j, k, output, newdeninp, NewPoly, PolyFactors: output:=[]: if type(deninp, `^`) then newdeninp:=op(1, deninp): else newdeninp:=deninp: end if: if type(newdeninp, `*`) then for i from 1 to nops(newdeninp) do if type(op(i,newdeninp), `^`) then NewPoly:=op(1, op(i,newdeninp)): else NewPoly:=op(i,newdeninp): end if: for j from 1 to nops(forms) do if NewPoly=denom(forms[j]) then output:=forms[j]: end if: end do: end do: else PolyFactors:=factors(newdeninp): for j from 1 to nops(forms) do for k from 1 to nops(PolyFactors[2]) do if op(1, PolyFactors[2][k])=denom(forms[j]) then output:=forms[j]: end if: end do: end do: end if: return output: end proc: # recognize is a procedure to select terms, which are in a certain form, amenable for the iterated use of # partial fraction decomposition and partial integration: # The output of recognize are terms of the form f*bar(...) where the denominator of f is equal to # the denominator of a form in the fiber to some arbitrary power a and times some term b. # The output consists of three lists: The prefactors, the recognized fiber-forms and the power b. recognize:=proc(inp, forms, va) local i, j, prefactor, DenDegree, output, auxsymbol, FoundForm: output:=[]: if not(has(denom(inp), va)) then output:=[inp,d(va),0]: else FoundForm:=FindForm(denom(inp), forms): DenDegree:=degree(factor(denom(inp)*auxsymbol),denom(FoundForm)): prefactor:=simplify(inp/(FoundForm/d(va))^DenDegree): if not(has(prefactor,va)) then output:=[prefactor,FoundForm,DenDegree]: end if: end if: return output: end proc: # PrepareIntegrand manipulates a linear combination of bar-terms with rational prefactors by iterated # partial fraction decomposition and partial integration until it can be integrated. # PrepareIntegrand manipulates a linear combination of bar-terms with rational prefactors by iterated # partial fraction decomposition and partial integration until it can be integrated. PrepareIntegrand:=proc(va, inp) global MPLepsUp, MPLepsLow: local i, j, h, RecList, inpLists, OmegaF, formF, coeffF, PrefacComputePrimitive, NotReady, Prefac, PrefacList, degreeF, convinp, output, auxresult, AssumingList, newterm, IndefInt: if inp=0 then return 0: end if: output:=0: NotReady:=0: OmegaF:=MPLFormsFiber(false): inpLists:=ParFrac(va, inp); for i from 1 to nops(inpLists[1]) do Prefac:=inpLists[1][i]: formF:=0: # If a term does not depend on the variable, it remains unchanged. if (not(has(Prefac, va)) and not(has(inpLists[2][i], va))) then output:=output + Prefac*bar(op(inpLists[2][i])): # If the term has no bar and no denominator depending on va, just integrate. elif not(has(denom(Prefac), va)) and inpLists[2][i]=1 then output:=output + int(Prefac, va=0..1): else # For all other terms, select terms to which partial integration can be applied: RecList:=recognize(inpLists[1][i], OmegaF, va): if not(RecList=[]) then coeffF:=RecList[1]: formF:=RecList[2]/d(va): degreeF:=RecList[3]: # If a form of the fiber appears in the prefactor to power one, # the term is ready for integration. if degreeF=1 then output:=output+Prefac*bar(op(inpLists[2][i])): # If the term has no bar or a bar-term independent of va and has furthermore a # denominator as in OmegaF, to a power higher than one, # then just integrate. # We use auxiliary variables and introduce assumptions auxvar>0, auxvar<1 to make automatic # integration with Maple's "int(...)" possible. elif (not(formF=1/(va) or formF=1/(1-va) or formF=1/(va-1)) and (degreeF>1 and not(has(inpLists[2][i], va)))) then AssumingList:=[]: for h from 1 to nops(MPL_COORDINATES) do AssumingList:=[op(AssumingList), MPL_COORDINATES[h]>0, MPL_COORDINATES[h]<1]: end do: auxresult:=int(inpLists[1][i], va=0..1) assuming op(AssumingList): output:=output+normal(auxresult)*bar(op(inpLists[2][i])): # If the term has no bar and a denominator as in OmegaF to the power higher than one, # continue partial integration. elif (((formF=1/(va) or formF=1/(1-va) or formF=1/(va-1)) and degreeF>1 and op(inpLists[2][i])=1)) then IndefInt:=int(Prefac, va): output:=output+eval(IndefInt, va=-epsilon+1)-eval(IndefInt, va=epsilon); # If the power is >1 then the iteration of partial fraction decomposition and # partial integration continues. elif degreeF>1 or formF=1 then PrefacComputePrimitive:=int(Prefac,va): NotReady:=NotReady-PrefacComputePrimitive*PartialDiff(va, bar(op(inpLists[2][i]))): output:=output+MPLLimit(PrefacComputePrimitive*bar(op(inpLists[2][i])), va, 1)-MPLLimit(PrefacComputePrimitive*bar(op(inpLists[2][i])), va, 0); # If no fiber-form can be found in a prefactor which depends on the variable, the term is not appropriate. else print("Inappropriate integrand"): end if: else print("Inappropriate integrand"): end if: end if: end do: output:=output + PrepareIntegrand(va, NotReady): return eval(output, {ONE=1, bar( d(epsilon)/epsilon ) = ln(epsilon)}): end proc: # The following few auxiliary procedures compute some of the steps # in the computation of definite integrals over cubical coordinates: MPLintOneBar:=proc(va, inp, OmegaFtilde) local j, ParFracList, pref, word, outp, NewRecognizedList, NewIntForm, NewComputePrimitive: outp:=0: pref:=eval(inp, bar=1): if has(inp, bar) then word:=[op(op(selectfun(inp, bar)))]: else word:=[1]: end if: ParFracList:=ParFrac(va, pref): for j from 1 to nops(ParFracList[1]) do NewRecognizedList:=recognize(op(j,ParFracList[1]), OmegaFtilde, va): NewIntForm:=NewRecognizedList[2]: NewComputePrimitive:=SymbolsToTotal(ComputePrimitive(op(Lift([NewIntForm])), bar(op(word)), nops(word)+1)): outp:=outp + subs(va=-epsilon+1, MPLExpand(NewRecognizedList[1]*NewComputePrimitive, va, 1))-subs(va=epsilon, MPLExpand(NewRecognizedList[1]*NewComputePrimitive, va, 0)): end do: return outp: end proc: MPLintOneBarCubical:=proc(va, inp, OmegaFtilde) local j, ParFracList, pref, word, outp, NewRecognizedList, NewIntForm, NewComputePrimitive: outp:=0: pref:=eval(inp, bar=1): if has(inp, bar) then word:=[op(op(selectfun(inp, bar)))]: else word:=[1]: end if: ParFracList:=ParFrac(va, pref): for j from 1 to nops(ParFracList[1]) do NewRecognizedList:=recognize(op(j,ParFracList[1]), OmegaFtilde, va): NewIntForm:=NewRecognizedList[2]: NewComputePrimitive:=SymbolsToTotal(ComputePrimitive(op(Lift([NewIntForm])), bar(op(word)), nops(word)+1)): outp:=outp + subs(va=-epsilon+1, MPLExpand(NewRecognizedList[1]*NewComputePrimitive, va, 1))-subs(va=epsilon, MPLExpand(NewRecognizedList[1]*NewComputePrimitive, va, 0)): end do: return outp: end proc: MPLint:=proc(va, inp) local inpt, outp: inpt:=table(): BarToTable(inp, inpt): outp:=table(): MPLintTable(va, inpt, outp): return TableToBar(outp): end proc: MPLintCubical:=proc(va, inp) local i, j, PreparedIntegrand, Integrand, BarLists, NewRecognizedList, NewIntForm, NewComputePrimitive, OmegaFtilde, ParFracList, output, finaloutput: OmegaFtilde:=MPLFormsFiber(false): # We firstly apply PrepareIntegrand to the input. PreparedIntegrand:=PrepareIntegrand(va, inp): # We split off the terms, where nothing has to be done anymore. Integrand:=0; if type(PreparedIntegrand,`+`) then for i from 1 to nops(PreparedIntegrand) do if has(op(i,PreparedIntegrand), va) then Integrand:=Integrand + op(i,PreparedIntegrand): end if: end do: else if has(PreparedIntegrand, va) then Integrand:=PreparedIntegrand: end if: end if: output:=PreparedIntegrand-Integrand; # All terms in 'Integrand' are of the form f*bar(...) where f is in the fiber. # Here we take the primitive and the limits at zero and one. Integrand:=collect(Integrand, bar,`distributed`): if type(Integrand, `+`) then finaloutput:=output + map(proc(x) MPLintOneBarCubical(va, x, OmegaFtilde) end proc, Integrand): else finaloutput:=output + MPLintOneBarCubical(va, Integrand, OmegaFtilde): end if: return EvalBar(finaloutput): end proc: MPLintTable:=proc(va, inp, outp) local i, j, h, PreparedIntegrand, Integrand, BarLists, NewRecognizedList, NewIntForm, NewComputePrimitive, OmegaFtilde, ParFracList, output, finaloutput, newinpTerm, symbolinp: OmegaFtilde:=MPLFormsFiber(false): # First the symbol-map is applied to the integrand: symbolinp:=IntWordsRecursiveTable(inp): for h in indices(symbolinp,'nolist') do # We firstly apply PrepareIntegrand to the input. newinpTerm:=symbolinp[h]*bar(op(h)): PreparedIntegrand:=PrepareIntegrand(va, newinpTerm): # We split off the terms, where nothing has to be done anymore. Integrand:=0; if type(PreparedIntegrand,`+`) then for i from 1 to nops(PreparedIntegrand) do if has(op(i,PreparedIntegrand), va) then Integrand:=Integrand + op(i,PreparedIntegrand): end if: end do: else if has(PreparedIntegrand, va) then Integrand:=PreparedIntegrand: end if: end if: output:=PreparedIntegrand-Integrand; # All terms in 'Integrand' are of the form f*bar(...) where f is in the fiber. # Here we take the primitive and the limits at zero and one. Integrand:=collect(Integrand, bar,`distributed`): if type(Integrand, `+`) then for j from 1 to nops(Integrand) do output:=output + MPLintOneBar(va, op(j, Integrand), OmegaFtilde): end do: else output:=output + MPLintOneBar(va, Integrand, OmegaFtilde): end if: finaloutput:=EvalBar(output): BarToTable(finaloutput, outp): end do: return outp: end proc: # The following procedure computes integrations from 0 to 1 over integrands which are already in # cubical coordinates. If for example cubicalvar=u[4], the procedure does a number of integrations # (the argument "integrations") in the ordering u[4], u[3], ... MPLCubicalIntegrate:=proc(inp, cubicalvar, integrations) local i, va, highest, newint, prepint, cubicalset, newset, intvar: va:=op(0,cubicalvar): highest:=op(1,cubicalvar): cubicalset:=[]: for i from 1 to highest do cubicalset:=[op(cubicalset), va[highest+1-i]]: end do: newint:=inp: for i from 1 to integrations do if i=highest then MPLInitialize(va, 1): intvar:=va[2]: newset:=[va[2]]: newint:=subs(va[1]=va[2], newint): else MPLInitialize(va, highest-i): intvar:=va[highest-i+1]: newset:=cubicalset[i..nops(cubicalset)]: end if: newint:=normal(MPLintCubical(intvar,normal(newint))): end do: return newint: end proc: #################################################################### #################################################################### # # FEYNMAN PARAMETER REPLACEMENTS # #################################################################### #################################################################### TrailingZeroes:=proc(inp, va) local i, j, h, k, outp, BarLists, n, newword, wordw, letterb, worda, wordalog, firstbar: BarLists:=BarToListsCollected(inp): outp:=0: for h from 1 to nops(BarLists[1]) do n:=0: newword:=BarLists[2][h]: j:=nops(newword): while (newword[j]=d(va)/va or newword[j]=-d(va)/va) and j>0 do n:=n+1: j:=j-1: if j=0 then break: end if: end do: if n=0 then outp:=outp + BarLists[1][h]*bar(op(newword)): elif n=nops(newword) then outp:=outp + BarLists[1][h]*barlog(op(newword)): else wordw:=[]: for j from 1 to nops(newword)-n-1 do wordw:=[op(wordw),newword[j]]: end do: letterb:=newword[nops(newword)-n]: for i from 0 to n do worda:=[]: for k from 1 to i do worda:=[op(worda), d(va)/va]: end do: wordalog:=[]: for k from 1 to n-i do wordalog:=[op(wordalog), d(va)/va]: end do: if worda=[] then worda:=[ONE]: end if: if wordalog=[] then wordalog:=[ONE]: end if: if wordw=[] then wordw:=[ONE]: end if: firstbar:=eval(MPLShuffleProduct(bar(op(wordw)),bar(op(worda))),ONE=1): if not(has(firstbar,bar)) then outp:=outp + (-1)^i*BarLists[1][h]*firstbar*bar(letterb)*barlog(op(wordalog)): else outp:=outp + (-1)^i*BarLists[1][h]*conc(firstbar,bar(letterb))*barlog(op(wordalog)): end if: end do: end if: end do: return eval(outp,barlog(ONE)=1): end proc: ReplaceBarLog:=proc(inp,reps, FeynPar, va) global MPLSymbForms: local i, j, h, outp, BarLog, BarLogList, RHS, barform, baseform, baseformexpl, barword, baseword, NewSymbRepsBack, nSymbRepsBack, alreadyinMPLSymbForms: outp:=normal(inp): NewSymbRepsBack:=MPLSymbForms: if has(inp, barlog) then nSymbRepsBack:=nops(MPLSymbForms): BarLogList:=[op(selectfun(inp, barlog))]: for h from 1 to nops(BarLogList) do BarLog:=BarLogList[h]: barform:=ReplaceArgument(va, [1=1], reps, d(va), 1, FeynPar): baseformexpl:=ReplaceArgument(va, [1=1], reps, d(va), 2, FeynPar): alreadyinMPLSymbForms:=false: for i from 1 to nops(NewSymbRepsBack) do if op(2,NewSymbRepsBack[i])=baseformexpl then alreadyinMPLSymbForms:=true: baseform:=SymbForm[i]: end if: end do: if not(alreadyinMPLSymbForms) then NewSymbRepsBack:=[op(NewSymbRepsBack), SymbForm[nSymbRepsBack+1]=baseformexpl]: baseform:=SymbForm[nSymbRepsBack+1]: end if: RHS:=0: for i from 0 to nops(BarLog) do barword:=[]: baseword:=[]: for j from 1 to nops(BarLog)-i do barword:=[op(barword),barform]: end do: for j from 1 to i do baseword:=[op(baseword),baseform]: end do: if barword=[] then barword:=ONE: end if: if baseword=[] then baseword:=ONE: end if: RHS:=RHS+barlog(op(barword))*base(op(baseword)): end do: MPLSymbForms:=NewSymbRepsBack: outp:=subs(ONE=1,subs(BarLog=RHS,outp)): end do: end if: return outp: end proc: PrepFeynInt:=proc(inp, FeynPar) local i, j, h, SortedInput, outp, k, fn1, fn1List, fTens1, Co, CoTerm, va, NewList, leftSide, rightSide, rightList, rightbarList, RepList, RepBackList, nopsR: outp:=0: RepList:=[]: RepBackList:=[]: if nops(FeynPar)<2 then return inp: else va:=FeynPar[1]: NewList:=[]: for i from 2 to nops(FeynPar) do NewList:=[op(NewList), FeynPar[i]]: end do: # Sort the input by the length of the words. SortedInput:=SortByLength(inp): for k from 1 to ArrayNumElems(SortedInput[1]) do if SortedInput(1)(k)=0 then outp:=outp+SortedInput(2)(k): else # Take the co-product: Co:=TensToLists(MPLCoproduct(SortedInput(2)(k))): for j from 1 to nops(Co[1]) do leftSide := restrictFFeyn(Co[2][j],FeynPar,va,0): rightSide:=subs(bar=base,restrictRFeyn(Co[3][j],va,0,[])): rightbarList:=selectfun(rightSide, base): rightList:=[]: for h from 1 to nops(rightbarList) do rightList:=[op(rightList),op(rightbarList[h])]: end do: for h from 1 to nops(rightList) do if not(rightList[h]=ONE) and not(rightList[h]=0) and not(has(RepList, rightList[h])) then nopsR:=nops(RepList): RepList:=[op(RepList), rightList[h]=SymbForm[nopsR+1]]: RepBackList:=[op(RepBackList), SymbForm[nopsR+1]=rightList[h]]: end if: end do: rightSide:=subs(RepList, rightSide): outp:=outp+ Co[1][j]*leftSide*rightSide: end do: end if: end do: end if: return [TrailingZeroes(eval(outp,ONE=1),FeynPar[1]), RepBackList]: end proc: Reshuffle:=proc(inp) local i, j, BarLists, outp, BaseL, newterm, BaseCoeff, BaseShuffle: outp:=0: BarLists:=BarToListsCollected(inp): for i from 1 to nops(BarLists[1]) do if has(BarLists[1][i],base) then newterm:=expand(BarLists[1][i]): if type(newterm,`+`) then for j from 1 to nops(newterm) do BaseL:=selectfun(op(j,newterm),base): if nops(BaseL)=1 then # Check if the basefactor appears quadratic: if has(op(j,newterm), BaseL[1]^2) then BaseCoeff:=coeff(op(j,newterm), BaseL[1]^2): BaseShuffle:=MPLShuffleProduct(subs(base=bar, BaseL[1]), subs(base=bar, BaseL[1])): outp:=outp + BaseCoeff * MPLShuffleProduct(BaseShuffle, bar(op(BarLists[2][i]))): else outp:=outp + MPLShuffleProduct(subs(base=bar, op(j,newterm)), bar(op(BarLists[2][i]))): end if: elif nops(BaseL)=2 then BaseCoeff:=coeff(coeff(op(j,newterm), BaseL[1]),BaseL[2]): BaseShuffle:=MPLShuffleProduct(subs(base=bar, BaseL[1]), subs(base=bar, BaseL[2])): outp:=outp + BaseCoeff * MPLShuffleProduct(BaseShuffle, bar(op(BarLists[2][i]))): elif nops(BaseL)=0 then outp:=outp + op(j,newterm)*bar(op(BarLists[2][i])): end if: end do: else BaseL:=selectfun(newterm,base): if nops(BaseL)=1 then # Check if the basefactor appears quadratic: if has(newterm, BaseL[1]^2) then BaseCoeff:=coeff(newterm, BaseL[1]^2): BaseShuffle:=MPLShuffleProduct(subs(base=bar, BaseL[1]), subs(base=bar, BaseL[1])): outp:=outp + BaseCoeff * MPLShuffleProduct(BaseShuffle, bar(op(BarLists[2][i]))): else outp:=outp + MPLShuffleProduct(subs(base=bar, newterm), bar(op(BarLists[2][i]))): end if: elif nops(BaseL)=2 then BaseCoeff:=coeff(coeff(newterm, BaseL[1]),BaseL[2]): BaseShuffle:=MPLShuffleProduct(subs(base=bar, BaseL[1]), subs(base=bar, BaseL[2])): outp:=outp + BaseCoeff * MPLShuffleProduct(BaseShuffle, bar(op(BarLists[2][i]))): elif nops(BaseL)=0 then outp:=outp + newterm*bar(op(BarLists[2][i])): end if: end if: else outp:=outp + BarLists[1][i]*bar(op(BarLists[2][i])): end if: end do: return outp: end proc: ReshuffleLog:=proc(inp) local i, BarLists, outp: outp:=0: BarLists:=BarToListsCollected(inp): for i from 1 to nops(BarLists[1]) do if has(BarLists[1][i],barlog) then outp:=outp + MPLShuffleProduct(subs(barlog=bar, BarLists[1][i]), bar(op(BarLists[2][i]))): else outp:=outp + BarLists[1][i]*bar(op(BarLists[2][i])): end if: end do: return outp: end proc: # The following procedure takes a list of polynomials and derives the corresponding polynomials # relevant after changing the integration domain from 0 to infinity to 0 to 1. ChangeIntDomainPoly:=proc(polynomials, va) local i, output: output:=[]: for i from 1 to nops(polynomials) do if has(polynomials[i], va) then output:=[op(output), factor((va-1)*eval(polynomials[i], va=va/(1-va)))]: end if: end do: return output: end proc: # The following procedure derives rules for replacing polynomials in the e-parameters # by terms involving new cubical coordinates. # The main input specifies a list of polynomials and corresponding variables to solve for. E.g. this input may be # [[[p1, p2, ...], [p3, ...]], [e[1], e[2]]], where p1, p2, p3 are polynomials in the e-parameters. # In this case, in the following derivation of cobical coordinates, the equations p1=0, p2=0, ... are solved for e[1] # and p3=0 is solved for e[2]. CubicalReplacements:=proc(polylists, letter, back::boolean) local i, j, k, counter, cubic, sing, quot, abstrcubic, abstrquot, reps, repsprelim, newnumer, repsback, singlevar, opts, byhand: # As a fourth argument of the procedure, the user can add replacements by hand. opts:=[args[4..nargs]]; if opts=[] then byhand:=[] else byhand:=opts[1]: end if: cubic:=[]: abstrcubic:=[]: quot:=[]: abstrquot:=[]: reps:=[]: repsprelim:=[]: repsback:=[]: singlevar:=[]: counter:=0: # Going through the list of given polynomials P, the program solves equations P=0 with respect to # the corresponding (specified) variable and builds up cubical coordinates and corresponding replacement-rules # from these solutions. # If the list is empty then return a trivial repalcement if nops(polylists[1][1])=0 then if back then return [letter[2]=polylists[2][1]]: else return [polylists[2][1]=letter[2]]: end if: end if: # Else: for i from 1 to nops(polylists[1]) do counter:=counter+nops(polylists[1][i])+1: sing:=[1]: cubic:=[polylists[2][i], op(cubic)]: abstrcubic:=[letter[counter], op(abstrcubic)]: singlevar:=[op(singlevar), polylists[2][i]=letter[counter]]: quot:=[1/polylists[2][i], 1/(1-polylists[2][i])]: abstrquot:=[1/letter[nops(polylists[1][i])+1], 1/(1-letter[nops(polylists[1][i])+1])]: for j from 1 to nops(polylists[1][i]) do sing:=[op(sing),solve(polylists[1][i][j], polylists[2][i])]: cubic:=[sing[j]/sing[j+1], op(cubic)]: abstrcubic:=[letter[counter-j], op(abstrcubic)]: quot:=[op(quot), factor(subs(polylists[2][i]=polylists[2][i]*sing[j]/sing[j+1], quot[j+1]))]: abstrquot:=[op(abstrquot), factor(subs(letter[nops(polylists[1][i])+1]=letter[nops(polylists[1][i])+1]*letter[nops(polylists[1][i])+1-j], abstrquot[j+1]))]: end do: for k from 3 to nops(polylists[1][i])+2 do repsprelim:=[op(repsprelim), denom(quot[k])=denom(abstrquot[k])*numer(quot[k])/numer(abstrquot[k]), -denom(quot[k])=-denom(abstrquot[k])*numer(quot[k])/numer(abstrquot[k])]: end do: end do: # The replacements added by hand are taken into account: repsprelim:=[op(repsprelim), op(byhand)]: for k from 1 to nops(repsprelim) do reps:=[op(reps), op(1, repsprelim[k]) = subs(repsprelim, op(2, repsprelim[k]))]: end do: for k from 1 to nops(singlevar) do reps:=[op(reps), singlevar[k]]: end do: for k from 1 to nops(cubic) do repsback:=[op(repsback), abstrcubic[k]=cubic[k]]: end do: if back then return repsback: else return reps: end if: end proc: # For a given function f=(a*b*...)/(u*v*...) in e-coordinates, the following procedure computes # d(a)/a + d(b)/b +... - d(u)/u - d(w)/w -... in the new cubical coordinates. ReplaceArgument:=proc(f, repback, reps, inpnumerator, dezero, FeynPar) local i, output, numerators, denominators, fFeynNumer, fFeynDenom, SignPrefac, dfinpnum, inpnum: dfinpnum:=normal(d(f)): inpnum:=eval(inpnumerator): if inpnumerator=-dfinpnum then SignPrefac:=-1: elif (inpnumerator=dfinpnum or inpnumerator/f=1) then SignPrefac:=1: elif not(has(inpnumerator,SymbForm)) then print("Warning: A differential one-form is not of the type df/f appeared:"): print(inpnumerator/f): SignPrefac:=1: end if: numerators:=[]: denominators:=[]: output:=0: if f=1 then return 1: end if: fFeynNumer:=numer(factor(subs(reps, f))): fFeynDenom:=denom(factor(subs(reps, f))): if type(fFeynNumer, `^`) then for i from 1 to op(2,fFeynNumer) do numerators:=[op(numerators), op(1,fFeynNumer)]: end do: elif type(fFeynNumer, `*`) then for i from 1 to nops(fFeynNumer) do numerators:=[op(numerators), op(i,fFeynNumer)]: end do: ####if op(1, numerators)=(-1) then SignPrefac:=-1: ####end if: else numerators:=[fFeynNumer]: end if: if type(fFeynDenom, `^`) then for i from 1 to op(2,fFeynDenom) do denominators:=[op(denominators), op(1,fFeynDenom)]: end do: elif type(fFeynDenom, `*`) then for i from 1 to nops(fFeynDenom) do denominators:=[op(denominators), op(i,fFeynDenom)]: end do: else denominators:=[fFeynDenom]: end if: # From here on we assume, that numerators and denominators only contain the new cubical coordinates. for i from 1 to nops(numerators) do output:=output + d(numerators[i])/numerators[i]: end do: for i from 1 to nops(denominators) do output:=output - d(denominators[i])/denominators[i]: end do: if dezero=1 then for i from 1 to nops(FeynPar) do output:=subs(d(FeynPar[i])=0,output): end do: elif dezero=2 then for i from 1 to nops(MPL_COORDINATES) do output:=subs(d(MPL_COORDINATES[i])=0,output): end do: end if: return SignPrefac*output: end proc: # A procedure to check that a polynomial is not trivial: IsNotTrivial:=proc(inp, intvariable) local s: if (has(inp, intvariable) and not(inp=intvariable-1) and not(inp=1-intvariable) and not(inp=intvariable) and not(inp=-intvariable) and not(type(inp,numeric)) and not(match(inp=afactor*intvariable-afactor, intvariable, 's') and type(op(2,op(s)), numeric)) and not(match(inp=-afactor*intvariable+afactor, intvariable, 's') and type(op(2,op(s)), numeric)) and not(match(inp=intvariable^auxvariable, auxvariable,'returnvalue'))) then return true: else return false: end if: end proc: FindPoly:=proc(inp, repsbackold, domaintransf, intvariable) global SymbPoly: local i, j, output, restrictedoutput, BarLists, NumerNewArg, DenomNewArg, newPref, newPrefDenom, NewArgFunction, NewPoly, GenPref, DomainReps, auxvariable, s, afactor, counter, SymbolicReps, SymbolicInt, NewBarArgument: # Changing the domain of integration for all variables in domaintransf: BarLists:=BarToListsCollected(inp): GenPref:=1: DomainReps:=[]: for i from 1 to nops(domaintransf) do GenPref:=GenPref * 1/(domaintransf[i]-1)^2: DomainReps:=[op(DomainReps), domaintransf[i] = domaintransf[i]/(1-domaintransf[i])]: end do: counter:=0: output:=[]: SymbolicInt:=0: SymbolicReps:=[]: # We collect all functions in the demoninators of the bar-arguments. for i from 1 to nops(BarLists[2]) do for j from 1 to nops(BarLists[2][i]) do NewArgFunction:=normalM(denom(BarLists[2][i][j])): NumerNewArg:=numer(NewArgFunction): DenomNewArg:=denom(NewArgFunction): if type(NumerNewArg, `*`) then for j from 1 to nops(NumerNewArg) do if (not(has(output, op(j,NumerNewArg))) and not(has(output, -op(j,NumerNewArg))) and IsNotTrivial(op(j,NumerNewArg), intvariable)) then output:=[op(output), op(j,NumerNewArg)]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(j,NumerNewArg)=SymbPoly[counter], -op(j,NumerNewArg)=-SymbPoly[counter]]: end if: end do: else if (not(has(output, NumerNewArg)) and not(has(output, -NumerNewArg)) and IsNotTrivial(NumerNewArg, intvariable)) then output:=[op(output), NumerNewArg]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), NumerNewArg=SymbPoly[counter], -NumerNewArg=-SymbPoly[counter]]: end if: end if: if type(DenomNewArg, `*`) then for j from 1 to nops(DenomNewArg) do if (not(has(output, op(j,DenomNewArg))) and not(has(output, -op(j,DenomNewArg))) and IsNotTrivial(op(j,DenomNewArg), intvariable)) then output:=[op(output), op(j,DenomNewArg)]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(j,DenomNewArg)=SymbPoly[counter], -op(j,DenomNewArg)=-SymbPoly[counter]]: end if: end do: else if (not(has(output, DenomNewArg)) and not(has(output, -DenomNewArg)) and IsNotTrivial(DenomNewArg, intvariable)) then output:=[op(output), DenomNewArg]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(j,DenomNewArg)=SymbPoly[counter], -op(j,DenomNewArg)=-SymbPoly[counter]]: end if: end if: end do: newPref:=normalM(GenPref*BarLists[1][i]): newPrefDenom:=denom(newPref): if type(newPrefDenom, `^`) then newPrefDenom:=op(1, newPrefDenom): end if: if type(newPrefDenom, `*`) then for j from 1 to nops(newPrefDenom) do if type(op(j,newPrefDenom), `^`) then NewPoly:=op(1, op(j,newPrefDenom)): else NewPoly:=op(j,newPrefDenom): end if: if (not(has(output, NewPoly)) and not(has(output, -NewPoly)) and IsNotTrivial(NewPoly, intvariable)) then output:=[op(output), NewPoly]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), NewPoly=SymbPoly[counter], -NewPoly=-SymbPoly[counter]]: end if: end do: else if (not(has(output, newPrefDenom)) and not(has(output, -newPrefDenom)) and IsNotTrivial(newPrefDenom, intvariable)) then output:=[op(output), newPrefDenom]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), newPrefDenom=SymbPoly[counter], -newPrefDenom=-SymbPoly[counter]]: end if: end if: end do: for i from 1 to nops(BarLists[2]) do newPref:=subs(SymbolicReps, factorM(BarLists[1][i])): NewBarArgument:=[]: for j from 1 to nops(BarLists[2][i]) do NewArgFunction:=factorM(denom(BarLists[2][i][j])): NewArgFunction:=subs(SymbolicReps,NewArgFunction): NewBarArgument:=[op(NewBarArgument), d(NewArgFunction)/NewArgFunction]: end do: if BarLists[2][i]=[1] then SymbolicInt:=SymbolicInt+newPref: else SymbolicInt:=SymbolicInt+newPref*bar(op(NewBarArgument)): end if: end do: return [output, SymbolicReps, SymbolicInt]: end proc: FindPolyTable:=proc(inp, repsbackold, intvariable) global SymbPoly: local i, j, h, output, restrictedoutput, BarLists, NumerNewArg, DenomNewArg, newPref, newPrefDenom, NewArgFunction, NewPoly, DomainReps, auxvariable, s, afactor, counter, SymbolicReps, SymbolicInt, NewBarArgument: counter:=0: output:=[]: SymbolicInt:=0: SymbolicReps:=[]: # We collect all functions in the demoninators of the bar-arguments. for i in indices(inp,'nolist') do for j from 1 to nops(i) do NewArgFunction:=normalM(denom(i[j])): NumerNewArg:=numer(NewArgFunction): DenomNewArg:=denom(NewArgFunction): if type(NumerNewArg, `*`) then for h from 1 to nops(NumerNewArg) do if (not(has(output, op(h,NumerNewArg))) and not(has(output, -op(h,NumerNewArg))) and IsNotTrivial(op(h,NumerNewArg), intvariable)) then output:=[op(output), op(h,NumerNewArg)]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(h,NumerNewArg)=SymbPoly[counter], -op(h,NumerNewArg)=-SymbPoly[counter]]: end if: end do: else if (not(has(output, NumerNewArg)) and not(has(output, -NumerNewArg)) and IsNotTrivial(NumerNewArg, intvariable)) then output:=[op(output), NumerNewArg]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), NumerNewArg=SymbPoly[counter], -NumerNewArg=-SymbPoly[counter]]: end if: end if: if type(DenomNewArg, `*`) then for h from 1 to nops(DenomNewArg) do if (not(has(output, op(h,DenomNewArg))) and not(has(output, -op(h,DenomNewArg))) and IsNotTrivial(op(h,DenomNewArg), intvariable)) then output:=[op(output), op(h,DenomNewArg)]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(h,DenomNewArg)=SymbPoly[counter], -op(h,DenomNewArg)=-SymbPoly[counter]]: end if: end do: else if (not(has(output, DenomNewArg)) and not(has(output, -DenomNewArg)) and IsNotTrivial(DenomNewArg, intvariable)) then output:=[op(output), DenomNewArg]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), op(j,DenomNewArg)=SymbPoly[counter], -op(j,DenomNewArg)=-SymbPoly[counter]]: end if: end if: end do: newPref:=normalM(GenPref*inp[i]): newPrefDenom:=denom(newPref): if type(newPrefDenom, `^`) then newPrefDenom:=op(1, newPrefDenom): end if: if type(newPrefDenom, `*`) then for j from 1 to nops(newPrefDenom) do if type(op(j,newPrefDenom), `^`) then NewPoly:=op(1, op(j,newPrefDenom)): else NewPoly:=op(j,newPrefDenom): end if: if (not(has(output, NewPoly)) and not(has(output, -NewPoly)) and IsNotTrivial(NewPoly, intvariable)) then output:=[op(output), NewPoly]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), NewPoly=SymbPoly[counter], -NewPoly=-SymbPoly[counter]]: end if: end do: else if (not(has(output, newPrefDenom)) and not(has(output, -newPrefDenom)) and IsNotTrivial(newPrefDenom, intvariable)) then output:=[op(output), newPrefDenom]: counter:=counter+1: SymbolicReps:=[op(SymbolicReps), newPrefDenom=SymbPoly[counter], -newPrefDenom=-SymbPoly[counter]]: end if: end if: end do: SymbolicInt:=table(): for i in indices(inp, 'nolist') do newPref:=subs(SymbolicReps, factorM(inp[i])): NewBarArgument:=[]: for j from 1 to nops(i) do NewArgFunction:=factorM(denom(i[j])): NewArgFunction:=subs(SymbolicReps,NewArgFunction): NewBarArgument:=[op(NewBarArgument), d(NewArgFunction)/NewArgFunction]: end do: if i=[1] then BarToTable(newPref, SymbolicInt): else BarToTable(newPref*bar(op(NewBarArgument)), SymbolicInt): end if: end do: return [output, SymbolicReps, SymbolicInt]: end proc: FindPoly2:=proc(inp, repsbackold, polyold, letter, domaintransf) local i, j, output, BarLists, NumerNewArg, DenomNewArg, newPrefDenom, NewArgFunction, NewPoly, GenPref, DomainReps, newinp: newinp:=SimplifyBarExpression(Transform(inp, repsbackold, polyold, v, domaintransf, true)): BarLists:=BarToLists(newinp): output:=[]: # We collect all functions in the demoninators of the bar-arguments. for i from 1 to nops(BarLists[2]) do for j from 1 to nops(BarLists[2][i]) do NewArgFunction:=factor(denom(BarLists[2][i][j])): NumerNewArg:=numer(NewArgFunction): DenomNewArg:=denom(NewArgFunction): if type(NumerNewArg, `*`) then for j from 1 to nops(NumerNewArg) do if not(has(output, op(j,NumerNewArg))) then output:=[op(output), op(j,NumerNewArg)]: end if: end do: else if not(has(output, NumerNewArg)) then output:=[op(output), NumerNewArg]: end if: end if: if type(DenomNewArg, `*`) then for j from 1 to nops(DenomNewArg) do if not(has(output, op(j,DenomNewArg))) then output:=[op(output), op(j,DenomNewArg)]: end if: end do: else if not(has(output, DenomNewArg)) then output:=[op(output), DenomNewArg]: end if: end if: end do: end do: for i from 1 to nops(BarLists[1]) do newPrefDenom:=denom(factor( BarLists[1][i])): if type(NewArgFunction, `^`) then newPrefDenom:=op(1, newPrefDenom): end if: if type(newPrefDenom, `*`) then for j from 1 to nops(newPrefDenom) do if type(op(j,newPrefDenom), `^`) then NewPoly:=op(1, op(j,newPrefDenom)): else NewPoly:=op(j,newPrefDenom): end if: if not(has(output, NewPoly)) then output:=[op(output), NewPoly]: end if: end do: else if not(has(output, newPrefDenom)) then output:=[op(output), newPrefDenom]: end if: end if: end do: return output: end proc: TransformSymbolic:=proc(inp, polys, va, newvar, SymbolicReps, FeynPar, back) global MPLSymbForms: local i, j, newinp, outp, reps, repsback, ArgFunctions, BarLists, ArgReps, ArgRepsLog, ArgRepsBase, NewArgFunction, NewArg, newTerm, newCoeff, DomainReps, word, pref, Jacobian: ArgReps:=[]: # Deriving the main replacements from the given polynomials: if back=true then repsback:=NewCubicalReplacements(polys, va, FeynPar, newvar, false); reps:=subs(SymbolicReps, NewCubicalReplacements(polys, va, FeynPar, newvar, true)); else reps:=subs(SymbolicReps, NewCubicalReplacements(polys, va, FeynPar, newvar, false)); repsback:=NewCubicalReplacements(polys, va, FeynPar, newvar, true); end if: # Deriving the Jacobian: if back then Jacobian:=1: else Jacobian:=NewCubicalReplacements(polys, va, FeynPar, newvar, true, true): end if: # We collect all functions in the demoninators of the bar-arguments. map(proc(x) if not(x=[1]) then for j from 1 to nops(x) do NewArgFunction:=denom(x[j]): NewArg:=ReplaceArgument(NewArgFunction, [1=1], reps, numer(x[j]), 1, FeynPar): if not(has(ArgReps, x[j])) then ArgReps:=[op(ArgReps), x[j]=NewArg]: end if: end do: end if: end proc, [indices(inp,'nolist')]): ArgRepsLog:=[d(va)/va = ReplaceArgument(va, [1=1], reps, d(va), 1, FeynPar), -d(va)/va = -ReplaceArgument(va, [1=1], reps, d(va), 1, FeynPar)]: ArgRepsBase:=[d(va)/va = ReplaceArgument(va, [1=1], reps, d(va), 2, FeynPar), -d(va)/va = -ReplaceArgument(va, [1=1], reps, d(va), 2, FeynPar)]: # Application of the replacements: outp:=table(): for i in indices(inp,'nolist') do newCoeff:=ReplaceBarLog(inp[i],reps, FeynPar, va): newTerm:=normalM(Jacobian*ReshuffleLog(subs(reps,eval(newCoeff))*bar(op(subs(ArgReps, i))))): BarToTable(newTerm, outp): end do: return outp: end proc: Transform:=proc(inp, repsbackold, polylist, newvar, domaintransf) local i, j, newinp, output, reps, repsback, ArgFunctions, BarLists, ArgReps, NewArgFunction, NewArg, newPref, newBar, GenPref, DomainReps, word, pref: ArgReps:=[]: output:=0: GenPref:=1: DomainReps:=[]: # Changing the domain of integration for all variables in domaintransf: if nargs<6 then for i from 1 to nops(domaintransf) do GenPref:=GenPref * 1/(domaintransf[i]-1)^2: DomainReps:=[op(DomainReps), domaintransf[i] = domaintransf[i]/(1-domaintransf[i])]: end do: end if: # Deriving the main replacements from the given polynomials: if nargs>5 then if args[6]=true then repsback:=CubicalReplacements(polylist, newvar, false); reps:=CubicalReplacements(polylist, newvar, true); else reps:=CubicalReplacements(polylist, newvar, false); repsback:=CubicalReplacements(polylist, newvar, true); end if: else reps:=CubicalReplacements(polylist, newvar, false); repsback:=CubicalReplacements(polylist, newvar, true); end if: newinp:=collect(inp, bar,`distributed`): # We collect all functions in the demoninators of the bar-arguments. if type(newinp, `+`) then map(proc(x) if has(x, bar) then word:=[op(op(selectfun(x, bar)))]: else word:=[1]: end if: if not(word=[1]) then for j from 1 to nops(word) do NewArgFunction:=denom(word[j]): NewArg:=ReplaceArgument(factorM(subs(DomainReps, subs(repsbackold, NewArgFunction))), repsback, reps, numer(word[j]), 0, []): if not(has(ArgReps, word[j])) then ArgReps:=[op(ArgReps), word[j]=NewArg]: end if: end do: end if: return x: end proc, newinp): else if has(newinp, bar) then word:=[op(op(selectfun(newinp, bar)))]: else word:=[1]: end if: if not(word=[1]) then for j from 1 to nops(word) do if not(has(ArgFunctions, word[j])) then NewArgFunction:=denom(word[j]): NewArg:=ReplaceArgument(factorM(subs(DomainReps, subs(repsbackold, NewArgFunction))), repsback, reps, numer(word[j]), []): if not(has(ArgReps, word[j])) then ArgReps:=[op(ArgReps), word[j]=NewArg]: end if: end if: end do: end if: end if: if type(newinp, `+`) then output:=map(proc(x) pref:=normal(eval(x, bar=1)): if has(x, bar) then word:=[op(op(selectfun(x, bar)))]: else word:=[1]: end if: if nargs>5 then if args[6]=true then newPref:=GenPref*subs(reps, subs(repsbackold, pref)): else newPref:=GenPref*subs(reps, normalM(subs(DomainReps,subs(repsbackold, pref)))): end if: else newPref:=GenPref*subs(reps, normalM(subs(DomainReps,subs(repsbackold, pref)))): end if: newBar:=bar(op(subs(ArgReps, word))): output:=newPref*newBar: end proc, newinp): else pref:=normal(eval(newinp, bar=1)): if has(newinp, bar) then word:=[op(op(selectfun(newinp, bar)))]: else word:=[1]: end if: if nargs>5 then if args[6]=true then newPref:=GenPref*subs(reps, subs(repsbackold, pref)): else newPref:=GenPref*subs(reps, normalM(subs(DomainReps,subs(repsbackold, pref)))): end if: else newPref:=GenPref*subs(reps, normalM(subs(DomainReps,subs(repsbackold, pref)))): end if: newBar:=bar(op(subs(ArgReps, word))): output:=newPref*newBar: end if: return eval(output, reps): end proc: normalM:=proc(inp) return normal(inp): end proc: factorM:=proc(inp) return factor(inp) end proc: TransformDomainOnly:=proc(inp, domaintransf) local i, j, reps, repsback, ArgFunctions, ArgReps, NewArgFunction, NewArg, newTerm, GenPref, DomainReps, outp: ArgReps:=[]: GenPref:=1: DomainReps:=[]: # Changing the domain of integration for all variables in domaintransf: for i from 1 to nops(domaintransf) do GenPref:=GenPref * 1/(domaintransf[i]-1)^2: DomainReps:=[op(DomainReps), domaintransf[i] = domaintransf[i]/(1-domaintransf[i])]: end do: # We collect all functions in the demoninators of the bar-arguments. map(proc(x) if not(x=[1]) then for j from 1 to nops(x) do NewArgFunction:=denom(x[j]): NewArg:=ReplaceArgument(NewArgFunction, [1=1], DomainReps, numer(x[j]),0,[]): if not(has(ArgReps, x[j])) then ArgReps:=[op(ArgReps), x[j]=NewArg]: end if: end do: end if: end proc, [indices(inp,'nolist')]): # Application of the replacements: outp:=table(): for i in indices(inp,'nolist') do newTerm:=normalM(GenPref*subs(DomainReps,inp[i]))*normal(bar(op(subs(ArgReps, i)))): BarToTable(newTerm, outp): end do: return outp: end proc: TransformTable:=proc(inp, repsbackold, polys, va, newvar, FeynPar, back) local i, j, newinp, output, reps, repsback, ArgFunctions, BarLists, ArgReps, NewArgFunction, NewArg, newPref, newBar, GenPref, DomainReps, word, pref, newTerm, outp, Jacobian: ArgReps:=[]: output:=0: GenPref:=1: DomainReps:=[]: # Deriving the main replacements from the given polynomials: if back=true then repsback:=NewCubicalReplacements(polys, va, FeynPar, newvar, false); reps:=NewCubicalReplacements(polys, va, FeynPar, newvar, true); else reps:=NewCubicalReplacements(polys, va, FeynPar, newvar, false); repsback:=NewCubicalReplacements(polys, va, FeynPar, newvar, true); end if: # Deriving the Jacobian: if back then Jacobian:=1: else Jacobian:=NewCubicalReplacements(polys, va, FeynPar, newvar, true, true): end if: # We collect all functions in the demoninators of the bar-arguments. map(proc(x) if not(x=[1]) then for j from 1 to nops(x) do NewArgFunction:=denom(x[j]): NewArg:=ReplaceArgument(NewArgFunction, [1=1], reps, numer(x[j]), 0, FeynPar): if not(has(ArgReps, x[j])) then ArgReps:=[op(ArgReps), x[j]=NewArg]: end if: end do: end if: end proc, [indices(inp,'nolist')]): # Application of the replacements: outp:=table(): for i in indices(inp,'nolist') do newTerm:=normal(Jacobian*subs(reps,inp[i])*bar(op(subs(ArgReps, i)))): BarToTable(newTerm, outp): end do: return outp: end proc: # The following procedure computes one integration over a Feynman parameter intvariable. # The other Arguments: integr is the integrand in Feynman parameters or Feynman and cubical parameters. # repsback is a set of rules to replace cubical variables of the previous step back to Feynman parameters. # cubicalva is a symbol for the new cubical variables. # howmuchoutput determines the output mode: # howmuchoutput=1: only the result of the integration, # howmuchoutput=2: the result and the new replacement rules back to Feynman parameters, # howmuchoutput=3: the result, the rules and the result after replacing back to Feynman parameters FeynmanIntegrationStep:=proc(integr, repsback, intvariable, NewRemainingFeynPar, cubicalva, howmuchoutput, changedomain) global MPLStoredLimits, CC4, CC4repsback, CC4polylist, CorrTerm, UncorrzetaCoeff, IntegralResultCubical, MPLSymbForms, ResX: global MPL_CoefflnZeroList, IntC3, Ergebnis3, IntC8, Ergebnis8, IntC2, Ergebnis2: local i, FoundPoly, IntegrandCubical, Newrepsback, ResultFeynmanPar, SingularTerm, Newn, domainset, CorrectedRes, newintegr, domchangedrepsback, FindPolyOutp, poly, newintegrbar, ResultFeynmanParTable: MPL_CoefflnZeroList:=[]: MPLSymbForms:=[]: # Check that input is a table or transform it to a table: if type(integr, table) then newintegrbar:=PrepFeynInt(TableToBar(integr), [intvariable,op(NewRemainingFeynPar)]): else newintegrbar:=PrepFeynInt(integr, [intvariable,op(NewRemainingFeynPar)]): end if: newintegr:=table(): MPLSymbForms:=newintegrbar[2]: BarToTable(newintegrbar[1], newintegr): FindPolyOutp:=FindPolyTable(newintegr, [1=1], intvariable, true): FoundPoly:=FindPolyOutp[1]: if nops(FoundPoly)<2 then Newn:=2: MPLInitialize(cubicalva, 1, 2): else Newn:=nops(FoundPoly): MPLInitialize(cubicalva, Newn-1, 2): end if: IntegrandCubical:=TransformSymbolic(FindPolyOutp[3], FoundPoly, intvariable, cubicalva, FindPolyOutp[2], NewRemainingFeynPar, false): IntegralResultCubical:=table(): MPLintTable(cubicalva[Newn], IntegrandCubical, IntegralResultCubical): IntegralResultCubical:=SimplifyTable(IntegralResultCubical): # Different output modes: if howmuchoutput=1 then return IntegralResultCubical: elif howmuchoutput=2 then Newrepsback:=NewCubicalReplacements(FoundPoly, intvariable, NewRemainingFeynPar, cubicalva, true): return [IntegralResultCubical, Newrepsback]: elif howmuchoutput=3 then Newrepsback:=NewCubicalReplacements(FoundPoly, intvariable, NewRemainingFeynPar, cubicalva, true): CorrectedRes:=NewComputeCorrection(IntegralResultCubical, NewRemainingFeynPar, Newrepsback): ResultFeynmanParTable:=SimplifyTable(TransformTable(CorrectedRes, repsback, FoundPoly, intvariable, cubicalva, NewRemainingFeynPar, true)): ResultFeynmanPar:=eval(subs(base=bar,subs(MPLSymbForms,Reshuffle(eval(TableToBar(ResultFeynmanParTable)))))): ResultFeynmanParTable:=table(): BarToTable(expand(ResultFeynmanPar),ResultFeynmanParTable): CorrTerm[intvariable]:=normal(-TableToBar(TransformTable(IntegralResultCubical, repsback, FoundPoly, intvariable, cubicalva, NewRemainingFeynPar, true))+ ResultFeynmanPar): UncorrzetaCoeff[intvariable]:=coeff(TableToBar(TransformTable(IntegralResultCubical, repsback, FoundPoly, intvariable, cubicalva, NewRemainingFeynPar, true)),zeta(2)): return [IntegralResultCubical, Newrepsback, SimplifyTable(ResultFeynmanParTable), CorrectedRes]: end if: end proc: # The following procedure integrates out a given sequence of parameters (FeynParameters), doing the intermediate # changes to cubical coordinates. integr is the integrand, CubicalParameters is a list of letters to be used for the # cubical coordinates, and with howmuchoutput>1 the procedure shows intermediate results. MPLFeynmanIntegrate:=proc(integr, FeynParameters, AllFeynParameters) global IntermediateResults: local i, j, NewIntegrand, OutpIntStep, CubicalVar, Newrepsback, RemainingFeynPar, NewRemainingFeynPar, numberofintegrations, CubicalParameters, howmuchoutput, changedomain: # Allowing for additional arguments changing some default conditions: if nargs>3 then CubicalParameters:=args[4]: if nargs>4 then howmuchoutput:=args[5]: if nargs>5 then changedomain:=args[6]: else changedomain:=false: end if: else howmuchoutput:=1: changedomain:=false: end if: else CubicalParameters:=[]: howmuchoutput:=1: changedomain:=false: end if: # Create sufficiently many symbols for cubical variables: CubicalVar:=CubicalParameters: if nops(CubicalParameters)6 then if args[7]=true then numberofintegrations:=nops(FeynParameters)-1: else numberofintegrations:=nops(FeynParameters): end if: else numberofintegrations:=nops(FeynParameters): end if: for i from 1 to numberofintegrations do # Determine, which Feynman parameters are still not integrated out: if (nops(RemainingFeynPar)=1 or nops(RemainingFeynPar)=0) then NewRemainingFeynPar:=[]: else NewRemainingFeynPar:=[]: for j from 2 to nops(RemainingFeynPar) do NewRemainingFeynPar:=[op(NewRemainingFeynPar), RemainingFeynPar[j]]: end do: end if: RemainingFeynPar:=NewRemainingFeynPar: if howmuchoutput>-1 then printf("%s\n",cat("Integration over ",convert(FeynParameters[i],string),".")): end if: OutpIntStep:=FeynmanIntegrationStep(NewIntegrand, Newrepsback, FeynParameters[i], NewRemainingFeynPar, CubicalVar[i], 3, changedomain): NewIntegrand:= OutpIntStep[3]: Newrepsback:=OutpIntStep[2]: IntermediateResults[op(FeynParameters[1..i])]:=TableToBar(NewIntegrand): if howmuchoutput>1 then # printf("%s\n","In cubical coordinates: "): # print(TableToBar(OutpIntStep[1])): end if: if howmuchoutput>2 then printf("%s\n","Changes of Variables: "): print(normal(OutpIntStep[2])): printf("%s\n","Only in Feynman parameters: "): ##### print(TableToBar(NewIntegrand)): end if: end do: if howmuchoutput>1 then printf("%s\n","Last result:"): end if: if nargs>6 then if args[7]=true then return FeynParLimit(TableToBar(NewIntegrand), FeynParameters[nops(FeynParameters)], 1); else return RewriteFeyn(TableToBar(OutpIntStep[3]), NewRemainingFeynPar, []): end if: else return RewriteFeyn(TableToBar(OutpIntStep[3]), NewRemainingFeynPar, []): end if: end proc: # The following procedure transforms an integrand in Feynman parameters to cubical coordinates and takes a limit with respect to one coordinate. # va is the Feynman parameter and u is the value (0, 1 or infinity) where it shall be evaluated. FeynParLimit:=proc(inp, va, u) local outp, FoundPoly, PolyList, IntegrandCubical, domainset, auxva, Newn: FoundPoly:=FindPoly(inp, [1=1], [], va, true)[1]: PolyList:=[[FoundPoly], [va]]: if nops(FoundPoly)=0 then Newn:=1: else Newn:=nops(FoundPoly): end if: IntegrandCubical:=SimplifyBarExpression(Transform(inp, [1=1], PolyList, auxva, [])): MPLInitialize(auxva, Newn, false): outp:=MPLLimit(IntegrandCubical, auxva[Newn+1], u): return SimplifyBarExpression(Transform(outp, [1=1], PolyList, auxva, [], true)): end proc: # The following procedure derives the replacement rules for variables such that # limits at infinity can be computed from taking limits at one. CreateInfReps:=proc(oldva, newva, varN) local i, j, Reps, NewProd, NewTerm: Reps:=[]: for i from 1 to varN do if i=varN then Reps:=[op(Reps), oldva[varN]=newva[varN]/(newva[varN]-1)]: else NewProd:=1: for j from i to varN do NewProd:=NewProd*newva[j]: end do: Reps:=[op(Reps), oldva[i]=(newva[i]-NewProd)/(1-NewProd)]: end if: end do: return Reps: end proc: # In order to allow the procedure MPLLimit to take limits at infinity, # the following procedure changes variables carefully, such that limits at infinity # can be computed from limits at one. VarChangeInfinity:=proc(inp, va, varN) local i, j, NewArg, ArgReps, BarLists, auxva, DiffFormReps: DiffFormReps:=CreateInfReps(va, auxva, varN): BarLists:=normal(BarToListsCollected(inp)): ArgReps:=[]: NewArg:=0: # Create a list of replacements, to replace the differential forms: for i from 1 to nops(BarLists[1]) do for j from 1 to nops(BarLists[2][i]) do NewArg:=ReplaceArgument(denom(BarLists[2][i][j]), [1=1], DiffFormReps, numer(BarLists[2][i][j]), 0, []): ArgReps:=[op(ArgReps), BarLists[2][i][j]=NewArg]: end do: end do: return normal(subs(auxva=va,subs(va=auxva,subs(DiffFormReps,eval(subs(ArgReps,inp)))))): end proc: # The following procedure uses the replacement-rules between Feynman parameters and cubical coordinates, # to derive, which limits in cubical coordinates correspond to the limit, of all Feynman parameters going to zero. # The order in which the Feynman parameters go to zero is given. The order in which the limits w.r.t. cubical coordinates has # to be computed is derived by GetLimitOrder. GetListOfLimits:=proc(FeynPar, repsback) local i, j, LimitAtZero, ListOfLimits: ListOfLimits:=[]: for i from 1 to nops(repsback) do LimitAtZero:=op(2,repsback[i]): for j from 1 to nops(FeynPar) do LimitAtZero:=eval(limit(LimitAtZero,FeynPar[j]=0)): end do: if LimitAtZero=undefined then ListOfLimits:=[op(ListOfLimits),op(1,repsback[i])=infinity]: print("A limit at infinity appears."): print(op(1,repsback[i])=infinity): elif (not(i=nops(repsback)) and (not(LimitAtZero=0 or LimitAtZero=1 or LimitAtZero=undefined))) then print("Warning: In one of the changes of variables, a limit at a value different from 0, 1 or infinity appears. Limit disregarded."): print(LimitAtZero): return repsback: else ListOfLimits:=[op(ListOfLimits),op(1,repsback[i])=LimitAtZero]: end if: end do: return GetLimitOrder(FeynPar, repsback, ListOfLimits): end proc: #The following procedure derives the order, in which limits have to be taken w.r.t. cubical coordinates. GetLimitOrder:=proc(FeynPar, repsbackin, ListOfLimitsin) local i, j, outp, bigger, smaller, positions, preloutp, repsback, ListOfLimits, z1, z2: # Ignore the last element of repsback and ListOfLimits, because it # corresponds to the integration variable: repsback:=repsbackin[1..nops(repsbackin)-1]: ListOfLimits:=ListOfLimitsin[1..nops(ListOfLimitsin)-1]: for i from 1 to nops(repsback) do bigger[i]:={}: smaller[i]:={}: end do: for i from 1 to nops(repsback) do for j from i+1 to nops(repsback) do z1:=normal(op(2,repsback[i])-op(2,ListOfLimits[i])): z2:=normal(op(2,repsback[j])-op(2,ListOfLimits[j])): if FirstBiggerSecondSeries(z1,z2,FeynPar, FeynPar) then smaller[i]:={op(smaller[i]),j}: bigger[j]:={op(bigger[j]), i}: else smaller[j]:={op(smaller[j]),i}: bigger[i]:={op(bigger[i]), j}: end if: end do: end do: positions:=[]: for i from 1 to nops(repsback) do positions:=[op(positions), nops(smaller[i])]: end do: return SortDoubleList(ListOfLimits, positions): end proc: MPLMultipleLimit:=proc(inp, ListLimits) local j, va, vasymbol, newlimit, newterm, listnumbers: listnumbers:=[]: for j from 1 to nops(ListLimits) do listnumbers:=[op(listnumbers),op(1,op(1,ListLimits[j]))]: end do: newterm:=inp: vasymbol:=op(0,op(1,ListLimits[1])): MPLInitialize(vasymbol, max(op(listnumbers))-1, false): for j from 1 to nops(ListLimits) do va:=op(1, ListLimits[j]): newlimit:=op(2, ListLimits[j]): newterm:=eval(MPLLimit(newterm, va, newlimit)): end do: return newterm: end proc: LimitsOfBar:=proc(inp, ListLimits) local i, j, k, BarArray, ArrayOfBarTerms, NewArrayOfBarTerms, outp, LimitTerm, va, vasymbol, newlimit, TensList, MultLimit: outp:=0: if ListLimits=[] then return inp: end if: BarArray:=BarToArrayCollected(inp): # Write the BarArray as an actual Array of bar-terms: ArrayOfBarTerms:=Array([]): for i from 1 to ArrayNumElems(BarArray(1)) do ArrayOfBarTerms(ArrayNumElems(ArrayOfBarTerms)+1):=bar(op(BarArray(2)(i))): end do: # Determine cubical variable: va:=op(1, ListLimits[1]): vasymbol:=op(0,va): NewArrayOfBarTerms:=Array([]): for i from 1 to ArrayNumElems(BarArray(1)) do if (ArrayOfBarTerms(i)=1 or ArrayOfBarTerms(i)=bar(1)) then LimitTerm:=1: elif not(has(ArrayOfBarTerms(i), vasymbol)) then LimitTerm:=ArrayOfBarTerms(i): else LimitTerm:=0: TensList:=TensToLists(Coproduct(ArrayOfBarTerms(i))): for k from 1 to nops(TensList[1]) do if not(has(TensList[3][k], vasymbol)) then if TensList[3][k]=ONE then MultLimit:=1: else MultLimit:=0: end if: else MultLimit:=MPLMultipleLimit(TensList[3][k], ListLimits, vasymbol): end if: if has(MultLimit, bar) then LimitTerm:=LimitTerm + TensList[1][k]*subs(ONE=1, MPLShuffleProduct(TensList[2][k], MultLimit)): else LimitTerm:=LimitTerm + TensList[1][k]*subs(ONE=1, TensList[2][k]*MultLimit): end if: end do: end if: NewArrayOfBarTerms(ArrayNumElems(NewArrayOfBarTerms)+1):=LimitTerm: end do: for i from 1 to ArrayNumElems(BarArray(1)) do outp:=outp+BarArray(1)(i)*NewArrayOfBarTerms(i): end do: return outp: end proc: LimitsOfBarTable:=proc(inp, ListLimits) local i, j, k, BarArray, ArrayOfBarTerms, NewArrayOfBarTerms, outp, LimitTerm, va, vasymbol, newlimit, TensList, MultLimit: outp:=table(): if ListLimits=[] then return inp: end if: # Determine cubical variable: va:=op(1, ListLimits[1]): vasymbol:=op(0,va): for i in indices(inp,'nolist') do if (i=1 or i=[1]) then LimitTerm:=1: elif not(has(i, vasymbol)) then LimitTerm:=bar(op(i)): else LimitTerm:=0: TensList:=TensToLists(Coproduct(bar(op(i)))): for k from 1 to nops(TensList[1]) do if not(has(TensList[3][k], vasymbol)) then if TensList[3][k]=ONE then MultLimit:=1: else MultLimit:=0: end if: else MultLimit:=MPLMultipleLimit(TensList[3][k], ListLimits, vasymbol): end if: if has(MultLimit, bar) then LimitTerm:=LimitTerm + TensList[1][k]*subs(ONE=1, MPLShuffleProduct(TensList[2][k], MultLimit)): else LimitTerm:=LimitTerm + TensList[1][k]*subs(ONE=1, TensList[2][k]*MultLimit): end if: end do: end if: BarToTable(inp[i]*LimitTerm, outp): end do: return outp: end proc: SortDoubleList:=proc(ListSymbols, ListValues) local i, j, ListValuesSorted, outp: outp:=[]: ListValuesSorted:=sort(ListValues): for i from 1 to nops(ListValuesSorted) do for j from 1 to nops(ListSymbols) do if (not(member(ListSymbols[j],outp)) and ListValues[j]=ListValuesSorted[i]) then outp:=[op(outp), ListSymbols[j]]: end if: end do: end do: return outp: end proc: # When changing back from cubical coordinates to Feynman parameters, certain cases of coordinate changes # require the addition of certain limits due to the normalization of our functions. # The following procedure computes these additional terms. ComputeCorrection:=proc(inp, FeynPar, repsback) global auxva: local i, j, InfReps, cubicalsymb, ListOfLimits, ChangedRepsback: if FeynPar=[] then return inp: end if: cubicalsymb:=op(0, op(1, repsback[1])): InfReps:=CreateInfReps(auxva, cubicalsymb, nops(repsback)-1): ChangedRepsback:=normal(subs(repsback, InfReps)): ListOfLimits:=subs(auxva=cubicalsymb, GetListOfLimits(FeynPar, ChangedRepsback)): return LimitsOfBarTable(inp, ListOfLimits): end proc: NewComputeCorrection:=proc(inp, FeynPar, repsback) global auxva: local i, j, InfReps, cubicalsymb, ListOfLimits, ChangedRepsback: if FeynPar=[] then return inp: end if: cubicalsymb:=op(0, op(1, repsback[1])): ListOfLimits:=subs(auxva=cubicalsymb, GetListOfLimits(FeynPar, repsback)): return LimitsOfBarTable(inp, ListOfLimits): end proc: ChangeDomain:=proc(inp, listva) local i, oldinp, newinp: oldinp:=inp: newinp:=inp: for i from 1 to nops(listva) do if has(oldinp, listva[i]) then newinp:=subs(listva[i]=listva[i]/(1-listva[i]), oldinp)/(listva[i]-1)^2: oldinp:=newinp: end if: end do: return normal(newinp): end proc: # For a given set of linear polynomials and a variable, the following procedure derives a list of triples: # [polynomial, coefficient of va, zero w.r.t. va] GetPolytripples:=proc(polys, va) local i, outp: outp:=[]: for i from 1 to nops(polys) do outp:=[op(outp), [polys[i], normal(coeff(polys[i],va)), normal(solve(polys[i]=0,va))]]: end do: return outp: end proc: # The following procedure determines whether one rational function is bigger than another # close to a tangential basepoint, which is given by Feynman parameters going to zero in a given ordering. FirstBiggerSecond:=proc(zero1, zero2, FeynPar, AllFeynPar) local i, j, quotient, newlimit, outp, series1, series2, auxe, auxFeynPar, counter, ldeg, series1list, series2list, coeff1, coeff2,zero1aux, zero2aux, n: # I introduce a set of auxiliary Feynman parameters on which I can introduce assumptions without later consequences. if zero1=zero2 then return "undecided": end if: zero1aux:=zero1: zero2aux:=zero2: n:=nops(AllFeynPar): for i from 1 to nops(FeynPar) do zero1aux:=subs(FeynPar[i]=0,normal(zero1aux)): zero2aux:=subs(FeynPar[i]=0,normal(zero2aux)): if zero1aux=0 then return false: elif zero2aux=0 then return true: end if: end do: return true: end proc: FirstBiggerSecondNumeric:=proc(zero1, zero2, FeynPar, AllFeynPar) local i, j, quotient, newlimit, outp, series1, series2, auxe, auxFeynPar, counter, ldeg, series1list, series2list, coeff1, coeff2,zero1aux, zero2aux, n: # I introduce a set of auxiliary Feynman parameters on which I can introduce assumptions without later consequences. if zero1=zero2 then return "undecided": end if: zero1aux:=zero1: zero2aux:=zero2: n:=nops(AllFeynPar): for i from 1 to nops(FeynPar) do zero1aux:=subs(FeynPar[i]=0.1^((n+1-i)),zero1aux): zero2aux:=subs(FeynPar[i]=0.1^((n+1-i)),zero2aux): end do: return is(abs(zero1aux)>abs(zero2aux)): end proc: FirstBiggerSecondOld2:=proc(zero1, zero2, FeynPar, AllFeynPar) local i, j, quotient, newlimit, outp, series1, series2, auxe, auxFeynPar, counter, ldeg, series1list, series2list, coeff1, coeff2,zero1aux, zero2aux: # I introduce a set of auxiliary Feynman parameters on which I can introduce assumptions without later consequences. if zero1=zero2 then return "undecided": end if: auxFeynPar:=[]: for i from 1 to nops(AllFeynPar) do additionally(auxe[op(1,AllFeynPar[i])]>0,auxe[op(1,AllFeynPar[i])]<1): if iabs(zero2aux)): for i from 1 to nops(AllFeynPar) do auxe[op(1,AllFeynPar[i])] := 'auxe[op(1,AllFeynPar[i])]': end do: return outp: end proc: FirstBiggerSecondOld1:=proc(zero1, zero2, FeynPar, AllFeynPar) local i, j, quotient, newlimit, outp, series1, series2, auxe, auxFeynPar, counter, ldeg, series1list, series2list, coeff1, coeff2: # I introduce a set of auxiliary Feynman parameters on which I can introduce assumptions without later consequences. if zero1=zero2 then return "undecided": end if: quotient:=normal(zero1/zero2): auxFeynPar:=[]: for i from 1 to nops(AllFeynPar) do assume(auxe[op(1,AllFeynPar[i])]>0,auxe[op(1,AllFeynPar[i])]<1): auxFeynPar:=[op(auxFeynPar),auxe[op(1,AllFeynPar[i])]]: quotient:=normal(subs(AllFeynPar[i]=auxe[op(1,AllFeynPar[i])], quotient)); end do: for i from 1 to nops(FeynPar) do newlimit:=eval(limit(quotient, auxFeynPar[i]=0,right)): quotient:=newlimit: if newlimit=infinity or newlimit=undefined or newlimit=-infinity then return true: elif newlimit=0 then return false: # If the limit of the quotient is constant other than 0 or +/-infinity, we series-expand # and compare the lowdegrees. If they are equal, we compare each coefficient. # If the first six coefficients don't give an answer, we print a warning and assume that # zero1>zero2. elif not(has(newlimit, {op(auxFeynPar)})) then series1:=convert(series(zero1,FeynPar[i],6),polynom): series2:=convert(series(zero2,FeynPar[i],6),polynom): if ldegree(series1)ldegree(series2) then return true: elif ldegree(series1)=ldegree(series2) then ldeg:=ldegree(series1, va): for j from 1 to 6 do coeff1:=normal(coeff(series1,FeynPar[i],ldeg-1+j)): coeff2:=normal(coeff(series2,FeynPar[i],ldeg-1+j)): if coeff1=0 and not(coeff2=0) then return false: elif not(coeff1=0) and coeff2=0 then return true: elif not(coeff1=0) and not(coeff2=0) then outp:=FirstBiggerSecond(coeff1, coeff2, FeynPar[2..nops(FeynPar)], AllFeynPar): if outp=true or outp=false then return outp: end if: end if: end do: end if: end if: end do: return "undecided": end proc: SignAtTangentialBasepoint:=proc(inp, FeynPar) local i, lowestcoeff, newterm: newterm:=inp: for i from 1 to nops(FeynPar) do lowestcoeff:=tcoeff(numer(newterm)/denom(newterm), FeynPar[i]): if lowestcoeff=0 then error "It was not possible to find a unique order at a tangential basepoint. Possibly, two of the polynomials in a given set are equal.": elif (not(has(lowestcoeff,FeynPar)) and type(lowestcoeff, `numeric`)) then return sign(lowestcoeff): elif (not(has(lowestcoeff,FeynPar)) and not(type(lowestcoeff, `numeric`))) then error "Not all parameters are sent to their limit.": else newterm:=lowestcoeff: end if: end do: end proc: FirstBiggerSecondSeries:=proc(zero1, zero2, FeynPar) local i, j, quotient, newlimit, zerosquotient: zerosquotient:=normal(zero1/zero2-1): if SignAtTangentialBasepoint(zerosquotient, FeynPar)>0 then return true: else return false end if: end proc: # With respect to the above greater/smaller at a tangential basepoint the following orders rational functions. # The preliminary list is ordered such that the smallest (closest to the basepoint) is on the left, then comes the next bigger and so on. # This first element ist then put to the very right. So we get # [f[1], f[2], ..., f[n]] # where f[n]5 then if args[6]=true then return 1: end if: end if: if back then return [cubical[2]=va]: else return [va=cubical[2]]: end if: elif nops(polys)=1 then orderedtripples:=GetPolytripples(polys, va): if nargs>5 then if args[6]=true then return -orderedtripples[1][3]/(cubical[2]-1)^2: end if: end if: if back then return [cubical[2]=va/(va-orderedtripples[1][3])]: else return [orderedtripples[1][1]=orderedtripples[1][2]*orderedtripples[1][3]/(cubical[2]-1), -orderedtripples[1][1]=-orderedtripples[1][2]*orderedtripples[1][3]/(cubical[2]-1), va=orderedtripples[1][3]*cubical[2]/(cubical[2]-1)]: end if: else # From the given list of non-ordered polynomials I compute the ordered list of tripples: # [polynomial, coefficient of va, zero w.r.t.va]. # In this ordering from the left to right the first is the one with the smallest zero (w.r.t. tangential basepoint). orderedtripples:=OrderByZeroes(GetPolytripples(polys, va),FeynPar): n:=nops(orderedtripples): if nargs>5 then if args[6]=true then return -orderedtripples[n][3]/(cubical[n]-1)^2: end if: end if: reps:=[]: repsback:=[]: for i from 1 to n-1 do auxprod:=1: for j from i to n do auxprod:=auxprod*cubical[j]: end do: reps:=[op(reps), orderedtripples[i][1] = orderedtripples[i][2]*(-1)*orderedtripples[i][3]*(auxprod-1)/(cubical[n]-1), -orderedtripples[i][1] = -orderedtripples[i][2]*(-1)*orderedtripples[i][3]*(auxprod-1)/(cubical[n]-1)]: if i=n-1 then repsback:=[op(repsback), normal(cubical[n-1] = 1-orderedtripples[n][3]/orderedtripples[n-1][3])]: else repsback:=[op(repsback), normal(cubical[i] = (1-orderedtripples[n][3]/orderedtripples[i][3])/(1-orderedtripples[n][3] /orderedtripples[i+1][3]))]: end if: end do: reps:=[op(reps), orderedtripples[n][1] = orderedtripples[n][2]*orderedtripples[n][3]/(cubical[n]-1), -orderedtripples[n][1] = -orderedtripples[n][2]*orderedtripples[n][3]/(cubical[n]-1), va=orderedtripples[n][3]*cubical[n]/(cubical[n]-1)]: repsback:=[op(repsback), normal(cubical[n]=va/(va-orderedtripples[n][3]))]: if back then return repsback: else return reps: end if: end if: end proc: CheckBarSigns:=proc(barlist, elimvar) global probbar: local i, j, newbarlist1, newbarlist2, bararg, Signfact, argfact: newbarlist1:=[]: newbarlist2:=[]: for i from 1 to nops(barlist[1]) do Signfact:=1: bararg:=[]: for j from 1 to nops(barlist[2][i]) do #argfact:=factors(barlist[2][i][j]): if numer(barlist[2][i][j]) = -eval(subs(elimvar,d(denom(barlist[2][i][j])))) then #probbar:=[op(probbar), ListsToBar(barlist)]: Signfact:=Signfact*(-1): bararg:=[op(bararg), normal(-barlist[2][i][j])]: else bararg:=[op(bararg), barlist[2][i][j]]: end if: end do: newbarlist1:=[op(newbarlist1), Signfact*barlist[1][i]]: newbarlist2:=[op(newbarlist2), bararg]: end do: return [newbarlist1, newbarlist2]: end proc: #################################################################### #################################################################### # # POLYNOMIAL REDUCTION AND CHECK OF ORDER # #################################################################### #################################################################### # From a given list of polynomials, the following procedure cancels all monomials. ExtractPolynomials:=proc(polys) local i, j, pfact, outp: outp:=[]: for i from 1 to nops(polys) do pfact:=op(2,factors(polys[i])): for j from 1 to nops(pfact) do if not(type(op(1,pfact[j]),`monomial`)) and not(has(outp, op(1,pfact[j]))) then outp:=[op(outp), op(1,pfact[j])]: end if: end do: end do: return outp: end proc: # If all polynomials in a given list are linear in a given variable, # the following procedures returns true and otherwise false. CheckLinearity:=proc(polys, var) local i, islinear: islinear:=true: for i in [indices(polys,'nolist')] do if degree(polys[i],var)>1 then islinear:=false: end if: end do: return islinear: end proc: # For a given list of compatibilities, the following procedure returns true, if a given pair is # compatible, and false otherwise. CheckCompatibility:=proc(prevc, pair) local A1, A2, B1, B2, prevcomps: prevcomps:=[op(prevc),{0,infty}]: A1:=op(1,op(1,pair)): A2:=op(2,op(1,pair)): B1:=op(1,op(2,pair)): B2:=op(2,op(2,pair)): if (A1=B1 and (member({A2,B2}, prevcomps) or member({B2,A2}, prevcomps))) or (A1=B2 and (member({A2,B1}, prevcomps) or member({B1,A2}, prevcomps))) or (A2=B1 and (member({A1,B2}, prevcomps) or member({B2,A1}, prevcomps))) or (A2=B2 and (member({A1,B1}, prevcomps) or member({B1,A1}, prevcomps))) or ((A1=B1 and A2=B2) or (A1=B2 and A2=B1)) then return true: else return false end if: end proc: # For a given compatibility graph and a given variable, the following # computes the compatibility graph of the next stage, after reduction # with respect to this variable. # # If the global vatriable COMPATIBILITY_GRAPH is set true, the previous # compatibility graph plays a role in this computation. Otherwise, the # old graph is assumed to be the complete graph, which corresponds # to simple Fubini reduction. CompGraph:=proc(prevCompGraph, var) global COMPATIBILITY_GRAPH: local i, j, p, pu, pl, newpolys, newcomps, polys, comps, indexpairs, relindexpairs, poly1, poly2 : if prevCompGraph=[] then return []: elif prevCompGraph=NULL then return NULL: end if: polys:=op(1,prevCompGraph): comps:=op(2,prevCompGraph): # An empty graph is returned, if not all given polynomials are linear: if not(CheckLinearity(polys, var)) then return NULL: end if: p:=table(): for i in [indices(polys,'nolist')] do pu[i]:=expand(coeff(polys[i],var)): pl[i]:=expand(subs(var=0,polys[i])): if pu[i]=0 then if not(type(pl[i],'monomial')) then p[{i,infty}]:=pl[i]: end if: else if not(type(pu[i],'monomial')) then p[{i,infty}]:=pu[i]: end if: end if: if not(type(pl[i],'monomial')) then p[{i,0}]:=pl[i]: end if: for j in [indices(polys,'nolist')] do if j>i then if (member({i,j},comps) or not(COMPATIBILITY_GRAPH)) then pu[j]:=coeff(polys[j],var): pl[j]:=subs(var=0,polys[j]): if not(type(expand(pu[i]*pl[j]-pl[i]*pu[j]),'monomial')) then p[{i,j}]:=pu[i]*pl[j]-pl[i]*pu[j]: end if: end if: end if: end do: end do: # At this stage, the set of all new polynomials p[{n,m}] was created. # Now the compatibilities are computed from the previous ones. indexpairs:=choose({indices(p,'nolist')},2): relindexpairs:=[]: newcomps:=[]: if COMPATIBILITY_GRAPH then for i from 1 to nops(indexpairs) do if CheckCompatibility(comps, indexpairs[i]) then newcomps:=[op(newcomps), indexpairs[i]]: end if: end do: else newcomps:=[]: end if: if nops([entries(p,'nolist')])=0 then return []: end if: return CondenseGraph([p,newcomps]): end proc: # For a given compatibility graph, possibly with the same polynomial # contained repeatedly, the following procedure returns a compatibility graph where # each polynomial appears only once. The corresponding edges of the graph are # connected accordingly. CondenseGraph:=proc(CG) global COMPATIBILITY_GRAPH: local i, j, k,p, polys, indp, counter, newpolys, nummerp, indexl, newp, newindices, polyfact, polyfactlist, repindices, repindicesold, repindicesnew, oldcomps, newcomps, relatedfactors, new, old, oldindices: p:=op(1,CG): if nops([entries(p,'nolist')])=0 then return CG: end if: oldcomps:=op(2,CG): oldindices:=[indices(p,'nolist')]: repindicesold:=[]: for i from 1 to nops(oldindices) do repindicesold:=[op(repindicesold),oldindices[i]=old[i]]: end do: oldcomps:=subs(repindicesold,oldcomps): newindices:=table(): newpolys:=table(): indexl:=table(): counter:=0: newcomps:=[]: for i in indices(p,'nolist') do # Extract list of irreducible, non-monomial factors: polyfact:=op(2,factors(p[i])): polyfactlist:=[]: for j from 1 to nops(polyfact) do if not(type(op(1,polyfact[j]),'monomial')) then polyfactlist:=[op(polyfactlist), op(1,polyfact[j])]: end if: end do: relatedfactors:=[]: for j from 1 to nops(polyfactlist) do newp:=polyfactlist[j]: if member(newp,[entries(newpolys,'nolist')],'nummerp') then indexl[nummerp]:={op(indexl[nummerp]),subs(repindicesold,i)}: relatedfactors:=[op(relatedfactors),nummerp]: else counter:=counter+1: newpolys[counter]:=newp: indexl[counter]:={subs(repindicesold,i)}: relatedfactors:=[op(relatedfactors),counter]: newcomps:=[op(newcomps), {new[counter],0}, {new[counter],infty}]: end if: end do: if nops(relatedfactors)>1 then # Connect factors of the same polynomial between each other: for j from 1 to nops(relatedfactors) do for k from j+1 to nops(relatedfactors) do newcomps:=[op(newcomps),{new[relatedfactors[j]],new[relatedfactors[k]]}]: end do: end do: # Connect with all connections of the parent polynomial: for k from 1 to nops([entries(p,'nolist')]) do if member({old[k],subs(repindicesold,i)},oldcomps) then for j from 1 to nops(relatedfactors) do newcomps:=[op(newcomps),{old[k],new[relatedfactors[j]]}]: end do: end if: end do: end if: end do: repindicesnew:=[]: for i from 1 to counter do repindicesnew:=[op(repindicesnew), new[i]=i]: end do: if COMPATIBILITY_GRAPH then repindices:=[]: for i in [indices(indexl,'nolist')] do for j from 1 to nops(indexl[i]) do repindices:=[op(repindices),op(j,indexl[i])=new[i]]: end do end do: newcomps:=MakeUnique(subs(repindicesnew,(subs(repindices,([op(newcomps), op(oldcomps)]))))): for i in newcomps do if nops(i)=1 then newcomps:=subs(i=NULL,newcomps): end if: end do: else newcomps:=[]: end if: return [newpolys, newcomps]: end proc: # Out of two given compatibility graphs, the following procedure creates a new one as their # intersection. This graph consists only of polynomials and compatibilities, which are # contained in both of the input graphs. IntersectCompGraphs:=proc(CG1,CG2) local i, j, polys1, polys2, positionin2, counter, a, b, auxlist, comps1, comps1c, comps2,comps2c, newpolys, newcomps, repa: if CG1=[] then return CG2: elif CG2=[] then return CG1: end if: polys1:=[entries(op(1,CG1),'nolist')]: polys2:=[entries(op(1,CG2),'nolist')]: comps1:=[]: comps2:=[]: for i from 1 to nops(op(2,CG1)) do comps1:=[op(comps1),{b[op(1,op(i,op(2,CG1)))], b[op(2,op(i,op(2,CG1)))]}]: end do: for i from 1 to nops(op(2,CG2)) do comps2:=[op(comps2),{b[op(1,op(i,op(2,CG2)))], b[op(2,op(i,op(2,CG2)))]}]: end do: counter:=0: newpolys:=table(): newcomps:=[]: repa:=[]: for i from 1 to nops(polys1) do if member(polys1[i],polys2,'positionin2') then counter:=counter+1: newpolys[counter]:=polys1[i]: comps1:=subs(b[i]=a[counter],comps1): comps2:=subs(b[positionin2]=a[counter],comps2): repa:=[op(repa),a[counter]=counter]: end if: end do: comps1c:=[]: comps2c:=[]: for i from 1 to nops(comps1) do if ((has(op(1,comps1[i]),a) or has(op(1,comps1[i]),0) or has(op(1,comps1[i]),infty)) and (has(op(2,comps1[i]),a) or has(op(2,comps1[i]),0) or has(op(2,comps1[i]),infty))) then comps1c:=[op(comps1c), comps1[i]]: end if: end do: for i from 1 to nops(comps2) do if ((has(op(1,comps2[i]),a) or has(op(1,comps2[i]),0) or has(op(1,comps2[i]),infty)) and (has(op(2,comps2[i]),a) or has(op(2,comps2[i]),0) or has(op(2,comps2[i]),infty))) then comps2c:=[op(comps2c), comps2[i]]: end if: end do: newcomps:=subs([b[infty]=infty,b[0]=0],subs(repa,{op(comps1c)} intersect {op(comps2c)})): return [newpolys, [op(newcomps)]]: end proc: # For a given list of polynomials and a list of variables, the following # procedure computes the linear reduction. In the case of # COMPATIBILITY_GRAPH=true, it uses compatibility graphs in this procedure. # Else, it computes the Fubini reduction. MPLPolynomialReduction:=proc(polys, vars) global COMPATIBILITY_GRAPH: local i, j, k, p, CG, oldlayer, newlayer, fillednewlayer, subsets, intersectCG, newvar, polytable, newCG, comps: CG:=table(): polytable:=table: comps:=[]: # The first compatibility graph is the complete graph: for i from 1 to nops(polys) do polytable[i]:=polys[i]: if COMPATIBILITY_GRAPH then comps:=[op(comps), {i,0},{i,infty}]: for j from i+1 to nops(polys) do comps:=[op(comps),{i,j}]: end do: end if: end do: # Stage 0: CG[{}]:=[polytable,comps]: # Stage 1: oldlayer:=[]: for i from 1 to nops(vars) do newCG:=CompGraph(CG[{}],vars[i]): if not(newCG=NULL) then CG[{vars[i]}]:=newCG: oldlayer:=[op(oldlayer),{vars[i]}]: end if: end do: for i from 2 to nops(vars) do newlayer:=[op(choose({op(vars)},i))]: fillednewlayer:=[]: for j from 1 to nops(newlayer) do intersectCG:=NULL: for k from 1 to nops(oldlayer) do if oldlayer[k] subset newlayer[j] then newvar:=op(newlayer[j] minus oldlayer[k]): newCG:=CompGraph(CG[oldlayer[k]], newvar): if not(newCG=NULL) then if intersectCG=[] or intersectCG=NULL then intersectCG:=newCG: else intersectCG:=IntersectCompGraphs(intersectCG, newCG): end if: end if: end if: end do: if not(intersectCG=NULL) then CG[newlayer[j]]:=intersectCG: fillednewlayer:=[op(fillednewlayer),newlayer[j]]: end if: end do: oldlayer:=fillednewlayer: end do: return ReductionToLists(CG, nops(vars)): end proc: # Before the output of a reduction, the following procedure is used to remove the placeholders # for denoting that each polynomial is compatible with itself. HideTrivialCompatibilities:=proc(complist) local i, outp: outp:=[]: for i from 1 to nops(complist) do if not(has(complist[i],0) or has(complist[i],infty)) then outp:=[op(outp),complist[i]]: end if: end do: return outp: end proc: # The following returns a given compatibility graph as a list. ReductionToLists:=proc(CG,nvars) local i, j, outp: outp:=[]: if CG=[] then return outp: end if: for j from 0 to nvars do for i in [indices(CG,'nolist')] do if CG[i]=[] and nops(i)=j then outp:=[op(outp),[i, [],[]]]: elif COMPATIBILITY_GRAPH and nops(i)=j then outp:=[op(outp),[i, [entries(op(1,CG[i]),'nolist')], HideTrivialCompatibilities(op(2,CG[i]))]]: elif nops(i)=j then outp:=[op(outp),[i, [entries(op(1,CG[i]),'nolist')]]]: end if: end do: end do: return outp: end proc: # The following procedure was used to simplify checks of the above reduction procedures # by comparing with results generated with a private program of Francis Brown # for Fubini reduction. CompareReductionsWithFrancis:=proc(MyRed, FrancisRed, nvars) local i, j, differencefound, MyRedUnified, FrancisRedUnified, repvars, diffset: repvars:=[]: for i from 1 to nvars do repvars:=[op(repvars), i=e[i]]: end do: MyRedUnified:={}: for i from 1 to nops(MyRed) do MyRedUnified:={op(MyRedUnified), [op(1,MyRed[i]), {op(op(2,MyRed[i]))}]}: end do: FrancisRedUnified:={}: for i from 1 to nops(FrancisRed) do if op(2,FrancisRed[i])={} then FrancisRedUnified:={op(FrancisRedUnified), [subs(repvars,{op(op(1,FrancisRed[i]))}), {}]}: else FrancisRedUnified:={op(FrancisRedUnified), [subs(repvars,{op(op(1,FrancisRed[i]))}), {op(ExtractPolynomials([op(op(2,FrancisRed[i]))]))}]}: end if: end do: diffset:=FrancisRedUnified minus MyRedUnified: if not(diffset={}) then print("MyRedUnified"): print(MyRedUnified): print("FrancisRedUnified"): print(FrancisRedUnified): print("Difference:"): print(diffset): else print("Test ok."): end if: end proc: # The following procedure was used to simplify checks of the above reduction procedures # by comparing with results generated with Erik Panzer's program. CompareReductionsWithErik:=proc(MyRed, EriksRed) local i,j,k,index, polys, comps, translcomps, isinEriksRed, testok: testok:=true: if not(nops(EriksRed)=nops(MyRed)) then print("Different number of reduction stages."): else for i from 1 to nops(MyRed) do index:=op(1,MyRed[i]): polys:=op(2,MyRed[i]): comps:=op(3, MyRed[i]): translcomps:=[]: if comps=[] then traslcomps=comps: elif nops(comps)>0 then for k from 1 to nops(comps) do translcomps:=[op(translcomps),{polys[op(1,comps[k])], polys[op(2,comps[k])]}]: end do: end if: isinEriksRed:=false: for j from 1 to nops(EriksRed) do if op(1,EriksRed[j])=index then isinEriksRed:=true: if not(op(1,op(2,EriksRed[j]))={op(polys)} and op(2,op(2,EriksRed[j]))={op(translcomps)}) then print("One entry does not agree with Erik's reduction:"): print(MyRed[i]): testok:=false: end if: end if: end do: if not(isinEriksRed) then print("One entry is not in Erik's reduction:"): print(MyRed[i]): testok:=false: end if: end do: end if: if testok then print("Test ok."): end if: end proc: # Deletes all polynomials from polys which do not depend on va. CleanList:=proc(polys,va) local i, outp: outp:=[]: for i from 1 to nops(polys) do if has(polys[i],va) then outp:=[op(outp),polys[i]]: end if: end do: return outp: end proc: # For a given polynomial reduction and order of integration variables, # the following procedure returns a list of the lists of polynomials at each stage. # It returns an error message if linear reducibility is failed. SelectPolynomialsFromReduction:=proc(reduction, orderedpar) local i, j, newset, newpolys, outp: outp:=[]: newset:={}: for i from 1 to nops(orderedpar) do newpolys:=0: for j from 1 to nops(reduction) do if op(1,reduction[j])=newset then newpolys:=CleanList(op(2,reduction[j]),orderedpar[i]): outp:=[op(outp),newpolys]: end if: end do: if newpolys=0 then error "Linear reducibility is not satisfied with respect to the chosen order of integrations.": return 0: end if: newset:={op(newset),orderedpar[i]}: end do: return outp: end proc: # The following procedure checks, whether the terms rho_i associated # to a list of polynomials are smaller than zero near the tangentianl basepoint, # as required by the criterion to be properly ordered. CheckZeroesSmallerZero:=proc(polys,va,AllParameters) local i, nextzero: for i from 1 to nops(polys) do nextzero:=-eval(polys[i],va=0)/diff(polys[i],va): if not(SignAtTangentialBasepoint(nextzero,AllParameters)<0) then print("Polynomial causing a problem:"): print(polys[i]): print("Corresponding rho_i:"): print(nextzero); error("Not all terms rho_i are smaller than zero at the tangential basepoint.") end if: end do: print("All rho_i are smaller than zero at the tangential basepoint: Check OK."): end proc: # For a given polynomial reduction and a chosen order of variables, # the following procedure checks, whether the limits, which have to be computed in the # integration procedure, will be in {0,1} and whether it is properly ordered # with respect to the polynomials. MPLCheckOrder:=proc(reduction, IntParameters, AllParameters) local i, j, outp, selectedpolys, repsback, uaux, limitlist: # The following seclects the sets of polynomials from the reduction, which # belong to the chosen order of integration parameters. # It also checks linear reducibility. selectedpolys:=SelectPolynomialsFromReduction(reduction, IntParameters): for i from 1 to nops(selectedpolys) do printf("%s\n",cat("Checks for integration over ",convert(IntParameters[i],string),":")); # Check the criterion "properly ordered": # Check that the terms rho_i are smaller than 0 at the tangential basepoint: CheckZeroesSmallerZero(selectedpolys[i],IntParameters[i],AllParameters): # Check that the limits of cubical coordinates at the tangential basepoint # are in {0, 1}: repsback:=NewCubicalReplacements(selectedpolys[i], IntParameters[i], AllParameters, uaux, true); limitlist:=GetListOfLimits(AllParameters, repsback): if nops(limitlist)>0 then for j from 1 to nops(limitlist) do if not(op(2,limitlist[j])=0) and not(op(2,limitlist[j])=1) then print("Limit causing a problem:"): print(limitlist[j]): error("A limit unequal to 0 and 1 has appeared."): end if: end do: print("Limits in {0, 1}: Check OK."): else print("No limits to be computed: Check OK."): end if: end do: end proc: #################################################################### #################################################################### # # PROCEDURES FOR CHECKS WITH ERIK PANZER'S PROGRAM # #################################################################### #################################################################### # The following procedures act on the left- and right-hand side of the coproduct in # the procedure RewriteFeyn below. restrictFFeyn:=proc(inp, FeynPar, va, u) local i, j, DelCoordinates, output, ReplaceCoords, ZetaTerm: output:=inp: ReplaceCoords:=FeynPar: if has(va, ReplaceCoords) then DelCoordinates:=subs(va=NULL,ReplaceCoords): for i from 1 to nops(DelCoordinates) do output:=subs(d(DelCoordinates[i])=0, output): ####output:=subs(DelCoordinates[i]=0, output): end do: end if: ZetaTerm:=0: if u=1 then for j from 1 to nops(ReplaceCoords) do if not(ReplaceCoords[j]=va) and not(inp=ONE) then ZetaTerm:=ZetaTerm+RegularizedZeta(inp, ReplaceCoords[j]); end if: end do: end if: return eval(output + ZetaTerm): end proc: restrictRFeyn:=proc(inp, va, u, elimvar) global Restrinp: local i, j, k, output, BarLists, reprhs, reps, denombar, numerbar, Signfact, argfact: output:= subs(d(va)=0,normal(inp)): output:=eval(subs(va=u,output)): BarLists:=CheckBarSigns(BarToListsCollected(output), elimvar): reps:=[]: for i from 1 to nops(BarLists[1]) do for k from 1 to nops(BarLists[2][i]) do argfact:=factors(BarLists[2][i][k]): if nops(argfact[2])>2 then reprhs:=0: for j from 1 to nops(argfact[2]) do if argfact[2][j][2]=-1 then reprhs:=reprhs+subs(elimvar,d(argfact[2][j][1]))/argfact[2][j][1]: end if: end do: reps:=[op(reps), BarLists[2][i][k]=reprhs]: end if: end do: end do: return eval(subs(reps,output)): end proc: # This procedure writes my Feynman-parametric bar-expressions as hyperlogarithms, # according to a given order on the parameters. RewriteFeyn:=proc(inp, FeynPar, elimvar) local i, j, SortedInput, outp, k, fn1, fn1List, fTens1, Co, CoTerm, va, NewList: outp:=0: if nops(FeynPar)<2 then return inp: else va:=FeynPar[1]: NewList:=[]: for i from 2 to nops(FeynPar) do NewList:=[op(NewList), FeynPar[i]]: end do: # Sort the input by the length of the words. SortedInput:=SortByLength(inp): for k from 1 to ArrayNumElems(SortedInput(1)) do if SortedInput(1)(k)=0 then outp:=outp+SortedInput(2)(k): else # Take the co-product: Co:=TensToLists(MPLCoproduct(SortedInput(2)(k))): for j from 1 to nops(Co[1]) do outp:=outp+ Co[1][j]*restrictFFeyn(Co[2][j],FeynPar,va,0)*RewriteFeyn(restrictRFeyn(Co[3][j],va,0,elimvar), NewList, [op(elimvar),d(va)=0]): end do: end if: end do: end if: return eval(outp,ONE=1): end proc: # The following procedure translates from the iInt-expressions of Erik Panzer's program to # hyperlogarithms in the bar-notation of my program. iIntToBar:=proc(inp) local i, j, k, reps, iIntList, NewList, NewBar, outp, va, factArg, barArg: reps:=[]: iIntList:=[op(selectfun(inp, iInt))]: for i from 1 to nops(iIntList) do va:=op(1,iIntList[i]): NewList:=op(2,iIntList[i]): NewBar:=[]: for j from 1 to nops(NewList) do factArg:=factors(va-NewList[j]): barArg:=0: if nops(factArg[2])=0 then barArg:=d(va)/va: else for k from 1 to nops(factArg[2]) do barArg:=barArg + coeff(factArg[2][k][1],va)*factArg[2][k][2]*d(va)/(factArg[1]*factArg[2][k][1]): end do: end if: NewBar:=[op(NewBar), barArg]: end do: reps:=[op(reps), iIntList[i] = eval(bar(op(NewBar)))]: end do: return subs(reps, inp): end proc: MPLHlogToBar:=proc(inp) local i, j, k, reps, iIntList, NewList, NewBar, outp, va, factArg, barArg: reps:=[]: iIntList:=[op(selectfun(inp, Hlog))]: for i from 1 to nops(iIntList) do va:=op(1,iIntList[i]): NewList:=op(2,iIntList[i]): NewBar:=[]: for j from 1 to nops(NewList) do factArg:=factors(va-NewList[j]): barArg:=0: if nops(factArg[2])=0 then barArg:=d(va)/va: else for k from 1 to nops(factArg[2]) do barArg:=barArg + coeff(factArg[2][k][1],va)*factArg[2][k][2]*d(va)/(factArg[2][k][1]): end do: end if: NewBar:=[op(NewBar), barArg]: end do: reps:=[op(reps), iIntList[i] = eval(bar(op(NewBar)))]: end do: return subs(reps, inp): end proc: #################################################################### #################################################################### # # TESTS # #################################################################### #################################################################### # This procedure checks ExpandAtOne for some examples. For comparisons we used # RegValue1[3] from Francis' program. # This procedure checks MPLLimit for some examples. For comparisons we used # RegValue1[3] from Francis' program. TestLimitAtOne:=proc(outputinfo) local i, newterm, mistakes, ListInput, ListCorrectResults, newdifference: MPLInitialize(v, 2, false, true): NULL; # The list of terms to be expanded is: ListInput:=[1, bar(d(v[3])/v[3]), bar(d(v[3])/(1-v[3])), bar((v[3]*d(v[2])+v[2]*d(v[3]))/(-v[2]*v[3]+1)), bar((v[2]*v[3]*d(v[1])+v[1]*v[3]*d(v[2])+v[1]*v[2]*d(v[3]))/(1-v[1]*v[2]*v[3])), bar(d(v[3])/v[3], d(v[3])/v[3]), bar(d(v[3])/(1-v[3]), d(v[3])/v[3]), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(1-v[2]*v[3]), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(1-v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(1-v[2]*v[3]),d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), v[2]*d(v[3])/(1-v[2]*v[3])))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(1-v[3]), v[2]*d(v[3])/(1-v[2]*v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(1-v[2]*v[3]), v[2]*d(v[3])/(1-v[2]*v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]), v[2]*d(v[3])/(1-v[2]*v[3])))), SymbolsToTotal(IntWordsRecursive(bar( d(v[3])/(v[3]), v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[3])/(1-v[3]), v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]) ))), SymbolsToTotal(IntWordsRecursive(bar( v[2]*d(v[3])/(1-v[2]*v[3]), v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]) ))) ]: # The corresponding correct expansions at v[3]=1 are: ListCorrectResults:=[1, 0, infinity, -bar(d(v[2])/(v[2]-1)), -bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), 0, -Zeta(2), bar(d(v[2])/v[2], d(v[2])/(v[2]-1)), bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), Zeta(2), 0, -bar(d(v[2])/v[2], d(v[2])/(v[2]-1))+bar(d(v[2])/(v[2]-1), d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), -bar(d(v[2])/v[2], d(v[2])/(v[2]-1)), infinity, bar(d(v[2])/(v[2]-1), d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]), d(v[2])/(v[2]-1))-bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[1])/(v[1]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/(v[1]-1), d(v[2])/(v[2]-1)), -bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), infinity, bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/(v[1]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[1])/(v[1]-1), d(v[2])/(v[2]-1))+bar(d(v[2])/(v[2]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])) ]: print(nops(ListCorrectResults)); mistakes:=[]: for i from 1 to nops(ListCorrectResults) do # Don't test the cases where the limit is infinite. if (not(i=3) and not(i=15) and not(i=19)) then newterm:=factor(MPLLimit(ListInput[i], v[3], 1)): newdifference:=eval(eval(factor(newterm-ListCorrectResults[i]), zeta=Zeta)): if not(newdifference=0) then mistakes:=[op(mistakes), ListInput[i]]: end if: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("All checks for the procedure MPLLimit at one are ok."): else print("Error: The procedude MPLLimit gives wrong results for the following test arguments, evaluated at v[3]=1:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: # This procedure checks MPLLimit for some examples. For comparisons we used # RegValue0[3] from Francis' program. TestLimitAtZero:=proc(outputinfo) local i, newterm, mistakes, ListInput, ListCorrectResults, newdifference: MPLInitialize(v, 2,false, true): NULL; # The list of terms to be expanded is: ListInput:=[1, bar(d(v[3])/v[3]), bar(d(v[3])/(1-v[3])), bar((v[3]*d(v[2])+v[2]*d(v[3]))/(-v[2]*v[3]+1)), bar((v[2]*v[3]*d(v[1])+v[1]*v[3]*d(v[2])+v[1]*v[2]*d(v[3]))/(1-v[1]*v[2]*v[3])), bar(d(v[3])/v[3], d(v[3])/v[3]), bar(d(v[3])/(1-v[3]), d(v[3])/v[3]), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(1-v[2]*v[3]), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(1-v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(1-v[2]*v[3]),d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(1-v[1]*v[2]*v[3]), d(v[3])/(1-v[3])))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), v[2]*d(v[3])/(1-v[2]*v[3])))) ]: # The corresponding correct limits at v[3]=0 are: ListCorrectResults:=[1, infinity, 0, 0, 0, infinity, 0, 0, 0, 0, 0, 0]: print(nops(ListCorrectResults)); mistakes:=[]: for i from 1 to nops(ListCorrectResults) do # Don't test the cases where the limit is infinite. if (not(i=2) and not(i=6)) then newterm:=factor(MPLLimit(ListInput[i], v[3], 0)): newdifference:=eval(eval(factor(newterm-ListCorrectResults[i]), zeta=Zeta)): if not(newdifference=0) then mistakes:=[op(mistakes), ListInput[i]]: end if: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("All checks for the procedure MPLLimit at zero are ok."): else print("Error: The procedude MPLLimit gives wrong results for the following test arguments, evaluated at v[3]=0:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: TestRegularizedZeta:=proc(outputinfo) local i, mistakes, List1, CorrectResults, newdifference: # The lists of all test-arguments and the corresponding correct results. mistakes:=[]: List1:=[ bar(), bar(d(x)/x), bar(d(x)/x, d(x)/x), bar(d(x)/(x-1), d(x)/x), bar(d(x)/x, d(x)/(x-1)), bar(d(x)/(x-1), d(x)/(x-1)), bar(d(x)/x, d(x)/x, d(x)/x), bar(d(x)/(x-1), d(x)/x, d(x)/x), bar(d(x)/(x), d(x)/(x-1), d(x)/x), bar(d(x)/(x-1), d(x)/(x-1), d(x)/(x)), bar(d(x)/(x), d(x)/(x), d(x)/(x-1)), bar(d(x)/(x-1), d(x)/(x), d(x)/(x-1)),bar(d(x)/(x), d(x)/(x-1), d(x)/(x-1)), bar(d(x)/(x-1), d(x)/(x-1), d(x)/(x-1))]: CorrectResults:=[ 0, 0, 0, zeta(2), -zeta(2), 0, 0, -zeta(3), 2*zeta(3), zeta(3), -zeta(3), -2*zeta(3), zeta(3), 0]: # Compare with correct results: print(nops(CorrectResults)): for i from 1 to nops(CorrectResults) do newdifference:=factor(CorrectResults[i]-RegularizedZeta(List1[i], x)): if not(newdifference=0) then mistakes:=[op(mistakes), List1[i]]: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("Checks for RegularizedZeta are ok."): else print("Error: The procedure RegularizedZeta gives wrong results for the following arguments:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: # The following test computes a four-fold integral closely related to a cell-zeta value. # After each integration we compare with intermediate results of Francis' program. TestCellZeta1:=proc(outputinfo) local i, mistakes, Int1, Int2, Int3, Int4, FinalResult, CorrectIntermediateResults, IntermediateResults, newdifference: MPLInitialize(u, 3, false, true): # The list of all correct intermediate results: CorrectIntermediateResults:=[(u[2]*u[3]*(1-u[4])*u[4]*u[1])/((1-u[1]*u[2])*(1-u[1]*u[2]*u[3])*(1-u[4]*u[2]*u[3])*(1-u[4]*u[1]*u[2]*u[3])), -(-u[1]*u[2]*u[3]-u[1]^2*bar((u[3]*d(u[2])+u[2]*d(u[3]))/(u[2]*u[3]-1))*u[2]*u[3]+u[1]^2*u[2]*u[3]+bar((u[2]*u[3]*d(u[1])+u[1]*u[3]*d(u[2])+u[1]*u[2]*d(u[3]))/(-1+u[1]*u[2]*u[3]))*u[1]*u[2]*u[3]-bar((u[2]*u[3]*d(u[1])+u[1]*u[3]*d(u[2])+u[1]*u[2]*d(u[3]))/(-1+u[1]*u[2]*u[3]))+u[1]^2*bar((u[3]*d(u[2])+u[2]*d(u[3]))/(u[2]*u[3]-1)))/((u[1]-1)*u[1]*u[3]^2*u[2]^2*(-1+u[1]*u[2]*u[3])*(-1+u[1]*u[2])), -(-bar(d(u[1])/(u[1]-1), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))*u[1]^2*u[2]+bar(d(u[1])/(u[1]-1), d(u[2])/(u[2]-1))*u[1]^2*u[2]-u[1]*u[2]-u[1]^3*bar(d(u[2])/u[2], d(u[2])/(u[2]-1))*u[2]+u[1]^2*u[2]+u[1]^3*u[2]*bar(d(u[1])/(u[1]-1), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))+bar(d(u[1])/u[1], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))*u[1]^2*u[2]-u[1]^2*bar(d(u[2])/(u[2]-1))*u[2]+u[1]^3*u[2]*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), d(u[2])/(u[2]-1))-u[1]^3*u[2]*bar(d(u[1])/u[1], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))+u[1]^2*bar(d(u[2])/u[2], d(u[2])/(u[2]-1))*u[2]+bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))*u[1]^2*u[2]-bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), d(u[2])/(u[2]-1))*u[1]^2*u[2]-u[1]^3*u[2]*bar(d(u[1])/(u[1]-1), d(u[2])/(u[2]-1))-bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))+u[1]^2*bar(d(u[2])/(u[2]-1)))/((u[1]-1)*u[1]*u[2]^2*(-1+u[1]*u[2])), -(-bar(d(u[1])/u[1], d(u[1])/(u[1]-1))*u[1]^2+bar(d(u[1])/u[1], d(u[1])/u[1], d(u[1])/(u[1]-1))*u[1]^2-bar(d(u[1])/(u[1]-1), d(u[1])/u[1], d(u[1])/(u[1]-1))*u[1]^2-bar(d(u[1])/u[1], d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))*u[1]^2+bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))*u[1]^2+u[1]^2*zeta(2)+bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))*u[1]^2-u[1]^2*zeta(3)+bar(d(u[1])/(u[1]-1))*u[1]+u[1]-bar(d(u[1])/u[1], d(u[1])/(u[1]-1))*u[1]+bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))*u[1]+bar(d(u[1])/(u[1]-1)))/u[1], (3/2)*zeta(3)-(1/2)*zeta(2)-1/2]: # Computation: mistakes:=[]: Int1:=CorrectIntermediateResults[1]: Int2:=MPLCubicalIntegrate(Int1, u[4], 1): Int3:=MPLCubicalIntegrate(Int2, u[3], 1): Int4:=MPLCubicalIntegrate(Int3, u[2], 1): FinalResult:=MPLCubicalIntegrate(Int4, u[1], 1): IntermediateResults:=[Int1, Int2, Int3, Int4, FinalResult]: # Compare with correct results: for i from 1 to nops(CorrectIntermediateResults) do newdifference:=factor(CorrectIntermediateResults[i]-IntermediateResults[i]): if not(newdifference=0) then mistakes:=[op(mistakes), IntermediateResults[i-1]]: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("Checks for Cellzeta1 are ok."): else print("Error: The procedure MPLint gives wrong results for the following integrand during the evaluation of Cellzeta1:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: TestCellZeta2:=proc(outputinfo) local i, mistakes, Int1, Int2, Int3, Int4, FinalResult, CorrectIntermediateResults, IntermediateResults, newdifference: # The list of all correct intermediate results: CorrectIntermediateResults:=[ u[1]^3*(1-u[1])*u[2]^4*(1-u[2])*u[3]^3*(1-u[3])*u[4]^2*(1-u[4])^2/((1-u[1]*u[2]*u[3])^2*(1-u[4]*u[2]*u[3])^2*(1-u[4]*u[1]*u[2]*u[3])^2*(1-u[1]*u[2])), (2*u[1]^4*u[3]^2*u[2]-2*u[1]^4*u[3]+2*u[1]^4-2*u[1]^4*u[2]-2*u[1]^4*u[2]^2*u[3]^2+2*u[1]^4*u[2]^2*u[3]+2*u[1]^3*u[2]*u[3]-6*u[1]^3*u[2]^2*u[3]+4*u[1]^3*u[2]^2*u[3]^2-6*u[1]^3*u[3]^2*u[2]+4*u[1]^3*u[2]+2*u[1]^3*u[2]^3*u[3]^2+4*u[1]^3*u[3]-4*u[1]^3-2*u[1]^3*u[2]^3*u[3]^3+2*u[1]^3*u[2]^2*u[3]^3)*bar((u[3]*d(u[2])+u[2]*d(u[3]))/(u[2]*u[3]-1))/(u[2]*(u[1]-1)^2*u[3]^2*(-1+u[1]*u[2])*(-1+u[1]*u[2]*u[3])^2)+(2*u[3]+6*u[1]*u[2]*u[3]-6*u[1]^2*u[2]^2*u[3]^2+2*u[1]^3*u[2]^3*u[3]^3+2*u[1]^3*u[2]^2*u[3]^2-2*u[1]^3*u[2]^2*u[3]^3+6*u[3]*u[1]^2*u[2]^2-2*u[1]^3*u[2]^3*u[3]^2+2*u[2]^2*u[3]^2*u[1]-6*u[1]^2*u[2]*u[3]-2*u[1]*u[2]^2*u[3]+6*u[1]^2*u[2]*u[3]^2-2*u[3]^2*u[1]*u[2]-2+2*u[2]+4*u[1]-4*u[3]*u[1]-4*u[1]*u[2]-2*u[2]*u[3])*bar((u[2]*u[3]*d(u[1])+u[1]*u[3]*d(u[2])+u[1]*u[2]*d(u[3]))/(-1+u[1]*u[2]*u[3]))/(u[2]*(u[1]-1)^2*u[3]^2*(-1+u[1]*u[2])*(-1+u[1]*u[2]*u[3])^2)+(-2*u[2]^2*u[3]^2*u[1]+4*u[1]^3*u[3]^2*u[2]+u[1]^4*u[2]^2*u[3]^2-4*u[1]^3*u[2]^2*u[3]^2+5*u[1]^2*u[2]^2*u[3]^2-4*u[1]^3*u[2]*u[3]+2*u[1]*u[2]^2*u[3]-2*u[1]*u[2]*u[3]+4*u[1]^2*u[2]*u[3]-u[1]^2*u[2]^3*u[3]^2+u[1]^2*u[2]^3*u[3]^3-u[1]^2*u[2]^2*u[3]^3-4*u[1]^2*u[2]*u[3]^2+2*u[3]^2*u[1]*u[2]-2*u[1]^4*u[3]^2*u[2]+2*u[1]^4*u[2]*u[3]-4*u[3]*u[1]^2*u[2]^2-u[1]^4*u[2]^3*u[3]^3+u[1]^4*u[2]^3*u[3]^2+u[1]^4*u[3]^3*u[2]^2-2*u[1]^4*u[2]^2*u[3]+4*u[1]^3*u[2]^2*u[3])/(u[2]*(u[1]-1)^2*u[3]^2*(-1+u[1]*u[2])*(-1+u[1]*u[2]*u[3])^2), -(2*u[1]+3*u[1]^2-2*u[1]^3-4*u[1]^4*u[2]^2+4*u[1]^4*u[2]-6*u[1]^3*u[2]-u[1]^2*u[2]+8*u[1]^3*u[2]^2-2*u[1]*u[2]-2*u[1]^2*u[2]^2+u[2]-1)*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(4*u[1]^4-8*u[1]^3*u[2]^2-8*u[1]^4*u[2]+16*u[1]^3*u[2]+4*u[1]^4*u[2]^2+2*u[1]^2-4*u[1]^2*u[2]+2*u[1]^2*u[2]^2-8*u[1]^3)*bar(d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(-2*u[2]-2*u[1]+2*u[2]^2*u[1]+2*u[1]^2*u[2]-2*u[1]^2*u[2]^2+2)*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(4*u[1]^5*u[2]-4*u[1]^5*u[2]^2-8*u[1]^4*u[2]-2*u[1]+4*u[1]^3-2*u[1]^4+10*u[1]^4*u[2]^2-6*u[1]^3*u[2]^2+2*u[1]^3*u[2]+2*u[1]*u[2])*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(2*u[2]-4*u[1]^5*u[2]+4*u[1]^5*u[2]^2+8*u[1]^4*u[2]+6*u[1]-4*u[1]^3+2*u[1]^4-10*u[1]^4*u[2]^2-2*u[1]^3*u[2]+6*u[1]^3*u[2]^2-2*u[1]^2*u[2]-4*u[1]*u[2]+2*u[1]^2*u[2]^2-2*u[2]^2*u[1]-2)*bar(d(u[1])/u[1], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(4*u[1]^5*u[2]-4*u[1]^5*u[2]^2-8*u[1]^4*u[2]-2*u[1]+4*u[1]^3-2*u[1]^4+10*u[1]^4*u[2]^2-6*u[1]^3*u[2]^2+2*u[1]^3*u[2]+2*u[1]*u[2])*bar(d(u[1])/(u[1]-1), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(-4*u[1]^5*u[2]-2*u[1]^3*u[2]+2*u[1]+8*u[1]^4*u[2]-4*u[1]^3+2*u[1]^4+6*u[1]^3*u[2]^2+4*u[1]^5*u[2]^2-10*u[1]^4*u[2]^2-2*u[1]*u[2])*bar(d(u[1])/(u[1]-1), d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(2*u[1]^2*u[2]^2-2*u[1]*u[2]+4*u[1]-2*u[1]^2*u[2]-2-2*u[2]^2*u[1]+2*u[2])*bar(d(u[2])/u[2], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(-4*u[1]^5*u[2]-2*u[1]^3*u[2]+8*u[1]^4*u[2]-4*u[1]^3+2*u[1]^4+6*u[1]^3*u[2]^2-10*u[1]^4*u[2]^2+4*u[1]^5*u[2]^2)*bar(d(u[2])/u[2], d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-(-8*u[1]^2*u[2]^2-4*u[1]^4*u[2]^2+4*u[1]^4*u[2]+8*u[1]^2*u[2]-9*u[1]^3*u[2]-3*u[1]*u[2]+3*u[2]^2*u[1]+9*u[1]^3*u[2]^2)/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2])), (12*u[1]^4*zeta(2)-4*u[1]^5*zeta(2)-12*u[1]^3*zeta(2)+4*u[1]^2*zeta(2)+u[1]^3-7*u[1]^2+9*u[1]-3)*bar(d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(9*u[1]^3-6*u[1]^2+3*u[1]-4*u[1]^4)*bar(d(u[1])/u[1], d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(1+u[1]^3-u[1]^2-u[1])*bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(12*u[1]^3+2*u[1]^2-2*u[1]+6*u[1]^5-16*u[1]^4)*bar(d(u[1])/u[1], d(u[1])/u[1], d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(-2*u[1]^5+4*u[1]^4-6*u[1]^2+4*u[1])*bar(d(u[1])/u[1], d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(-4*u[1]^2+2*u[1]-2*u[1]^5+4*u[1]^4)*bar(d(u[1])/(u[1]-1), d(u[1])/u[1], d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(-2*u[1]^5+8*u[1]^4+8*u[1]^2-2*u[1]-12*u[1]^3)*bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/(u[1]*(u[1]-1)^2)+(8*u[1]^2-9*u[1]^3+4*u[1]^3*zeta(2)+4*u[1]^4*zeta(3)+4*u[1]^4-2*u[1]^5*zeta(3)-3*u[1]-2*u[1]^4*zeta(2))/(u[1]*(u[1]-1)^2), (5/3)*zeta(3)+(26/9)*zeta(2)-(17/5)*zeta(2)^2+22/9 ]: # Computation: mistakes:=[]: MPLInitialize(u, 3): Int1:=CorrectIntermediateResults[1]: Int2:=MPLCubicalIntegrate(Int1, u[4], 1): Int3:=MPLCubicalIntegrate(Int2, u[3], 1): Int4:=MPLCubicalIntegrate(Int3, u[2], 1): FinalResult:=MPLCubicalIntegrate(Int4, u[1], 1): IntermediateResults:=[Int1, Int2, Int3, Int4, FinalResult]: # Compare with correct results: for i from 1 to nops(CorrectIntermediateResults) do newdifference:=factor(CorrectIntermediateResults[i]-IntermediateResults[i]): if not(newdifference=0) then mistakes:=[op(mistakes), IntermediateResults[i-1]]: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("Checks for Cellzeta2 are ok."): else print("Error: The procedure MPLint gives wrong results for the following integrand during the evaluation of Cellzeta2:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: TestCellZeta3:=proc(outputinfo) local i, mistakes, Int1, Int2, Int3, Int4, FinalResult, CorrectIntermediateResults, IntermediateResults, newdifference: # The list of all correct intermediate results: CorrectIntermediateResults:=[ u[1]^5*(1-u[1])^2*u[2]^7*(1-u[2])^2*u[3]^5*(1-u[3])^2*u[4]^3*(1-u[4])^3/((1-u[1]*u[2]*u[3])^3*(1-u[4]*u[2]*u[3])^3*(1-u[4]*u[1]*u[2]*u[3])^3*(1-u[1]*u[2])), -(1/2)*u[1]*(-60*u[1]^4*u[3]-174*u[1]^4*u[2]^2*u[3]^2+30*u[1]^4*u[2]^2-60*u[1]^4*u[2]+12*u[1]^4*u[2]^4*u[3]^4+78*u[1]^4*u[2]^3*u[3]^3+48*u[1]^5*u[2]-24*u[1]^5*u[2]^2-6*u[1]^5*u[2]^5*u[3]^3+36*u[1]^4*u[2]^4*u[3]^2-60*u[1]^4*u[2]^3*u[3]+6*u[1]^6-24*u[1]^5+30*u[1]^4-6*u[1]^5*u[2]^5*u[3]^5+30*u[1]^4*u[3]^2+6*u[1]^6*u[2]^2-6*u[1]^4*u[2]^5*u[3]^5+12*u[3]^5*u[1]^4*u[2]^4-60*u[3]^4*u[1]^4*u[2]^3+12*u[1]^4*u[2]^5*u[3]^4-60*u[1]^4*u[2]^4*u[3]^3-12*u[1]^6*u[2]-66*u[1]^5*u[2]*u[3]-12*u[1]^5*u[2]*u[3]^2-18*u[1]^6*u[2]^2*u[3]^2+12*u[1]^6*u[2]^2*u[3]^3-12*u[1]^5*u[3]*u[2]^2+12*u[1]^6*u[2]^3*u[3]^2+60*u[1]^4*u[2]^2*u[3]-6*u[1]^6*u[2]^3*u[3]^3-24*u[1]^5*u[2]^4*u[3]^4+12*u[1]^5*u[3]^5*u[2]^4+12*u[1]^5*u[3]^4*u[2]^3+12*u[1]^5*u[2]^5*u[3]^4+12*u[1]^5*u[2]^4*u[3]^3+60*u[1]^4*u[3]^2*u[2]+24*u[1]^5*u[2]^3*u[3]^3-60*u[1]^5*u[3]^3*u[2]^2+60*u[1]^4*u[2]*u[3]-60*u[1]^5*u[2]^3*u[3]^2+96*u[1]^5*u[2]^2*u[3]^2+48*u[1]^4*u[3]^3*u[2]^2+48*u[1]^4*u[2]^3*u[3]^2+48*u[1]^5*u[3]+18*u[1]^6*u[2]*u[3]-6*u[1]^6*u[2]^3*u[3]+30*u[1]^5*u[2]*u[3]^3-60*u[1]^4*u[2]*u[3]^3-6*u[3]^5*u[1]^4*u[2]^3+36*u[3]^4*u[1]^4*u[2]^2-6*u[1]^5*u[3]^5*u[2]^3+30*u[1]^5*u[2]^3*u[3]-6*u[1]^4*u[2]^5*u[3]^3+6*u[1]^6*u[3]^2-12*u[1]^6*u[3]-6*u[3]^3*u[1]^6*u[2]-24*u[3]^2*u[1]^5)*bar((u[3]*d(u[2])+u[2]*d(u[3]))/(u[2]*u[3]-1))/((u[1]-1)^3*u[3]^2*(-1+u[1]*u[2]*u[3])^3*(-1+u[1]*u[2]))-(1/2)*u[1]*(-6+48*u[2]^2*u[3]^2*u[1]+60*u[1]^3*u[2]*u[3]-36*u[1]^4*u[2]^2*u[3]^2-6*u[2]^2*u[3]^2-6*u[3]^2-6*u[2]^2-150*u[1]^2*u[2]^2*u[3]^2+60*u[1]^3*u[2]^3*u[3]^3-30*u[1]^2*u[3]^2+102*u[1]*u[2]*u[3]-150*u[1]^2*u[2]*u[3]+60*u[1]^2*u[2]^3*u[3]^2-60*u[1]*u[2]^2*u[3]+60*u[1]^2*u[2]^2*u[3]^3+120*u[1]^2*u[2]*u[3]^2-60*u[3]^2*u[1]*u[2]+240*u[1]^3*u[2]^2*u[3]^2-12*u[1]^4*u[2]^4*u[3]^4-138*u[1]^4*u[2]^3*u[3]^3-30*u[1]^2*u[2]^3*u[3]^3-120*u[1]^3*u[2]^2*u[3]^3-48*u[3]*u[1]-48*u[1]*u[2]-24*u[2]*u[3]+12*u[2]+12*u[3]+24*u[1]-30*u[1]^2+24*u[2]^2*u[1]+60*u[1]^2*u[2]-30*u[1]^2*u[2]^2+12*u[2]*u[3]^2+12*u[3]*u[2]^2+6*u[3]^3*u[1]*u[2]+6*u[1]^5*u[2]^5*u[3]^3-36*u[1]^4*u[2]^4*u[3]^2-30*u[1]^2*u[2]^3*u[3]+6*u[2]^3*u[1]*u[3]+120*u[3]*u[1]^2*u[2]^2-120*u[1]^3*u[2]^3*u[3]^2-30*u[1]^2*u[2]*u[3]^3+6*u[1]^5*u[2]^5*u[3]^5+60*u[1]^3*u[2]^3*u[3]+24*u[3]^2*u[1]+60*u[3]*u[1]^2+6*u[1]^4*u[2]^5*u[3]^5-12*u[3]^5*u[1]^4*u[2]^4+60*u[3]^4*u[1]^4*u[2]^3-12*u[1]^4*u[2]^5*u[3]^4+60*u[1]^4*u[2]^4*u[3]^3-12*u[3]^3*u[1]*u[2]^2-12*u[1]*u[2]^3*u[3]^2+6*u[2]^3*u[3]^3*u[1]+24*u[1]^5*u[2]^4*u[3]^4-12*u[1]^5*u[3]^5*u[2]^4-12*u[1]^5*u[3]^4*u[2]^3-12*u[1]^5*u[2]^5*u[3]^4-12*u[1]^5*u[2]^4*u[3]^3+6*u[1]^5*u[2]^3*u[3]^3+72*u[1]^4*u[3]^3*u[2]^2-120*u[1]^3*u[2]^2*u[3]+72*u[1]^4*u[2]^3*u[3]^2-120*u[1]^3*u[3]^2*u[2]+60*u[1]^3*u[2]*u[3]^3+6*u[3]^5*u[1]^4*u[2]^3-36*u[3]^4*u[1]^4*u[2]^2+6*u[1]^5*u[3]^5*u[2]^3+6*u[1]^4*u[2]^5*u[3]^3)*bar((u[2]*u[3]*d(u[1])+u[1]*u[3]*d(u[2])+u[1]*u[2]*d(u[3]))/(-1+u[1]*u[2]*u[3]))/((u[1]-1)^3*u[3]^2*(-1+u[1]*u[2]*u[3])^3*(-1+u[1]*u[2]))-(1/2)*u[1]*(-24*u[2]^2*u[3]^2*u[1]+3*u[1]^2*u[2]^4*u[3]^2-30*u[1]^3*u[2]*u[3]+120*u[1]^4*u[2]^2*u[3]^2+99*u[1]^2*u[2]^2*u[3]^2-101*u[1]^3*u[2]^3*u[3]^3-6*u[1]*u[2]*u[3]+24*u[1]^2*u[2]*u[3]-54*u[1]^2*u[2]^3*u[3]^2+12*u[1]*u[2]^2*u[3]-54*u[1]^2*u[2]^2*u[3]^3-48*u[1]^2*u[2]*u[3]^2+12*u[3]^2*u[1]*u[2]-138*u[1]^3*u[2]^2*u[3]^2+36*u[1]^4*u[2]^4*u[3]^4+39*u[1]^4*u[2]^3*u[3]^3+36*u[1]^2*u[2]^3*u[3]^3+96*u[1]^3*u[2]^2*u[3]^3-6*u[3]^3*u[1]*u[2]-9*u[1]^5*u[2]^5*u[3]^3+3*u[3]^4*u[1]^2*u[2]^2+24*u[1]^2*u[2]^3*u[3]+u[1]^3*u[2]^3*u[3]^5-6*u[2]^3*u[1]*u[3]+30*u[1]^4*u[2]^3*u[3]-48*u[3]*u[1]^2*u[2]^2+96*u[1]^3*u[2]^3*u[3]^2+u[1]^3*u[2]^5*u[3]^3+24*u[1]^2*u[2]*u[3]^3-18*u[1]^3*u[2]^4*u[3]^2-9*u[1]^5*u[2]^5*u[3]^5-30*u[1]^3*u[2]^3*u[3]+3*u[2]^4*u[3]^4*u[1]^2+9*u[1]^4*u[2]^5*u[3]^5-18*u[3]^5*u[1]^4*u[2]^4-18*u[3]^4*u[1]^4*u[2]^3-18*u[1]^4*u[2]^5*u[3]^4-18*u[1]^4*u[2]^4*u[3]^3+u[1]^3*u[2]^5*u[3]^5-2*u[3]^5*u[1]^3*u[2]^4+12*u[3]^3*u[1]*u[2]^2-6*u[3]^4*u[1]^2*u[2]^3-2*u[1]^3*u[2]^5*u[3]^4+12*u[1]*u[2]^3*u[3]^2-6*u[1]^2*u[2]^4*u[3]^3-14*u[2]^4*u[3]^4*u[1]^3-6*u[2]^3*u[3]^3*u[1]+34*u[1]^3*u[2]^4*u[3]^3+34*u[3]^4*u[1]^3*u[2]^3-24*u[1]^5*u[2]*u[3]+48*u[1]^5*u[2]*u[3]^2+21*u[1]^6*u[2]^2*u[3]^2-6*u[1]^6*u[2]^2*u[3]^3+48*u[1]^5*u[3]*u[2]^2-6*u[ 1]^6*u[2]^3*u[3]^2-u[1]^6*u[2]^5*u[3]^5+2*u[1]^6*u[2]^4*u[3]^5+2*u[1]^6*u[2]^5*u[3]^4-7*u[1]^6*u[2]^4*u[3]^4+8*u[1]^6*u[2]^3*u[3]^4-60*u[1]^4*u[2]^2*u[3]+8*u[1]^6*u[2]^4*u[3]^3-7*u[1]^6*u[2]^3*u[3]^3-18*u[1]^5*u[2]^4*u[3]^4+18*u[1]^5*u[3]^5*u[2]^4-18*u[1]^5*u[3]^4*u[2]^3+18*u[1]^5*u[2]^5*u[3]^4-18*u[1]^5*u[2]^4*u[3]^3-60*u[1]^4*u[3]^2*u[2]+39*u[1]^5*u[2]^3*u[3]^3+12*u[1]^5*u[3]^3*u[2]^2+30*u[1]^4*u[2]*u[3]+12*u[1]^5*u[2]^3*u[3]^2-78*u[1]^5*u[2]^2*u[3]^2-60*u[1]^4*u[3]^3*u[2]^2+60*u[1]^3*u[2]^2*u[3]-60*u[1]^4*u[2]^3*u[3]^2+60*u[1]^3*u[3]^2*u[2]-12*u[1]^6*u[2]*u[3]^2+6*u[1]^6*u[2]*u[3]+6*u[1]^6*u[2]^3*u[3]-12*u[1]^6*u[2]^2*u[3]-24*u[1]^5*u[2]*u[3]^3-u[3]^5*u[1]^6*u[2]^3-3*u[3]^4*u[1]^6*u[2]^2+18*u[3]^4*u[1]^5*u[2]^2+30*u[1]^4*u[2]*u[3]^3-30*u[1]^3*u[2]*u[3]^3+9*u[3]^5*u[1]^4*u[2]^3-18*u[3]^4*u[1]^3*u[2]^2-9*u[1]^5*u[3]^5*u[2]^3-24*u[1]^5*u[2]^3*u[3]-3*u[1]^6*u[2]^4*u[3]^2+18*u[1]^5*u[2]^4*u[3]^2-u[1]^6*u[2]^5*u[3]^3+9*u[1]^4*u[2]^5*u[3]^3+6*u[3]^3*u[1]^6*u[2])/((u[1]-1)^3*u[3]^2*(-1+u[1]*u[2]*u[3])^3*(-1+u[1]*u[2])), -(1/2)*(12+18*u[1]^7*u[2]^2-36*u[1]^7*u[2]^3+18*u[1]^7*u[2]^4+59*u[1]^4*u[2]^2-40*u[1]^4*u[2]+12*u[2]^2-18*u[1]^3*u[2]+42*u[1]^5*u[2]+3*u[1]^5*u[2]^2+34*u[1]*u[2]-24*u[2]-24*u[1]+4*u[2]^2*u[1]+42*u[1]^2*u[2]-84*u[1]^2*u[2]^2-12*u[1]^3*u[2]^3-14*u[1]*u[2]^3-3*u[1]^3*u[2]^4+42*u[1]^2*u[2]^3-21*u[1]^4*u[2]^4+33*u[1]^3*u[2]^2+2*u[1]^4*u[2]^3-45*u[1]^6*u[2]^2+87*u[1]^5*u[2]^4-132*u[1]^5*u[2]^3+126*u[1]^6*u[2]^3-69*u[1]^6*u[2]^4-12*u[1]^6*u[2])*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(-1+u[1]*u[2])*(u[1]-1)^3)+(3/2)*u[1]^2*(-6-3*u[1]^3+6*u[2]^3-66*u[1]^4*u[2]^2+20*u[1]^4*u[2]-18*u[2]^2-20*u[1]^3*u[2]-6*u[1]^5*u[2]+18*u[1]^5*u[2]^2-8*u[1]*u[2]+18*u[2]+3*u[1]+u[1]^2+6*u[2]^2*u[1]+4*u[1]^2*u[2]-18*u[1]^2*u[2]^2-84*u[1]^3*u[2]^3-u[1]*u[2]^4+29*u[1]^3*u[2]^4+20*u[1]^2*u[2]^3-7*u[1]^2*u[2]^4-23*u[1]^4*u[2]^4+78*u[1]^3*u[2]^2+u[1]^4+68*u[1]^4*u[2]^3+6*u[1]^5*u[2]^4-18*u[1]^5*u[2]^3)*bar(d(u[2])/(u[2]-1))/(u[2]*(-1+u[1]*u[2])*(u[1]-1)^3)+(3*(5*u[1]*u[2]^3-10*u[2]^2*u[1]+5*u[1]*u[2]-2*u[2]^3+u[2]^2-3+4*u[2]))*u[1]*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/((u[1]-1)^2*u[2])-3*u[1]*(-6*u[1]^6*u[2]^3+3*u[1]^6*u[2]^4+3*u[1]^6*u[2]^2+18*u[1]^5*u[2]^3-6*u[1]^5*u[2]^2-10*u[1]^5*u[2]^4-2*u[1]^5*u[2]+6*u[1]^4*u[2]-2*u[1]^4*u[2]^2+10*u[1]^4*u[2]^4-14*u[1]^4*u[2]^3+8*u[1]^3*u[2]^2-4*u[1]^3*u[2]-4*u[1]^3*u[2]^3+8*u[1]^2*u[2]^2-4*u[1]^2*u[2]-4*u[1]^2*u[2]^3+4*u[2]^2*u[1]-2*u[1]*u[2]-2*u[1]*u[2]^3+3*u[2]^2-6*u[2]+3)*bar((u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]), d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))+3*u[1]*(-3+3*u[1]^7*u[2]^2-6*u[1]^7*u[2]^3+3*u[1]^7*u[2]^4+2*u[2]^3+10*u[1]^4*u[2]^2-10*u[1]^4*u[2]-7*u[2]^2+8*u[1]^5*u[2]+4*u[1]^5*u[2]^2-12*u[1]*u[2]+8*u[2]+3*u[1]+13*u[2]^2*u[1]+12*u[1]^2*u[2]-17*u[1]^2*u[2]^2+10*u[1]^3*u[2]^3-2*u[1]*u[2]^3-2*u[1]*u[2]^4-5*u[1]^3*u[2]^4-2*u[1]^2*u[2]^3+7*u[1]^2*u[2]^4-10*u[1]^4*u[2]^4-5*u[1]^3*u[2]^2+10*u[1]^4*u[2]^3-9*u[1]^6*u[2]^2+20*u[1]^5*u[2]^4-32*u[1]^5*u[2]^3+24*u[1]^6*u[2]^3-13*u[1]^6*u[2]^4-2*u[1]^6*u[2])*bar(d(u[1])/u[1], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(-1+u[1]*u[2])*(u[1]-1)^3)-3*u[1]*(-6*u[1]^6*u[2]^3+3*u[1]^6*u[2]^4+3*u[1]^6*u[2]^2+18*u[1]^5*u[2]^3-6*u[1]^5*u[2]^2-10*u[1]^5*u[2]^4-2*u[1]^5*u[2]+6*u[1]^4*u[2]-2*u[1]^4*u[2]^2+10*u[1]^4*u[2]^4-14*u[1]^4*u[2]^3+8*u[1]^3*u[2]^2-4*u[1]^3*u[2]-4*u[1]^3*u[2]^3+8*u[1]^2*u[2]^2-4*u[1]^2*u[2]-4*u[1]^2*u[2]^3+4*u[2]^2*u[1]-2*u[1]*u[2]-2*u[1]*u[2]^3+3*u[2]^2-6*u[2]+3)*bar(d(u[1])/(u[1]-1), (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))+3*u[1]*(-6*u[1]^6*u[2]^3+3*u[1]^6*u[2]^4+3*u[1]^6*u[2]^2+18*u[1]^5*u[2]^3-6*u[1]^5*u[2]^2-10*u[1]^5*u[2]^4-2*u[1]^5*u[2]+6*u[1]^4*u[2]-2*u[1]^4*u[2]^2+10*u[1]^4*u[2]^4-14*u[1]^4*u[2]^3+8*u[1]^3*u[2]^2-4*u[1]^3*u[2]-4*u[1]^3*u[2]^3+8*u[1]^2*u[2]^2-4*u[1]^2*u[2]-4*u[1]^2*u[2]^3+4*u[2]^2*u[1]-2*u[1]*u[2]-2*u[1]*u[2]^3+3*u[2]^2-6*u[2]+3)*bar(d(u[1])/(u[1]-1), d(u[2])/(u[2]-1))/(u[2]*(u[1]-1)^2*(-1+u[1]*u[2]))-3*u[1]*(4*u[1]^2*u[2]^2-7*u[1]^2*u[2]^3+5*u[1]^3*u[2]-10*u[1]^3*u[2]^2+5*u[1]^3*u[2]^3+4*u[2]^2*u[1]-14*u[1]*u[2]+13*u[1]^2*u[2]+2*u[1]*u[2]^3-10*u[1]^2+4*u[2]-2+8*u[1]-2*u[2]^2)*bar(d(u[2])/u[2], (u[2]*d(u[1])+u[1]*d(u[2]))/(-1+u[1]*u[2]))/((-1+u[1]*u[2])*(u[1]-1)^3)+3*u[1]^5*(20*u[1]*u[2]^3-13*u[1]^2*u[2]^3+24*u[1]^2*u[2]^2+4*u[1]*u[2]+3*u[1]^3*u[2]^3-32*u[2]^2*u[1]-6*u[1]^3*u[2]^2-9*u[1]^2*u[2]+3*u[1]^3*u[2]-10*u[2]^3+8*u[1]-10-2*u[1]^2+10*u[2]+10*u[2]^2)*bar(d(u[2])/u[2], d(u[2])/(u[2]-1))/((-1+u[1]*u[2])*(u[1]-1)^3)-(1/4)*(-72*u[1]^5*u[2]^2+36*u[1]^5*u[2]^3+36*u[1]^5*u[2]-99*u[1]^4*u[2]-6*u[1]^4+216*u[1]^4*u[2]^2-111*u[1]^4*u[2]^3+12*u[1]^3-176*u[1]^3*u[2]^2+70*u[1]^3*u[2]+94*u[1]^3*u[2]^3-83*u[1]^2*u[2]^3+6*u[1]^2+172*u[1]^2*u[2]^2-95*u[1]^2*u[2]-92*u[2]^2*u[1]-12*u[1]+64*u[1]*u[2]+40*u[1]*u[2]^3-24+48*u[2]-24*u[2]^2)*u[1]/((u[1]-1)^2*(-1+u[1]*u[2])), -(1/24)*(-60+1872*u[1]^3-1416*u[1]^2+468*u[1]+960*u[1]^6-1032*u[1]^5-444*u[1]^4+72*u[1]^8-420*u[1]^7-504*u[1]^3*zeta(2)+72*u[1]^8*zeta(2)-504*u[1]^7*zeta(2)+1512*u[1]^6*zeta(2)-2520*u[1]^5*zeta(2)+1944*u[1]^4*zeta(2))*bar(d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(1248*u[1]^6+24*u[1]^4-408*u[1]^5-72*u[1]^9+456*u[1]^8-1128*u[1]^7+180*u[1]+744*u[1]^3-756*u[1]^2)*bar(d(u[1])/u[1], d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(-1716*u[1]^6+1692*u[1]^5-1368*u[1]^4+648*u[1]^3+60*u[1]^2-156*u[1]+72*u[1]^9-456*u[1]^8+1200*u[1]^7+24)*bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(288*u[1]^3-1512*u[1]^6-1728*u[1]^4+2520*u[1]^5+504*u[1]^7-72*u[1]^8)*bar(d(u[1])/u[1], d(u[1])/u[1], d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(792*u[1]^3-504*u[1]^2+72*u[1]-360*u[1]^4)*bar(d(u[1])/u[1], d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(-576*u[1]^4+1008*u[1]^3-504*u[1]^2+72*u[1])*bar(d(u[1])/(u[1]-1), d(u[1])/u[1], d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(-504*u[1]^7+1512*u[1]^6-2520*u[1]^5+2520*u[1]^4+72*u[1]^8-1512*u[1]^3+504*u[1]^2-72*u[1])*bar(d(u[1])/(u[1]-1), d(u[1])/(u[1]-1), d(u[1])/(u[1]-1))/((u[1]-1)^3*u[1]^2)-(1/24)*(-1901*u[1]^3-474*u[1]^7-504*u[1]^4*zeta(2)+72*u[1]^8-60*u[1]+606*u[1]^2+1200*u[1]^7*zeta(2)+1692*u[1]^5*zeta(2)-1716*u[1]^6*zeta(2)+72*u[1]^9*zeta(2)-456*u[1]^8*zeta(2)+2529*u[1]^4+1325*u[1]^6-2097*u[1]^5)/((u[1]-1)^3*u[1]^2), (225/4)*zeta(3)-(266/5)*zeta(2)+(33/5)*zeta(2)^2+391/192]: # Computation: mistakes:=[]: MPLInitialize(u, 3): Int1:=CorrectIntermediateResults[1]: Int2:=MPLCubicalIntegrate(Int1, u[4], 1); Int3:=MPLCubicalIntegrate(Int2, u[3], 1); Int4:=MPLCubicalIntegrate(Int3, u[2], 1); FinalResult:=MPLCubicalIntegrate(Int4, u[1], 1): IntermediateResults:=[Int1, Int2, Int3, Int4, FinalResult]: # Compare with correct results: for i from 1 to nops(CorrectIntermediateResults) do newdifference:=factor(CorrectIntermediateResults[i]-IntermediateResults[i]): if not(newdifference=0) then mistakes:=[op(mistakes), IntermediateResults[i-1]]: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("Checks for Cellzeta3 are ok."): else print("Error: The procedure MPLint gives wrong results for the following integrand during the evaluation of Cellzeta3:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: # This procedure checks MPLLimit for some examples. For comparisons we used # RegValue1[2] from Francis' program. TestRegLength2:=proc(outputinfo) local i, newterm, mistakes, ListInput, ListCorrectResults, newdifference: MPLInitialize(v, 2,false, true): NULL; # The list of terms to be expanded is: ListInput:=[1, bar(d(v[3])/v[3]), bar(d(v[3])/(v[3]-1)), bar((v[3]*d(v[2])+v[2]*d(v[3]))/(v[2]*v[3]-1)), bar((v[2]*v[3]*d(v[1])+v[1]*v[3]*d(v[2])+v[1]*v[2]*d(v[3]))/(v[1]*v[2]*v[3]-1)), bar(d(v[3])/v[3], d(v[3])/v[3]), bar(d(v[3])/(v[3]-1), d(v[3])/v[3]), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(v[2]*v[3]-1), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1), d(v[3])/v[3]))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), d(v[3])/(v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]-1), d(v[3])/(v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(v[2]*v[3]-1),d(v[3])/(v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1), d(v[3])/(v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]), v[2]*d(v[3])/(v[2]*v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(d(v[3])/(v[3]-1), v[2]*d(v[3])/(v[2]*v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(v[2]*d(v[3])/(v[2]*v[3]-1), v[2]*d(v[3])/(v[2]*v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar(v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1), v[2]*d(v[3])/(v[2]*v[3]-1)))), SymbolsToTotal(IntWordsRecursive(bar( d(v[3])/(v[3]), v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[3])/(v[3]-1), v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[2]*d(v[3])/(v[2]*v[3]-1), v[1]*v[2]*d(v[3])/(v[1]*v[2]*v[3]-1) ))) ]: # The corresponding correct expansions at v[3]=1 are: ListCorrectResults:=[1, 0, 0, bar(d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), 0, Zeta(2), -bar(d(v[2])/v[2], d(v[2])/(v[2]-1)), -bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), -Zeta(2), 0, -bar(d(v[2])/v[2], d(v[2])/(v[2]-1))+bar(d(v[2])/(v[2]-1), d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), bar(d(v[2])/v[2], d(v[2])/(v[2]-1)), bar(d(v[2])/v[2], d(v[2])/(v[2]-1))-bar(d(v[2])/(v[2]-1), d(v[2])/(v[2]-1)), bar(d(v[2])/(v[2]-1), d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]), d(v[2])/(v[2]-1))-bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[1])/(v[1]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/(v[1]-1), d(v[2])/(v[2]-1)), bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(- 1+v[1]*v[2]))+bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), -bar((v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[2])/v[2], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2])), bar(d(v[1])/v[1], (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))-bar(d(v[1])/(v[1]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))+bar(d(v[1])/(v[1]-1), d(v[2])/(v[2]-1))+bar(d(v[2])/(v[2]-1), (v[2]*d(v[1])+v[1]*d(v[2]))/(-1+v[1]*v[2]))]: print(nops(ListCorrectResults)); mistakes:=[]: for i from 1 to nops(ListCorrectResults) do # Don't test the cases where the limit is infinite. if (not(i=3) and not(i=15) and not(i=19)) then newterm:=factor(MPLLimit(ListInput[i], v[3], 1)): newdifference:=eval(eval(factor(newterm-ListCorrectResults[i]), zeta=Zeta)): if not(newdifference=0) then mistakes:=[op(mistakes), ListInput[i]]: end if: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("All checks for the procedure Reg for length 2 are ok."): else print("Error: The procedude Reg gives wrong results for the following test arguments, evaluated at v[3]=1:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: # This procedure checks Reg for all words examples of up to length 3 with two variables. For comparisons we used # RegValue1[3] from Francis' program. TestRegLength3:=proc(outputinfo) local i, newterm, mistakes, ListInput, ListCorrectResults, newdifference: MPLInitialize(v, 1, false, true): NULL; # The list of terms to be expanded is: ListInput:=eval(subs(MPLb[3]=0,[1, bar(d(v[2])/v[2]), bar(d(v[2])/(v[2]-1)), bar((v[2]*d(v[1])+v[1]*d(v[2]))/(v[1]*v[2]-1)), bar(d(v[2])/v[2], d(v[2])/v[2]), bar( d(v[2])/(v[2]-1), d(v[2])/v[2]), SymbolsToTotal(IntWordsRecursive(bar( (v[1]*d(v[2]))/(v[1]*v[2]-1)) , d(v[2])/v[2] )), bar( d(v[2])/v[2] , d(v[2])/(v[2]-1) ), bar( d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1)), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/v[2] , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/v[2] , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/(v[2]-1) , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) , d(v[2])/v[2]))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) ,d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/v[2] , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/v[2] , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/v[2] , v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( d(v[2])/(v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))), SymbolsToTotal(IntWordsRecursive(bar( v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) , v[1]*d(v[2])/(v[1]*v[2]-1) ))) ])): # The corresponding correct values at v[2]=1 are: ListCorrectResults:=[1, 0, 0, bar(d(v[1])/(v[1]-1)), 0, Zeta(2), bar(d(v[1])/(v[1]-1)), -Zeta(2), 0, -bar(d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), 0, -Zeta(3), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1)), 2*Zeta(3), Zeta(3), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1)), -2*bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1)), -2*bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1))*Zeta(2), -bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), -Zeta(3), -2*Zeta(3), -bar(d(v[1])/(v[1]-1))*Zeta(2)+bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1] )/(v[1]-1)), Zeta(3), 0, bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))-bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), -2*bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1))*Zeta(2), -2*bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))+2*bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))+2*bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))-2*bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/ (v[1]-1))-bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/(v[1]-1))*Zeta(2), bar(d(v[1])/v[1], d(v[1])/v[1], d(v[1])/(v[1]-1))-bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))-bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), -bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1)), bar(d(v[1])/v[1], d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))-2*bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))+bar(d(v[1])/(v[1]-1), d(v[1])/v[1], d(v[1])/(v[1]-1)), bar(d(v[1])/(v[1]-1), d(v[1])/(v[1]-1), d(v[1])/(v[1]-1))]: print(nops(ListCorrectResults)); mistakes:=[]: for i from 1 to nops(ListCorrectResults) do # Don't test the cases where the limit is infinite. if (not(i=3) ) then newterm:=factor(Reg(ListInput[i], v[2])): newdifference:=eval(eval(factor(newterm-ListCorrectResults[i]), zeta=Zeta)): if not(newdifference=0) then mistakes:=[op(mistakes), ListInput[i]]: end if: end if: end do: # If outputinfo=true the inputs which gave wrong results are shown. if outputinfo=true then if mistakes=[] then print("All checks for the procedure Reg with two variables and up to length 3 are ok."): else print("Error: The procedure Reg gives wrong results for the following test arguments, evaluated at v[2]=1:"): print(mistakes): end if: end if: # The return value is true if everything was correct and false otherwise. if mistakes=[] then return true: else return false: end if: end proc: # The following tests the procedure MPLUnshuffle, also using MPLSymbolAndShuffle. TestMPLUnshuffle:=proc() local i, unsh, TestInputList1, TestInputList2, ProblemList, ErrorOcurred, diff: ProblemList:=[]: ErrorOcurred:=0: MPLInitialize(z, 1): TestInputList1:=[4+bar(d(z[2])/z[2], (z[2]*d(z[1])+z[1]*d(z[2]))/(1-z[1]*z[2]))+5*bar((d(z[1]))/(z[1]),d(z[2])/(1-z[2]))+bar(d(z[2])/z[2])+3*bar(d(z[1])/z[1], d(z[1])/(1-z[1]))+bar(d(z[1])/z[1]), bar((z[2]*d(z[1])+z[1]*d(z[2]))/(1-z[1]*z[2]))+8, 5, 20*bar((z[2]*d(z[1])+z[1]*d(z[2]))/(1-z[1]*z[2]), d(z[2])/(1-z[2]),d(z[1])/(1-z[1]),d(z[1])/(1-z[1]),d(z[2])/z[2])+bar(d(z[2])/z[2])]: for i from 1 to nops(TestInputList1) do unsh:=MPLUnshuffle(TestInputList1[i], z[2]): diff:=eval(TestInputList1[i]-MPLSymbolAndShuffle(unsh)): if not(diff=0) then ProblemList:=[op(ProblemList), TestInputList1[i]]: ErrorOcurred:=1: end if: end do: MPLInitialize(z, 3): TestInputList2:=[bar(d(z[4])/(1-z[4])), bar((z[2]*d(z[1])+z[1]*d(z[2]))/(1-z[1]*z[2]), d(z[2])/(1-z[2]), d(z[3])/z[3], (z[2]*z[3]*d(z[1])+z[1]*z[3]*d(z[2])+z[1]*z[2]*d(z[3]))/(1-z[1]*z[2]*z[3]))+8, bar((z[3]*z[4]*d(z[2])+z[2]*z[4]*d(z[3])+z[2]*z[3]*d(z[4]))/(1-z[2]*z[3]*z[4]), (z[2]*z[3]*d(z[1])+z[1]*z[3]*d(z[2])+z[1]*z[2]*d(z[3]))/(1-z[1]*z[2]*z[3]),d(z[4])/z[4],(z[2]*z[3]*z[4]*d(z[1])+z[1]*z[3]*z[4]*d(z[2])+z[1]*z[2]*z[4]*d(z[3])+z[1]*z[2]*z[3]*d(z[4]))/(1-z[1]*z[2]*z[3]*z[4]))+7*bar((z[2]*z[3]*d(z[1])+z[1]*z[3]*d(z[2])+z[1]*z[2]*d(z[3]))/(1-z[1]*z[2]*z[3]), (z[3]*d(z[2])+z[2]*d(z[3]))/(1-z[2]*z[3]), (z[4]*d(z[3])+z[3]*d(z[4]))/(1-z[3]*z[4])), 99+78*z[1]+17*bar((z[2]*z[3]*z[4]*d(z[1])+z[1]*z[3]*z[4]*d(z[2])+z[1]*z[2]*z[4]*d(z[3])+z[1]*z[2]*z[3]*d(z[4]))/(1-z[1]*z[2]*z[3]*z[4]))]: for i from 1 to nops(TestInputList2) do unsh:=MPLUnshuffle(TestInputList2[i], z[4]): diff:=eval(TestInputList2[i]-MPLSymbolAndShuffle(unsh)): if not(diff=0) then ProblemList:=[op(ProblemList), TestInputList2[i]]: ErrorOcurred:=1: end if: end do: if not(ErrorOcurred=0) then print("Error: The procedure MPLUnshuffle (or MPLSymbolAndShuffle) gives wrong results for the following test arguments:"): print(ProblemList): else print("All checks for the procedure MPLUnshuffle are ok."): end if: end proc: # The following procedure wraps up some of the automated tests above: MPLAutomatedTests:=proc() TestLimitAtOne(true); TestLimitAtZero(true); TestRegularizedZeta(true); TestCellZeta1(true); TestCellZeta2(true); TestCellZeta3(true); TestRegLength2(true); TestRegLength3(true); TestMPLUnshuffle(); end proc: #################################################################### #################################################################### # # EXECUTE # #################################################################### #################################################################### # The Arnold Equations from MPLnumberofvar=0 to MPLnumberofvar=12: MPLLowestArnoldEquations:=[[[[1, -1, -1], [0, 0, 0], [-MPLft[2], MPLft[1], -MPLft[2]]]], [[[1, -1, -1], [0, 0, MPLb[1]], [-MPLft[2], MPLft[1], -MPLft[2]]], [[1, -1, 1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]]], [[[1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]]], [[[1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]]], [[[1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], - MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]]], [[[1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6] , -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]]], [[[1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], - MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7] , -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], - MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[ 6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], - MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], - MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [- MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[37], -MPLb[37], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], -MPLft[10], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[38], MPLb[1], -MPLb[38], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[ 10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[ 1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], - MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[ 45]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], - MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], - MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[37], -MPLb[37], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], -MPLft[10], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[38], MPLb[1], -MPLb[38], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[ 5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[46], -MPLb[46], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[2], -MPLft[11], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[47], MPLb[1], -MPLb[47], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[3], - MPLft[3], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6] , MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, - 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], - MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, - 1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[ 10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], - MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[37], -MPLb[37], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], -MPLft[10], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[38], MPLb[1], -MPLb[38], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[ 10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[ 15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[46], -MPLb[46], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[2], -MPLft[11], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[47], MPLb[1], -MPLb[47], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[ 8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [- MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[56], -MPLb[56], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[2], -MPLft[12], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[57], MPLb[1], -MPLb[57], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], - MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, - 1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[ 9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], MPLft[1], MPLft[1], MPLft[ 1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[37], -MPLb[37], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], -MPLft[10], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[38], MPLb[1], -MPLb[38], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[46], -MPLb[46], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[2], -MPLft[11], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[47], MPLb[1], -MPLb[47], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], - MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3] , MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[56], -MPLb[56], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[2], -MPLft[12], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[57], MPLb[1], -MPLb[57], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[ 12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[67], -MPLb[67], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[2], -MPLft[13], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[68], MPLb[1], -MPLb[68], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[3], -MPLft[3], -MPLft[13], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[69], MPLb[1], MPLb[3], -MPLb[69], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[13], -MPLft[13], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[70], MPLb[1], MPLb[3], MPLb[6], -MPLb[70], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[71], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[71], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[72], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[72], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[73], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[73], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[74], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[74], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[75], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[75], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[76], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[76], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[ 11]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[77], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[77], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]]], [[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [0, 0, MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[ 2], MPLft[1], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[1], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[3], MPLft[1], MPLft[1], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[1, -1, -1], [-MPLb[2], -MPLb[2], MPLb[1]], [-MPLft[2], -MPLft[3], -MPLft[2]]], [[1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[4], -MPLft[4], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, -1, -1, -1], [-MPLb[4], -MPLb[4], MPLb[1], MPLb[3]], [-MPLft[2], -MPLft[4], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1], [MPLb[1], -MPLb[5], MPLb[1], -MPLb[5], MPLb[1], MPLb[1], MPLb[3]], [-MPLft[4], -MPLft[4], -MPLft[3], -MPLft[3], -MPLft[4], -MPLft[3], -MPLft[3]]], [[1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[5], -MPLft[5], -MPLft[5], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, -1, -1, -1, -1], [-MPLb[7], -MPLb[7], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[2], -MPLft[5], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1], [MPLb[1], -MPLb[8], MPLb[1], -MPLb[8], MPLb[1], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[5], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], -MPLb[9], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6]], [-MPLft[5], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[5], -MPLft[5], -MPLft[4], -MPLft[4], -MPLft[4]]], [[1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, -1, -1, -1, -1, -1], [-MPLb[11], -MPLb[11], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[2], -MPLft[6], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], -MPLb[12], MPLb[1], -MPLb[12], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[6], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], -MPLb[13], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[6], -MPLft[6], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], -MPLb[14], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10]], [-MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, -1, -1, -1, -1, -1, -1], [-MPLb[16], -MPLb[16], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[2], -MPLft[7], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[17], MPLb[1], -MPLb[17], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[7], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], -MPLb[18], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[7], -MPLft[7], -MPLft[4], - MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], -MPLb[19], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[20], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15]], [-MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[22], -MPLb[22], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[2], -MPLft[8], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[23], MPLb[1], -MPLb[23], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[8], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], -MPLb[24], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[8], -MPLft[8], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], -MPLb[25], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[26], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[27], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21]], [-MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[29], -MPLb[29], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[2], -MPLft[9], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[30], MPLb[1], -MPLb[30], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[9], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], -MPLb[31], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[ 15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[9], -MPLft[9], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], -MPLb[32], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[33], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[34], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[35], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28]], [-MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[37], -MPLb[37], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[2], -MPLft[10], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[38], MPLb[1], -MPLb[38], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[10], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], -MPLb[39], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[10], -MPLft[10], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], -MPLb[40], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[41], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[ 1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[42], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[43], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[44], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36]], [-MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[46], -MPLb[46], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[2], -MPLft[11], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[47], MPLb[1], -MPLb[47], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[11], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], -MPLb[48], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[11], -MPLft[11], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[ 1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], -MPLb[49], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[50], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[51], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[52], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[53], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[54], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45]], [-MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[56], -MPLb[56], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[2], -MPLft[12], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[57], MPLb[1], -MPLb[57], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[12], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], -MPLb[58], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[12], -MPLft[12], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], -MPLb[59], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], - MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[60], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[61], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[62], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[63], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[64], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36] , MPLb[45], -MPLb[65], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55]], [-MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[ 78]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[67], -MPLb[67], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[2], -MPLft[13], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[68], MPLb[1], -MPLb[68], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[3], -MPLft[3], -MPLft[13], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[69], MPLb[1], MPLb[3], -MPLb[69], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[13], -MPLft[13], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[70], MPLb[1], MPLb[3], MPLb[6], -MPLb[70], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[71], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[71], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[72], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[72], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[73], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[73], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[8] , -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[74], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[74], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[75], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[75], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[76], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[76], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[77], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[77], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66]], [-MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]], [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], MPLft[1], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14]]], [[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-MPLb[79], -MPLb[79], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[2], -MPLft[14], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2], -MPLft[2]]], [[-1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], -MPLb[80], MPLb[1], -MPLb[80], MPLb[1], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[3], -MPLft[3], -MPLft[14], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3], -MPLft[3]]], [[-1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], -MPLb[81], MPLb[1], MPLb[3], -MPLb[81], MPLb[1], MPLb[3], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[14], -MPLft[14], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4], -MPLft[4]]], [[-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], -MPLb[82], MPLb[1], MPLb[3], MPLb[6], -MPLb[82], MPLb[1], MPLb[3], MPLb[6], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5], -MPLft[5]]], [[-1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[83], MPLb[1], MPLb[3], MPLb[6], MPLb[10], -MPLb[83], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6], -MPLft[6]]], [[-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[84], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], -MPLb[84], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7], -MPLft[7]]], [[-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[85], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], -MPLb[85], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8], -MPLft[8]]], [[-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[86], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], -MPLb[86], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9], -MPLft[9]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[87], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], -MPLb[87], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], - MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10], -MPLft[10]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[88], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], -MPLb[88], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], - MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11], -MPLft[11]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[89], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], -MPLb[89], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12], -MPLft[12]]], [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], -MPLb[90], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], -MPLb[90], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[1], MPLb[3], MPLb[6], MPLb[10], MPLb[15], MPLb[21], MPLb[28], MPLb[36], MPLb[45], MPLb[55], MPLb[66], MPLb[78]], [-MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[14], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13], -MPLft[13]]]]]: # This list was created with the command: CreateLowestArnoldEquations:=proc(howmany) local k, i, j, outp, NewRhs, NewEq: outp:=[]: for k from 0 to howmany do NewEq:=[]: MPLInitialize(u, k): for j from 2 to MPLnumberofvar+2 do for i from 1 to j-1 do NewRhs:=ArnoldCubical(MPLft[j], MPLft[i]): NewEq:=[op(NewEq), NewRhs]: end do: end do: outp:=[op(outp), NewEq]: end do: return outp: end proc: MPL_CoefflnZeroList:=[]: defform(e=0): # COMPATIBILITY_GRAPH is set true by default: COMPATIBILITY_GRAPH:=true: s:='s': # The program MPL ends here.