Changeset f07380 in git


Ignore:
Timestamp:
Dec 28, 2018, 12:13:38 AM (5 years ago)
Author:
Viktor Levandovskyy <levandov@…>
Branches:
(u'spielwiese', '873fc1222e995d7cb33f79d8f1792ce418c8c72c')
Children:
7b834f7b20abdb4543b233e3bfb3a48868d4bbb2
Parents:
356f8adf86113102123739a2bef3a677418402bf38f8079d872564961e7c1925071e5ea7f3dd7ddb
Message:
Merge remote-tracking branch 'upstream/spielwiese' into spielwiese
Files:
4 added
48 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/fpadim.lib

    r356f8ad rf07380  
    132132"PURPOSE: Checks, if all the Assumptions are holding
    133133"
    134 {if (attrib(basering,"isLetterplaceRing")==0) {ERROR("Basering is not a Letterplace ring!");}
    135   if (d > attrib(basering,"uptodeg")) {ERROR("Specified degree bound exceeds ring parameter!");}
     134{if (!isFreeAlgebra(basering)) {ERROR("Basering is not a Letterplace ring!");}
     135  if (d > lpDegBound(basering)) {ERROR("Specified degree bound exceeds ring parameter!");}
    136136  int i;
    137137  for (i = 1; i <= size(L); i++)
    138   {if (entryViolation(L[i], attrib(basering,"isLetterplaceRing")))
     138  {if (entryViolation(L[i], lpVarBlockSize(basering)))
    139139    {ERROR("Not allowed monomial/intvec found!");}
    140140  }
     
    907907  // construct the Graph of normal words [Studzinski page 78]
    908908  // construct set of vertices
    909   int v = attrib(basering,"isLetterplaceRing"); int d = attrib(basering,"uptodeg");
     909  int v = lpVarBlockSize(basering); int d = lpDegBound(basering);
    910910  ideal V; poly p,q,w;
    911911  ideal LG = lead(G);
     
    16911691EXAMPLE: example lpDHilbert; shows examples
    16921692"
    1693 {int degbound = attrib(basering,"uptodeg");int n = attrib(basering, "isLetterplaceRing");
     1693{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    16941694  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    16951695  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    17331733EXAMPLE: example lpDHilbertSickle; shows examples
    17341734"
    1735 {int degbound = attrib(basering,"uptodeg");int n = attrib(basering, "isLetterplaceRing");
     1735{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    17361736  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    17371737  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    17781778SEE ALSO: ncHilb_lib
    17791779"
    1780 {int degbound = attrib(basering,"uptodeg");int n = attrib(basering, "isLetterplaceRing");
     1780{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    17811781  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    17821782  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    18091809EXAMPLE: example lpKDimCheck; shows examples
    18101810"
    1811 {int n = attrib(basering,"isLetterplaceRing");
     1811{int n = lpVarBlockSize(basering);
    18121812  list L;
    18131813  ideal R;
     
    18441844EXAMPLE: example lpKDim; shows examples
    18451845"
    1846 {int degbound = attrib(basering, "uptodeg");int n = attrib(basering, "isLetterplaceRing");
     1846{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    18471847  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    18481848  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    19481948EXAMPLE: example lpSickle; shows examples
    19491949"
    1950 {int degbound = attrib(basering,"uptodeg"); int n = attrib(basering, "isLetterplaceRing");
     1950{int degbound = lpDegBound(basering); int n = lpVarBlockSize(basering);
    19511951  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    19521952  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    19881988EXAMPLE: example lpSickleDim; shows examples
    19891989"
    1990 {int degbound = attrib(basering,"uptodeg");int n = attrib(basering, "isLetterplaceRing");
     1990{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    19911991  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    19921992  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    20282028EXAMPLE: example lpSickleHil; shows examples
    20292029"
    2030 {int degbound = attrib(basering,"uptodeg");int n = attrib(basering, "isLetterplaceRing");
     2030{int degbound = lpDegBound(basering);int n = lpVarBlockSize(basering);
    20312031  if (size(#) > 0){if (typeof(#[1])=="int"){if (#[1] >= 0){degbound = #[1];}}}
    20322032  if (size(#) > 1){if (typeof(#[1])=="int"){if (#[2] > 0){n = #[2];}}}
     
    20752075"
    20762076{int m,d,h,degbound;
    2077   m = 1; d = 0; h = 0; degbound = attrib(basering,"uptodeg");
     2077  m = 1; d = 0; h = 0; degbound = lpDegBound(basering);
    20782078  if (size(#) > 0) {if (typeof(#[1])=="int"){if (#[1] < 1) {m = 0;}}}
    20792079  if (size(#) > 1) {if (typeof(#[1])=="int"){if (#[2] > 0) {d = 1;}}}
     
    20822082  if (m == 1)
    20832083  {if (d == 0)
    2084     {if (h == 0) {return(lpSickle(G,degbound,attrib(basering,"isLetterplaceRing")));}
    2085       else        {return(lpSickleHil(G,degbound,attrib(basering,"isLetterplaceRing")));}
     2084    {if (h == 0) {return(lpSickle(G,degbound,lpVarBlockSize(basering)));}
     2085      else        {return(lpSickleHil(G,degbound,lpVarBlockSize(basering)));}
    20862086    }
    20872087    else
    2088     {if (h == 0) {return(lpSickleDim(G,degbound,attrib(basering,"isLetterplaceRing")));}
    2089       else {return(lpDHilbertSickle(G,degbound,attrib(basering,"isLetterplaceRing")));}
     2088    {if (h == 0) {return(lpSickleDim(G,degbound,lpVarBlockSize(basering)));}
     2089      else {return(lpDHilbertSickle(G,degbound,lpVarBlockSize(basering)));}
    20902090    }
    20912091  }
     
    20932093  {if (d == 0)
    20942094    {if (h == 0) {ERROR("You request to do nothing, so relax and do so");}
    2095       else        {return(lpHilbert(G,degbound,attrib(basering,"isLetterplaceRing")));}
     2095      else        {return(lpHilbert(G,degbound,lpVarBlockSize(basering)));}
    20962096    }
    20972097    else
    2098     {if (h == 0) {return(lpKDim(G,degbound,attrib(basering,"isLetterplaceRing")));}
    2099       else {return(lpDHilbert(G,degbound,attrib(basering,"isLetterplaceRing")));}
     2098    {if (h == 0) {return(lpKDim(G,degbound,lpVarBlockSize(basering)));}
     2099      else {return(lpDHilbert(G,degbound,lpVarBlockSize(basering)));}
    21002100    }
    21012101  }
  • Singular/LIB/fpaprops.lib

    r356f8ad rf07380  
    9191  // if longest word has length 1 we handle it as a special case
    9292  if (l == 1) {
    93     int n = attrib(basering, "isLetterplaceRing"); // variable count
     93    int n = lpVarBlockSize(basering); // variable count
    9494    int k = size(G);
    9595    if (k == n) { // only the field left
     
    746746    ERROR("Ufnarovskij graph not implemented for l = 1");
    747747  }
    748   int lV = attrib(basering, "isLetterplaceRing");
     748  int lV = lpVarBlockSize(basering);
    749749  // TODO: what if l <= 0?
    750750  dbprint("computing standard words");
     
    836836    return (words); // no standard words
    837837  }
    838   int lV = attrib(basering, "isLetterplaceRing"); // variable count
     838  int lV = lpVarBlockSize(basering); // variable count
    839839  list prevWords = ivStandardWords(G, length - 1);
    840840  list words;
     
    907907  // if longest word has length 1, or G is the zero ideal, we handle it as a special case
    908908  if (l == 1 || size(G) == 0) {
    909     int n = attrib(basering, "isLetterplaceRing"); // variable count
     909    int n = lpVarBlockSize(basering); // variable count
    910910    int k = size(G);
    911911    if (k == n) { // V = {1} no edges
     
    10011001  // delete variables in LM(G1) from the ring
    10021002  def save = basering;
    1003   ring R = basering;
     1003  def R = basering;
    10041004  if (size(G1) > 0) {
    10051005    while (size(G1) > 0) {
    1006       if (attrib(R, "isLetterplaceRing") > 1) {
    1007         ring R = lpDelVar(lp2iv(G1[1])[1]);
     1006      if (lpVarBlockSize(R) > 1) {
     1007        def @R = R - string(G1[1]);
     1008        R = @R;
     1009        kill @R;
     1010        setring R;
     1011        /* ring R = lpDelVar(lp2iv(G1[1])[1]); // TODO replace with proper method */
    10081012        ideal G1 = imap(save,G1);
    10091013        G1 = simplify(G1, 2); // remove zero generators
     
    10671071static proc imHasLoops(intmat A) {
    10681072  int n = ncols(A);
    1069   for (int i = 1; i < n; i++) {
     1073  for (int i = 1; i <= n; i++) {
    10701074    if (A[i,i] == 1) {
    10711075      return (1);
     
    10781082{
    10791083  list LG = lpId2ivLi(lead(G));
    1080   int n = attrib(basering, "isLetterplaceRing");
    1081   int degbound = attrib(basering, "uptodeg");
     1084  int n = lpVarBlockSize(basering);
     1085  int degbound = lpDegBound(basering);
    10821086
    10831087  list V;
     
    13761380}
    13771381
    1378 // TODO: use original ring attrib to create a new letterplace ring
    1379 // removes a variable from a letterplace ring (a bit of a hack)
    1380 static proc lpDelVar(int index) {
    1381   int lV = attrib(basering, "isLetterplaceRing"); // number of variables in the main block
    1382   int d = attrib(basering, "uptodeg"); // degree bround
    1383   list LR = ringlist(basering);
    1384 
    1385   if (!(index >= 1 && index <= lV)) { return (basering); } // invalid index
    1386 
    1387   // remove frome the variable list
    1388   for (int i = (d-1)*lV + index; i >= 1; i = i - lV) {
    1389     LR[2] = delete(LR[2], i);
    1390   } kill i;
    1391 
    1392   // remove from a ordering
    1393   intvec aiv = LR[3][1][2];
    1394   aiv = aiv[1..(d*lV-d)];
    1395   LR[3][1][2] = aiv;
    1396 
    1397   // remove block orderings
    1398   int del = (lV - index);
    1399   int cnt = -1;
    1400   for (int i = size(LR[3]); i >= 2; i--) {
    1401     if (LR[3][i][2] != 0) {
    1402       for (int j = size(LR[3][i][2]); j >= 1; j--) {
    1403         cnt++; // next 1
    1404         if (cnt%lV == del) {
    1405           // delete
    1406           if (size(LR[3][i][2]) > 1) { // if we have more than one element left, delete one
    1407             LR[3][i][2] = delete(LR[3][i][2],j);
    1408           } else { // otherwise delete the whole block
    1409             LR[3] = delete(LR[3], i);
    1410             break;
    1411           }
    1412         }
    1413       } kill j;
    1414     }
    1415   } kill i;
    1416 
    1417   def R = setLetterplaceAttributes(ring(LR),d,lV-1);
    1418   return (R);
    1419 }
    1420 example
    1421 {
    1422   "EXAMPLE:"; echo = 2;
    1423   ring r = 0,(x,y,z),dp;
    1424   def A = makeLetterplaceRing(3);
    1425   setring A; A;
    1426   def R = lpDelVar(2); setring R; R;
    1427 }
     1382// no longer working with new interface and new orderings
     1383/* // TODO: use original ring attrib to create a new letterplace ring */
     1384/* // removes a variable from a letterplace ring (a bit of a hack) */
     1385/* static proc lpDelVar(int index) { */
     1386/*   int lV = lpVarBlockSize(basering); // number of variables in the main block */
     1387/*   int d = lpDegBound(basering); // degree bround */
     1388/*   list LR = ringlist(basering); */
     1389
     1390/*   if (!(index >= 1 && index <= lV)) { return (basering); } // invalid index */
     1391
     1392/*   // remove frome the variable list */
     1393/*   for (int i = (d-1)*lV + index; i >= 1; i = i - lV) { */
     1394/*     LR[2] = delete(LR[2], i); */
     1395/*   } kill i; */
     1396
     1397/*   // remove from a ordering */
     1398/*   intvec aiv = LR[3][1][2]; */
     1399/*   aiv = aiv[1..(d*lV-d)]; */
     1400/*   LR[3][1][2] = aiv; */
     1401
     1402/*   // remove block orderings */
     1403/*   int del = (lV - index); */
     1404/*   int cnt = -1; */
     1405/*   for (int i = size(LR[3]); i >= 2; i--) { */
     1406/*     if (LR[3][i][2] != 0) { */
     1407/*       for (int j = size(LR[3][i][2]); j >= 1; j--) { */
     1408/*         cnt++; // next 1 */
     1409/*         if (cnt%lV == del) { */
     1410/*           // delete */
     1411/*           if (size(LR[3][i][2]) > 1) { // if we have more than one element left, delete one */
     1412/*             LR[3][i][2] = delete(LR[3][i][2],j); */
     1413/*           } else { // otherwise delete the whole block */
     1414/*             LR[3] = delete(LR[3], i); */
     1415/*             break; */
     1416/*           } */
     1417/*         } */
     1418/*       } kill j; */
     1419/*     } */
     1420/*   } kill i; */
     1421
     1422/*   def R = setLetterplaceAttributes(ring(LR),d,lV-1); */
     1423/*   return (R); */
     1424/* } */
     1425/* example */
     1426/* { */
     1427/*   "EXAMPLE:"; echo = 2; */
     1428/*   ring r = 0,(x,y,z),dp; */
     1429/*   def A = makeLetterplaceRing(3); */
     1430/*   setring A; A; */
     1431/*   def R = lpDelVar(2); setring R; R; */
     1432/* } */
  • Singular/LIB/freegb.lib

    r356f8ad rf07380  
    2323
    2424PROCEDURES:
    25 makeLetterplaceRing(d);          creates a Letterplace ring out of given data
    26 setLetterplaceAttributes(R,d,b); supplies ring R with the letterplace structure
    27 lieBracket(a,b[, N]);            Lie bracket ab-ba of two letterplace polynomials
    28 letplaceGBasis(I);               two-sided Groebner basis of a letterplace ideal I
     25freeAlgebra(r, d);               creates a Letterplace ring out of given data
     26isFreeAlgebra(r);                check whether r is a letterplace ring (free algebra)
     27lpDegBound(R);                   returns the degree bound of a letterplace ring
     28lpVarBlockSize(R);               returns the size of the letterplace blocks
     29
     30letplaceGBasis(I);               (deprecated, use twostd) two-sided Groebner basis of a letterplace ideal I
     31
    2932lpDivision(f,I);                 two-sided division with remainder
    3033lpGBPres2Poly(L,I);              reconstructs a polynomial from the output of lpDivision
     34
     35lieBracket(a,b[, N]);            Lie bracket ab-ba of two letterplace polynomials
    3136isOrderingShiftInvariant(i);     tests shift-invariance of the monomial ordering
    32 
    3337isVar(p);                        check whether p is a power of a single variable
    3438
    3539lpLmDivides(ideal I, poly p);    tests whether there exists q in I, such that LM(q)|LM(p)
    3640lpVarAt(poly p, int pos);        returns the variable (as a poly) at position pos of the poly p
     41
     42makeLetterplaceRing(d);          (deprecated, use freeAlgebra) creates a Letterplace ring out of given data
     43setLetterplaceAttributes(R,d,b); (for testing purposes) supplies ring R with the letterplace structure
    3744
    3845SEE ALSO: fpadim_lib, fpaprops_lib, fpalgebras_lib, LETTERPLACE
     
    110117  attrib(RL, "maxExp", 1);
    111118  def @R = ring(RL);
    112   attrib(@R, "uptodeg", uptodeg);
     119  attrib(@R, "uptodeg", uptodeg); // no longer needed
    113120  attrib(@R, "isLetterplaceRing", lV);
    114121  return (@R);
     
    119126  ring r = 0,(x(1),y(1),x(2),y(2),x(3),y(3),x(4),y(4)),dp;
    120127  def R = setLetterplaceAttributes(r, 4, 2); setring R;
    121   attrib(R,"isLetterplaceRing");
     128  lpVarBlockSize(R);
    122129  lieBracket(x(1),y(1),2);
    123130}
     
    437444{
    438445  "EXAMPLE:"; echo = 2;
    439   ring r = 0,(x,y,z),(dp(1),dp(2));
     446  ring r = 0,(x,y,z),Dp;
    440447  int degree_bound = 5;
    441448  def R = makeLetterplaceRing(5);
     
    445452  J;
    446453}
     454
     455/* // temporary name for testing */
     456/* proc lpRightStd(ideal F, ideal Q) */
     457/* { */
     458/*   return (system("rightgb", F, Q)); */
     459/* } */
    447460
    448461/*
     
    984997}
    985998
     999proc lpDegBound(def R)
     1000"USAGE:  lpDegBound(R); R a letterplace ring
     1001RETURN:  int
     1002PURPOSE: returns the degree bound of the letterplace ring
     1003EXAMPLE: example lpDegBound; shows examples
     1004"
     1005{
     1006  int lV = attrib(R, "isLetterplaceRing");
     1007  if (lV < 1) {
     1008    ERROR("not a letterplace ring");
     1009  }
     1010  return (nvars(R) div lV);
     1011}
     1012example
     1013{
     1014  "EXAMPLE:"; echo = 2;
     1015  ring r = 0,(x,y,z),dp;
     1016  def R = freeAlgebra(r, 7);
     1017  lpDegBound(R);
     1018}
     1019
     1020proc lpVarBlockSize(def R)
     1021"USAGE:  lpVarBlockSize(R); R a letterplace ring
     1022RETURN:  int
     1023PURPOSE: returns the variable block size of the letterplace ring, that is the number of variables of the original ring.
     1024EXAMPLE: example lpVarBlockSize; shows examples
     1025"
     1026{
     1027  int lV = attrib(R, "isLetterplaceRing");
     1028  if (lV < 1) {
     1029    ERROR("not a letterplace ring");
     1030  }
     1031  return (lV);
     1032}
     1033example
     1034{
     1035  "EXAMPLE:"; echo = 2;
     1036  ring r = 0,(x,y,z),dp;
     1037  def R = freeAlgebra(r, 7);
     1038  lpVarBlockSize(R);
     1039}
     1040
     1041proc isFreeAlgebra(def r)
     1042"USAGE:  isFreeAlgebra(r); r a ring
     1043RETURN:  boolean
     1044PURPOSE: check whether R is a letterplace ring (free algebra)
     1045EXAMPLE: example isFreeAlgebra; shows examples
     1046"
     1047{
     1048  int lV = attrib(r, "isLetterplaceRing");
     1049  if (lV < 1) {
     1050    return (0);
     1051  }
     1052  return (1);
     1053}
     1054example
     1055{
     1056  "EXAMPLE:"; echo = 2;
     1057  ring r = 0,(x,y,z),dp;
     1058  isFreeAlgebra(r);
     1059  def R = freeAlgebra(r, 7);
     1060  isFreeAlgebra(R);
     1061}
     1062
     1063proc freeAlgebra(def r, int d)
     1064"USAGE:  freeAlgebra(r, d); r a ring, d an integer
     1065RETURN:  ring
     1066PURPOSE: creates a letterplace ring with the ordering of r
     1067EXAMPLE: example freeAlgebra; shows examples
     1068"
     1069{
     1070  return (system("freeAlgebra", r, d));
     1071}
     1072example
     1073{
     1074  "EXAMPLE:"; echo = 2;
     1075  ring r = 0,(x,y,z),dp;
     1076  def R = freeAlgebra(r, 7);
     1077  R;
     1078  ring r2 = 0,(x,y,z),lp;
     1079  def R2 = freeAlgebra(r2, 7);
     1080  R2;
     1081}
     1082
    9861083// united all previous makes, including mLR1 (homog) and mLR2 (nonhomog)
    9871084proc makeLetterplaceRing(int d, list #)
    988 "USAGE:  makeLetterplaceRing(d [,h]); d an integer, h an optional integer
     1085"USAGE:  makeLetterplaceRing(d [,h]); d an integer, h an optional integer (deprecated, use freeAlgebra instead)
    9891086RETURN:  ring
    9901087PURPOSE: creates a ring with the ordering, used in letterplace computations
    991 NOTE: h = 0 (default) : Dp ordering will be used
     1088NOTE: h = -1 (default) : the ordering of the current ring will be used
     1089h = 0 : Dp ordering will be used
    9921090h = 2 : weights 1 used for all the variables, a tie breaker is a list of block of original ring
    9931091h = 1 : the pure homogeneous letterplace block ordering (applicable in the situation of homogeneous input ideals) will be used.
     
    9951093"
    9961094{
    997   int alternativeVersion = 0;
     1095  int alternativeVersion = -1;
    9981096  if ( size(#)>0 )
    9991097  {
     
    10131111    }
    10141112    else {
    1015       def @A = makeLetterplaceRing4(d);
     1113      if (alternativeVersion == 0)
     1114      {
     1115        def @A = makeLetterplaceRing4(d);
     1116      }
     1117      else {
     1118        def @A = freeAlgebra(basering, d);
     1119      }
    10161120    }
    10171121  }
     
    10211125{
    10221126  "EXAMPLE:"; echo = 2;
    1023   ring r = 0,(x,y,z),(dp(1),dp(2));
     1127  ring r = 0,(x,y,z),Dp;
    10241128  def A = makeLetterplaceRing(2); // same as  makeLetterplaceRing(2,0)
    10251129  setring A;  A;
    1026   attrib(A,"isLetterplaceRing");
    1027   attrib(A,"uptodeg");  // degree bound
     1130  lpVarBlockSize(A);
     1131  lpDegBound(A);  // degree bound
    10281132  setring r; def B = makeLetterplaceRing(2,1); // to compare:
    10291133  setring B;  B;
    1030   attrib(B,"isLetterplaceRing");
    1031   attrib(B,"uptodeg");  // degree bound
     1134  lpVarBlockSize(B);
     1135  lpDegBound(B);  // degree bound
    10321136  setring r; def C = makeLetterplaceRing(2,2); // to compare:
    10331137  setring C;  C;
    1034   attrib(C,"isLetterplaceRing");
    1035   attrib(C,"uptodeg");  // degree bound
     1138  lpDegBound(C);
     1139  lpDegBound(C);  // degree bound
    10361140}
    10371141
     
    11151219  setring A;
    11161220  A;
    1117   attrib(A,"isLetterplaceRing");// number of variables in the main block
    1118   attrib(A,"uptodeg");  // degree bound
     1221  lpVarBlockSize(A);// number of variables in the main block
     1222  lpDegBound(A);  // degree bound
    11191223}
    11201224
     
    12201324  setring A;
    12211325  A;
    1222   attrib(A,"isLetterplaceRing"); // number of variables in the main block
    1223   attrib(A,"uptodeg");  // degree bound
     1326  lpVarBlockSize(A); // number of variables in the main block
     1327  lpDegBound(A);  // degree bound
    12241328}
    12251329
     
    12841388  setring A;
    12851389  A;
    1286   attrib(A,"isLetterplaceRing"); // number of variables in the main block
    1287   attrib(A,"uptodeg");  // degree bound
     1390  lpVarBlockSize(A); // number of variables in the main block
     1391  lpDegBound(A);  // degree bound
    12881392}
    12891393
     
    13901494  setring A;
    13911495  A;
    1392   attrib(A,"isLetterplaceRing"); // number of variables in the main block
    1393   attrib(A,"uptodeg");  // degree bound
     1496  lpVarBlockSize(A); // number of variables in the main block
     1497  lpDegBound(A);  // degree bound
    13941498}
    13951499
     
    26512755//   }
    26522756//   intvec v = w;
    2653 //   for(i=1; i< attrib(basering,"uptodeg"); i++)
     2757//   for(i=1; i< lpDegBound(basering); i++)
    26542758//   {
    26552759//     v = v,w;
     
    28372941  // make new ring
    28382942  def save = basering;
    2839   int norigvars = attrib(save, "isLetterplaceRing");
     2943  int norigvars = lpVarBlockSize(save);
    28402944  def Rtagged; def temp = save;
    28412945  for (int i = 1; i <= size(I); i++) {
     
    28442948  } kill i;
    28452949  // currently R + "var" doesn't preserve uptodeg
    2846   Rtagged = setLetterplaceAttributes(Rtagged, attrib(Rtagged, "isLetterplaceRing"), attrib(save, "uptodeg"));
     2950  Rtagged = setLetterplaceAttributes(Rtagged, lpVarBlockSize(Rtagged), lpDegBound(save));
    28472951  setring Rtagged;
    28482952
     
    29563060{if (I==intvec(0)) {return(intvec(0));}
    29573061 int j,k,l;
    2958  int n = attrib(basering,"isLetterplaceRing"); int d = attrib(basering,"uptodeg");
     3062 int n = lpVarBlockSize(basering); int d = lpDegBound(basering);
    29593063 intvec w; j = 1;
    29603064 while (j <= d)
     
    29923096"
    29933097{int i,j,k,r1,r2; intvec D;
    2994  int n = attrib(basering,"isLetterplaceRing");
     3098 int n = lpVarBlockSize(basering);
    29953099 k = size(V) div n; r1 = 0; r2 = 0;
    29963100 for (i=1; i<= k; i++)
     
    30373141
    30383142 int i,j,r; intvec T; list R;
    3039  int n = attrib(basering,"isLetterplaceRing");
     3143 int n = lpVarBlockSize(basering);
    30403144 int k = size(V) - size(W) + 1;
    30413145 if (intvec(V[1..size(W)])-W == 0){R[1]=0;}
     
    31383242  int shiftInvariant = 1;
    31393243
    3140   int n = attrib(basering, "isLetterplaceRing");
    3141   int d = attrib(basering, "uptodeg");
     3244  int d = lpDegBound(basering);
    31423245
    31433246  ideal monomials;
     
    32063309  }
    32073310
    3208   int lV = attrib(basering, "isLetterplaceRing"); // variable count
     3311  int lV = lpVarBlockSize(basering); // variable count
    32093312  ideal prevMonomials = lpMonomialsWithHoles(d - 1);
    32103313
     
    32323335static proc getlpCoeffs(poly q, poly p)
    32333336{list R; intvec cq,t,lv,rv,bla;
    3234  int n = attrib(basering,"isLetterplaceRing"); int d = attrib(basering,"uptodeg");
     3337 int n = lpVarBlockSize(basering); int d = lpDegBound(basering);
    32353338 int i;
    32363339 cq = leadexp(p)-leadexp(q); /* p/q */
     
    32763379"PURPOSE: Checks, if all the Assumptions are holding
    32773380"
    3278 {if (attrib(basering,"isLetterplaceRing")==0) {ERROR("Basering is not a Letterplace ring!");}
    3279   if (d > attrib(basering,"uptodeg")) {ERROR("Specified degree bound exceeds ring parameter!");}
     3381{if (!isFreeAlgebra(basering)) {ERROR("Basering is not a Letterplace ring!");}
     3382  if (d > lpDegBound(basering)) {ERROR("Specified degree bound exceeds ring parameter!");}
    32803383  int i;
    32813384  for (i = 1; i <= size(L); i++)
    3282   {if (entryViolation(L[i], attrib(basering,"isLetterplaceRing")))
     3385  {if (entryViolation(L[i], lpVarBlockSize(basering)))
    32833386    {ERROR("Not allowed monomial/intvec found!");}
    32843387  }
     
    32983401"
    32993402"
    3300 {if (attrib(basering,"isLetterplaceRing")==0) {ERROR("Basering is not a Letterplace ring!");}
     3403{if (!isFreeAlgebra(basering)) {ERROR("Basering is not a Letterplace ring!");}
    33013404 return();
    33023405}
     
    33243427{int r = 0; intvec w;
    33253428 intvec l = leadexp(p);
    3326  int n = attrib(basering,"isLetterplaceRing"); int d = attrib(basering,"uptodeg");
     3429 int n = lpVarBlockSize(basering); int d = lpDegBound(basering);
    33273430 int i,j,c,c1;
    33283431 while (1 <= d)
     
    34363539  // uptodeg and lV are defined
    34373540  // returns Boolean : yes/no [for assume violation]
    3438   def uptodeg = attrib(basering,"uptodeg");
     3541  def uptodeg = lpDegBound(basering);
    34393542  if ( typeof(uptodeg)!="int" )
    34403543  {
    34413544    return(1);
    34423545  }
    3443   int lV = attrib(basering,"isLetterplaceRing");
    3444   // isLetterplaceRing for rings is always defined and of type int
    3445   if ( lV==0 )
    3446   {
    3447     return(1);
    3448   }
    3449   return(0);
     3546  return (!isFreeAlgebra(basering))
    34503547}
    34513548
     
    36033700{if (I[1] == 0) {return(1);}
    36043701  int i = size(I);
    3605   if (i > attrib(basering,"uptodeg")) {ERROR("polynomial exceeds degreebound");}
     3702  if (i > lpDegBound(basering)) {ERROR("polynomial exceeds degreebound");}
    36063703  int j; poly p = 1;
    36073704  for (j = 1; j <= i; j++) {if (I[j] > 0) { p = p*var(I[j]);}} //ignore zeroes, because they correspond to 1
     
    37213818  intvec I;
    37223819  int i,j;
    3723   if (deg(p) > attrib(basering,"uptodeg")) {ERROR("Monomial exceeds degreebound");}
     3820  if (deg(p) > lpDegBound(basering)) {ERROR("Monomial exceeds degreebound");}
    37243821  if (p == 1) {return(I);}
    37253822  if (p == 0) {ERROR("Monomial is not allowed to equal zero");}
    37263823  intvec lep = leadexp(p);
    3727   for ( i = 1; i <= attrib(basering,"isLetterplaceRing"); i++) {if (lep[i] == 1) {I = i; break;}}
    3728   for (i = (attrib(basering,"isLetterplaceRing")+1); i <= size(lep); i++)
     3824  for ( i = 1; i <= lpVarBlockSize(basering); i++) {if (lep[i] == 1) {I = i; break;}}
     3825  for (i = (lpVarBlockSize(basering)+1); i <= size(lep); i++)
    37293826  {if (lep[i] == 1)
    3730     { j = (i mod attrib(basering,"isLetterplaceRing"));
    3731       if (j == 0) {I = I,attrib(basering,"isLetterplaceRing");}
     3827    { j = (i mod lpVarBlockSize(basering));
     3828      if (j == 0) {I = I,lpVarBlockSize(basering);}
    37323829      else {I = I,j;}
    37333830    }
  • Singular/LIB/ncHilb.lib

    r356f8ad rf07380  
    6969EXAMPLE: example fpahilb; shows an example "
    7070{
    71     if (attrib(basering, "isLetterplaceRing")==0)
     71    if (!isFreeAlgebra(basering))
    7272    {
    7373      ERROR("Basering should be Letterplace ring");
     
    7575    def save = basering;
    7676    int sz=size(#);
    77     int lV=attrib(save,"isLetterplaceRing"); // nvars(orig comm ring)
     77    int lV=lpVarBlockSize(save); // nvars(orig comm ring)
    7878    int ig=0;
    7979    int mgrad=0;
     
    137137    }
    138138    // new: truncation should be < than degbound/2
    139     int degbnd = attrib(save,"uptodeg");
     139    int degbnd = lpDegBound(save);
    140140    if (tdeg == 0)
    141141    {
     
    403403EXAMPLE: example rcolon; shows an example"
    404404{
    405     int lV =  attrib(R,"isLetterplaceRing"); //nvars(save);
     405    int lV =  lpVarBlockSize(R); //nvars(save);
    406406    if (lV == 0)
    407407    {
     
    419419        }
    420420    }
    421     int degbnd = attrib(R,"uptodeg");
     421    int degbnd = lpDegBound(R);
    422422    if ( 2*maxdegI != degbnd)
    423423    {
  • Singular/extra.cc

    r356f8ad rf07380  
    12431243    else
    12441244  #endif
     1245 /*==================== freeAlgebra for freeGB  ==================*/
     1246  #ifdef HAVE_SHIFTBBA
     1247    if (strcmp(sys_cmd, "freeAlgebra") == 0)
     1248    {
     1249      // copied from freegb.cc
     1250      const short t[]={2,RING_CMD,INT_CMD};
     1251      if (iiCheckTypes(h,t,1))
     1252      {
     1253        ring r=(ring)h->Data();
     1254        int d=(int)((long)h->next->Data());
     1255        if (d<2)
     1256        {
     1257          WerrorS("degree must be >=2");
     1258          return TRUE;
     1259        }
     1260        int i=0;
     1261        while(r->order[i]!=0)
     1262        {
     1263          if ((r->order[i]==ringorder_c) ||(r->order[i]==ringorder_C)) i++;
     1264          else if ((r->block0[i]==1)&&(r->block1[i]==r->N)) i++;
     1265          else
     1266          {
     1267            WerrorS("only for rings with a global ordering of one block");
     1268            return TRUE;
     1269          }
     1270        }
     1271        if ((r->order[i]!=0)
     1272            || (rHasLocalOrMixedOrdering(r)))
     1273        {
     1274          //WerrorS("only for rings with a global ordering of one block");
     1275          Werror("only for rings with a global ordering of one block,i=%d, o=%d",i,r->order[i]);
     1276          return TRUE;
     1277        }
     1278        ring R=freeAlgebra(r,d);
     1279        res->rtyp=RING_CMD;
     1280        res->data=R;
     1281        return R==NULL;
     1282      }
     1283      else return TRUE;
     1284    }
     1285    else
     1286  #endif
    12451287  /*==================== pcv ==================================*/
    12461288  #ifdef HAVE_PCV
  • Singular/iparith.cc

    r356f8ad rf07380  
    42424242    int deg = (int)(long)v->Data();
    42434243    if (deg > currRing->N/currRing->isLPring) {
    4244       WerrorS("deg of letterplace ring to small");
     4244      WerrorS("degree bound of Letterplace ring is to small");
    42454245      return TRUE;
    42464246    }
     
    51035103{
    51045104  ideal result;
     5105  ideal v_id=(ideal)a->Data();
    51055106  if (rIsPluralRing(currRing))
    5106     result=(ideal)twostd((ideal)a->Data());
     5107    result=(ideal)twostd(v_id);
    51075108  else /*commutative or shiftalgebra*/
    51085109  {
    5109     result=kStd(v_id,currRing->qideal,hom,&w);
    5110     idSkipZeroes(result);
     5110    return jjSTD(res,a);
    51115111  }
    51125112  res->data = (char *)result;
  • Tst/Manual/Example_of_use_of_@sc{Letterplace}.res.gz.uu

    r356f8ad rf07380  
    11begin 644 Example_of_use_of_@sc{Letterplace}.res.gz
    2 M'XL("%;?V5L"`T5X86UP;&5?;V9?=7-E7V]F7T!S8WM,971T97)P;&%C97TN
    3 M<F5S`&U2RVZ#,!"\\Q6KJ`<(Y$'>%<*JHO9`%/5`<JNBB,1.A$H`@:,:JOY[
    4 M%_-P#CE@[\[,SBR2=_MW[Q,`;`);;PT]GO-A%)YZ#F!U#..0ZX:C53<0`A\B
    5 MN*41.R:7XSV7UUM^_MTRSEF61L&9_0UC]C/,><"U7>,\:9PO&6/74VW>D5,"
    6 M61A?(0,7QI8NK,(J#8NF2C$C$,8<*+@S!T8CH.R*1G!*[C'M1'."^`5\=+D%
    7 MW^QA(1_==6HHOP6!G'$9ZBMTB2F4!1%X:"'Z!9A0]$L+2X%E!0P0$/(LU-B*
    8 M0)+R,(GUC-'=VG`>VGT01@^YKVW"!A-R3G5/D?:8P,;1-E_VP<4L$Z.QF52-
    9 M&!3R*P8U.#VXV,@6@4I94Y*<U:0P%2G,EIQ79-G,EIV@FY>B12NJYY2H\9&B
    10 G91U3MEL\=5JUHF:;)T[MW^/;JQY;]6KNN6X;SHOV#^"H^[67`@``
     2M'XL("'$H$5P"`T5X86UP;&5?;V9?=7-E7V]F7T!S8WM,971T97)P;&%C97TN
     3M<F5S`&U2RXZ"0!"\\Q4=LP<0?.![0YALC'O`F#VHMXTQ**.9+`*!,3NPV7^W
     4M9WAY\,!,=U5U59/,;K_RO@#`)K#QEM#A&>^'[-1Q`*LCBQC7#4>3-Q`"G\*_
     5M)2$]QI?C/5/71W;^VU#.:9J$_IG^]R/ZV\^XS[5=Y3RJG"\II==3:=Z08P(I
     6MBZZ0@@M#2Q=6;A6&M4I:Q80`BS@$X$X<&`P@H%<T@E-\CX)&-"6(7V"++C?_
     7MASXMM$5W/3!:OQF!C'(5NFW1.:8$U`_!0PO1S<&$O%M86`HL)=!#0*@S;\<6
     8M!.*$LSC24QKLEH;SU.Y]%C[EOM<):TS(>*![+6D/":P=;?UM'US,,C$:FY%L
     9M1"]77]XKP?'!Q4:U"$AE22ER4I+";$EAUN14DD4U6S2"9EZ)9K6HG&M%E8\2
     10GS<N8HM[BI=.B%E7;O'"J_Q[?GGQL\M7<,]TVG#?M`6PS(8B7`@``
    1111`
    1212end
  • Tst/Manual/Example_of_use_of_@sc{Letterplace}.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1541005142:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:724464
    2 1 >> tst_memory_1 :: 1541005142:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:2097168
    3 1 >> tst_memory_2 :: 1541005142:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:2121872
    4 1 >> tst_timer_1 :: 1541005142:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:69
     11 >> tst_memory_0 :: 1544628337:4113, 64 bit:4.1.1:x86_64-Linux:megrez:312368
     21 >> tst_memory_1 :: 1544628337:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1544628337:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1544628337:4113, 64 bit:4.1.1:x86_64-Linux:megrez:8
  • Tst/Manual/Example_of_use_of_@sc{Letterplace}.tst

    r356f8ad rf07380  
    11LIB "tst.lib"; tst_init();
    22LIB "freegb.lib";
    3 ring r = 0,(x,y,z),dp;
     3ring r = 0,(x,y,z),Dp;
    44int d =4; // degree bound
    55def R = makeLetterplaceRing(d);
  • Tst/Manual/fullSerreRelations.res.gz.uu

    r356f8ad rf07380  
    1 begin 640 fullSerreRelations.res.gz
    2 M'XL("./FO5L"`V9U;&Q397)R95)E;&%T:6]N<RYR97,`95--:^,P$+WG5PQE
    3 M#_F0W8S2)"W&AK2]%$H/\=Z*">Y&C@RN'2R%[L]?C;X26!!(FGGSWIL1*G^_
    4 MOGT``!;P_O8,=UKIM&N_[C(PIT/;MWHZRR:T0U%`<^FZ4HRCV(NNUNW0J[07
    5 M/ZG2M9Z4GHE[IF84XO3ER&)R54#;Z^]:P^Z35V9!'G,/*7`&";(86:=T!9[!
    6 M_3WL#AQR4-UA!2_UJ.L>#,W8_HWH30%CVY]@-+`EFS;(&LXD,LF90";XC!W/
    7 M5R=;X^0HZ@YZ<1J'02M394LR'_]C12AL.4+X/*@`MZQ7QD?;&US.>CB*D\FO
    8 MK[FG`HZB@7U)*O\-<;ICP07SLBSH,,\WBV2X+$`);7O=EQDTRA!E$[M]8I4W
    9 M.&^X60FW.]T6C3][%'<H]"A7@`L/#ZA5E0N<"VY6PNU.MX7P9X]Z<"CT*%>`
    10 M"P\/J+51I$@B2,P'-]:&J1,WWK95GE#44)"71(;$(R6X=V",RT#S5.42YY(B
    11 M\XC&I8TZ18G)C6-T0Y+$30HWXLA=E;4DJ8N06-D&?`T--"1,_S)T)HVW2+5V
    12 M*M86#3<F-J[":;C1AM36J;@:]X+QV<T7I3])G^VBICC+?DW^`5H0B2>^`P``
     1begin 644 fullSerreRelations.res.gz
     2M'XL("*SE'%P"`V9U;&Q397)R95)E;&%T:6]N<RYR97,`95--:^,P$+WG5PRE
     3MAWS(;D9IDA9C0[:]%)8]Q+T5$]Q&B@RN'6R%[<]?C;X26!!(FGGSWIL1*M]?
     4MW_X``!;P^^T7W.E1IVWS>9>!.1V:KM'363:A'8H"Y*5M2S$,8B_:6C=]-Z:=
     5M^)N.NM:3TC-QSR0'(4Z?CBPF5P4TG?ZN->P^>&46Y#'WF`)GD""+D75*5^`9
     6M/#S`[L`AA[$]K."E'G3=@:$9FI^(WA0P--T)!@-;LJE$)CE3R!1G`IG@,_9Z
     7MOCK9&B='4;?0B=/0]WHT5;8D\_$O*T)ARQ'"YWX,<,MZ97RRO<'EK/NC.)G\
     8M^II[+N`H).Q+4OEOB-,="RZ8EV5!AWF^623#90&CT+;7?9F!'`U1-K';!U:Y
     9MQ+GD9B7<[G1;2'_V*.Y0Z%&N`!<>'E"K*A<X%]RLA-N=;@OASQ[UZ%#H4:X`
     10M%QX>4&NC2)%$D)@/;JP-4R=NO&VK/*&HH2`OB0J))TIP[\`85X'FN<H5SA5%
     11MYA&-2QMUB@J3&\?HAJ2(FQ1NQ)&[*FM)41<AL;(-^!H::$B8_E7H3!EOD6KM
     12M5*PM&FY,;%R%TW"C#:FM4W$U[@7CLYLO2G^2/MMEG.(LNY_\`ZH*'\.^`P``
    1313`
    1414end
  • Tst/Manual/fullSerreRelations.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1539172067:4113, 64 bit:4.1.1:x86_64-Linux:nepomuck:306336
    2 1 >> tst_memory_1 :: 1539172067:4113, 64 bit:4.1.1:x86_64-Linux:nepomuck:2199552
    3 1 >> tst_memory_2 :: 1539172067:4113, 64 bit:4.1.1:x86_64-Linux:nepomuck:2232320
    4 1 >> tst_timer_1 :: 1539172067:4113, 64 bit:4.1.1:x86_64-Linux:nepomuck:8
     11 >> tst_memory_0 :: 1545397676:4114, 64 bit:4.1.1:x86_64-Linux:megrez:311032
     21 >> tst_memory_1 :: 1545397676:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1545397676:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2227696
     41 >> tst_timer_1 :: 1545397676:4114, 64 bit:4.1.1:x86_64-Linux:megrez:8
  • Tst/Manual/fullSerreRelations.tst

    r356f8ad rf07380  
    442, -1,
    55-1, 2; // A_2 = sl_3 Cartan matrix
    6 ring r = 0,(f1,f2,h1,h2,e1,e2),dp;
     6ring r = 0,(f1,f2,h1,h2,e1,e2),Dp;
    77ideal negroots = f1,f2; ideal cartans = h1,h2; ideal posroots = e1,e2;
    88int uptodeg = 5;
  • Tst/Manual/letterplace_reduce.res.gz.uu

    r356f8ad rf07380  
    11begin 644 letterplace_reduce.res.gz
    2 M'XL("(I=]%L"`VQE='1E<G!L86-E7W)E9'5C92YR97,`=5)+CX(P$+[S*R9F
    3 M#U"K@NXS9'O8[`5C]J![-RBC(<MBA9J%_OH=*@AH3`\ST_D>,TU7WY_!%P!X
    4 M`A;!!PQ4KL9)O!GX0-DZ3F-E.[Y511`"$E0*,YF$6UQG&)VV.$[Q;YRK4%FK
    5 M6FEJE`:[#'&_.6M=>C,!69SN(8-W<+E=\))KAT>R13P*B'`'2P+\AC^X:`V7
    6 M1+0]U_$A1V54EBWM24`<89A`0,22%:R$$6A6,LV!"E:8DC)N@J:2>JRHNG1@
    7 M2"4=BIJN-<6*I5N#Y\9@3@:YBNS`:9LO`N0A*4$VYJ11UA:Z5NVIO=:$(Q',
    8 M/%6[F:D/?:,G,R]M2R;YG-:?3"`]I!JS@V5X9W:3C6YO6E0=A]?UE4ZOOM$<
    9 M]=2[V&9HS^T.37OU-FB6,!NX%XYWX1S9\0YFVL'(.YA9%T/>\JX:_;7JDU>_
    10 0]Y3;GN,_6/_CGQMQ#P,`````
     2M'XL("(LH$5P"`VQE='1E<G!L86-E7W)E9'5C92YR97,`=5)+CX(P$+[S*R9F
     3M#U"KPKK/D.UAXP5C]J![-RBC(<MBA9J%_OH=*@AH3`\ST_D>,TU7W[/@"P`\
     4M`8O@$P8J5^,DW@Q\H&P=I[&R'=^J(@@!"2J%F4S"+:XSC$Y;'*?X-\Y5J*Q5
     5MK?1HE`:[#'&_.6M=>E,!69SN(8,/<+E=\))KA\]DBW@2$.$.E@3X#7]PT1HN
     6MB6A[KN-#CLJH+%O:LX`XPC"!@(@E*U@)(]"L9)H#%:PP)67<!$TE]5A1=>G`
     7MD$HZ%#5=:XH52[<&+XW!G`QR%=F!TS9?!<A#4H)LS$FCK"UTK=I3>ZL)1R*8
     8M>:IV,U,?^DY/9E[:EDSR.:T_F4!Z2#5F!\OPSNPF&]W>M*@Z#J_K*YU>?:,Y
     9MZJEWL<W0GML=FO;J;=`L839P+QSOPCFRXQW,8P<C[V"F70QYR[MJ]->J3U[]
     101WE-N>X[_8/T#<'*Z+`\#````
    1111`
    1212end
  • Tst/Manual/letterplace_reduce.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1542741386:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:20012280
    2 1 >> tst_memory_1 :: 1542741386:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:23068672
    3 1 >> tst_memory_2 :: 1542741386:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:23094976
    4 1 >> tst_timer_1 :: 1542741386:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:610
     11 >> tst_memory_0 :: 1544628363:4113, 64 bit:4.1.1:x86_64-Linux:megrez:30936576
     21 >> tst_memory_1 :: 1544628363:4113, 64 bit:4.1.1:x86_64-Linux:megrez:33767424
     31 >> tst_memory_2 :: 1544628363:4113, 64 bit:4.1.1:x86_64-Linux:megrez:33828864
     41 >> tst_timer_1 :: 1544628363:4113, 64 bit:4.1.1:x86_64-Linux:megrez:19
  • Tst/Manual/letterplace_reduce.tst

    r356f8ad rf07380  
    11LIB "tst.lib"; tst_init();
    22LIB"freegb.lib";
    3 ring r = 0,(x,y,z),dp;
     3ring r = 0,(x,y,z),Dp;
    44def R = makeLetterplaceRing(10); setring R;
    55ideal I = y*x*y - z*y*z, x*y*x - z*x*y, z*x*z - y*z*x, x*x*x + y*y*y + z*z*z + x*y*z;
  • Tst/Manual/letterplace_std.res.gz.uu

    r356f8ad rf07380  
    11begin 644 letterplace_std.res.gz
    2 M'XL("*;?V5L"`VQE='1E<G!L86-E7W-T9"YR97,`39++;H,P%$3W?,55U`4X
    3 M@#"$/(3PHNH&%'619%>AB!0G0J4T`D<U_?I>&Q)GP<-S9\X`9G]XR]X!@#+8
    4 M9J\P$[WPF_HT2P#OCG5;"]M)+'4%QJ#A0O#NVI2?_-B+RF_YK]^+4EC["1-.
    5 MF'/'^>4TDA[#B$%7MQ?H((7`M:4[N'^.:U=7FSHNGD/',>8%@[H54/$+HHZG
    6 MGUM;82PVAICA\`P[5+_++[XUC[;#$CM^8BT9]%SH[IU15]A0\;*!#!&>)(.W
    7 M(@,9YA&11+J``I$>'F0PF?4]DV,&OX"=/=5L&.2)E7_0(M4,PT0Q+-(P5##4
    8 M(J*Q7DC5DLBY-FE;-&95]=T^O]L\8ULHVCJ(1@$)=!,%TU@;XB)%:9Q+Q5C%
    9 CU)B7],FZ+-+AL9S>A09,_P!J<V\][D_R8OT#2W36,BL"````
     2M'XL("!(J$5P"`VQE='1E<G!L86-E7W-T9"YR97,`39%!;X(P%,?O?(H7LP-4
     3M,!1$-(0>%B\8LX/NMA"#HQHRQ@S4K.S3[[6`]=#0_M_O_1Y-C^_;[`T`*(-]
     4M]@HST8E%79UG">#N5#65L)W$4E]@#&HN!&]O=?')3YTH%PW_772B$-9QU`2C
     5MYM)R?CT/ID<Q9-!6S15:2,%W;>GV[I_C;F^&6#*H&@$EOV+_Z?QS;TID(P-$
     6M#(L7.&#Z77SQO?F?`YKMR#'HBD''A1YX,&F,$TI>U)"API.D]V+2DWX>$DFD
     7M"Q@0Z>$BO>E93ST[[,%KV]G3F`V#76+M/FB>:H=Q8ACD:1`H&68AT5HOH.I(
     8MY%Q#&@N'7C5ZPN<3YAELJ6QK/QP"--!-Z(]E#41YBM%0E\H11]3`*_J$KO*T
     9:?QS'NU"?Z5=7+WKO;.HD+]8_KM^\/"`"````
    1010`
    1111end
  • Tst/Manual/letterplace_std.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1541005222:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:741640
    2 1 >> tst_memory_1 :: 1541005222:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:2097168
    3 1 >> tst_memory_2 :: 1541005222:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:2121872
    4 1 >> tst_timer_1 :: 1541005222:4113, 64 bit:4.1.1:x86_64-Darwin:161-029.eduroam.rwth-aachen.de:71
     11 >> tst_memory_0 :: 1544628754:4113, 64 bit:4.1.1:x86_64-Linux:megrez:331512
     21 >> tst_memory_1 :: 1544628754:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1544628754:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1544628754:4113, 64 bit:4.1.1:x86_64-Linux:megrez:7
  • Tst/Manual/letterplace_std.tst

    r356f8ad rf07380  
    11LIB "tst.lib"; tst_init();
    22LIB "freegb.lib";
    3 ring r = 0,(x,y,z),(dp(1),dp(2));
     3ring r = 0,(x,y,z),Dp;
    44int degree_bound = 5;
    55def R = makeLetterplaceRing(5);
  • Tst/Manual/lpMonomialBasis.res.gz.uu

    r356f8ad rf07380  
    11begin 644 lpMonomialBasis.res.gz
    2 M'XL(")E5]%L"`VQP36]N;VUI86Q"87-I<RYR97,`G9-?:X,P%,7?_127L8=8
    3 M;#%J_R'-0QF,2K>'MF]EE&RF(\RJ:,;TVR\FVKC:I[WHS3TWYW<2R/[PM'D%
    4 M`$Q@NUG#@RC%).'O#R'(ZL13+I`=6LT?"($D?\G2[,)ILJ8E+R<I^YF4@@IK
    5 MW]IXK<TYIS&_:*>KZ!,H>/H)!:S`=5#EU+83YT8/",3L##LI7^@7VS(A6)$G
    6 M](/MY#8TMT,HF5`6.[-K2H#'C"80R7W5J!Y5,`;Y'=5F9D8@RP7/4E2P>+^6
    7 M1F9YH#RQS>B<**.$"45^5@=%46]B(2="*SKBMY7"C15,-CS=4$O=;&HI^)UP
    8 M(RDQ,.)`E@,==3FX?>0YV%%'1ZXM\YUTHDH6,DFM"DV61=!TZLX-N_?<W($;
    9 MUEZM4^NC$=,.,>L0\[\(/$3X,G#42]K+VJ755]9QE*\FJ7+6WM65UN-Y]WBN
    10 MX?WG+*?CP@1=FJ#8-4DQ-E&Q9[)BWX3%P6U:^1::!]8\GN\283M\M'X!]54A
    11 %VXL#````
     2M'XL("+,H$5P"`VQP36]N;VUI86Q"87-I<RYR97,`G9-?;X(P%,7?^10W9@_%
     3MH*&(_T+L@S%9)&X/ZIM93#?JT@R!0)?!MU]IP3+Q:2]P>\_M^9TVZ>&XV;X"
     4M`":PVZYA(`HQCOG[(`!9G7G"!;(#J_X#(1!G+VF27CF-U[3@Q3AA/^-"4&$=
     5M&ANOL;ED-.)7[703)P1RGGQ"#BMP'50ZE>UL,J/[!")V@;V4K_2+[9@0+,]B
     6M^L'V<AN:VP$43"B+O=DU)<`C1F,(Y;YR6`U+&('\#BLS,R.09H*G"<I9=%A+
     7M([,\4A[;9G1.E%',A"(_JX.BL#.QD!.!%9[PVTKA1@HF&YYNJ*5NUK44)JUP
     8M)RG1-V)/E@,M==F[?>0YV%%'1ZXM\YUUHE(6,DFE"DV6A5]WJM8-NX_<W)X;
     9MUEZ-4^.C$=,6,6L1\[\(W$=,9."PD[23M4VKKZSE*%]-4N6LN:L;K</S'O%<
     10MP_O/6<ZGA0FZ-$&Q:Y)B;*)BSV3%$Q,6^_=IY5NH'UC]>+X+A.W@R?H%=J9X
     11%38L#````
    1212`
    1313end
  • Tst/Manual/lpMonomialBasis.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1542739353:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:720208
    2 1 >> tst_memory_1 :: 1542739353:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:2097168
    3 1 >> tst_memory_2 :: 1542739353:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:2121872
    4 1 >> tst_timer_1 :: 1542739353:4113, 64 bit:4.1.1:x86_64-Darwin:Karims-MacBook-Pro.local:90
     11 >> tst_memory_0 :: 1544628403:4113, 64 bit:4.1.1:x86_64-Linux:megrez:318584
     21 >> tst_memory_1 :: 1544628403:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1544628403:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1544628403:4113, 64 bit:4.1.1:x86_64-Linux:megrez:5
  • Tst/Manual/lpMonomialBasis.tst

    r356f8ad rf07380  
    11LIB "tst.lib"; tst_init();
    22LIB "fpadim.lib";
    3 ring r = 0,(x,y),dp;
     3ring r = 0,(x,y),Dp;
    44def R = makeLetterplaceRing(7); setring R;
    55ideal J = x*y*x - y*x*y;
  • Tst/Manual/makeLetterplaceRing.res.gz.uu

    r356f8ad rf07380  
    1 begin 640 makeLetterplaceRing.res.gz
    2 M'XL(")^SP%L"`VUA:V5,971T97)P;&%C95)I;F<N<F5S`*U4VVK"0!!]SU<,
    3 MTH<$@II$;9O0@*DO@A1:2U]++A.[F!N[FU;]^LX:FXA8A-:%;(;)F3.7D]WE
    4 MZVS^!`"6#XMY`#TI9#]C4<\#LMY9P:1N>)IZ@^]#'JYQ@5(BK[(PQA=6K/H%
    5 M?O6%#*6V/%#9!ZJ4(ZZBAJW]Z/C`*0HX/,#0U#?FUMP9IIY4NF68M-N&T8%'
    6 M/B28PI2P9S(3MH..?1`H]]13#^C1!@.(2TQ3%C,LI'#A^5GYBCJ/D$.9PF?(
    7 M!;@P4=[#BK(R7JMID+_D">[Y9M41HELN%&&.0ID;V,*NV<^0V<=DCPJ0=8TT
    8 MT]`;K&`[!,=HFYKX$$IJ*M*G9H^)D_Y[U+[38F^/L74ERP05`H#RD4E:0%36
    9 M1:+9;<C=<4CVIM"G`V)AE%&/K`#Y@20"&?M2M9;DOAL\]_9R!;_)95I-!EF2
    10 M,GD5<G1_:*QA1Q-0T<$5]<LNZW=)M>0BQ7GIG?_7,;I&'>.__H(6W0OJ(E`'
    11 0O!9T1KT;[1NUSY!H,P0`````
     1begin 644 makeLetterplaceRing.res.gz
     2M'XL("$KF'%P"`VUA:V5,971T97)P;&%C95)I;F<N<F5S`*U476O;,!1]]Z\X
     3MA#[88-+::;HN9H:XH5`(@RYCKT..KSU1QS:2TC;Y];NR,[LM*8&N`EN7JZ-S
     4M/XZDU<_%W7<`08SE78*1T69<RG04@:W?LI+&]2+'SHAC;,0#+<D84DTIUO1#
     5M5L6XHJ>Q-L(XJP-5>*#*%5&1=FS]XB2&XEU0^(8+WWWV=_[>\Q?-@+B,D5&.
     6M.0..A'-#;X!.8V@R+=\\`G_.^3G6->6Y7$NJC)[A_M[ZJNTF)84ZQZ-0&C-<
     7M6>]AI&6]?K`M8'^M,FKY%LT+Q#!FJ,2&M#6?L<.^^Q\A"U^2W5A`.132M<#M
     8ML%KN"1.O+^HJAM2WW+MY65"JA#OGBH-^^4N,LEE0D=3;*K-K`)-G5/`.I-;I
     9MA#WXVH)_"9782"L.U&YXVQ`ITI)KDA7,'^*FL]&FYDQZHJ__9`M?Z>9FC1MX
     10M/G@*O4&8X&(01H51JV?RGIY^T*5D:I9NTPA%LYXG&'@2+C3Y1('+TP*?DC4[
     11G27'\;$S^/X_+S\AC^M$S&O`5M\^#O?9;S2<@.G/^`D2O4CY)!```
    1212`
    1313end
  • Tst/Manual/makeLetterplaceRing.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:295192
    2 1 >> tst_memory_1 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:2215936
    3 1 >> tst_memory_2 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:2215936
    4 1 >> tst_timer_1 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:5
     11 >> tst_memory_0 :: 1545397834:4114, 64 bit:4.1.1:x86_64-Linux:megrez:300232
     21 >> tst_memory_1 :: 1545397834:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1545397834:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1545397834:4114, 64 bit:4.1.1:x86_64-Linux:megrez:8
  • Tst/Manual/makeLetterplaceRing.tst

    r356f8ad rf07380  
    11LIB "tst.lib"; tst_init();
    22LIB "freegb.lib";
    3 ring r = 0,(x,y,z),(dp(1),dp(2));
     3ring r = 0,(x,y,z),Dp;
    44def A = makeLetterplaceRing(2);
    55setring A;  A;
    6 attrib(A,"isLetterplaceRing");
    7 attrib(A,"uptodeg");  // degree bound
    8 attrib(A,"lV"); // number of variables in the main block
    9 setring r; def B = makeLetterplaceRing(2,1); // to compare:
     6isFreeAlgebra(A);
     7lpDegBound(A);  // degree bound
     8lpVarBlockSize(A); // number of variables in the main block
     9ring r2 = 0,(x,y,z),(dp(1), dp(2));
     10setring r2; def B = makeLetterplaceRing(2,1); // to compare:
    1011setring B;  B;
    1112tst_status(1);$
  • Tst/Manual/serreRelations.res.gz.uu

    r356f8ad rf07380  
    1 begin 640 serreRelations.res.gz
    2 M'XL(".U<NUL"`W-E<G)E4F5L871I;VYS+G)E<P!54MUKPC`0?^]?<<@>VO5#
    3 MDZAS%`MN@U&0/=2]B9.X)A)6:TDCV_[[79NN50C<Y??5ZY'-^TOZ!@`D@77Z
    4 M!"-3FZA0AU$,V.U5J8SKQ4Y3(4F@%EJ+3!3<J'-91Z7XCFK#C;/I4FB7(K40
    5 MQX,-ZDF6@"K-B1M8;=D.#RQ[;AH!#2`D`4R"'IQ%+=(0;$#G$6HL$<-X#*\?
    6 M9$_AF6O#2\!TK7YZ[4,"6I5'T+!$DRM)(&D@F1?DU3#7HIT++I4YY^*(RMG`
    7 M/2:0"PD9HB?^)=;"&*&K@G^*#'/=SN/U!C)IEF3:CV8#BMM5N>`%I!ATNT1W
    8 M%1`OMH0Z5862OVX:$)_ZBZM87&P:.^F6[):2W$N*)Z1M;6Z^['I44*M@H606
    9 M8!8@G<6ZB=]Y&\44%7AC_0FG;1TP?_[?TAO%@/E7=D0P=693&[(;E;6C6@/M
    10 8?PV?1?/4FG=TJ5W<Q9WS!_\$9/B5`@``
     1begin 644 serreRelations.res.gz
     2M'XL("-`H$5P"`W-E<G)E4F5L871I;VYS+G)E<P!54E]KPC`0?^^G.,8>ZII6
     3MDZAS%`MNPBC('NK>Q$F<B8356MK(MF^_2].U"H&[_/[U>F3]ODS?`(`FL$J?
     4MX<[4)LKU_BX&[':ZT,8?Q)ZMD"10RZJ2F<R%T>>BC@KY'=5&&&_=IK`V1552
     5M'O<NJ"-Y`KHP)V%@L>%;/##ON'$$C$!("8Q(!TZB!K$$[]%IA!I'Q#`<PNL'
     6MW3%X$941!6!ZI7\Z[6,"E2Z.4,$<3;ZB1#&B^(`LRWZN63,77$IS/L@C*B<]
     7M]Y3`02K($#V)+[F2QLBJS,6GS##7;SV#SD!'=DFF^6C6H[A=?9`BAQ2#;I?H
     8M+P@=Q([0IS+7ZM=/"0U8,+N*Q<6FL9=NZ':NZ(-B>$+65'L+5-NC@CD%#Q5W
     9M`'<`;2W.38/6:Q5C5."-=R<<-[7'@NE_RVX4/19<V1'!U(E+M60[*F]&=0;6
     108_1H^"_O4[#NZU#[NXM[[`Q7*N7*5`@``
    1111`
    1212end
  • Tst/Manual/serreRelations.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1316104113:3132- exportiert :3-1-3:ix86-Linux:mamawutz:308352
    2 1 >> tst_memory_1 :: 1316104113:3132- exportiert :3-1-3:ix86-Linux:mamawutz:669628
    3 1 >> tst_memory_2 :: 1316104113:3132- exportiert :3-1-3:ix86-Linux:mamawutz:752644
    4 1 >> tst_timer_1 :: 1316104113:3132- exportiert :3-1-3:ix86-Linux:mamawutz:15
     11 >> tst_memory_0 :: 1544628432:4113, 64 bit:4.1.1:x86_64-Linux:megrez:299832
     21 >> tst_memory_1 :: 1544628432:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1544628432:4113, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1544628432:4113, 64 bit:4.1.1:x86_64-Linux:megrez:5
  • Tst/Manual/serreRelations.tst

    r356f8ad rf07380  
    55-1, 2, -3,
    660, -1, 2; // G^1_2 Cartan matrix
    7 ring r = 0,(f1,f2,f3),dp;
     7ring r = 0,(f1,f2,f3),Dp;
    88int uptodeg = 5;
    99def R = makeLetterplaceRing(uptodeg);
  • Tst/Manual/setLetterplaceAttributes.res.gz.uu

    r356f8ad rf07380  
    1 begin 640 setLetterplaceAttributes.res.gz
    2 M'XL("/M']%H"`W-E=$QE='1E<G!L86-E071T<FEB=71E<RYR97,`=9!!B\(P
    3 M$(7O_15#\9!TLT73[NZA;&#%BR`>JG=I=91@*9*,;/WW9JI6+UZ21][CRYM9
    4 MK6?S)0!,#"SF4XC)4]K8.BX@J(UM+0E91'R#,>"1%DB$[M146_PC<K8^$_JT
    5 MQ?_44T71ZL[3=][>(1[J&W(P,P/.M@=P\`MC)3HQD>K"1R<T*\TJ8Y6QREGE
    6 M4JK=Z<G(#>QP#V5`O&LEG()<@98%1_H?RR?@RT#51T6I8NM?"&5(QF%J/62_
    7 M#306IZ[:'I%>^@9TQ"+AX@EW_M0)V\GE\?#1#3Z/,R!_3+]A7MK9AT@QBJX_
    8 '+B3PC`$`````
     1begin 644 setLetterplaceAttributes.res.gz
     2M'XL("._D'%P"`W-E=$QE='1E<G!L86-E071T<FEB=71E<RYR97,`=9%+:X0P
     3M%(7W_HK+T$6T5FJT+Z2!D:$P,'2AI=OBXXZ$$4>22)W^^N;::::;;I)#OLO)
     4M.4GYMMF^`D`L8+?-866TB7I9KS*PZD,.TC`_\V@'(4"CV:$QJ,:^:G!MC)+U
     5M9%!'`WY&VE3&*\]^_.RW5XA=_6/I8")`R:$#!<]P&[*9Q7YXHF5FG!0GE9!*
     6M2*6D4M\/V_'BD0IH<0^%M?@O%5,AI"%P/Z.1Y<;B8G`G0.H7&V_==UBKBA6V
     7M:.SPO8!^W&"7'Z>A75CJV`.Q]TKE_;$YE/(+%\X=?[1<8JZJYH#F3SV;Q",1
     8F4,^`*M[P@'!P^CVXGAVG]L[R22P?0F\\:3N277G?JOSS(;L!````
    99`
    1010end
  • Tst/Manual/setLetterplaceAttributes.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:292688
    2 1 >> tst_memory_1 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:2215936
    3 1 >> tst_memory_2 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:2232216
    4 1 >> tst_timer_1 :: 1525958650:4112, 64 bit:4.1.1:x86_64-Linux:nepomuck:6
     11 >> tst_memory_0 :: 1545397487:4114, 64 bit:4.1.1:x86_64-Linux:megrez:297504
     21 >> tst_memory_1 :: 1545397487:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1545397487:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1545397487:4114, 64 bit:4.1.1:x86_64-Linux:megrez:7
  • Tst/Manual/setLetterplaceAttributes.tst

    r356f8ad rf07380  
    33ring r = 0,(x(1),y(1),x(2),y(2),x(3),y(3),x(4),y(4)),dp;
    44def R = setLetterplaceAttributes(r, 4, 2); setring R;
    5 attrib(R,"isLetterplaceRing");
     5isFreeAlgebra(R);
     6lpDegBound(R);
     7lpVarBlockSize(R);
    68lieBracket(x(1),y(1),2);
    79tst_status(1);$
  • Tst/Short/nchilb_test2.res.gz.uu

    r356f8ad rf07380  
    1 begin 664 nchilb_test2.res.gz
    2 M'XL("%J!`%H"`VYC:&EL8E]T97-T,BYR97,`79+/;\(@%,?O_!4O9H>R8B=0
    3 MZS93#LL.,UFV@[L98_S!E`1K4S!6__I!:ZT=E_<%/M_W@,?TYWWR!0!4P.?D
    4 M#7K6V$BK56^,IM<=)L`M+E2F;(#'R$<0`K+U3NG5PDIC693)4V3LTMY,O$K7
    5 MR]8?#OJ7,!;@1Z&R+13I@`0E.9,+)IN\988";CJ)*GY_V!RUA)RF,^H-<S+K
    6 M4W(AYWEK&XD.RCQ:.J9L8#>YPY^[.&_PFFLM58;6]M*UQ:WM6J!CK*SEXU9F
    7 MP0B'M4@:P7%XJ<2P$7$C&.[[0'%3EP[JNEH9"YJE/@8Y)3DC.2=YC&\GI+1]
    8 M/LKJYZO[%6A&$D(=BO;+4NV7&K3,MG8'AU\X'8J-@10X0NVBW4GX+E:NZ2DD
    9 K""'?4%E8,+)0TKPB^A18'EK6YS:\.RNO?XW_%$?C+C%^0'^Y&RIR:P(`````
     1begin 644 nchilb_test2.res.gz
     2M'XL("#/J'%P"`VYC:&EL8E]T97-T,BYR97,`79+/;\(@%,?O_!4O9H=VQ4Z@
     3MUFVF'!8/6[)L!W<SQOB#*0EB4S!6__J5UHH=E_<%/M_W@,?T9_+Q!0"$P^?'
     4M&_2LL;&2J]X83:\[E$.UN)!:VB`<(Q>!<]#KG52KA17&TEB+4VSLTMY,K$[7
     5MT^OW"OJ7,.'@1B'U%HIL@(,2G_$EQ)/<,T,.-YW&-;\_;(Y*0$ZR&7&&.9[U
     6M";[@\]S;1KR#4H>6%5.V<#6YPY^[.&OQAO.6.H.WO71MB;=="W2,M;5\W`H=
     7MC,*H$6DK6!A=:C%L1=(*&O9=(&%;EPR:NDH:"XIF+@8YP3G%.<-Y$MY.2(A_
     8M/D*;YVOZ%2B*4TPJ%.V7I=PO%2BAMW8'AU\X'8J-@0P80G[1[@1\%ZNJZ1FD
     9L""'74%%8,**0PKPB\A18%EG:9S:Z.RMK?HW[%$=376+\@/X`CN#UGFL"````
    1010`
    1111end
  • Tst/Short/nchilb_test2.stat

    r356f8ad rf07380  
    1 1 >> tst_memory_0 :: 1509982554:4103, 64 bit:4.1.0:x86_64-Linux:topgun:283696
    2 1 >> tst_memory_1 :: 1509982554:4103, 64 bit:4.1.0:x86_64-Linux:topgun:2203648
    3 1 >> tst_memory_2 :: 1509982554:4103, 64 bit:4.1.0:x86_64-Linux:topgun:2236416
    4 1 >> tst_timer_1 :: 1509982554:4103, 64 bit:4.1.0:x86_64-Linux:topgun:7
     11 >> tst_memory_0 :: 1545398835:4114, 64 bit:4.1.1:x86_64-Linux:megrez:304320
     21 >> tst_memory_1 :: 1545398835:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     31 >> tst_memory_2 :: 1545398835:4114, 64 bit:4.1.1:x86_64-Linux:megrez:2215936
     41 >> tst_timer_1 :: 1545398835:4114, 64 bit:4.1.1:x86_64-Linux:megrez:4
  • Tst/Short/nchilb_test2.tst

    r356f8ad rf07380  
    22tst_init();
    33LIB"ncHilb.lib";
    4     ring r=0,(x,y,z),dp;
     4    ring r=0,(x,y,z),Dp;
    55
    66    module p1=[1,y,z],[-1,z,y];
  • doc/images/plural.jpg.uu

    r38f8079 rf07380  
    11begin 644 plural.jpg
    2 M_]C_X``02D9)1@`!`@``9`!D``#_[``11'5C:WD``0`$````/```_^X`#D%D
    3 M;V)E`&3``````?_;`(0`!@0$!`4$!@4%!@D&!08)"P@&!@@+#`H*"PH*#!`,
    4 M#`P,#`P0#`X/$`\.#!,3%!03$QP;&QL<'Q\?'Q\?'Q\?'P$'!P<-#`T8$!`8
    5 M&A41%1H?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?'Q\?
    6 M'Q\?'Q\?'Q\?_\``$0@`9`)7`P$1``(1`0,1`?_$`,$``0`!!0$!`0``````
    7 M```````&`P0%!P@"`0D!`0`#`0$!```````````````!`@,$!080``$#`@($
    8 M"0<(!P,*!`<```$"`P0`!1$&(3$2!T&A8M(3DR15%E%A<2(R%`B!D;%"4K-T
    9 M-=%R@I*R(Q7!=3>B,T-S-%24-A<8\,)3)6.#HT2$A281`0`"`0(#!08#!@8#
    10 M`0`````!`@,1!"$Q$D%1<3(%\&&!L2(3H3,&D<'A<H(CT4*B<Q0T\5)BLO_:
    11 M``P#`0`"$0,1`#\`W_8K%8UV.WK7;HRE*C,E2BRV226QB3HK)9?>'[#W;%ZE
    12 MOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8
    13 MO4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#
    14 MW;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P
    15 M_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V
    16 M@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZE
    17 MOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8
    18 MO4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#
    19 MW;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P
    20 M_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V
    21 M@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZE
    22 MOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8
    23 MO4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#
    24 MW;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P
    25 M_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V
    26 M@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZEOFT#P_8>[8O4M\V@>'[#W;%ZE
    27 MOFT'Q=@L0&(ML76!_F&^$X?9H/N7_P`AMOX5G[M-!D*@*!0*"/7[/>7+'>K;
    28 M9;@\M-PNI"8C+;:G#ZR@A)5L@X!2C@/0:Z,6VO>LVB.%43:(2&N=)0*!0*"U
    29 M?NELCKV'Y;+2_LK<0D_,305V7V7D;;+B7$'ZR"%#YQ0>Z#PT^R\DJ:<2XE*B
    30 MA100H!2=!!PX10>Z!0?"0`23@!K)H+)=[M*%;*I384//C]%3I*-5TQ)COHVV
    31 M7$N)\J2#1+ZAUM96$*"BV=E8'`<`<..@]U`4"@4"@4"@4"@4"@4"@4"@4"@4
    32 M"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@\N>R/2G
    33 MZ14BQR_^0VW\*S]VF@R%0%`H*<B0Q&CNR)"PTPRA3CKBC@E*$C%2B?(!4Q$S
    34 M.D#2V[")(SSO!NF\"XH*H$%PQK*VH:`1[.`PP_EMJQ/*5C7L[VT8,,88YSQL
    35 MRIQG5N=^9$8<9;??;:<D*V&$+6E*G%88[*`3ZQP\E>/%9EJK54*#&9CS%:<N
    36 M665>;L^(\&(C;<6=9)T)0D<*E*T`>6I'*V8][F\G>;F)O+^6U.6^%,<V(MOC
    37 M*Z-Q2!I*Y#XP5@`G:5@0D>>K],0-@V7X3;%[JES,5ZERK@O2Z8FPVV">`%U+
    38 MJE>DX>BJ]0IW3X;K]8B)^[[,TJ++:.V(LE?1[9&D`.-!*?D4C"G5WB--_$GO
    39 M+RRJ19<SVAB1=HPV.D?"H[J58:"XE&*%CA]4#'RU/2-H?#=.?G;N53)"MJ1(
    40 MN,QUY7E6XL+4?G546&U*J%!#;M=';C<$Q`YT<0.!L>?3LE1_LK6(TC5692:-
    41 M:+;':#;<=!'"I0"B?236<RMHL;AEYHI4_;R8TI.D!!*4J\VC54Q9&CSE-3AB
    42 M2.D)+G3';VM>.`QQJ;$,J9\$'`R&@1K&VG]-52)G0E$)3(;).@`+22>.@*G0
    43 MDDI5(;"AH(*T@CCH*C3[+H):<2X!H)20K#YJ`Z\RTG:=6EM)T`J(`XZ#PB;#
    44 M6H)0^VI1U)"TDGCH*U0+>1<(,8X/OH;/D4H8_-4Z"FU>+6ZK91*;*CJ&T!]-
    45 M-)1JN2\T'$M%0Z18)2GA(&L\=$O"YD1M10X^VA8UI4H`\9H//O\``_WEK]]/
    46 MZ:"JMYE"`XM:4MG#!9(`TZM-!3$Z$H@)D-DG0`%I)/'0%3H224JD-@C005I!
    47 M^F@^>_P?]Y:_?3^F@N*@*!0>2XV'`V5#I%`J"<=)`UGCJ1ZJ!3=?9:`+KB6P
    48 M=140/IJ13]_@?[RU^^G]-`$^"=4EH_MI_305TJ2I(4DA23J(TBH'V@4"@4"@
    49 M4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4"@4'ESV1Z4_2*D6.7_P`AMOX5G[M-
    50 M!D*@*!0:DWXYBGS50<@6+^;=;XM/O82=*&-K%*5'ZNT1M*Q^J//7K>FXHKKF
    51 MOY:_-6W<V-E?+L#+EAAV:"D!B(V$%8&!<7AZ[BO.M6DUYV;+.2\VGM3$:-;0
    52 M<<_[W79J@'<M9/Q:C<+;LTGVM9!P4-K$<"4^6O1M_8V^G^?)\D::SX-O5Y*Q
    53 M0<T_%KF>4;A:,LM.E,9#)G2F@2`M:U%MK:\NR$*P]-7J,#\*DVTL9^ELRRA,
    54 MV3"6BWJ6!B5!:5+2DGZQ0/F%38=:5F%!JO?YNOBYLRL_=(;'_P#0VILO1EH2
    55 M-MYI&E;"N%7JXE'*]-6B=!:?"TK'=@1]FX2!_DMFEN8FV9]X^7<M/N-75N<A
    56 M#2`XY)9A27F$I(QTO-H4CTZ:J(Q_W)[I.\WO^%D<RITD1:/O9R5<)+R+<]+F
    57 M%*BK^1#D+(22<"0E)(K:.2NB5R=\%JRXRQ_6TRE17&DNID)C/*V$*U!:@DI"
    58 MN2K35)H1+P/B4W2$8_U-X>8Q7^95-)62S(V:\JYH@RKIEV9[U'6^0^DI*%MN
    59 M!(Q!0H!0VM8QUTD?,XM-A,502`HJ6"K``D8"KT5E#(6][(F7$OHO2I<1PO%M
    60 M+KD&0$**!J0YL;*OD-+\TPJ_]5<@YMD18=B7)DS7GT,I>3"D!"2O1@XYL;*1
    61 MCAK-176"67@S9=IFGU2"D[+S)U'_`,<%7F-80F0N%N=@&8XZVF&$[3CCI"4I
    62 M`U[95H&'GK)9JI_?YNMR\_*C)D.7"0'UE)@-=*DIQP2$N**$'Y#5IB91"SN/
    63 MQ'VU]D)C6&]1FE:5R51DZ$\&&"S2M>\EG=WN\3=M?<2W=6?ZHI1'NDW^2X,/
    64 MLAW`+/ZI-+21"5MYERS<<U2,J-(1)FQX8FR%H"%-(0ISHP@J!Q"_K8>2JQWI
    65 M8F\7BVY.O+3TY$UZ&\TXII<:,_+#820"E9:2O9UZ,:F9UA&B+9@^(+=1,A=&
    66 MS<'5/!:2"8KX.`UZ2BIK$ZDPI9.WR9`>N+C;#DN8\6_4:CP9#RQI&)V4(4:F
    67 MY$-N6RX1KI;F9K+;B&'P2AN0TMEP`$CUFW`E2=7"*S2UW(WMY!RU<[BF["7"
    68 MPD%IM;D"0$$I&D(7L;)&.)&&L::M.LHA;3M\60<PLMHLRI<QY+J4K6U!DE*=
    69 MH'VE[&"?EJU-=25Q&WCY4RTN?_66YC:6%(2N6F#(=8&C'0\A"D</EI<A]_[D
    70 M]TG>;W_"R.95-)2O[9OTR#=0LVM5PGAO0LQK?+=V?3L-G"HD3YMQ*VDN#$)4
    71 MD*&T,"`1CI!U4$,EWIQ5[$U&/1M$)0GRMC7^]KK6*\%=4S:<0ZVAQ!Q0L!23
    72 MYCIK-9]6A"Q@I(4/(1C0:\2E/]0"<!ATV&'!AMUKV*,Y"O&5,PSKW9H24&;8
    73 MW$L3,$I24K6C:!01I(!Q2?.#6>LPLQ^7YTB/<66D*/1.J"%M\&G1CAYJO:."
    74 M(3FLED:S1O`L.67NCNC<T)Z,.J?CPY$AE*22/6=:0I`/JZB:"*?]R>Z3O-[_
    75 M`(61S*G20'Q);I3JN;Y__$D<RFDBZA?$'NDENI;3?`RI6HO,/MI^52D8"FDB
    76 M:V7,=@OC!D6>XQ[@R/:5'=2YA^MLDX?+09&H"@4"@4"@4"@4"@4"@4"@4"@4
    77 M"@4"@4"@\N>R/2GZ14BQR_\`D-M_"L_=IH,A4!08C->9;?EJQ2KQ.5_*CI]1
    78 MO'!3CAT(;3YU']-:X<4Y+16.U-:ZH!N;RU<9LN=O`S`D+NMY)]Q"O]''.C:2
    79 M#[.T`$IY(\]=^_S5B(PT\M>?B373Q9K>SFV1:K.W9+2.FS%?S[G`921M)2YZ
    80 MJW3Z,<!Y_16.RP1:W5;R5XR1699?(>58>3LHQK9M)"F4%^?()P"GE#:=62>`
    81 M88>@5EN<\YLDV_8B([(6N[G,%VS%#N=[DN?^U2IKB+&P6TH4F*SZ@65#2HK4
    82 M#KU85;=XJXYBL>:(^KQ-$OKD')_Q86]]G/MOG*'\F7;T(;5RF75[0_RTU>@T
    83 MS!G3($QF;">7'EQUAQA]LE*T+2<0H$5<=-;MOB>M,UEFW9S3[C-2`@71`*F'
    84 M3H&+B4C%L^7#%/HK.:C>L&?"GQ&ID%]N3%>2%M/M*"T*2=((4,1516(!&!U4
    85 M$1W9Y%=R9:KC;E/MOLR;C(FQ0VDIZ-I[9V6U8ZRG9X*F9$M6A#B%-K2%(6"E
    86 M22,00=!!%0/SPN[3;-VFLMC9;;?=0A(U`)60!6PZC^&RPP)>Z];A1T<AV>^5
    87 M/H&"SLI0D8^4`<%4F=)1HFMSRS-:;<;6T)<18*7`!M!22-(4@^:K1>$:..\Y
    88 MV$6S,%V;B,J3;(LUR,TLZ0DZ5)03^KJJ4PR.ZS>-<,B9G:N;`+L![!FY1,=#
    89 MC).L<M&M)_343&J77=XO-MO=DM5VMKP?@S$J=8=&C%)`U@ZB#H(X#5:<T2P.
    90 M;K?&N&Z;-3,E`<2U%>?:VACLN,M](A0\A"DU-N9"KNFM<2W;K\HIBMAOWHM2
    91 MGR-:W'MI:E'Y\*KWB4YS9MD>TR;Q,>1$1!;+KSZ]"=A/`?/]GSTK.A,.-]X&
    92 M\Z]9KD.1DN+BV)"]J/;TJ]513H#CN'M+/S#@K0B'0'P_[I+-9[`QF"ZQ$2<P
    93 M2CMH4Z-L1FR`4H0#H"R#BI6O@JEDI5>5N?U26"3_`)Q0`\W!Q5>O)25CO!W*
    94 M98SK8TOLLMP+^&$F-<6DA.VH(]5+X'MI/EUC@K.)T7:I^&V-(RWO"S'`O"%1
    95 MY4.(6)"""K!:7T#6!J/`>&K3Q0Z2:S!;'G`VTXIQPZDI0LD\55FLFKAW>I%C
    96 MQ-X^9&(Z`VRFX/E"!H`VEE6&'RU>.26ZOA%9:]US`]LCI2ME!7AIV0"<,?2:
    97 MK9#HFJ):[WD6^//R%G=F0V'$MQW7F]H8[+C+72(4,=1!35NY$,/NVMT.#N;R
    98 MZ8K0:,L>\R5)UK=65XJ5Y3@`/15J\R4LLD=B39;O'D(2ZPZT4.-K&*2DH4""
    99 M#49"'"9UFKI=J_#U$BQ]TUE+"$I6_P!,\^1K4M3RQBKS[*0/16=N8FUX=4MM
    100 MN"TK9>EG9Q'U6QI6KYM%1")8;--L;:0S)8`"$@,K2.`#V3_95Z2B8764[ATD
    101 M=4-9]=GUF_U#^@U%X3"055+4>;\QM9;M-QO:]DJA[2V$*U+>VL&D?*K"M>Q2
    102 M'/VZG/\`.LF?U7&5((1>RY'N3ITXF2O:Z0CS.8'YZC1:7766[/$V43NEZ9Q.
    103 MA*,,`A7#CYZK:2(2.J)?"`H%)&(.@@ZL*#\]\T,-1\RW9AI(2TS-D-MI&@!*
    104 M75`#YJUCD.IOA?C1W-V.TXTA:O?Y`Q4D$X;*/+5+1Q&3WR[H\N9ERQ<)\2$S
    105 M%S!#95(C3&DA"G.B!46G-G#:"AB!CJ-(G0<D98S1?,L7AB[V:2J-,8.((TI6
    106 MGA0XG4I)X0:O,#O#*.8H^9,LVR^L)V&[A'0\6]>PHCUT?LJQ%9C+U`4"@4"@
    107 M4"@4"@4"@4"@4"@4"@4"@4"@\N>R/2GZ14BQR_\`D-M_"L_=IH((WG[.F9[M
    108 M.C9)A0Q;K:LMNW&X%S9>6,<$MI1@1CP8_+A7;.WQXZQ.29UGLAW3MJ8XB<DS
    109 MK/9"O`WK.VZX"TYXMRK%.4"6IB27(;H&.E*AB1\Y\^%1;:=4=6.>J/Q1.SZH
    110 MZL<]4?BCS;4W>QFE$EYM;.1K.X0VE6*3)=']JM&/V4^<UT:QMJ:1^9;\%\E(
    111 MP5TGSRV3FG-ECRG:?>YZPV@#8BQ&\-MU21H0VCS?,*X,6*V2VD.3#AMDMI"+
    112 M9!RM=9UZ?SUF=&S=IB=FV0CJBQ2/5&'VRDX?/CI.CHW&:L5^W3RQSGOEIFM6
    113 MOTU9#>M=)K.7V+-;E!-QS#)1;&5$8[*'M#J_W-'RXU3:5CKZIY5C5&WQ]4S,
    114 M\JQJD]DM$.S6F):H2=F+#:2TT#K(2-9\Y.DUSY+S:TVGG+"9UE?51#7V^C=D
    115 MC/>5C'C;"+U`)>MCJ\0"HX;;2B.!P#Y#A4Q.@XLN-NG6V<_`GL+BS(RRV_'=
    116 M24K0H:P0:U%M023)V\/-V3Y?O%BN"V$$_P`V*KUV'/UVE>K\HT^>HF!TSNR^
    117 M(S+F:%M6R]I39KTH!*"M797EXX8-K/L*/V5?(35)KH-P54*#\\+[^>7'\2]]
    118 MX:V'5?PMS&3NY,0G!U$Q]8!X4G9U>BJ6@;DJ@T/9LJ6K,<_>G"N"-IHW8:1K
    119 M'JJ(4GR*2=(-:1*)<[YRRE<<K7MVVS!M)]N-(`]5UHGU5CZ".`U9,2ENZ/>:
    120 MYE^2FQW1XFPRG-I"E:1&>5HVQY$*^N/EI")AT7?'6CNQS:@+!6;?*4!B-*2P
    121 MK`CS56W-$*F[Z7&:W:Y+2XXE*A'BK()TA(002?-IJL1S3*!?%AFUYBT6G+<5
    122 M?\JXJ5+F%)]IMD@-)]!62KY*5A+G[)-H5>,W6BV!'2"3*:2MO7M("@5#]T&M
    123 M"7=&4QA:R,,,'5C#5AAAHK.W-$+;,=B=><,R*G;60.E:&LX:-I-36Q,*N7KQ
    124 M']U3#D+#3[/J@+.&*>#7PBEH(EA;QE2VL9GN6;&92$R)UN1`?B`)]=3;P6ET
    125 M*QU[(V<,."HJ2K940LW3;"24!"L58:!CAPU>Z(<B;X/\4,S?W@]_%2.2S;WP
    126 MHSX\2!>B^K80Z^VD+.H$(Q&-1:$=KH-^[VUEO;5(0K[*$$*43Y`!5-$ZHMG1
    127 MA]&[3-;[Z-AZ3!F.J0=:065!(/R"I[4(]D5UO_H_E1O:'2&.E6SCIP!7IPJU
    128 M>9*2V&7&9@7)#KJ6U+;)2%$#'!*L<,:C)!#A16LU=+M#X?5M,;I+2\ZH(02\
    129 M5*4<!@'5#^RL[<T)=`$"\29,F0$N`*#<=I1TI0D8XX8_6)I/`YKQZP6E32TA
    130 MA*"00%Z=!PUZ^"FLFB(0Y2[?<$N@A1964KPTA2<<%?/6DQK"J>-RH[K`?0XD
    131 MM$8A>(PK)=S7O2CS\Y9I:R7:W$H1$;=N,Y\GU=L@AAL^G:&O[6/!6O8K#G]Y
    132 MIUAY;3B2AUI10M)UA23@1\AHLZSW-Y^5<LM0YKKG2/-CW6YMZ,>D;&`7AY5)
    133 MP528U5Y-Q,OLOMAQE8<;5J4DXBLEE2H'Y\YP_P";;W^/E??*K6.0ZG^%O_"_
    134 M_P#82/X452W,;$SM>8-ERC=[E.<#4=B*Z25<*E)*4('G4HA(J!^?M:CNK<Y8
    135 M)5AW:6*W2PI,I+!>>;5K0J0M3VP1R=O"LID3.H"@4"@4"@4"@4"@4"@4"@4"
    136 M@4"@4"@4'ESV1Z4_2*D6.7_R&V_A6?NTT&MLO>(]W,NY6E5DF7FRRGU2H$N`
    137 MCI5@J`3LN`#0<$C''AU8BNK+>,NDZZ3R>SDKCW,1:+12T1I,2]7'*^<]XLAE
    138 M=^:&7\O1U*5'A8!4M:M("U8CU3Z</1PU./-7%Y>-OP17-BVT?1/7?O['K(=\
    139 MN.3[TG(68\.A42;'<`-E"TK)P;/ZQQPX0K0>"JYYB_UQS[3=;>N;']['_5#.
    140 MY_W<-WUU%YM;QBYBAX+C.J.TTX4`;*5H5M)3JT$#TXU&'<32.F>-9<NTW?1]
    141 M-HUI*_R)G1&88CL:8T8=^MQZ*YP%Z%)6-!<2/L*/S?-CE>ND\.2-YM)Q3$QQ
    142 MI;E+';SUK@/9;OYP,:U7)'O>.)V6I`Z-2_)ZM7Q6X6COC^*^PIU]=.VU>'P3
    143 MJL'GE`H(/O%W091SRP5SV?=;HD`-72.$AX`:DKQT.)\RODPJ8G0<NY_W&YXR
    144 M<I;[D?\`J5J!.S<(84M(`_\`51AM-_+H\]7BPUY5@H.H_AJWKS[VV[E&]O*D
    145 M38;736V6X2I;C",$J:63K+>(*3Y/16=H&^JJ/SPOOYY<?Q+WWAK8=-_#A8WY
    146 M6[E,MF26'DS7PW@.$;.L@U6;(T;=;D9B9`0[$;DX:.D;<""?.0:KP.+5^[>)
    147 M=;AFS>$RG9CMKO"3)!.)!V5>KHUU;6($IW@[I+-FO*3EJ.#=R9Q>@7`@;27L
    148 M-`5_\-6I0^775>HT<77NS7*R7:5:;DR6)T-PM/M*X%#A'E!&D'A%72W#N\WK
    149 M,3-W68<FWTH,YNUR_P"BS7,-MQ(962PI1^LD>QY1HX!59CBAOK=)#B+W9994
    150 MMAM2C;V,5%()/J^BJI:'^+%CHLY6C80$,FW^H$C`;0>7M:ODJ]1!]QY2-Z^6
    151 M]K5[R?G+:\..EN0[A0TVWM;"0G:)4K`88DZS5!9WF^VFRQ!,NDE,6,5!`=6"
    152 M1M$$@:`>`&@BKV];="_I>O\`;G">%2@3]%.(IM[S=S:%`HO=MVN#U@3]%3Q0
    153 MF=KG6^?`9F6YQ+L-X;3+B!@E0QPQ`P'DJJ7#F^#_`!0S-_>#W\5:QR&ZOA-A
    154 MQ9&7+^'VD.83&L-H`X?RC5;2-]L6^"P=IF.VA7V@D8_/5=1@=YQ`W=9F)[LE
    155 M?<JI`Q6YB)%7NMRVI;*%*,-.*E)!/M*\HI/,2V?!A>XR>SM_YI?U$_9/FJ)'
    156 MYXJUFMAVSN'99<W19>2XA*T]&Z<%`$8].YITUG;F)ZF'$0H*2PVE0U*"4@CB
    157 MJ!4<;;<3LN)"TZ\%#$<=!2]QA?[NU^XG]%!8WV;9;'9)MUGMMH@P6ER'_4&I
    158 M`QT##6=0H->[A[`N399^=+O'2;MFF2N4-M(.Q%2HI90G$:$ZR/-A4S(T;\1F
    159 M2DY<S^[,C("+??$F8R$@!*7<<'D##E>M^U5JR+_X9<VL6S.:[#-2E<.^)"&M
    160 ML`A$EH%3>O[:=I/IPI8=;M,LM`AI"6P=)"0!]%4'NH'Y\YP_YMO?X^5]\JM8
    161 MY#;VZ^[[WK+NJEW?*[=M?LD)]]UYAY#KDS%(3TJDI24H*4C`Z\==5F.(UQG3
    162 M>KGC.20S>[@5PTJ"TP64AI@*&HE*?:/ZQ-6B-!N_<1N=W?3;5`S>J2J]2]!]
    163 MT>2E+,:0CVDK:!5M*2?9*CAJ.%4M(Z`JH4"@4"@4"@4"@4"@4"@4"@4"@4"@
    164 M4"@4'ESV1Z4_2*D6.7_R&V_A6?NTT&0H%0(MO$R8UFFP+CH]2Y1<7K<^,`0Z
    165 M![&)PP2O#`Z?(>"IUF.3O].WGV,FL^6>$^"RW6YT>S#9W(EQQ1>[60Q.2O`*
    166 M7AB$N8>4X8*\_IJE;:M_5MA]B\6K^7?C'^"PWCVB;9KE'S[94DRX.RW=XX(`
    167 M?B:B3YTC0?-@?JTO;2&OIF2N6L[:_*WEGNLECJ;5FW*JTMJ#EONT8A"R,2G;
    168 M&@X8^TA7&*F+:QK#S?KV^;CYJ2Q.[&XR'<N_TB<K&Z6)U5OF)QQ/\H_RE8^0
    169 MHP^:HI?5T^J88KDZZ^3)'5'[_P`4OJSS6N59VG1=^GA20^3;9]H0]$8.`"92
    170 M%K4HIT8^LV@\/!4Z#8U0/A`(P.D'6*#5>\CX?,I9K0[,MJ$V:^*Q7[PRG^2Z
    171 MH_\`K-#1I/UDX'TU:)T')F9LM7G+-[DV:\,&/.BD!:<<4J!&*5H4-"DJ&D&K
    172 MQ(S^YF?(@[T<MNL**5.3$,+PX4/8MK!]*54GD.Z:R'YX7W\\N/XE[[PUL.LO
    173 MA=_PN3^.D?\`DK.W,;=JHU=NC_YTWD_WRG^%56D;1JHU'O[W/ISA:_ZS9V1X
    174 ME@(P2A.`,ID'$M*/VTZ2CYJM$Z#D!:%H6I"TE*TDA22,""-!!!K0=V;HO\,<
    175 ML?W>Q_!60UW\5&2Y%SRW"S)$25N652D2T`8GW=\I]?\`86D?(:FLCG'(][18
    176 M\XV6[N'9:A3&7GCK_EI6-O\`R<:O([_:<;=;0ZVH*;<`4A0U$$8@BLAZH.-/
    177 MB2MT*#O2F"(RAA,B.P^XEL!(+BDD*5@.$[.FM*\AFOA3ML&7GJX2)+*7G8<!
    178 M2XREC'86IU"2I./#LDC&EAUC68X8WUQU1]ZN94*&!5++@]#J4K'\5:UY#=/P
    179 MB*2<OYA1CZPELDCS%LX?15;#?U4$.WPRT1-U^9G5D`&"ZT"?M.CHT\:JF!4W
    180 M317(N[3+3+@V5BWL+(/+0%_^:DB2S_\`8)/^J7_":B>0_.M7M'TUL.W-PG^$
    181 MF7O]4[]^Y6=N8V!51%]YF:V\JY'NUY+@;D-,*1"QX9+@V6@/VCC4Q`R.4%3%
    182 M94LRYSRI$U<*.J2^OVEN*:25J5YRJDC7&_1^X9AFV/=K:7PS*O[AD7%W#:#<
    183 M2/ZP*@"-!4DG]G#AJ8[Q7C;O-]$6,U&C[P6FV&$):9;3;&,$H0-E*1Z`*C7W
    184 M");U-TF]"Z94D2[OFIJ_"TI5,8A"$VPL[*<'-EQ!Q]C$X<.%3$CFR'+DPY;,
    185 MN*X6I,=Q+K+J=!2M!"DJ'H(K0=\9$S7%S7E*VWZ,=$MH%Y'V'D^JZC]E8-9#
    186 M/U`_/G.'_-M[_'ROOE5K'(=3_"ZE*MUQ2H`I,^2"#I!!2BJ6&F-_NZE63[^;
    187 MI;6<,NW194P$CU8[YQ4ICT8>LCS:."K5D6.X[>BYD?,O1S%G^@7(I;N*-)Z,
    188 MC'8?2!PIQT^4?)2T#M%EUIYI#S2@MIQ(6VM)Q"DJ&((/G%9CW00;.V><PY56
    189 MV\[:H\JWR7^@C/(D+2L*(Q3TB2W@,<#J)KAS[C)CGC$:/H?2_2<&[B8B]JWK
    190 M&LQTQI\.*I>,VYRL+/\`4+M8X[MI01[T]"DJ<=:23AME"VT;0'FJ;9\M.-JQ
    191 MHKMO3=IN)Z,66T9.R+5TB?=PF5_>,QWH6AJ]9>AQ[G;51E2EEUY3+A2!M#8&
    192 MRH'U<<<<*ODS7TZJ1K71S;;8X?NSBSVM3)U=/"-8^/%C\F9QS7F:/'N*;/&B
    193 MVAUQ2%O*DJ4[LH."E(0&QCZPPTFJ8LV2\\HT]O>ZO4_3-MM9FDY+6R1'+IX?
    194 M&=4VKM?/H#FO/F:<OWJ';U6>-);NCRF;8ZF0I)5@M*1T@*/5/KC'#17#EW&2
    195 MDZ3$>[VU?2>G^D;;<XK7^Y:LXXUM'3[NSC[DQM#EW<AA5V99CR]HXMQG%.HV
    196 M?J^LI*#C\E=6*;S'U<WA[FN*+?VIFU??&DHGF;.F<;`I@OV.,^Q,E")$=:E*
    197 MQ*W">CVTEKU=H#RURY-QEISB/;XO:V/I>UW.O3EM$UKU3K7NYZ<62N5USO#M
    198 M*9J;7"=>:;>=FQQ)6-E+>E`;5T?K$IUXX5>^3-6NND>WQ<F#;[.^7HZ[Q$S$
    199 M5GICM[^/!A;)G;/E]L:+S;+'"<C+*]EE4I8=5T:BD@`H"<<1HTUG7/EM&L1'
    200 MM\7?NO2MEM\WVLF6\6X<>F-./Q2#)><H>9X#KS;*HLR(X69T)S2IIP>?1B#A
    201 MHKHP9XR1[WF>J>F6VEXB9ZJVC6MN^$AK=YB&[P=XB,H^Z($%4YV4E;BL%[`;
    202 M;;4A)4K0K7MX#5IKEW&Y^W.D1Q>[Z-Z+_P`WJGJZ8K^,SK_@ET>0U(CM2&3M
    203 M-/(2XVKRI6,0?F-=-;1:(F.UXEZ36TUGG$Z,-FFYYEMT=4NTP(\Z.PTMV2AU
    204 MY33GJ:<&P$J2='E-89[Y*\:Q&CO]/P;?+;IRVM2TS$1I&L?%ALEYRS5F=ABX
    205 MIM$:+:''%(6\J2I3N"-"BA`0,?6T:366+-DO/*-/;WN_U3TS;;29I]RULD1R
    206 MZ>'QG5-J[7SY0*!0>7/9'I3](J18Y?\`R&V_A6?NTT&0J`H%!JC>%%E9/S;#
    207 MSS;&U&)(4&+TPC0E0.`Q.`P]<#6?K`'AKFRZTMU0^H])FN[P6VM_-'&D^WMH
    208 MV<VY"N=N2XG!^%-9!'D6TZG^U)KHB8M'NE\W:ML=])X6K/XPU_D1QW*N;)^1
    209 MI))@O;4ZQ.JX6U:5M:1B3K_=-<^.W3::R]_U*D;G;UW5?-'TW\>_V[VQ6X[#
    210 M2W%MMH0MT[3JDI`*U888J(UG#RUTQ$0^>FTSI$SR5**N4_B*O4ZR;YK==X"R
    211 MW+@PXK[*AHTH==.!\RAH/FJ]1T;D?.5JSAER+?+:K^6^G!Y@D%;+H]MM>'"D
    212 M_.--5F!GZ@*#FKXNX5O1,RY,2$IN#J)+3I`&TIILME&/ZJEJP]-7H(3\.657
    213 MKWO)B3"D^YV5)FOK&K;'JLIQ\I6<?D-3:1U;F'/F3LNAP7F\1(;[2.D,5QU`
    214 M?((Q&RUCMG'@P%4T'!%PDIE7"3)2"$ONK<`.L!:BK^VM1TK\-6\+)]NR4[9+
    215 MI=8]NGLRW74MRW$LA;;B4D%"ED).D$$:ZI:!N&^Y]R9864.W:\Q(H=:#["%O
    216 M(Z1UH^RMM`)4L'#04BJZ#1FY;?#EIG..;5WN4BW,W^9[[!D/D(;&"ECHW%:D
    217 MG84G2=&NK3`Z)MUSMURB(F6Z4U,B.8A$B.M+K:L#@<%()!P-5%S4#F_XC=S8
    218 M3T^=[`U@G#;O<-`T##_[E`'_`-3][RU>LC<.Z+_#'+']WL?P542M]AF0PXP^
    219 MA+K+J2AUM0Q2I*A@00>`BH'+.];X;KQ:I#]VR@TJX6E1*U6U.*I+`UD('^D1
    220 MZ/6'GUU>+#/;G_B"@6NVQ\K9VZ6(_![/&N*T$A+:,$I;D)PVTJ1JVL#HUTFH
    221 MW#_U6W:]!T_B:V]'AC_M+>/[N.UQ54<J[]\QV?-6\9V;8'_?XRF&(Z'&T+]=
    222 MQ(.(0"`5:_)5ZP-D_"_DC-EGO=RN]UM;\"!)AAF.Y(3T:EK+J5:&U8+PP3KP
    223 MPJ+2.C*H.??B-W.W:\31F_+["I<D-);N<%L8N*2V,$/-I&E1"?54G7H&'#5Z
    224 MR-4[F]Z3^[S,,DS([CUJF@,W&,GU7$+;)V7$A6'K(Q(*3AKJ9C4=(M_$-NE7
    225 M!][-ZV#L[1CJ8?Z8'[.R$'3\M5Z9$0N=PO6^Z;$MELAR+7N_B/)?N-RD@H<F
    226 MJ;.`;9`T8#3PG`Z3I`%.0WE&CLQH[4=A(0RRA+;2!J"4C!(^0"JB+YQWC9*R
    227 M_;K@FXWB*B9':6#`#R%22LHQ2@,@[>)Q'!4Z:C@\G$XUJ.F=R>_+(EGR+!L%
    228 M^EKM\VW=(@+6TXXVXA;BG$J2IM*\,-O`@U28XB<3OB+W2Q6"ZB[KE*&IEB.\
    229 M5G]]*$_.:CID<^[VM[MQWD76';H+"H=D9=2(<19!<<>7ZG2ND:,?6P2D:OEJ
    230 MT1H.J,PYRRKDFS,*OD]J(&V,(\<J!>>Z%(!2TW[2CJ'TU2(&B=TN]?+T_>IF
    231 M',N:)+5M=N+"6K6Y(5@VRTA8'0](="3L)3IT8Z:M,<!TC;;G;;I#;G6V4U-A
    232 MNX]%)CK2XVK`X'96DD'`C"JBA>[[8+/&#MZGQH$9W%"52W4-)7HTI&V1CHX*
    233 M#@S.4:R1<U75BQ/B39T27!!>&D%K:Q3@>$#5C6D#;7PX;V;=EQV5EK,$I,6U
    234 M2U>\0I3IP;:?P`6E:M24K`&!U`CSU6T#HN[Y_P`DV=AM^Y7R%&0\R)+`4^WM
    235 M.LJ&*5MH!VEI5AH*1IJN@X/OLYN?>[A.:!#<N2\^@'6$N.%0Q^>M('1GPU;P
    236 M\H6S)DBR7>ZQK;.:F./(3+<2RE;;J48%*ED).E)&&-5M`W1FC+=ES?EF1:9V
    237 MR_;Y[84V\@@X'VFW6U#A!P(-5'#.=,HW7*68Y=BN:?Y\97J.I!"'6U:4.(Q^
    238 MJH?HK2)U&\/A^WWV^%;AE7-<Q$5J*,;7<9"MEL-Z/Y#BC[.S]0G1AHX!5;0.
    239 MCFG6GFD.M+#C3B0MMQ)!2I*AB""-8(J@U[OQTY8MPX3<V,!_\MRN'U#R1[=C
    240 MZ?\`2G_8O_MV^<+G/V=,MOY;N-J@S6I]TG-JB1X,90==+KGJ8%*<<-GSTW&X
    241 MI--(G75GZ/Z7GKN*9+UFF.D]4VGA&D,I9+1)L^[IJVR=$F/;W`\!IP6I"E*3
    242 M^R585>M)K@F)[I<>ZW-<V_G)7RSDC3]L+/<Y_AW:_2_]^NIV?D^+?]3?]Z_]
    243 M/_YA-*ZG@M;;U_\`F7(_]XG[QFN#>^:OMW/JOT[^1N?]O]UFR:]!\JAF]#_8
    244 M+%_?<'^)5<6^\L>/[I>]Z!^9E_V;I3=ORN;_`*AW^`UT9O);PEX^V_-K_-'S
    245 M:RW99WRQ8MWT9-SG)9>:6^HLA*E+.+BE`)`&DD5Q;;<4I68F>.KZSU[TK<;C
    246 M>S..NL3%>/P2#=Q8Y;,B]9CELF*O,$CWB/$)!4A@%2D%>SB-I6WC6NTI.LWG
    247 M_-R^;S?6]W6:X\%9ZOLUTF>^W;^S1-Z['SZ`S+-XKN.;CCBRF,BS05GV>F:'
    248 M3ND>AY2`?17GS3[MKS'9PCV\8_%])CW7_#Q[?OZIR6\)^F/].JON?O#L_)S4
    249 M62<)EJ<7"?0?:`;THQ]"3A\E:[*^M-.YG^I=M&/=3:OER1U1\>:5WC\HG?AW
    250 M?NS6^;R6\)>-M?S:_P`T?-%=S7^'EM_6?^^76&R\GQ>Q^I_^[?\`I^4)M76\
    251 M`H%`H/+GLCTI^D5(L<O_`)#;?PK/W::#(5`4"@LKU:8=XM4JV3$[4:6V6U^4
    252 M8ZE#SI.D56]>J-&^VW%L.2N2OFK.K7^Z*\2X$BXY(NJB)MI<6J&5?79VM(3B
    253 M=0Q"D^8US;;)I,TE]#^H-M6]:;O'Y,D<?'VX>,)1FS)J;Y.M-Q8DF#<+4^'$
    254 M24C:):.E3>&(UD#C\M:9L,VTF.$O+]/]2^Q2]+1U4R5TT]_9*2UT/+*@<J?$
    255 M3E^\Y@WPQ+79XBYDY^W,;#+8Q.`6[BI1U)2.$G15ZR,?9LN[[MT<_P#JD6V+
    256 MD0'0/?6&3[U&<2.!Q+1VD*'`K14SI(VWESXGMWL^.V+QT]FG:`\TXVMYL*X=
    257 ME;04<,?M)%5Z9%[>_B4W6VYA:XLUVYO@8H8C,N#$\`VW0VD?/3ID:'EP-X^^
    258 MS-YN3,%3,,@--.KVA#BLIQT=(1ZRL<2=D8D\%6Y#J'=SN\LV1LOHM5N'2/+/
    259 M239BP-MYW#`DX:DCZJ>"J3.HSTFSVB4[TTJ#'?>(`Z1UI"U8#4,5`FH%+P[E
    260 M_NR)U#?-J0.7,O'7:XG4-\V@JOV:T2"@OP8[Q;2&VRMI"ME`U)&(T`>2H%+P
    261 M[E_NR)U#?-J1>1HL6*R&8S*&&4XD-MI"$C'2="<!4"K0>7&VW6UM.H"VU@I6
    262 MA0!2I)&!!!U@T%&!`A6^&S"@LHC1(Z0VPPV-E"$C4E(&H"@N*!08B[Y1RM>,
    263 M3=;1#G*.M;[#;BOWE`FI&'3NBW8I5M#+%OQ\["2/F.B@SELRQENUX?TVU1(1
    264 M3J+##;9^=*0:#)U`4"@P5XR+DR\NEZZV.#,>.DO/,-J6?2O#:XZD6</=;NYA
    265 M/)>C9;MZ'4Z4K,=M1!\VT#029IIIIM+;2$MMI&"4)`"0/(`*@>Z"Q?L=E?>4
    266 M\_;XSKR]*W%LMJ43JTDC$T'CP[E_NR)U#?-J0\.Y?[LB=0WS:!X=R_W9$ZAO
    267 MFT'U.7["A04FVQ4J2<4J#+8((X1ZM0*\NVVZ84F7%9DE&(076TK(QUX;0.%!
    268 M;^'<O]V1.H;YM2+R/&C1F0S&:0PRG'9;;2$)&)Q.`3@*@>)=O@3$I3,C-24H
    269 M.*$O(2L`^4;0-!;>'<O]V1.H;YM2'AW+_=D3J&^;05'K)9G]CIH$9WHTAMO;
    270 M:0K90G4E.(T`>2@I^'<O]V1.H;YM`\.9>.NV1.H;YM!?H0AM"4(2$(0`E*4C
    271 M``#0``*@6\JU6R8L.2X;$A:1LI6ZVA9`UX`J!H*'AW+_`'9$ZAOFU(OT(0A"
    272 M4(2$H2`$I`P``U`"H&NM^1`R_:L3A_[FS_`NO/\`4/+'Q?4_I2/[V3_;GYPG
    273 M[=NM[3Y?:BLH?.MU+:0LXZ_6`QKMC%6)UB(U?-VSWF.F;3,=VJE>_P`FN'X9
    274 M[[LU&?R6\)7VGYM/YH^:*[F74.;O;<$D$MK?0L#@/3*.!^0BL-EY/B]C]3UF
    275 M-[?WQ7Y)1=[S$M3<9<A*UF7):B,(;`4HN/'!.@D:!K/FK?+EBFFO;.CR-MM;
    276 M9IM%=/IK-IU[H03?)M1965KPM),2WW`&2L#0D*4A6GY&S7)ON=9\?W/HOTS]
    277 M=<^*/-?'P_'_`!;(0XVXA+C:@MM8"D+2<04G2""-8-=\3KQA\K-9B=)YH9O#
    278 M7[Y<<LV1@[<I^Z,S%H&E28\7%2UD<`TZZXMW]4UIWS[>WN>]Z+'VZ9LT^6,<
    279 MU_JMRA*[M^5S?]0[_`:Z<WDMX2\;;?FU_FCYM?[MK'`OVZ5FU31M,2#(25##
    280 M:0H/**5IQ^LDZ:Y-OCB^.8GO?2^N;N^W]2G)3G'3\>"\W<7.?;9$C)%[4?ZC
    281 M;`5V]\^S(AX^J48Z]CZ/0:MM;S69QVYQ[?Q8>M[>F6L;O%Y,GFC_`-;>_P`?
    282 M;FEV8+PQ9K)-NCVE$5HK"?M+U(3^TH@5TYLG169>)LMM.?-7''^:?_/X(ME_
    283 M=LRS:8ZIMPN34]\>\34QICS#?3N^NY@A!`&DX5RXMI'3&LSJ]C>>N3.6>BF.
    284 M:1PKK2)G2.$<6#RS%;R?O5EV)+KAMU\CI?C+?65*4\G%6E2O:42'!Y:SQ1]K
    285 M+T]D^W\'H;[).]].KFTCKQ6TG2.S]W8V3>/RB=^'=^[-=V?R6\)?*[7\VO\`
    286 M-'S1/<NXA>[V`$G$H6^E8\AZ51P^8UALO)/B]K]45F-[;PK\DIN]ZB6IN,N2
    287 ME:S+DM1&$-@*47'C@G02-`UGS5OERQ337MG1X^VVMLTVBNGTUFTZ]T+^M7,5
    288 M`4'ESV1Z4_2*D6.7_P`AMOX5G[M-!D*@*!0*"%YDR-.FYTM&9K3(;BR(IV)^
    289 MV%$.-)QP&"<,2I*B@Z=5<N7#:;Q:KW=CZK2FUR;?+$VK;R^Z?;BFE=3PB@4%
    290 MBFR6E-X7>4Q&Q=7&1&7-P_F%E)V@WM?9QTT%]01V[[O,BWAXOW.PP93ZM*GE
    291 ML(Z0X^58`4?GJ1:1-TV[2(Z'6,M6\.).*5+82Y@?V]JFHE+##+#2&6&TM,H&
    292 M"&T`)2D>0`:!4"I0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!0*!
    293 M0*!0*!0*!0*!0*")YAW=6W,3Q5=[A.?CAPN,0PXVAEHD8>J`WM:O*37+?:Q:
    294 M=9M+V=GZW?;1_:I2)TTF=)UG\66LU@7:W5$72;-9Z,-HCRUH<2C`^TDA"58X
    295 M:-)-:8L/1/.9CWN/=;R,T>2E9UUUK$QK^+QF#+8O:0TY<IL*.4*;>8B.(;2Z
    296 ME>O;)0M6K1H(IEP]?;,0G9[[['&*4M;76)M$SIX<6%M.ZNR6C:%KN-SA!9Q6
    297 MEF3LI4?*4[.R3\E91LXCE:T>W@]#<?J#+F_,ICMXU_BO(V0H;=ZB7:3<[A<7
    298 MH14J.S,>2XTE2DE.T$A"<",:M7:Q%HF9F=.]A?UB\XK8JTQTBW.:QI/S9RZV
    299 MFW7:`[`N+"9,1X`.-+U:#B""-((.HBM[TBT:2\[;[C)AO%\<]-H16+NYGVYO
    300 MW:SYGN$&`DGHHAZ-Y+:3IV4%8Q`KDC:6CRVF(]O>]G)ZW3+/5EP8[W[^,:^.
    301 MC+Y?R?;K1(<G*=>N%V?3L/7.6OI'BC''83J2A/F2*VQ;>*3KSMWN'>>IWSUB
    302 MD1%,<<JUX1X^^5Q?+`;ND-KN,N'&4VIMYB*M"`X%Z]I2D*5JT>J14Y</7/.8
    303 MCW,]IO/L\8I2UM=8FT3.GXL=8-W]ML#C7]+GSV8S:RXJ$7PIA9(P.TA23_DD
    304 M52FUBLZQ-G5O/6<FXB?N4QS:8TZNGZH^.JYS5E1F]M,2&'3"O,!72VVXH'K-
    305 MK'U5?:;5J4FK9\'7&L<+0R]/]1G;S-9CJQ7X6KW_`,>YBKADF=F>(TK,5PF0
    306 MUG96[;(;K7NR'6QLA:%%LJ4%$;8VCHQK'_CVR1K>9CW.S#ZK3:6F,%*6_P#J
    307 MT3U:3V3Q^'!(K1:I4"*ZP_<Y-P4LXH?D]'TB!LX8`H0@>?2*Z,>*:Q,3:9>9
    308 MN=S7):)BE::=D:Z3^V4:G[K8=QGQKC<+W<WY\/#W61TC"%-E)V@4[+('M::P
    309 M_P"'K.LVG5ZF+]06Q4FE,6.*6YQI;C_J9:XY2<N$%F'(O=R#2&UM2"TXTVI\
    310 M.'_2D-\`T>KAHJ\[;6-)M9QX?4HQWF]<6/76)C6)GIT[N/SU8RT[J[):`H6N
    311 MXW.$E9Q6EF5LI4?*4[.R3\E5C9Q'*UH]O!U;C]09<WYE,=O&O\5Y&R%#:O<6
    312 M[R;G<+B_"VC':F/)<:2I22G:"0A.!&-6KM8BT6F9G3O89/5[SBMBK3'2+<^F
    313 M-)^:3UTO)*!0>7/9'I3](J18Y?\`R&V_A6?NTT&0J`H%`H%`H%`H%`H%`H%`
    314 MH%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`H%`
    315 MH%`H%`H%`H%`H%`H%`H%`H%`H%`H%!Y<]D>E/TBI&.L'3_T*W8;&'NK.&../
    316 M^;307W:>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=
    317 M`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1
    318 MQT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R..@=I
    319 MY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!
    320 MVGD<=`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CC
    321 MH':>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R
    322 M..@=IY''0.T\CCH':>1QT#M/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT#M
    323 H/(XZ!VGD<=`[3R..@=IY''0.T\CCH':>1QT'ESWG9'L:T^7RB@__V0``
     2M_]C_X``02D9)1@`!`0$`D`"0``#_X0`B17AI9@``34T`*@````@``0$2``,`
     3M```!``$```````#_[``11'5C:WD``0`$````9```_]L`0P`"`0$"`0$"`@("
     4M`@("`@,%`P,#`P,&!`0#!0<&!P<'!@<'"`D+"0@("@@'!PH-"@H+#`P,#`<)
     5M#@\-#`X+#`P,_]L`0P$"`@(#`P,&`P,&#`@'"`P,#`P,#`P,#`P,#`P,#`P,
     6M#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,_\``$0@`C`)7`P$B
     7M``(1`0,1`?_$`!\```$%`0$!`0$!```````````!`@,$!08'"`D*"__$`+40
     8M``(!`P,"!`,%!00$```!?0$"`P`$$042(3%!!A-180<B<10R@9&A""-"L<$5
     9M4M'P)#-B<H()"A87&!D:)28G*"DJ-#4V-S@Y.D-$149'2$E*4U155E=865IC
     10M9&5F9VAI:G-T=79W>'EZ@X2%AH>(B8J2DY25EI>8F9JBHZ2EIJ>HJ:JRL[2U
     11MMK>XN;K"P\3%QL?(R<K2T]35UM?8V=KAXN/DY>;GZ.GJ\?+S]/7V]_CY^O_$
     12M`!\!``,!`0$!`0$!`0$````````!`@,$!08'"`D*"__$`+41``(!`@0$`P0'
     13M!00$``$"=P`!`@,1!`4A,08205$'87$3(C*!"!1"D:&QP0DC,U+P%6)RT0H6
     14M)#3A)?$7&!D:)B<H*2HU-C<X.3I#1$5&1TA)2E-455976%E:8V1E9F=H:6IS
     15M='5V=WAY>H*#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#
     16MQ,7&Q\C)RM+3U-76U]C9VN+CY.7FY^CIZO+S]/7V]_CY^O_:``P#`0`"$0,1
     17M`#\`_?RBBB@`HHHH`***P_'_`,3O#?PGT-=3\5>(-#\-:;),ELMWJM]%9P-*
     18MV=L8>1E7<<'`SDX-`&Y138I5GB62-E='`964Y#`]"#3J`"BBB@`HHJO?:I:Z
     19M8%-S<6]N'X7S9`F[Z9H`L45#9:C;ZG$TEO/#<(IVEHW#@'KC(^H_.IJ`"BH[
     20MBZCLX]\TD<29"[G8*,DX`R?4\5)0`4444`%%%%`!1110`4444`%%%%`!1110
     21M`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!
     22M1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%
     23M%%`!1110`4444`%%%%`!7Y\_\%%A+^VS_P`%!OA/^SS9A;CPYX;=?%WB_P"8
     24ME!$`?W3@9P?(R@R.M_'R!FON?XJ?$S2?@U\-M=\5Z]<?9='\.V,NH7;Y&[RX
     25MU+$*"0"QQA1GEB!WKXZ_X(S?#/5O'FG>//VA?&$(_P"$J^+FJ2_9"3N6VT^*
     26M3&V/G(4RJ4`/_+.UA-`'W%%$L$2QHJHB`*JJ,!0.P%.KY1_:9^/7BOQ?_P`%
     27M!?A#\'/`.M7FC_V>7\7>-+JV6.1?[.172.TD#!N)3E6!7*F>!U((!'U=0`5R
     28M?QN^-WAC]G7X8ZIXP\8:I!H^@Z/'YD\\G+.3PL<:CYGD=L*J*"S$@`5UE?C#
     29M_P`%YOVM+[XL?M,K\,["ZN(_#/PZ1#=0I(1%?:G-$LC2,H.UO)B=(T)&59[C
     30MG#4`5?VE?^"P_P`:/VR_B'#X/^$\.L>#-)UJZ6STK3M'Q_PD&IL<8\VY4GRC
     31MD%B("@1=VZ1U!:O8?A5_P;P:AX^L8M6^,7Q.U*ZUBZ!DGL])3[7)`Y&!NO+K
     32M>9&P%SB$=,!F&&K@O^#=;P7HNM?M*>.M:O!#)K6@Z!#'ID;LNY$N)R)Y44_-
     33MN41Q)O7[HF8'[XK]A*`/S9U[_@WBM?`[KJ'PO^,7BWPOK%JI>&2[@7<TI!4X
     34MFM6@:,%2%R%8CGJ#@>;WW[=O[5G_``2Q\5V7ASXOZ;:_$3PO-(L5EJ-],\BW
     35MRJIREMJ:H&:0X+%;N)YL+G"J<G];JYWXK?";PW\<?`.I>%_%NCV.O:#JT1AN
     36M;2Z3<K`CAE(PR.O570AD8!E((!H`_)']L#_@KC'^W=KGPN\%Z'X3OO#.BV_C
     37M'2=4U.2]NTFEO)8[E5CA54&WRE9Q)N)W,RI\JA3N_9"OYZ?VP?V8-6_X)V?M
     38M?6^BW#_VQI^F7EKX@T&[E'E_VE9B??&'QG:ZO&T3XZE-P`#**_H6H`****`"
     39MBBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`**
     40M**`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHH
     41MH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BO,M,_;1^$>L_$3_`(1*
     42MT^)7@BY\2&?[,-.CUB!IFF_YY@!N7SQM'.>,9XK;_:#^.>A_LU_!CQ#XX\23
     43M>3I/AVT:YD52/,N7^['#'GK))(511W9Q0!\C?\%:O'>I?M!?$'P!^S+X/N67
     44M5O'=_%J'B.>)L_V=I\3%UWCI_P`LY)R"0<6J#!\T5]?V]OX7_9G^":QKY.A^
     45M#_`NCYR22EG9VT622>2V$3)/))]2:^2_^"2?P8\0?$C5_%7[2GQ$A5O%WQ2<
     46MG1HLDKIVE_+M,>3PKA(D3(R(;>,Y_>OFU_P4F\<ZA^TY\9?"'[+OA":X6X\4
     47M/%K7CB^MB#_8^C12!]I/.V1V4,`<<B!3E9J`+W_!*+P3J7Q1NOB#^T/XJL[B
     48MW\0?%S5'728IS_QYZ+`0ENBCJ-Q7!.2&2"%AP<GZ2^"GQ^T'X^Q>*)/#_P!N
     49M>'PGK]WX;NY9[<QQRW5L5$IB8\21@MMW#NK#M7+_`+3GQ/T?]B3]C/Q-KVEP
     50M6NDV'@O0OLVB6J1%HDGVB"R@"=PTS0ICWY[FH_V!/@)<?LU_LC^"_"^H*_\`
     51M;L=G]OUII`OF-?W+-<7`=AG<5DD9`V3E46@#V*OYP?VVK^?4_P!M+XPRW$C2
     52M2CQQK<6Y@`=B7\Z(/P15'X5_1]UK\-?^"WG[,]U\"OVU-1\1Q0R#P]\2T.L6
     53M4I;<JW2*B7D.22<ARDO.`!<A5X7``/"_V0?VK_$G[%_QTTWQSX96&ZFMT:TO
     54M]/G<I#JMFY4R0.R\KDJK*X!V.B,58`HW[Q?LE?MN_#S]M'P4FJ^"]<@FOH8D
     55M?4-&N&$>I:4Q`RLT.<[0QVB1=T;$':S8K^<^M+P;XSUCX=>)[76_#VK:GH.L
     56MV)+6]]I]T]M<P9X.V1"&`(X(S@C@Y%`']/5%?D/^R/\`\'`WBSP+]GTGXO:/
     57M_P`)EIJ_)_;FE11VVJ1#UD@^6";L,IY)`&<.:_3K]GG]J'P'^U7X*_M_P%XD
     58ML?$%@I"3K'NCN+-SGY)H7"R1-P<!U&1R,CF@#Y/_`."_W[/\/Q'_`&2--\:V
     59M]HLFL?#[5H7\U03(;*[=+>:,`=093;.?00G'4@_<FN65QJ>B7EO:7DFG75Q`
     60M\<-W'&LCVKE2%D"N"K%3@@,"#CD$5:HH`_//_@I5XF_:4_8<^$MAXX\/_':Z
     61M\3:*U_#INH6VH>$]'AN+5I0^R=72$*Z%E5"@3<"X;)7.WX@N?^"UG[2UK;R2
     62M-\2(]L:EC_Q3NF=!S_S[U^C7_!>[_E'QJ'_8?TW_`-&FOPZUS_D"WG_7!_\`
     63MT$T`?T!_!O\`9X^/\O@C3;OQQ^T%JR>(;JR9KRQTWPIHJVMA-)"0$5S`S2&&
     64M1L[\A7*#Y`I(/R7_`,%&OC+^UY^P/JECJ4?Q87Q3X%UB7[/:ZN/"VEP2VEP=
     65MS"VN(Q"0&**2LB_*^UN$(`/ZCU\+?\'!RK)^Q'H2MG:WC.P5L'!P8+N@#X/\
     66M*_\`!;S]HS0/$VGWU]XRL==L;6X26XTZYT.QABO8P?FC9XH5D7<,C<K`@X//
     67M0_LW^S-^TEX7_:R^#>D^-O"5T;C3-43$D$A7[1I\XQYEO.JDA)4)P1D@@A@2
     68MK*3^#?[>?[%GB#]ASX\WWAG4H[BZT&^:2Z\/:J5/EZE9[OE!;:%\^,%5E4=&
     69M(8#:Z$]3_P`$S/\`@H+J?[!_QG$MY)=7WP]\1.L/B'35R_D<J%OX5`)\Z)1@
     70MJ/\`6QY4@L(V0`_<7XZ>`O%7Q$\'1V/@_P`>7WP\U:.X\[^TK;2K34O-41R*
     71M(GBN49=A=D<E=KGRP`RAC7YK^/\`X\?ME^#?V\]/^`MO\5M+U+5M:>.>PU<>
     72M&]-BMY+%HWE:Z>/R"8_+2*;=&226CVJ3N4G]3O#/B2P\9>'-/UC2KN#4-+U:
     73MVCO+.ZA;='<PR*'213W5E((/H:^)?C&?^-_WPG_[)Q<?^AZI0!]/_LY?"[X@
     74M?#/2]27X@?%*X^)UY>/&;:5O#UGHT5@J[MP1+<$L6W+DNS8V#`7)SU7Q1^*/
     75MA_X*?#[5O%7BK5K30_#^B0&XO;VY8A(ER```,EF9B%5%!9V954%B`=^OPN_X
     76M+`_MX:C^UA^T/J7A?2=4D;X<>![QK/3K:%QY&I7D>Y)[Y\??.XO'$22!&NY=
     77MIE?(![?^T#_P7A\?_&7XAV_@_P"`GA>/3_[7NDT[3;_4K5;K5M1F=BJ&&!F\
     78MF$$D$>;YF!RP3D+[E\*O^"?/[2GQ,TVUUWXJ?M->-?#NK7D&Z71?#'EQ+9$G
     79M<JM+&4A9E!PP2$C/`D95#'Q+_@W:_9LL]>\4^,OBQJ%OYTVA,OAW1BP4I#+)
     80M&LMU(.=P<1M`@8`86649;<0OZNT`?%_B3]C[]IWX%V/]I?"_]H2\\=-9DSMX
     81M>\=Z;#<+J&!N:,7B_O%WE54+F,#<?WB\FOF;]H?_`(+I_%'PU\*O%GP[\0?#
     82M)OA_\68[=M.N=3AU%XETMI$R;B*W9&97V,#$1,Z'<L@=AA6_6FOAO_@NA^Q=
     83M9_'7]F+4/B)I=G"OC#X:V<E[).B*LE]I2Y>YA=N"PB7?.@)."L@49E-`'U!\
     84M*AK'C_\`92\,^3KU]IFO:SX5M"NLB..ZN+:YDM$/VC;,K)(X<[L."">H(KX<
     85M_P""FWQ-_::_8$\,:%XHTOXY/XF\-Z]J7]D[+SPEI-O=6-P8'F0%EA*RJZPS
     86M'(1-NT`YSFONW]E]@_[-'P[92&5O#&FD$=_]%BKX[_X.,O\`DS7P3_V/MK_Z
     87M;-3H`^'=)_X+'_M0Z_JUII]C\0H[B^U">.UMHO[`TI/-ED8(BY:``98@9)`&
     88M>37Z]?`/X'_%?P-JNGZAX\^-NI>.O+A=;S3(_#.FZ;8S2,#M*M%%YXV<?\M/
     89MF(R0`=H_G]^#/_)9O!O_`&']/_\`2J*OZ:*`.)^.?P]\6?$7PY;VOA#X@:A\
     90M/-0@E:1KVUTJSU'[0-C!8WCN4<;0Q5CLVL=N-P!-?G3XA^+O[9&D?\%!+?X!
     91MV_Q:L[JXO$34(-?D\(V$5NVF&,R/=F(0,1M*21;=^UIE";QNW#]3*^(?$_\`
     92MRL`^'?\`LD[?^EEU0![=8?LZ_%A/!\-E=?M"^)IM6$Z33:E#X4T6+>HCVM$L
     93M1MV54+_."=SC@;B,Y_-_]MG]O3]JG]BG]H;5/`.I?%JUUL6D$%[9ZC'X7TNW
     94M%[;RKE7,7E.8V#*Z%2QY3(X(-?LA7XB?\%\?^4@LW_8L:=_Z'<4`=I^PK^W)
     95M^U5^W'^T-9^!=/\`BU;:)!]CGU/4M1?PQI<QLK6+8I98O)7S&:26%`H88\PL
     96M<A2#^IOP4^&WBSX=0ZDOBGXC:Q\06NWC:V>_TJPL38A0VX+]EBC#;L@DOG&T
     97M8QDU^27_``;V?\GZ:Q_V(^H?^ENG5^T]`!1110`445C_`!!\>:5\+?`FL^)=
     98M=NTL-%T"RFU"^N7^[!#$A=VP.3A5/`Y-`'PW_P`%1?\`@I]<_LH?M9_"?PSH
     99MM\O]FZ'>+KGC>&$-(TME,&MTMR%/+"%[BX$9YWI:MTQG[UTS4[;6M-M[RSN(
     100M+RSNXEF@GAD$D<T;`%75AD,I!!!'!!K^:K]H'XU:M^T?\;_%7CS7-RZGXJOV
     101MO7C(_P"/>+`2"$>JQ0+%&"<DK&"23R?V$_X(5_M3?\+R_9$C\'ZA=I-X@^%[
     102MQZ08R,.VFLI-B_'&U422`=_]&R>3D@'VQ7&_&KP!XG^(>@6EKX5\>:I\/[R"
     103MX\V6\LM-L[]KF/8P\IDNHY%"[BK94!OE`S@FNRHH`_'G]NS]N#]JS]A?]H.X
     104M\"ZE\7+77(7L(-5T[4H_"^EV_P!MMI2Z;FB\I_+998IDVECD1AN`P`W/^"??
     105M[5_[4W[?WCSQ%H.G_&[3_"\GA_3X[]IKCP?IUXLX>3R]H"QIMQUSD_3O7#_\
     106M'#7_`"??H/\`V(=A_P"G#4ZZC_@W'_Y.'^(__8NV_P#Z4T`?17Q=^"W[=O@#
     107M1Y-2\*_&GPAX\-I'YSZ<WANQTNZN2"28XPT#1MD!?O2QYW'D8!/S'\,O^#@G
     108MXP?#[QA+:?$#PCX9\06=K</#>V<5I/HVJ6;J0CQY9G160JV8WB#;L@NO;]C*
     109M_"G_`(+@>!+#P/\`\%$/$DFGQK"OB#3+#5[A%0*HG>-H7(`'\7D!R3R6=CWH
     110M`_9;]F3]IWPC^UU\);/QGX*OI;S2;J1X)(YXC#<64Z8WP3(?NNN0>"5(964L
     111MK*Q]`K\?/^#=7XG:AI7[3?C7P:LTS:3K?AMM8>$R'RTN+6Y@B5PO3<R71!(P
     112M2$4'.!C]@Z`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"
     113MBBB@`HHHH`*^>/\`@K!X]UKX;?\`!/'XH:IX?FN+?5/[.BLDE@)66*.YN8;>
     114M9E8<JPBED(8<J>001FOH>LKQUX)TOXE>"M6\.ZY9QZAHVNV<MA?6TA(6X@E0
     115MHZ$CD95B,CD=J`/C+X:?\$COV??%_P"PAX7L=4T73HY+KP_#J\_C*&1+>_62
     116M6!9GN//^[Y*Y)6*3=$J`<=2?B?X.^/-8_;1^/_P]^`?Q*^+'_"3?"?P[X@N5
     117MT[5)()H'\7^5A;:W:5OG+2+\L9D;<HF<;W=H<_;=A_P1?"Z2O@^^^-7Q&O/A
     118M'#<--%X/601(4,GFB)Y@Q5E\S+'$2\G<-K98^B_M??\`!.+PE\7?V2[?P1X+
     119MT73_``SJO@P-?^$);0>2UE=CYBOFYW8G8`.[,27V2'<R`T`=?^W!\<_$'[)/
     120M[+FJ^(O`G@>X\47FCP""WM+.-1:Z-"L;8N98E*NUO%M7*1`D#&=B!G7S#_@D
     121M)\(M!M_@A>?%:3Q1:_$#XA?%.=K_`,2^(@I61)`?^/!58*8UA.05")DX(`01
     122M*O:?\$V/VM[C]JOX`I_;V;?QYX1E&D>);61!%*)U!"SF/JOF!3D$`"1)5`PE
     123M>3W^FI_P3&_;9L[RS=K'X)?&V\,%Y;8V6?AC6S]V1`,)'%*-H/3"ASD+`HH`
     124M[C_@IE9_\);KW[/OA:YDACT?7_BIIC:BLT>Z*YCMHKBY6!NW[R2-%`/4D=@:
     125M^IJ^=_\`@IYX!OO$/[,3^*M%MH[KQ%\*=7LO'.F(XX9K"423+GKS;^=P.I`%
     126M>W?#?Q]I_P`5/A]H?B;29#-I?B"P@U&T8XW&*5`ZYP3@X8`CL<T`;5>8_M=?
     127MLE^$_P!M#X,7G@SQ;!)]GD<75C>P8%SI5VJLJ7$1/&Y0[`@Y#*S*00Q%>G44
     128M`?SG_MA_L2^//V(/'_\`8OC+3V;3[R1AI6N6R$Z?JZ`M@H_(27:I9H&.]!SR
     129MI5V\CK^G7QYX!T3XH^$+_P`/^(])T_7-$U2(PW=C>P+-!<(>S*P(/.".X(!'
     130M(K\W/VP_^#?&TU2YO-<^"NM1Z6S_`+S_`(1C6I7DMLXY%M=_-(F<#"3!P68_
     131MO$4!0`?E;6Y\-?B=XD^#/C2U\2>$=<U/PWKUE_J;ZPG,4H'=&[.AP,HX*L."
     132M".*T/C-\"?&?[.WC*3P_XZ\,ZOX7U9<[(;V';'<J."\,JYCG3/&^)F7((SD&
     133MN3H`_97_`()E?\%F;']IK5]/\`_$J.QT'QY<`0Z=J,/[K3_$#C`"!2?W-RW]
     134MS)1R#L*DB,?>]?RYDD8*LRLI#*RL592.001R"#R".E?O?_P25_;"OOVQ?V2-
     135M/U+7IH[CQ9X8N6T+6I@"INY(T1H[@C^]+"\;,1\OF>9@`#:`#B_^"]W_`"CX
     136MU#_L/Z;_`.C37X=:Y_R!;S_K@_\`Z":_<7_@O=_RCXU#_L/Z;_Z--?AUKG_(
     137M%O/^N#_^@F@#^I:OA?\`X.#?^3)=!_['33__`$1=5]T5\+_\'!O_`"9+H/\`
     138MV.FG_P#HBZH`^A?VXOV+_#7[<7P/O/">N8LM0A_TG1M7CA62XTBZ'W77/6-L
     139M;)$R-Z$@%6VNO\_7Q@^$7B+X!_%#6O!OBRP.F^(/#]Q]GNX-VY"<!ED1L#=&
     140MZ,KJV!E6!P.@_IHKX_\`^"MO_!.&/]M7X7Q^(/#,$$?Q,\)V['3V8[?[9M0'
     141M=M/9BP52SMNC=N%?()59'8`'QQ_P13_X*5+\#?$UK\(?'-\8_!NN7.WP]?3.
     142M%CT*\D=F:!SC/D3R/PQ.(Y3R"LC-']/_`!C_`.4_WPG_`.R<7'_H>J5^+M_I
     143M\EK/<6=Y;RP3PN]O<6]Q$4DB=25>-T895@05*D9!!!%?=7_!+3]HCQ-^T9_P
     144M4F^$=QXLO/[2U+PGX1O?#D-](S/<7MO#%=RQO.S$EY0)RA?JP12V6+,0#]8?
     145MVKO']]\)_P!EOXE>*M+;9J7AGPKJFJVC<?+-!:2RH>01]Y1U!^AK^;")/+C5
     146M=S-M'+,<EO<FOZ2OVOO!5]\2OV3?BAX<TN,2:EX@\(ZMIMHISAIIK.6-`<<\
     147MLPZ5_-K!.MS`DB\K(H8?0T`?N!_P05TBUT[_`()Y:5<6\82;4M<U.XNFW$^;
     148M(LYB!()P/W<4:X&!\N<9))^SJ^.?^"$7B%=:_P""=GA^U%U]H?1]7U.T>/.3
     149M:DW3S"/V^657QZ.*^QJ`"BOB']M']HG]K#]C3X0W'CF;_A0WBSP[I9@34GM=
     150M&U2SNK5I91$K")[UE>/>\8)$FX%_NX4M7Q^W_!Q%\<$4L?#7PIP.3_Q*]0_^
     151M3:`/V>`P*^`?^#C+_DS7P3_V/MK_`.FS4Z]T_8B\=?M"?%WPYH?B[XG1_"G1
     152MO#>OZ:E_;:7HEA?_`-JJLR!XC+)+<-%&0I!*!7/S8W*00?"_^#C+_DS7P3_V
     153M/MK_`.FS4Z`/R5^#/_)9O!O_`&']/_\`2J*OZ:*_F7^#/_)9O!O_`&']/_\`
     154M2J*OZ:*`"OB'Q/\`\K`/AW_LD[?^EEU7V]7Q!XH./^#@'PY[_"=L>_\`IEU0
     155M!]OU^(G_``7Q_P"4@LW_`&+&G?\`H=Q7[=U^(G_!?'_E(+-_V+&G?^AW%`&I
     156M_P`&]G_)^FL?]B/J'_I;IU?M/7XL?\&]G_)^FL?]B/J'_I;IU?M/0`445RC_
     157M`!J\.I\<(_AU]N9O%LFA-XC^QB%RJV*W"V_F%\;1F5L!<Y.UCC`-`'5U\2?\
     158M%AOB#J/Q-C^'?[.'A.^EM_$WQFUF%-2:W&^2RT>!_,FE89!`S&7(Z/':W"GC
     159M(/VO=74=C;23321PPPJ7DD=@JHH&223P`!SFOS%_8^_;0^%OQ,_;R^*GQX^(
     160MWQ`T#0TB`\*>!+'4+ORGBTM#N:X$1RRB3Y'!R!ON+D8YP`#S7_@NO^Q'I/[/
     161MVI?#WQKX3TU-/\.WFG6WA"\17SMGLK8)9$Y^9F:SA:,G^[9IG!//B/\`P26_
     162M:D_X9:_;4\.75Y=2P^&_%Q'AW6%!R@6=E$$S#I^[N!$2W58VEQU(/Z4_MJ_M
     163M7?LX_M=?LQ>+O`4WQ>\`QWFL69.F7%Q?82TOHR)+:4D#(5957=CJA8<@D'\/
     164M&B6[M6CE4%9%*NIY!!'(H`_J0HKYW_X):?M2O^UK^QEX9UZ^N9+KQ%HJG0==
     165MDDDWR27MNJ`RN?[TT;13$=O._$_1%`'XN_\`!PU_R??H/_8AV'_IPU.MK_@W
     166MD\3Z;X7^/WQ$FU/4+'3HI/#UNJ/=7"0JY^T]`6(S6+_P<-?\GWZ#_P!B'8?^
     167MG#4ZQ?\`@BC^RG\/OVL_C'XXTGXA^&K7Q-I^EZ)#=6D4T\T/D2-.49@8W4Y*
     168M\<F@#]8?C+^W?\'_`(!Z+=7GB;XB>%;62VB\[[#!J$=S?S@@[?+MXRTKYVD#
     169M"XXZU^#?[:W[3\O[6O[2GBKXB7=LVDVNL3(EE:32`M9VD,:Q0HQR5WE4W/M)
     170M7>[X)&#71_\`!0+]AS5OV#_C[=>&YH[BZ\,:IOO?#FJM%M6_M<C,;$?+YT)8
     171M)(.I^23:JRJ*]&_X([_M2>"_V=_VF[6Q\=:!X;GTSQ/)':V?B.]L4DO/#=YG
     172M$3+,062"1L(YX",4?*JLA(!]E?\`!"?]@WQ!\!/#NO?$SQIIM]H>O>*K==,T
     173MK2[R`PW%I8*ZR/+*C?,C32*F(V5658`3_K,+^AE%%`!1110`4444`%%0ZE>_
     174MV=I]Q<>7--]GC:3RX4WR/@9PJ]V/0#N:^(?$_P#P5IU+Q7\5-$\->$?"+:1'
     175M>:S;:?=7&O*6NU5YTC=/LT9`C<9(^9V(Z;0:^<X@XLRS)5#^T)\KJ.T4DVY/
     176M3:RMUZM(^IX9X-S;/Y5/[-I\RIJ\VVDHK7>[N]GHDWY'W)10.E%?1GRP4444
     177M`%%%%`!1110`4444`%%>'_MB_ML67[(UIIZW/AC7-=N=61FMI(@(+$,IYCDN
     178M#NVN>H548XYJK^P'^T]KW[5?@'Q'KVNV>F6'V/66LK2WLHW"Q1"")P&9F)=L
     179MN><+]!P*^;_ULRQYLLDC4OB+-N*3T25]7:VJVLVSZG_4W-EDSS^=.V&NDI-J
     180M\FW;17OH]VTD>]4445](?+!1110`4444`%%%%`'PO^T58G]@3_@H)H'Q:M-]
     181MI\/_`(I,=)\5JF!#:W6,^<PQQG"SY&6/E77/S@'ZA_:R_9XT[]J?]G_Q'X+U
     182M!85DU2V+6%Q(N?L5VGS03#OA7`W8Y9"R]&-0?MA_L^6_[3W[/'B+PBZP_;KJ
     183M#S],EE^[!>1_/"Q.#A2PVL1SL=AWK@?^"87QXNOC%^S5:Z5K'VB/Q-X$F_L'
     184M4HKG(N,1C]R[@C(8QX1L\EXI,\T`3?\`!/;XP3?M$?LM_P!A^,(/M'B;PF\W
     185MA/Q-:7A$CSR1+LW2`_>\R,C<2,%Q(.<&M;]@'X:>)/@A\$[_`,#>(+"YMK/P
     186MAK^H:?X?NIYDD?4M*\\RVTQVDXXD9,$*0$'%><ZO9C]E#_@IG8ZA"JVGA/X[
     187M61L[H+A8TUB`Y5B!T+[E`./F>[<]B1];4`%?%?\`P1?_`&E+WXN^"OBAX3U[
     188M6]0UC7O!?C.^>%KZZ>XF73KF5FA&]V+%5FCN5`Z*H0#C`'VI7X&_L:?MDM^Q
     189M%^WYK'BB\,TGA;5-8O\`2?$4,8+-]CDNV/GJH!+/"ZK(``695=!@OF@#]\J*
     190MJZ+K5GXDT>TU'3KNUU#3[^%+FUNK:598;F)U#)(CJ2&5E((8$@@@BK5`'+_&
     191M#X+>$_C_`.!;KPSXTT'3?$>AWF&DM;R+>JL/NNA^\CKGAT(93R"*_'/_`(*E
     192M?\$E+O\`8U6?QUX)FNM6^&=Q<I%-;SL\U]X=DE+;5D?;A[7=M197;>&=$?>3
     193MYC?MI6!\5/AQH_Q@^&NO>%?$%NMUHGB*PFT^^C)VYBD0HV#_``L`<ANH(!'(
     194MH`_F2K]-O^#;76[A?$_Q@TW<OV5K;2+K;W$FZ\3(^HQ^0K\PM,G:XTVWD?[T
     195MD2LWU(%?L+_P0%^!>K?#?]E+QE\0_L'GZEXZO"-'M9I1`EW;62R)&3)M)C$E
     196MQ)<+DJ0%1&`(/(!WO_!>[_E'QJ'_`&']-_\`1IK\.M<_Y`MY_P!<'_\`037[
     197M+_\`!0SX'_M0_MW_``UT[P?;^`_`/@S0(+R/4;U?^$P:_N+Z6,.$0M]FC58P
     198M7#8VDEE4Y`&#\>3_`/!!']H.Y@>-K'P45D4JP_MT\@_]LJ`/W"KX7_X.#!G]
     199MB70?^QTT_P#]$75>N?`OQ_\`M*:-X0TW2_'?PS\#ZMJECI\ZW&M6/C(P#49X
     200M[=V@W6YM&\LS2K'&[!RJ>8T@7`$=?,__``43_94_:J_X*#6FCZ/=^$_AWX4\
     201M*Z'<O>P:?!XG>[FN)V0QB2:4P(#M1G"JJ+CS'R6^7:`?I)17S;^R?XC_`&DO
     202M#.E>&_#7Q-\">!KZULHX[.[\2:;XI=;@Q)&5$SVK6Y$DI*KNVR(I+,0%'RU]
     203M)4`?F'_P6]_X)H?VI!??&[P!IK?;($,OC'3;9"QN4&T#4(HU7[Z#/G\X**).
     204M"DA?YA_X(@'/_!2#P;_UX:G_`.D<E?NQ+$L\31R*KHX*LK#(8'J"*^!/A5_P
     205M2WOOV5O^"JWAWQYX'TV-OA7JEGJ4TT43QQ_\(S<R6\B_9A'D$V[LRF(H#L^9
     206M&"A$9P#[]K\(_P#@K)_P3^U3]CGXZW^NZ5ITC?#3QA>O<Z1=0I^YTR>0M))I
     207M[X^X5.\Q9P&BP`6:.3;^[E8?Q)^&GA_XQ>!M2\,^*-(L=>T'6(O)O+&\B$D,
     208MRY##(/1E8*RL,%656!!`(`/S'_X-V/VE+'2-3\:?"?4[U+>ZU25?$>A12-@7
     209M3K&(KR-<\;PB6\@0<LHF;&$8U^JE?EO\??\`@@EXJ^&_Q#L_%W[/OC9=.N+&
     210M\^UVEAJ]Y);7>DL,X-O>1JYD`SMV2JIV9W22$D'V#X7?M7?ME?#;1(-+\>?L
     211MXP>.M0ABR-4TCQ+8:>TXX`\U%>6/?PQ.S8.5PBCJ`>B_\%HO^4:'Q,_W=-_]
     212M.EI7X)77_'M)_NG^5?KY^UOKW[67[=?P>U7X>VO[/>E^!?#GB":VAOKS5?%5
     213MK=740CN()U==KQ[5#1_,1'(2I(4;ASY+\#/^#<[Q9K[+<?$KQYH^@6K%2;'P
     214M[$]_<R(0"RF>98XXI!R.(YER,Y(XH`_37]F'_DVKX>?]BSIO_I+'7S9_P7@^
     215M$US\2_V!+_4;6-II/`^LVGB!D5L'R@)+65L="$CNG<Y[(3U`!^M_`OA"U^'W
     216M@C1]`L6FDL]#L8-/MVF8-(T<4:QJ6(`!;"C)``SV%7=7TBU\0:3=6%_:V]]8
     217MWT3V]S;7$8DAN(W!5T=6!#*RD@@C!!Q0!_,9X.\2KX+\8Z-K3PM<)H^H6]^T
     218M0;891%*LA7=@XSMQG!QFOZ=[*]AU*SAN+>:.XM[A!)%+&P9)%(R&4C@@@Y!'
     219M6OR=_;'_`.#?O7M)\2W.K?!*\L=0T&8-(/#NK7S17=D0N1'!</E9E)&!YS(R
     220MY&7<98=)^R+XX_;>_8^\%V_@N\^#+^/_``SHJ_9M-AO-5LX;C3XE&$ABN8YF
     221M#PK_``AT<J/E5E0*J@'ZA5\-?LC7DG[0/_!8/XZ?$G2Y)I_"O@K0H?`-O<L_
     222MF0W-UYEO+,L9SA1');395<@B57)!?!T];T7]KK]LG09M`UK3_!W[//A#4L0:
     223ME<V>IG6/$LL#)\ZVSQGR(]V2I9BDB9RN<<_3/[.7[.7A']E/X2:7X*\%:7'I
     224M>BZ8N?[TUW*<;YYGP"\KX&6/H``%"J`#N:_$3_@OC_RD%F_[%C3O_0[BOV%^
     225M-?B_QUX1TZPD\"^"])\:74TK+=PWWB'^QUM4`R&5O(FWDGC&%QUR>E?F#^U[
     226M_P`$N_VHOVR?CUJWCWQ!I/P_T^ZU".*VM[&UU]GAL+>)=J1*S19;G<S,<99V
     227M("C"@`XS_@WL_P"3\]8_[$?4/_2[3J_:>OQV_9W_`."3_P"UC^RO\5]/\:>"
     228MY/`^GZWIZO%^]UCSH+J%\!X94,7SQM@9&0055E*LH(^K#XG_`."@'_0N_L\_
     229M]]WO_P`?H`^SO%/BK3?`_AN^UC6;^STO2=+@>ZO+RZE6*"VB0%F=W8@*H`))
     230M-?!W_!*+]H.3]LO]N;]HSXFJUY#I!MM%TK1;6X3#1V(:]$6?[C'R3*R<X:Y<
     231M9X&?-?VJ_P!CO]N/]LG2?[)\8ZIX#A\.^<L_]B:3J?V.Q=U.Y3(/+:24*<$+
     232M+(Z@JK`!AFO:/^"9'[&GQ6_8&_9J^(BW6C>'=>\=:WJT5QI6CKK1@L9HDAB0
     233M/)=>4Q0Y>8E?+/$2\_/E0#I/^"S7[0]]\-/V8H_A]X8,5UX\^,UV/"FDV(<"
     234M::"<K%<LH(Q@B5(-V1M:Z1@<BNX^#_\`P2[^"/PW^%7AW0-2^&?@'Q)J6D:?
     235M#;7FK:CH-M<76I3JH\R>1W0L2[[FP3@`@#```^)_CO\`\$__`-L']H/]J'2_
     236MBQK$7P\AU[P[>VEWHEI#K#-8Z6MK.)X8E1D)8>8-SDG+EFZ#:J_H5^SQXY^+
     237MWB:XEMOB9X`\*^%5AM@Z7VC>)6U)+N;<`4\AK=&C7&6R9'Q@#GK0!0_X=X?`
     238M7_HB_P`+O_"8L_\`XW7Y-?\`!:O]CS3?V6?VG[/4O#&DV.B^#?'5B+NQLK&V
     239M$%K8W,`2*XA1%^55.8I<#`S,P`&,G]Q+V26&SF:"-9IE0F.-GV"1L<`M@XR>
     240M,X.*_/C_`(*-?LW?M(?\%`_`_ASP_P#\*T^'/A&ST'4/[4-PWB]M0O)9?)DB
     241M\M7^RQ".(K(2RX8LR1G*[<,`?+7_``0G_:OC^!/[5,W@O5KA8=!^)\<=C&\C
     242MX6#4HBYM3R<#S0\D/`RSO".U?MA7XAV?_!"3]HS3;V&ZM8O"-I=VLBS03P>(
     243M&CE@D4AE=&$6596`((Y!`-?I7\+OB3^T[H'PVM;7Q9\*_`/B#Q+9^3!)>6?C
     244M8V,6HKL??.T9LY/+?<J9525/F$C:%VD`_.[_`(.&O^3[]!_[$.P_].&IUU'_
     245M``;C_P#)P_Q'_P"Q=M__`$IJ]^V9_P`$S?VIOVVOCM>>.O$6D_#_`$^9[6+3
     246M[&PM=>9HM/M(B[)$':+<YWR2.S$#+2-@*N%&Q^P=_P`$]OVHOV#/C'<^*M'\
     247M/_#_`%ZUU2P;3M1TRY\1O`ES$72166186*2(R\$JPP[C'.0`?>'[=/[&^@_M
     248MO?`+4O".K>7:ZD@-WH>J;`TFE7J@^7(."3&WW)%&"T;L`5;:R_SY_%3X6Z[\
     249M&/B'K7@_Q5ISZ7X@T&Y:SO[1SNV,`""IZ,CJ5=6'#(ZL."*_I&^#_B3Q;XI\
     250M)M<^-/"^G^$=8%PZ+8V6L_VM&T0`VR>=Y,7))8;=O&.ISQ\G_P#!6S_@EM-^
     251MVA9Z7XN\"QZ;9_$;2MME<?:I_L]OK%D3D+(P5L2PL24;C*M(K9^38`<G_P`$
     252M/O\`@HA_PNCP''\(_&6I*_C#PM;9T.YG.U]9TU``(\_Q3VXPIX!:+8WSLDKU
     253M^@V:_%/P+_P1/_:<^&7C;2?$GA]O!^EZ[H-W'?6%Y%K89K>:,Y5L-"58=BK`
     254MJP)!!!(/ZP?LP^)_BMX@\(S1_%KPKX6\.ZY9B-$GT'5WO;;4L[M[B-XU:#&%
     255M&TO)G).1C%`'IE%!.*XGXI?M%>#O@WJ^DZ;K^MV]KJFN74-I8V"`S74[RR"-
     256M6$:`L$W'ER`H]<X%<^*Q=##4_:XB:A'NVDM=M7WZ'5@\%B,755#"P<YOI%-O
     257M3?1=NIVU%8GC;XE>'?AIIZ77B+7='T&WD)"2:A>1VRN1U"ER,GV%9W@/X[>"
     258M?BE=M;^&_%OAS7;E%+-#8ZC%/*JCJ=BL6Q[XQ4RQV&C66'E4BIO[-U?[KW*C
     259MEV+E0>)C2DZ:WEROE^^UCK#TK\S_`-KRRCL_^"J.F&-%3SM>T"5\#&6S:@GZ
     260M\"OTP!S7YI_MB_\`*4_1_P#L->'_`/T*WK\K\95_PEX1_P#432_*9^P>!;?]
     261ML8S_`+!JO_I4#]+**;)(L2%F8*HZDG`%8,7Q6\+W'BR#08_$6AR:Y<AFBT]+
     262MZ)KJ0*I9B(PVXX4$GCH#7ZS4KTZ;2J22N[*[M=O9+S/QFEAZM5-TXN5DV[)N
     263MR6[?9+JSH**"<"N>\1?%OPKX0N(8=6\2:#ILUS(L,4=U?Q1/*[$!54,P)))`
     264MP**U>G2CS59**[MV_,*.'JUI<E&+D^R3;_`Z&B@G%<EXJ^.OA'P5XYTCPSJ6
     265MO6%OXAUV8066G!C)<R,02"44$HIP?G?"YXSFEB,51H1YZ\U%72NVDKO1+7JW
     266MHEU*PV%KXB3AAX.;2;M%-NR5V].B6K?1'6T5RWCGXW^#?ACJ-O9^)/%7AW0;
     267MN[`,,-_J$5O)("<`A68';D$9Z5TZ2K)&K*0RL,@@Y!%%/$TJDY4X23E'=)IM
     268M7[KI\PJ86M3A&K4@U&7PMII.V]GL[>0ZBN-\9_M$^`?AUJAL=>\:>%]'OE.&
     269MMKO4X8IE^J%LC\172>'?$NF^+]&AU'2=0LM4T^Y!,-U:3K-#*`<':ZD@\@C@
     270M]JSIX[#U*CHTZD7*.Z33:]5NBZV7XJE2C7JTY1A+9N+2?HVK/Y'BO_!3.RCO
     271M/V)O&AD16:'[%*A(!*,+V#D>G&1GT)KSW_@C2,?LY>)/^QEE_P#26UKT;_@I
     272M3_R9+XX_ZYVG_I;!7G/_``1K_P"3=/$G_8RR_P#I+:U^4YA_R<G"_P#8,_\`
     273MTJH?L.6M_P#$+<6O^HI?^DTCZZHHHK]@/Q,****`"BBB@`HHHH`*^,=40_L=
     274M?\%/;>\57@\'_&^$02D*?+CU,O@=!]XS,IY_Y_7/:OLZO'OVS?V4(OVLO`.D
     275MZ9'JO]@:IHNJPZA9ZDL'G/;@960!<C)*G(Y`WHA/`P0#J_C=^S_X>_:!T[0[
     276M;Q`EYM\/ZO!K5G):3FWF2>$G:/,7YE4Y(.TJ>F""`:[:H;""2VL88YIFN9HX
     277MU5YF4*96`P6('`R><#CFIJ`"OYE_B793ZK\:?$UI:P3W5W=:]?1PP01F269C
     278M<R?*JJ"6/L!7]-%?/G[#W_!/#PO^Q7=^*M8M[B/Q#XO\7:C<7-WK<MIY$L5K
     279M),94LXEWOLC4D%B#F1@&;A45`#\QO^"<O_!6;Q)^PE>KX`\<:7J6M>`+=R%T
     280M_P`H0:IX:=W:5GA1PIDC=G):&1EQN#(PP4D_7CX`?M:_#?\`:DTIKOP#XPT7
     281MQ'Y*"2:V@FV7EJIQ@RV[A98^H'SJ.:M?&[]F7X?_`+2.CK8^.O!^@^)X8QB)
     282M[VU5IK?K_JY1B2,\GE&!YKXU^+'_``;L_"GQ5JLE]X1\4>,/!LV6DM;=Y(]3
     283MM;*0<QLGF@7&%;D[IRQP,,IYH`_0*218HV9F5549))P`*_/C_@K#_P`%;/"?
     284M@3X6>(?AM\-];M_$'C37K=].OM3TV=9;/0('W)/^^0D-=;=R*B',;-O8@H$?
     285MF'_X-V9M?EB@\0_';Q%K.D^8'FM3HIW.0#@J9+J1%8$YR4;OZY'LW[/_`/P0
     286ML^!?P3U"WU#5;'6/B%J%LRR1_P#"17"/9Q,``0+6%(XG3()VS"7KU.!@`_.#
     287M_@G%_P`$NO%7[<?B>SU2_AO/#OPNM)L7VM%0DFH!"-UM9AOOLV=IFP8X\-RS
     288MKY9_=OPOX8T_P3X9T_1M)M(;#2])MHK*SM85VQVT,:!$C4=E55`'L*L:=I]O
     289MI&GP6EI!#:VMK&L,,,*!(X448554<!0```.`!4U`!1110`4444`%%%%`!111
     290M0`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`
     291M!1110`4444`%%%%`!1110`'I7Y(_M%?!J^^"_P"W!_PCN@Z[J5YJ;:OI]QIN
     292MJZE)]HNTGF:)XGE=L^8R2,/F8?,%&1UK];J_-/\`;3_Y2B:/_P!A70?_`$."
     293MOQGQLP=*KEN$JR^)5X)--II23O;[EKNK:'[MX!XZM2S7&48OW)4)R::33<7'
     294MEO?MS/39WU/JJ+_@FG\-=<+WGBQ/$7C;7[A?])U?5M9N3<RGV$;JJJ.<*!@#
     295M`KY%_;I_89F_9$U'3/&7@W4M4_X1^2\6..0R[;W1;G!:,K*N&*G:VU^"I4`D
     296ME@3^GE>)_P#!1>RM[_\`8O\`'2W6WRX[6&5,_P#/1+F)D_\`'PM>CQSX?Y+6
     297MR7$5J-"-.K3A*<9Q5I<T4Y>]+>5[6;DV];[ZGE>'_B1GU+/L-0Q&(E5HU9QI
     298MRA)WCRS:C[L7I&U[I126EMFT5O\`@GQ^TS=_M,_`B.\UAXW\1Z%<'3=2=5"_
     299M:6"JR3[1PN]&&<8&]7P`,`?)'[8O_*4_1_\`L->'_P#T*WKTO_@BOIMQ%X8^
     300M(-ZRO]DGO+*"-L?*9$CE9_QVR1_F*\T_;%_Y2GZ/_P!AKP__`.A6]?!9_FF)
     301MS'@?*L7BVW4E7IIM[OE=2*;\VDFWUN?HW#.4X7+/$#-\'@DE3C0J-);+F5*3
     302M2[)-M)=$K'Z$_%?X3>'_`(W>!KSPWXFT]-2T>^VF6%G:,[E8,K!E(96#`$$'
     303MM7YP_P#!.KPK#X2_X*$?V3$S/'HKZM:1N<!G$0DC!.!U(&>W-?J#7YI_L,?\
     304MI--:_P"O[7/_`$9+7UOB1A*/]O9+B5%<[K*+=M6DXM)OJD[M=KNV[/C/"W&X
     305MA\.9[A7-^S5!R4;Z*3C--I;)M))M;V5]D?HYXL\*Z?XY\,:AHNK6L=]I>J6[
     306MVMU;R9VS1.I5E..>03TYK\L?C?\``_0_@5_P4'TOPSH,,D&B+KVD3VT#R&1H
     307M5ED@9DWGYB`Q;!))QC))&3^KU?FG^VM_RE!T?_L*:#_Z'#2\:,%0E@,)B907
     308MM%7IQ4K:\KYKJ^]FTG;:Z*\!\?B8YEC,)&;]G*A4DXW?+S)Q2E;:Z3:OO9V/
     309MTAUW2AKNBW=BTUU;)>0O`TUM,89H@RE=R..589R&'((!K\EF^&6L_"C]OF/P
     310MKX;UR9M:M/$L=G8ZQ>Q+<RH9BN)Y5;B1T27<V>&*G@9Q7ZZ5^:>KJ&_X+!+G
     311M_H:83_Y+I6?C%@:57^S:KNI_6(133::4M[-/1W2:>ZMHRO`_,*U'^U:2LX?5
     312MIS<6DTW&R5TUJK-IK9WU1ZI\6_\`@CU!XSUF/4M*^(6N2:C?2;M5N=?@74)K
     313MECUE5T\LY']QLYX&Y<57^/WQ+\;W_P`5_#?[//P[7Q)8Z+X=ATS2=<UNSB;[
     314M8UN8H<OYP&(8TA969\@L^5R!P_W!6-XW^(&A_#30Y-4\0ZOINB:=&=K7-]<I
     315M!'N[*"Q&6.#@#D]J^DQOA]EE"G4GETWA?:.+JR3=Y0C=N-Y2]SF=G*2U>J=[
     316MGS&7^)F;8BM2AF<%C'24E1BTDHU)62G:,;SY4FHQ>S:::LCQKQ?_`,$TOA+X
     317M@^'EQHMCX9M])O&A86VJPR2->0RD<2,[,3)SR5?(//2OF?\`X(R>.M3M/BUX
     318MH\+^=)_9-[I/]J/!G*17,4T46]1T4LLI!(^]L3/W1CZ3U']O`^/(IHOA/X#\
     319M5?$B5=RKJ"VYTW2`PZC[1.%W,#_"%Y['O7RW_P`$:(S-^T5XAFW*RKX:D&>F
     320M=UU;GI^%?"YS4RB/%F3U,CC&-Y3C*5./+&4;1LE))1G9.5^5NR:ONC]!R6GG
     321MDN#<[I\0RE*T:<HQJ2YIQES2NW%MSA=J-N91NT[;2/K/_@I3_P`F2^./^N=I
     322M_P"EL%><_P#!&O\`Y-T\2?\`8RR_^DMK7HW_``4I_P"3)?''_7.T_P#2V"O.
     323M?^"-?_)NGB3_`+&67_TEM:^AS#_DY&%_[!G_`.E5#YG+/^378O\`["E_Z32/
     324MKJBBBOU\_$PHHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`H
     325MHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`****`"BB
     326MB@`HHHH`****`"BBB@`HHHH`****`"BBB@`HHHH`*_,'_@H-XEC\%_\`!1(:
     327MU/')-#H\^D7TB1_?=8A%(0,]R%(%?I]7YB_M^>'K?Q?_`,%'(M(N_,^R:M=:
     328M-93[&VMY<HB1L'L<,<&OQWQM]I_8E#V/Q>WIV];3M^)^X>`?L_[?Q'M?A^KU
     329M+V[<T+_@?I!\/_B-H7Q4\+VNM>'=5L]8TN\4-'/;2;EY&=K#JK#NK`,IX(!X
     330MKY0_X*1?'%OBY:6/P5\`J?$WBC7KR*34X+%A(MI%$XD6.1ONHWF*CL20$6,E
     331ML!A7;VG_``2D^#]GJ#3+I^O>7)]Z`:Q,L;#^Z2"&(^K5[%\(_@%X-^!&E26?
     332MA'P[INAQ3`"5X(]TT^,X\R5B9'QDXW,<5]%CLOX@SC`O+L=&G0C-<M2<)RG)
     333MQ^TH1<(J/,KJ\I2LGLSYG+\RX9R/,(YIE\JN(G3?-3A4A&G&,E\+G*-23ERO
     334M6T8QNTO>2T,']DG]GNW_`&7_`(&Z;X9$L-Q?*6O-3NH\[+FZ?&]AG'RJ`J*2
     335M`=L:Y&<U\%_MB^.-+_X>71:L+ZUDTW2-:T4W5Q'*'CB$/V=I<L./DPP/H5(/
     336M(-?I+\2?AKHGQ>\&7GA[Q'81ZIHVH;/M%L[LBR;'61>5(88=5/![5YHO_!._
     337MX+I&%'@'2\#C_73_`/QRO-XSX+QV89?A<IRA4Z=*A*$DY2E>\%)*-E!Z:IN7
     338M-=N^G5^IP+QYE^6YEB\YSIU:E;$1G%J$86M-QDY<SFM;II14;)6UZ+V2TO(;
     339M^W6:"6.:&0;E>-@RL/4$<&ORO\`^/X?V5?\`@I%JFI>)%FMM/L?$6HP7S^66
     340M:.WN3+LFVCDJ!+%)P"2N<`DBOTB^#G[/W@_X`6%]:^#]#M]$M]2F$]RD4LCB
     341M1P,`_.S8P.PP*Y_XZ_L9_#S]HS4([[Q-H*S:I%'Y2W]K.]M<[!T5F0C>!V#A
     342ML9.,9-=/&G"^:9QA\)BL*X4\5AZBJ)-RE!M/;FY4^B?PKJO,Y>!>+<GR3$XW
     343M!XM5*F$Q5-TVU&,:B335^7FE'JUI)])>1K:A^U%\.-,\.-JTWCSPBNGJGF"8
     344M:M`P88S\H#$L?8`DGC%?FC^T]\>;'Q]^V]'XXM;>^MM$M=0TRZM6NK9X9;FU
     345M@\EA.(V`;;(%+ID`E&7@$X'WQ\,/^"<OPC^%6LQZE:^%X]4U"$[HIM5G>]$9
     346M[$1N?+W#@AMN01D$&K'Q(_8'^'GQA^,=YXT\46>I:Q>WD,,)M)+QHK./RUVA
     347M@L>UR2`,AF*^U>-QCPUQ1G^7T:,W1ISA4C/E3DUHGJY-)Z-_"HN][\VA[G`_
     348M%?"'#>95J]+V]6$Z<H<TE"+U<?=C!2:U2^.4U:UN76YZ-X)^,7A/XDO=+X?\
     349M3>']<:QC26Y&GW\5S]G1]VPOL8[0=C8S_=/I7YNZW\0=)3_@JL-<6^M6TD>+
     350MH8C=^:/)'RI`S;^FT/GGIQGI7W_>?LB?#.[\"WGAE?!.@6NBZD\,EY;V=M]E
     351M-VT+%HC(\6UW*DG!9CU/J:YX?\$\?@N!C_A`=+QZ>=/_`/%UZ'&'#.?YU3PD
     352M8NC%T9JHWS3LY1;M%+D=E:VK=V[Z*VOF\$\5\-Y#5QDY>WDJ].5)+EIW49)7
     353MDWSJ[NG9)62MJV]/9H9EGC#1LKJW0J<@U^8/[=/BYKC_`(*(^7X\^TW7A'0]
     354M1T[;9L&>%=-*0/-L4=0_[TMCDG*Y^4`?H5\&_P!G/P7^S\FH+X/T*#0TU9D:
     355M[$4TL@E*;MGWV;&-[=,=:S?CY^R7X$_:52W?Q9HJW5[9(8[>]@F>WNH4)SMW
     356MH067))VME022!DUW<<<-9GGV3TZ%-PIUH3C-QYI2IRY;^ZWRQ;3NGK&UU;^\
     357M>?X?<593PYG=3$5%.I0G3E34E&,:D>;E?,H\\DFK..D[V=_[IG_$']JSX:_#
     358M7X5/J5OXH\.RVILRFEV>G74<TMVVS;'#!%&23DX4`#"]\`$CX>_X)$?$71?`
     359M'QYU2UUC4+/3?[8T7[/:2W$HCCEE26-O+#'C<R[B`3SL/?%?<?P,_8H^&_[.
     360M^H&^\-^'H5U8@C^T;QVNKI`<@A'?/EY!P=@7(ZYKGO'_`/P3:^$?Q'\<3:]?
     361M^'9H;J\E,UW#9WLMO;W;DY9F16`4GJ=FW)R3DDFO'SKAKB7'8W`YNO8JIAF_
     362MW=Y\MI))OGM>^FW(K=Y'N9#Q5PIE^`S#)7[=TL4E^]:AS7BVXKV?-:R;;OSM
     363MRZJ.YA_\%$OBGX=\1?L1>,&TS7-'U);NXMK"$VUY'*)9TO(&DC4J3N=%#,0.
     364M0%.<5Q7_``1G\2V+_!7Q1I/VJ'^TH=>:Z:WWCS/*>V@57V]<$QN,_P"R:]CN
     365M_P#@GQ\&;Z]-Q)X`T=9/+2,"-Y8T`10HPBN%!(`R0,L<DDDDE;'_`()]_!W3
     366M=4M+VW\"Z;#=6,Z7$$B7$X*.C!E/^LYP0#@\'%=%7AOB"IQ+1X@FJ/[NFZ?*
     367MISU3<GS7]F[/WMK/:U^IS4>*N&J7"U;AN#K_`+RI[7G=.GHTHKEM[577N[W3
     368MUO;2Q[)1117ZH?CP4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1
     369M110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%
     370M%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`!-?F3^VSK=M:_\`
     371M!3>UN)IHXX-/U70S<2,PVQA?L[L2>V%.3FOT<^(?@:U^)7@V^T.\NM3L[;4%
     372M5))M/O'M+E`&#?)*A#+G;@X/()'0FO"[C_@E5\'[R:26?3=>N)IF+R22ZS<,
     373M\C'J6);))[FOS7Q(X>S7.\/1PF71A:$XU'*4FM8\RY;*+[IWOY6/U7PMXFR;
     374M(,56QN9SG>=.5-1A!/23B^9R<X[6:Y;>=^A]'`YHKSCX'?LN^'?V>[RZD\/W
     375MGB:2&ZA6#[+?ZQ/=VT*@Y&R-V*J>V0,XXKT>OT#!5,1.DI8J"A/JE+F7WVC?
     376M[D?FV84L-3K..#J.I#I)QY&_^W>:5OO84445U'&%%%%`!1110`4444`%%%%`
     377M!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%
     378M%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`44
     379M44`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`!111
     380D0`4444`%%%%`!1110`4444`%%%%`!1110`4444`%%%%`'__9
    324381`
    325382end
  • kernel/GBEngine/kInline.h

    r356f8ad rf07380  
    126126    if (r->isLPring)
    127127    {
    128       shift = p_mFirstVblock(p_in, r);
     128      shift = si_max(p_mFirstVblock(p_in, r) - 1, 0);
    129129      if (!shift) p_Test(p_in, r);
    130130    }
     
    141141    if (currRing->isLPring)
    142142    {
    143       shift = p_mFirstVblock(p_in, currRing);
     143      shift = si_max(p_mFirstVblock(p_in, currRing) - 1, 0);
    144144      if (!shift) p_Test(p_in, currRing);
    145145    }
     
    168168    if (c_r->isLPring)
    169169    {
    170       shift = p_mFirstVblock(p_in, c_r);
     170      shift = si_max(p_mFirstVblock(p_in, c_r) - 1, 0);
    171171      if (!shift) p_Test(p_in, currRing);
    172172    }
  • kernel/GBEngine/kspoly.cc

    r356f8ad rf07380  
    140140#ifdef HAVE_SHIFTBBA
    141141  poly lmRight;
    142   if (tailRing->isLPring) {
     142  if (tailRing->isLPring)
     143  {
     144    assume(PR->shift == 0);
     145    assume(PW->shift == si_max(p_mFirstVblock(PW->p, tailRing) - 1, 0));
    143146    k_SplitFrame(lm, lmRight, PW->shift + 1, tailRing);
    144147  }
     
    271274  if (tailRing->isLPring)
    272275  {
     276    assume(PR->shift == 0);
     277    assume(PW->shift == si_max(p_mFirstVblock(PW->p, tailRing) - 1, 0));
    273278    k_SplitFrame(lm, lmRight, PW->shift + 1, tailRing);
    274279  }
     
    623628#ifdef HAVE_SHIFTBBA
    624629  poly lmRight;
    625   if (tailRing->isLPring) {
     630  if (tailRing->isLPring)
     631  {
     632    assume(PR->shift == 0);
     633    assume(PW->shift == si_max(p_mFirstVblock(PW->p, tailRing) - 1, 0));
    626634    k_SplitFrame(lm, lmRight, PW->shift + 1, tailRing);
    627635  }
     
    834842#ifdef HAVE_SHIFTBBA
    835843  poly lmRight;
    836   if (tailRing->isLPring) {
     844  if (tailRing->isLPring)
     845  {
     846    assume(PR->shift == 0);
     847    assume(PW->shift == si_max(p_mFirstVblock(PW->p, tailRing) - 1, 0));
    837848    k_SplitFrame(lm, lmRight, PW->shift + 1, tailRing);
    838849  }
     
    10781089#ifdef HAVE_SHIFTBBA
    10791090  poly lmRight;
    1080   if (tailRing->isLPring) {
     1091  if (tailRing->isLPring)
     1092  {
     1093    assume(PR->shift == 0);
     1094    assume(PW->shift == si_max(p_mFirstVblock(PW->p, tailRing) - 1, 0));
    10811095    k_SplitFrame(lm, lmRight, PW->shift + 1, tailRing);
    10821096  }
     
    11921206  if (tailRing->isLPring)
    11931207  {
    1194     // note: because of the crits, p2 is never shifted
     1208    assume(si_max(p_mFirstVblock(p2, tailRing) - 1, 0) == 0);
     1209    // note: because of how the pairs are created, p2 should never be shifted
    11951210    int split = p_mFirstVblock(p1, tailRing);
    11961211    k_SplitFrame(m1, m12, split, tailRing);
     
    12691284  if (tailRing->isLPring)
    12701285  {
     1286    // just to be sure, check that the shift is correct
     1287    assume(Pair->shift == 0);
     1288    assume(si_max(p_mFirstVblock(Pair->p, tailRing) - 1, 0) == Pair->shift); // == 0
     1289
    12711290    p_LmDelete(m12, tailRing);
    12721291    p_LmDelete(m22, tailRing);
  • kernel/GBEngine/kstd1.cc

    r356f8ad rf07380  
    25682568#ifdef HAVE_SHIFTBBA
    25692569ideal kStdShift(ideal F, ideal Q, tHomog h,intvec ** w, intvec *hilb,int syzComp,
    2570                 int newIdeal, intvec *vw)
     2570                int newIdeal, intvec *vw, BOOLEAN rightGB)
    25712571{
    25722572  ideal r;
     
    25752575  kStrategy strat=new skStrategy;
    25762576  intvec* temp_w=NULL;
     2577
     2578  strat->rightGB = rightGB;
    25772579
    25782580  if(!TEST_OPT_RETURN_SB)
  • kernel/GBEngine/kstd1.h

    r356f8ad rf07380  
    3939          int syzComp=0,int newIdeal=0, intvec *vw=NULL, s_poly_proc_t sp=NULL);
    4040
    41 ideal kStdShift(ideal F, ideal Q, tHomog h,intvec ** w, intvec *hilb,int syzComp,
    42                 int newIdeal, intvec *vw);
     41ideal kStdShift(ideal F, ideal Q, tHomog h,intvec ** mw, intvec *hilb=NULL,
     42    int syzComp=0, int newIdeal=0, intvec *vw=NULL, BOOLEAN rightGB=FALSE);
    4343
    4444/* the following global data are defined in kutil.cc */
  • kernel/GBEngine/kstd2.cc

    r356f8ad rf07380  
    41784178  initBbaShift(strat); /* DONE */
    41794179  /*set enterS, spSpolyShort, reduce, red, initEcart, initEcartPair*/
    4180   /*Shdl=*/initBuchMoraShift(F, Q,strat); /* updateS with no toT, i.e. no init for T */
    4181   updateSShift(strat); /* initializes T */
     4180  /*Shdl=*/initBuchMora(F, Q,strat);
    41824181  if (strat->minim>0) strat->M=idInit(IDELEMS(F),F->rank);
    41834182  reduc = olddeg = 0;
     
    43524351        // posInS only depends on the leading term
    43534352        strat->enterS(strat->P, pos, strat, strat->tl);
    4354         enterTShift(strat->P, strat);
     4353        if (!strat->rightGB)
     4354          enterTShift(strat->P, strat);
    43554355      }
    43564356
     
    43694369          // and add pairs
    43704370          int pos=posInS(strat,strat->sl,strat->P.p,strat->P.ecart);
    4371           int atR=strat->tl+1; // enterTShift introduces P.p=T[tl+1], T[tl+2]...
    4372           enterTShift(strat->P,strat,-1);
    4373           enterpairsShift(strat->P.p,strat->sl,strat->P.ecart,pos,strat, atR);
    4374           strat->enterS(strat->P, pos, strat, atR);
     4371          enterT(strat->P, strat);
     4372          enterpairsShift(strat->P.p,strat->sl,strat->P.ecart,pos,strat, strat->tl);
     4373          strat->enterS(strat->P, pos, strat, strat->tl);
     4374          if (!strat->rightGB)
     4375            enterTShift(strat->P,strat);
    43754376        }
    43764377      }
     
    43934394    for (int k = 0; k <= strat->sl; ++k)
    43944395    {
     4396      if ((strat->fromQ!=NULL) && (strat->fromQ[k])) continue; // do not reduce Q_k
    43954397      for (int j = 0; j<=strat->tl; ++j)
    43964398      {
     
    44574459
    44584460
    4459 ideal freegb(ideal I)
     4461ideal freegb(ideal F)
    44604462{
    44614463  assume(rIsLPRing(currRing));
    4462   assume(idIsInV(I));
    4463   ideal RS = kStdShift(I,NULL, testHomog, NULL,NULL,0,0,NULL);
     4464  assume(idIsInV(F));
     4465  ideal RS = kStdShift(F, NULL, testHomog, NULL);
     4466  idSkipZeroes(RS); // is this even necessary?
     4467  assume(idIsInV(RS));
     4468  return(RS);
     4469}
     4470
     4471ideal rightgb(ideal F, ideal Q)
     4472{
     4473  assume(rIsLPRing(currRing));
     4474  assume(idIsInV(F));
     4475  ideal RS = kStdShift(F, Q, testHomog, NULL, NULL, 0, 0, NULL, TRUE);
    44644476  idSkipZeroes(RS); // is this even necessary?
    44654477  assume(idIsInV(RS));
  • kernel/GBEngine/kutil.cc

    r356f8ad rf07380  
    80358035      Print("\n  %d:",i);
    80368036      p_wrp(strat->S[i], currRing, strat->tailRing);
     8037      if (strat->fromQ!=NULL && strat->fromQ[i])
     8038        Print(" (from Q)");
    80378039    }
    80388040    strat->news = FALSE;
     
    91519153        enterT(h,strat);
    91529154        strat->S_2_R[i] = strat->tl;
     9155#ifdef HAVE_SHIFTBBA
     9156        if (currRing->isLPring)
     9157          enterTShift(h, strat);
     9158#endif
    91539159      }
    91549160    }
     
    92479253      enterT(h,strat);
    92489254      strat->S_2_R[i] = strat->tl;
     9255#ifdef HAVE_SHIFTBBA
     9256      if (currRing->isLPring)
     9257        enterTShift(h, strat);
     9258#endif
    92499259    }
    92509260    if (suc!= -1) updateS(toT,strat);
     
    93619371void enterSBbaShift (LObject &p,int atS,kStrategy strat, int atR)
    93629372{
    9363   int toInsert = itoInsert(p.p, strat->tailRing);
    9364   for (int i = toInsert; i > 0; i--)
     9373  int maxPossibleShift = p_mLPmaxPossibleShift(p.p, strat->tailRing);
     9374  for (int i = maxPossibleShift; i > 0; i--)
    93659375  {
    93669376    LObject qq;
     
    1020410214  strat->cp = 0;
    1020510215  strat->c3 = 0;
     10216#ifdef HAVE_SHIFTBBA
     10217  strat->cv = 0;
     10218#endif
    1020610219  strat->tail = pInit();
    1020710220  /*- set s -*/
     
    1026710280    updateS(TRUE,strat);
    1026810281  }
    10269   if (strat->fromQ!=NULL) omFreeSize(strat->fromQ,IDELEMS(strat->Shdl)*sizeof(int));
    10270   strat->fromQ=NULL;
     10282#ifdef HAVE_SHIFTBBA
     10283  if (!(rIsLPRing(currRing) && strat->rightGB)) // for right GB, we need to check later whether a poly is from Q
     10284#endif
     10285  {
     10286    if (strat->fromQ!=NULL) omFreeSize(strat->fromQ,IDELEMS(strat->Shdl)*sizeof(int));
     10287    strat->fromQ=NULL;
     10288  }
    1027110289  assume(kTest_TS(strat));
    1027210290}
     
    1028810306  pLmFree(&strat->tail);
    1028910307  strat->syzComp=0;
     10308
     10309#ifdef HAVE_SHIFTBBA
     10310  if (rIsLPRing(currRing) && strat->rightGB)
     10311  {
     10312    if (strat->fromQ!=NULL) omFreeSize(strat->fromQ,IDELEMS(strat->Shdl)*sizeof(int));
     10313    strat->fromQ=NULL;
     10314  }
     10315#endif
    1029010316}
    1029110317
     
    1218012206
    1218112207#ifdef HAVE_SHIFTBBA
    12182 /* including the self pairs */
    12183 void updateSShift(kStrategy strat)
    12184 {
    12185   /* to use after updateS(toT=FALSE,strat) */
    12186   /* fills T with shifted elt's of S */
    12187   int i;
    12188   LObject h;
    12189   int atT = -1; // or figure out smth better
    12190   strat->tl = -1; // init
    12191   for (i=0; i<=strat->sl; i++)
    12192   {
    12193     memset(&h,0,sizeof(h));
    12194     h.p =  strat->S[i];
    12195     strat->initEcart(&h);
    12196     h.sev = strat->sevS[i];
    12197     h.t_p = NULL;
    12198     h.GetTP(); // creates correct t_p
    12199     /*puts the elements of S with their shifts to T*/
    12200     //    int atT, int uptodeg, int lV)
    12201     strat->S_2_R[i] = strat->tl + 1; // the el't with shift 0 will be inserted first
    12202     // need a small check for above; we insert >=1 elements
    12203     // insert this check into kTest_TS ?
    12204     enterTShift(h,strat,atT);
    12205   }
    12206   /* what about setting strat->tl? */
     12208// creates if possible (q,p), (shifts(q),p)
     12209static void enterOnePairWithShifts (int q_inS /*also i*/, poly q, poly p, int ecartp, int p_isFromQ, kStrategy strat, int atR, int p_lastVblock, int q_lastVblock)
     12210{
     12211  // note: ecart and isFromQ is for p
     12212  assume(q_inS < 0 || strat->S[q_inS] == q); // if q is from S, q_inS should be the index of q in S
     12213  assume(pmFirstVblock(p) == 1);
     12214  assume(pmFirstVblock(q) == 1);
     12215  assume(p_lastVblock == pmLastVblock(p));
     12216  assume(q_lastVblock == pmLastVblock(q));
     12217
     12218  // TODO: is ecartq = 0 still ok?
     12219  int ecartq = 0; //Hans says it's ok; we're in the homog case, no ecart
     12220
     12221  int q_isFromQ = 0;
     12222  if (strat->fromQ != NULL && q_inS >= 0)
     12223    q_isFromQ = strat->fromQ[q_inS];
     12224
     12225  int degbound = currRing->N/currRing->isLPring;
     12226  int neededShift = p_lastVblock - 1;
     12227  int maxPossibleShift = degbound - q_lastVblock;
     12228  int maxShift = si_min(neededShift, maxPossibleShift);
     12229  int firstShift = (q == p ? 1 : 0); // do not add (q,p) if q=p
     12230  for (int j = firstShift; j <= maxShift; j++)
     12231  {
     12232    poly qq = pLPCopyAndShiftLM(q, j);
     12233    enterOnePairShift(qq, p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, j, q_inS);
     12234  }
    1220712235}
    1220812236#endif
    1220912237
    1221012238#ifdef HAVE_SHIFTBBA
    12211 void initBuchMoraShift (ideal F,ideal Q,kStrategy strat)
    12212 {
    12213   strat->interpt = BTEST1(OPT_INTERRUPT);
    12214   strat->kHEdge=NULL;
    12215   if (rHasGlobalOrdering(currRing)) strat->kHEdgeFound=FALSE;
    12216   /*- creating temp data structures------------------- -*/
    12217   strat->cp = 0;
    12218   strat->c3 = 0;
    12219   strat->cv = 0;
    12220   strat->tail = pInit();
    12221   /*- set s -*/
    12222   strat->sl = -1;
    12223   /*- set L -*/
    12224   strat->Lmax = setmaxL;
    12225   strat->Ll = -1;
    12226   strat->L = initL();
    12227   /*- set B -*/
    12228   strat->Bmax = setmaxL;
    12229   strat->Bl = -1;
    12230   strat->B = initL();
    12231   /*- set T -*/
    12232   strat->tl = -1;
    12233   strat->tmax = setmaxT;
    12234   strat->T = initT();
    12235   strat->R = initR();
    12236   strat->sevT = initsevT();
    12237   /*- init local data struct.---------------------------------------- -*/
    12238   strat->P.ecart=0;
    12239   strat->P.length=0;
    12240   if (rHasLocalOrMixedOrdering(currRing))
    12241   {
    12242     if (strat->kHEdge!=NULL) pSetComp(strat->kHEdge, strat->ak);
    12243     if (strat->kNoether!=NULL) pSetComp(strat->kNoetherTail(), strat->ak);
    12244   }
    12245   if(rField_is_Ring(currRing))
    12246   {
    12247     /*Shdl=*/initSL(F, Q,strat); /*sets also S, ecartS, fromQ */
    12248   }
    12249   {
    12250     if(TEST_OPT_SB_1)
    12251     {
    12252       int i;
    12253       ideal P=idInit(IDELEMS(F)-strat->newIdeal,F->rank);
    12254       for (i=strat->newIdeal;i<IDELEMS(F);i++)
    12255       {
    12256         P->m[i-strat->newIdeal] = F->m[i];
    12257         F->m[i] = NULL;
    12258       }
    12259       initSSpecial(F,Q,P,strat);
    12260       for (i=strat->newIdeal;i<IDELEMS(F);i++)
    12261       {
    12262         F->m[i] = P->m[i-strat->newIdeal];
    12263         P->m[i-strat->newIdeal] = NULL;
    12264       }
    12265       idDelete(&P);
    12266     }
    12267     else
    12268     {
    12269       /*Shdl=*/initSL(F, Q,strat); /*sets also S, ecartS, fromQ */
    12270       // /*Shdl=*/initS(F, Q,strat); /*sets also S, ecartS, fromQ */
    12271     }
    12272   }
    12273   strat->fromT = FALSE;
    12274   if (!TEST_OPT_SB_1)
    12275   {
    12276     /* the only change: we do not fill the set T*/
    12277     if(!rField_is_Ring(currRing)) updateS(FALSE,strat);
    12278   }
    12279   if (strat->fromQ!=NULL) omFreeSize(strat->fromQ,IDELEMS(strat->Shdl)*sizeof(int));
    12280   strat->fromQ=NULL;
    12281   /* more changes: fill the set T with all the shifts of elts of S*/
    12282   /* is done by other procedure */
     12239// creates if possible (q,p), use it when q is already shifted
     12240static void enterOnePairWithoutShifts (int p_inS /*also i*/, poly q, poly p, int ecartq, int q_isFromQ, kStrategy strat, int atR, int p_lastVblock, int q_shift)
     12241{
     12242  // note: ecart and isFromQ is for p
     12243  assume(p_inS < 0 || strat->S[p_inS] == p); // if p is from S, p_inS should be the index of p in S
     12244  assume(pmFirstVblock(p) == 1);
     12245  assume(p_lastVblock == pmLastVblock(p));
     12246  assume(q_shift == pmFirstVblock(q) - 1);
     12247
     12248  // TODO: is ecartp = 0 still ok?
     12249  int ecartp = 0; //Hans says it's ok; we're in the homog e:, no ecart
     12250
     12251  int p_isFromQ = 0;
     12252  if (strat->fromQ != NULL && p_inS >= 0)
     12253    p_isFromQ = strat->fromQ[p_inS];
     12254
     12255  int maxNeededShift = p_lastVblock - 1;
     12256  if (q_shift <= maxNeededShift)
     12257    enterOnePairShift(q, p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, q_shift, -1);
    1228312258}
    1228412259#endif
    1228512260
    1228612261#ifdef HAVE_SHIFTBBA
    12287 /*1
    12288 * put the pairs (sh \dot s[i],p)  into the set B, ecart=ecart(p)
    12289 */
    12290 static void enterOnePairManyShifts (int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
    12291 {
    12292   poly s = strat->S[i];
    12293   assume(i<=strat->sl); // from OnePair
    12294 
    12295   /* cycles through all shifts of s[i] until uptodeg - lastVblock(s[i]) */
    12296   /* that is create the pairs (f, s \dot g)  */
    12297 
    12298   //  poly q = pCopy(pHead(strat->S[i])); // lm in currRing
    12299   //  pNext(q) = prCopyR(pNext(strat->S[i]),strat->tailRing,currRing); // zero shift
    12300 
    12301  /* determine how many elements we have to insert for a given s[i] */
    12302   /* x(0)y(1)z(2) : lastVblock-1=2, to add until lastVblock=uptodeg-1 */
    12303   /* hence, a total number of elt's to add is: */
    12304   /*  int toInsert = 1 + (uptodeg-1) - (pLastVblock(p.p, lV) -1);  */
    12305   int toInsert =  itoInsert(s, currRing);
    12306 
    12307 
    12308   /* these vars hold for all shifts of s[i] */
    12309   int ecartq = 0; //Hans says it's ok; we're in the homog case, no ecart
    12310 
    12311   int qfromQ;
    12312   if (strat->fromQ != NULL)
    12313   {
    12314     qfromQ = strat->fromQ[i];
    12315   }
    12316   else
    12317   {
    12318     qfromQ = -1;
    12319   }
    12320 
    12321   // for the 0th shift: insert the orig. pair
    12322   enterOnePairShift(s, p, ecart, isFromQ, strat, -1, ecartq, qfromQ, 0, i);
    12323 
    12324   for (int j = 1; j <= toInsert; j++)
    12325   {
    12326     poly q = pLPCopyAndShiftLM(s, j);
    12327     enterOnePairShift(q, p, ecart, isFromQ, strat, -1, ecartq, qfromQ, j, i);
    12328   }
    12329 }
    12330 #endif
    12331 
    12332 #ifdef HAVE_SHIFTBBA
    12333 /*1
    12334 * put the pairs (sh \dot qq,p)  into the set B, ecart=ecart(p)
    12335 * despite the name, not only self shifts
    12336 */
    12337 void enterOnePairSelfShifts (poly qq, poly p, int ecart, int isFromQ, kStrategy strat, int /*atR*/)
    12338 {
    12339   /* should cycle through all shifts of q until uptodeg - lastVblock(q) */
    12340   /* that is create the pairs (f, s \dot g)  */
    12341 
    12342   int toInsert =  itoInsert(qq, currRing);
    12343 
    12344   /* these vars hold for all shifts of s[i] */
    12345   int ecartq = 0; //Hans says it's ok; we're in the homog case, no ecart
    12346   int qfromQ = 0; // strat->fromQ[i];
    12347 
    12348   /* since this proc is applied twice for (h, s*g) and (g,s*h), init j with 1 */
    12349   for (int j = 1; j<= toInsert; j++)
    12350   {
    12351     poly q = pLPCopyAndShiftLM(qq, j);
    12352     enterOnePairShift(q, p, ecart, isFromQ, strat, -1, ecartq, qfromQ, j, -1);
    12353   }
    12354 }
    12355 #endif
    12356 
    12357 #ifdef HAVE_SHIFTBBA
     12262
     12263#ifdef KDEBUG
     12264// enable to print which pairs are considered or discarded and why
     12265/* #define CRITERION_DEBUG */
     12266#endif
    1235812267/*2
    1235912268* put the pair (q,p)  into the set B, ecart=ecart(p), q is the shift of some s[i]
     
    1236112270void enterOnePairShift (poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS)
    1236212271{
     12272#ifdef CRITERION_DEBUG
     12273  if (TEST_OPT_DEBUG)
     12274  {
     12275    PrintS("Consider pair ("); wrp(q); PrintS(", "); wrp(p); PrintS(")"); PrintLn();
     12276    // also write the LMs in separate lines:
     12277    poly lmq = pHead(q);
     12278    poly lmp = pHead(p);
     12279    pSetCoeff(lmq, n_Init(1, currRing->cf));
     12280    pSetCoeff(lmp, n_Init(1, currRing->cf));
     12281    Print("    %s\n", pString(lmq));
     12282    Print("    %s\n", pString(lmp));
     12283    pLmDelete(lmq);
     12284    pLmDelete(lmp);
     12285  }
     12286#endif
    1236312287
    1236412288  /* Format: q and p are like strat->P.p, so lm in CR, tail in TR */
     
    1237012294  assume(p_CheckIsFromRing(pNext(p),strat->tailRing));
    1237112295
    12372 #ifdef KDEBUG
    12373 //    if (TEST_OPT_DEBUG)
    12374 //    {
    12375 //       PrintS("enterOnePairShift(q,p) invoked with q = ");
    12376 //       wrp(q); //      wrp(pHead(q));
    12377 //       PrintS(", p = ");
    12378 //       wrp(p); //wrp(pHead(p));
    12379 //       PrintLn();
    12380 //    }
    12381 #endif
    12382 
    1238312296  /* poly q stays for s[i], ecartq = ecart(q), qisFromQ = applies to q */
    1238412297
     
    1239712310  Lp.lcm = p_Lcm(p,q, currRing); // q is what was strat->S[i], so a poly in LM/TR presentation
    1239812311
    12399   /* apply the V criterion */
    12400   if (!pIsInV(Lp.lcm))
    12401   {
    12402 #ifdef KDEBUG
    12403     if (TEST_OPT_DEBUG)
    12404     {
    12405       PrintS("V crit applied to q = ");
    12406       wrp(q); //      wrp(pHead(q));
    12407       PrintS(", p = ");
    12408       wrp(p); //wrp(pHead(p));
    12409       PrintLn();
    12410     }
    12411 #endif
     12312  /* the V criterion */
     12313  if (!pmIsInV(Lp.lcm))
     12314  {
     12315    strat->cv++; // counter for applying the V criterion
    1241212316    pLmFree(Lp.lcm);
    12413     /* + counter for applying the V criterion */
    12414     strat->cv++;
     12317#ifdef CRITERION_DEBUG
     12318    if (TEST_OPT_DEBUG) PrintS("--- V crit\n");
     12319#endif
    1241512320    return;
    1241612321  }
     
    1243712342      strat->cp++;
    1243812343      pLmFree(Lp.lcm);
     12344#ifdef CRITERION_DEBUG
     12345      if (TEST_OPT_DEBUG) PrintS("--- prod crit\n");
     12346#endif
    1243912347      return;
    1244012348    }
     
    1244412352    {
    1244512353      pLmFree(Lp.lcm);
     12354#ifdef CRITERION_DEBUG
     12355      if (TEST_OPT_DEBUG) PrintS("--- ecartq > ecart\n");
     12356#endif
    1244612357      return;
    1244712358      /*the pair is (s[i],t[.]), discard it if the ecart is too big*/
     
    1246612377          {
    1246712378            pLmFree(Lp.lcm);
     12379#ifdef CRITERION_DEBUG
     12380            if (TEST_OPT_DEBUG) Print("--- divided by B[%d]\n", j);
     12381#endif
    1246812382            return;
    1246912383          }
     
    1247512389        {
    1247612390          deleteInL(strat->B,&strat->Bl,j,strat);
     12391#ifdef CRITERION_DEBUG
     12392          if (TEST_OPT_DEBUG) Print("divides B[%d] -> delete B[%d]\n", j, j);
     12393#endif
    1247712394          strat->c3++;
    1247812395        }
     
    1250412421          strat->cp++;
    1250512422          pLmFree(Lp.lcm);
     12423#ifdef CRITERION_DEBUG
     12424          if (TEST_OPT_DEBUG) PrintS("--- prod crit\n");
     12425#endif
    1250612426          return;
    1250712427      }
     
    1250912429      {
    1251012430        pLmFree(Lp.lcm);
     12431#ifdef CRITERION_DEBUG
     12432        if (TEST_OPT_DEBUG) PrintS("--- ecartq > ecart\n");
     12433#endif
    1251112434        return;
    1251212435        /*the pair is (s[i],t[.]), discard it if the ecart is too big*/
     
    1252712450          {
    1252812451            pLmFree(Lp.lcm);
     12452#ifdef CRITERION_DEBUG
     12453            if (TEST_OPT_DEBUG) Print("--- divided by B[%d]\n", j);
     12454#endif
    1252912455            return;
    1253012456          }
     
    1253512461        {
    1253612462          deleteInL(strat->B,&strat->Bl,j,strat);
     12463#ifdef CRITERION_DEBUG
     12464          if (TEST_OPT_DEBUG) Print("divides B[%d] -> delete B[%d]\n", j, j);
     12465#endif
    1253712466          strat->c3++;
    1253812467        }
     
    1254712476    pNorm(p);
    1254812477  if ((q==NULL) || (p==NULL))
     12478  {
     12479#ifdef CRITERION_DEBUG
     12480    if (TEST_OPT_DEBUG) PrintS("--- q == NULL || p == NULL\n");
     12481#endif
    1254912482    return;
     12483  }
    1255012484  if ((strat->fromQ!=NULL) && (isFromQ!=0) && (qfromQ!=0))
     12485  {
    1255112486    Lp.p=NULL;
     12487#ifdef CRITERION_DEBUG
     12488    if (TEST_OPT_DEBUG) PrintS("--- pair from Q\n");
     12489#endif
     12490  }
    1255212491  else
    1255312492  {
     
    1260712546    */
    1260812547    if (Lp.lcm!=NULL) pLmFree(Lp.lcm);
     12548#ifdef CRITERION_DEBUG
     12549    if (TEST_OPT_DEBUG) PrintS("--- S-poly = 0\n");
     12550#endif
    1260912551  }
    1261012552  else
     
    1264312585    l = strat->posInL(strat->B,strat->Bl,&Lp,strat);
    1264412586    enterL(&strat->B,&strat->Bl,&strat->Bmax,Lp,l);
     12587#ifdef CRITERION_DEBUG
     12588    if (TEST_OPT_DEBUG) PrintS("+++ Entered pair\n");
     12589#endif
    1264512590  }
    1264612591}
     
    1265512600void initenterpairsShift (poly h,int k,int ecart,int isFromQ, kStrategy strat, int atR)
    1265612601{
     12602  int h_lastVblock = pmLastVblock(h);
     12603  assume(h_lastVblock != 0 || pLmIsConstantComp(h));
     12604  // TODO: is it allowed to skip pairs with constants? also with constants from other components?
     12605  if (h_lastVblock == 0) return;
     12606  assume(pmFirstVblock(h) == 1);
    1265712607  /* h comes from strat->P.p, that is LObject with LM in currRing and Tail in tailRing */
    1265812608  //  atR = -1;
     
    1266012610  || (pGetComp(h)<=strat->syzComp))
    1266112611  {
    12662     int j;
     12612    int i,j;
    1266312613    BOOLEAN new_pair=FALSE;
    1266412614
     12615    int degbound = currRing->N/currRing->isLPring;
     12616    int maxShift = degbound - h_lastVblock;
     12617
    1266512618    if (pGetComp(h)==0)
    1266612619    {
     12620      if (strat->rightGB)
     12621      {
     12622        if (isFromQ)
     12623        {
     12624          // pairs (shifts(h),s[1..k]), (h, s[1..k])
     12625          for (i=0; i<=maxShift; i++)
     12626          {
     12627            poly hh = pLPCopyAndShiftLM(h, i);
     12628            for (j=0; j<=k; j++)
     12629            {
     12630              if (strat->fromQ == NULL || !strat->fromQ[j])
     12631              {
     12632                new_pair=TRUE;
     12633                poly s = strat->S[j];
     12634                enterOnePairWithoutShifts(j, hh, s, ecart, isFromQ, strat, atR, pmLastVblock(s), i);
     12635              }
     12636            }
     12637          }
     12638        }
     12639        else
     12640        {
     12641          new_pair=TRUE;
     12642          for (j=0; j<=k; j++)
     12643          {
     12644            poly s = strat->S[j];
     12645            if (strat->fromQ != NULL && strat->fromQ[j])
     12646            {
     12647              // pairs (shifts(s[j]),h), (s[j],h)
     12648              enterOnePairWithShifts(j, s, h, ecart, isFromQ, strat, atR, h_lastVblock, pmLastVblock(s));
     12649            }
     12650            else
     12651            {
     12652              // pair (h, s[j])
     12653              enterOnePairWithoutShifts(j, h, s, ecart, isFromQ, strat, atR, pmLastVblock(s), 0);
     12654            }
     12655          }
     12656        }
     12657      }
    1266712658      /* for Q!=NULL: build pairs (f,q),(f1,f2), but not (q1,q2)*/
    12668       if ((isFromQ)&&(strat->fromQ!=NULL))
    12669       {
    12670         for (j=0; j<=k; j++)
    12671         {
     12659      else if ((isFromQ)&&(strat->fromQ!=NULL))
     12660      {
     12661        // pairs (shifts(s[1..k]),h), (s[1..k],h)
     12662        for (j=0; j<=k; j++) {
    1267212663          if (!strat->fromQ[j])
    1267312664          {
    1267412665            new_pair=TRUE;
    12675             enterOnePairManyShifts(j,h,ecart,isFromQ,strat, atR);
    12676             // other side pairs:
    12677             enterOnePairSelfShifts(h,strat->S[j],ecart,isFromQ,strat, atR);
    12678           //Print("j:%d, Ll:%d\n",j,strat->Ll);
     12666            poly s = strat->S[j];
     12667            enterOnePairWithShifts(j, s, h, ecart, isFromQ, strat, atR, h_lastVblock, pmLastVblock(s));
    1267912668          }
    1268012669        }
     12670        // pairs (shifts(h),s[1..k])
     12671        if (new_pair)
     12672        {
     12673          for (i=1; i<=maxShift; i++)
     12674          {
     12675            poly hh = pLPCopyAndShiftLM(h, i);
     12676            for (j=0; j<=k; j++)
     12677            {
     12678              if (!strat->fromQ[j])
     12679              {
     12680                poly s = strat->S[j];
     12681                enterOnePairWithoutShifts(j, hh, s, ecart, isFromQ, strat, atR, pmLastVblock(s), i);
     12682              }
     12683            }
     12684          }
     12685        }
    1268112686      }
    1268212687      else
    1268312688      {
    1268412689        new_pair=TRUE;
     12690        // pairs (shifts(s[1..k]),h), (s[1..k],h)
     12691        for (j=0; j<=k; j++) {
     12692          poly s = strat->S[j];
     12693          // TODO: cache lastVblock of s[1..k] for later use
     12694          enterOnePairWithShifts(j, s, h, ecart, isFromQ, strat, atR, h_lastVblock, pmLastVblock(s));
     12695        }
     12696        // pairs (shifts(h),s[1..k]), (shifts(h), h)
     12697        for (i=1; i<=maxShift; i++)
     12698        {
     12699          poly hh = pLPCopyAndShiftLM(h, i);
     12700          for (j=0; j<=k; j++)
     12701          {
     12702            poly s = strat->S[j];
     12703            enterOnePairWithoutShifts(j, hh, s, ecart, isFromQ, strat, atR, pmLastVblock(s), i);
     12704          }
     12705          enterOnePairWithoutShifts(-1, hh, h, ecart, isFromQ, strat, atR, h_lastVblock, i);
     12706        }
     12707      }
     12708    }
     12709    else
     12710    {
     12711      new_pair=TRUE;
     12712      if (strat->rightGB)
     12713      {
    1268512714        for (j=0; j<=k; j++)
    1268612715        {
    12687           enterOnePairManyShifts(j,h,ecart,isFromQ,strat, atR);
    12688           // other side pairs
    12689           enterOnePairSelfShifts(h,strat->S[j],ecart,isFromQ,strat, atR);
    12690         }
    12691         /* HERE we put (h, s*h) pairs */
    12692        /* enterOnePairSelfShifts (poly qq, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int uptodeg, int lV); */
    12693        enterOnePairSelfShifts (h, h, ecart, isFromQ, strat, atR);
    12694       }
    12695     }
    12696     else
    12697     {
    12698       for (j=0; j<=k; j++)
    12699       {
    12700         if ((pGetComp(h)==pGetComp(strat->S[j]))
    12701         || (pGetComp(strat->S[j])==0))
    12702         {
    12703           new_pair=TRUE;
    12704           enterOnePairManyShifts(j,h,ecart,isFromQ,strat, atR);
    12705           // other side pairs
    12706           enterOnePairSelfShifts(h,strat->S[j],ecart,isFromQ,strat, atR);
    12707         //Print("j:%d, Ll:%d\n",j,strat->Ll);
    12708         }
    12709       }
    12710       /* HERE we put (h, s*h) pairs */
    12711       enterOnePairSelfShifts (h, h, ecart, isFromQ, strat, atR);
     12716          if ((pGetComp(h)==pGetComp(strat->S[j]))
     12717              || (pGetComp(strat->S[j])==0))
     12718          {
     12719            assume(isFromQ == 0); // this case is not handeled here and should also never happen
     12720            poly s = strat->S[j];
     12721            if (strat->fromQ != NULL && strat->fromQ[j])
     12722            {
     12723              // pairs (shifts(s[j]),h), (s[j],h)
     12724              enterOnePairWithShifts(j, s, h, ecart, isFromQ, strat, atR, h_lastVblock, pmLastVblock(s));
     12725            }
     12726            else
     12727            {
     12728              // pair (h, s[j])
     12729              enterOnePairWithoutShifts(j, h, s, ecart, isFromQ, strat, atR, pmLastVblock(s), 0);
     12730            }
     12731          }
     12732        }
     12733      }
     12734      else
     12735      {
     12736        // pairs (shifts(s[1..k]),h), (s[1..k],h)
     12737        for (j=0; j<=k; j++) {
     12738          if ((pGetComp(h)==pGetComp(strat->S[j]))
     12739              || (pGetComp(strat->S[j])==0))
     12740          {
     12741            poly s = strat->S[j];
     12742            enterOnePairWithShifts(j, s, h, ecart, isFromQ, strat, atR, h_lastVblock, pmLastVblock(s));
     12743          }
     12744        }
     12745        // pairs (shifts(h),s[1..k]), (shifts(h), h)
     12746        for (i=1; i<=maxShift; i++)
     12747        {
     12748          poly hh = pLPCopyAndShiftLM(h, i);
     12749          for (j=0; j<=k; j++)
     12750          {
     12751            if ((pGetComp(h)==pGetComp(strat->S[j]))
     12752                || (pGetComp(strat->S[j])==0))
     12753            {
     12754              poly s = strat->S[j];
     12755              enterOnePairWithoutShifts(j, hh, s, ecart, isFromQ, strat, atR, pmLastVblock(s), i);
     12756            }
     12757          }
     12758          enterOnePairWithoutShifts(-1, hh, h, ecart, isFromQ, strat, atR, h_lastVblock, i);
     12759        }
     12760      }
    1271212761    }
    1271312762
     
    1273812787    ||(pGetComp(h)<=strat->syzComp)))
    1273912788  {
    12740     //Print("start clearS k=%d, pos=%d, sl=%d\n",k,pos,strat->sl);
    1274112789    unsigned long h_sev = pGetShortExpVector(h);
    1274212790    loop
    1274312791    {
    1274412792      if (j > k) break;
    12745       clearS(h,h_sev, &j,&k,strat);
     12793      // TODO this currently doesn't clear all possible elements because of commutative division
     12794      if (!(strat->rightGB && strat->fromQ != NULL && strat->fromQ[j]))
     12795        clearS(h,h_sev, &j,&k,strat);
    1274612796      j++;
    1274712797    }
    12748     //Print("end clearS sl=%d\n",strat->sl);
    12749   }
    12750  // PrintS("end enterpairs\n");
     12798  }
    1275112799}
    1275212800#endif
     
    1276512813  pAssume(p.p != NULL);
    1276612814
    12767   int toInsert = itoInsert(p.p, strat->tailRing);
    12768 
    12769   for (int i = 1; i <= toInsert; i++)
     12815  int maxPossibleShift = p_mLPmaxPossibleShift(p.p, strat->tailRing);
     12816
     12817  for (int i = 1; i <= maxPossibleShift; i++)
    1277012818  {
    1277112819    LObject qq;
  • kernel/GBEngine/kutil.h

    r356f8ad rf07380  
    366366  #ifdef HAVE_SHIFTBBA
    367367  int cv; // in shift bases: counting V criterion
     368  /*BOOLEAN*/ char rightGB;
    368369  #endif
    369370  /*BOOLEAN*/ char interpt;
     
    850851void enterTShift(LObject p, kStrategy strat, int atT = -1);
    851852
    852 void initBuchMoraShift (ideal F,ideal Q,kStrategy strat);
    853 
    854 void enterOnePairSelfShifts (poly qq, poly p, int ecart, int isFromQ, kStrategy strat, int atR);
    855 
    856853void enterOnePairShift (poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS);
    857854
    858855void enterpairsShift (poly h,int k,int ecart,int pos,kStrategy strat, int atR);
    859856
    860 void updateSShift(kStrategy strat);
    861 
    862857void initBbaShift(kStrategy strat);
    863858
     
    866861int redFirstShift (LObject* h,kStrategy strat); // ok
    867862
    868 ideal freegb(ideal I);
     863ideal freegb(ideal F);
     864ideal rightgb(ideal F, ideal Q);
    869865
    870866ideal bbaShift(ideal F, ideal Q,intvec *w,intvec *hilb,kStrategy strat);
  • kernel/GBEngine/shiftgb.cc

    r356f8ad rf07380  
    4343}
    4444
    45 /* for poly in lmCR/tailTR presentation */
    46 int itoInsert(poly p, const ring r)
     45int p_mLPmaxPossibleShift(poly p, const ring r)
    4746{
    48   /* the below situation (commented out) might happen! */
    49 //   if (r == currRing)
    50 //   {
    51 //     "Current ring is not expected in toInsert";
    52 //     return(0);
    53 //   }
    54   /* compute the number of insertions */
    55   int i = p_mLastVblock(p, currRing);
    56   if (pNext(p) != NULL)
    57   {
    58     i = si_max(i, p_LastVblock(pNext(p), r) );
    59   }
    60   //  i = uptodeg  - i +1;
     47  int lastBlock = p_mLastVblock(p, r);
     48  if (lastBlock == 0) return 0;
    6149  int uptodeg = r->N/r->isLPring;
    62   //  p_wrp(p,currRing,r); Print("----i:%d",i); PrintLn();
    63   return uptodeg - i;
     50  return uptodeg - lastBlock;
    6451}
    6552
  • kernel/GBEngine/shiftgb.h

    r356f8ad rf07380  
    1515#define pLPCopyAndShiftLM(p, sh) p_LPCopyAndShiftLM(p, sh, currRing)
    1616
    17 int itoInsert(poly p, const ring r);
     17int p_mLPmaxPossibleShift(poly p, const ring r);
     18#define pmLPmaxPossibleShift(p) p_mLPmaxPossibleShift(p, currRing)
    1819
    1920#endif
  • kernel/mod2.h

    r356f8ad rf07380  
    8585#endif
    8686
    87 #define SINGULAR_PATCHLEVEL 3
     87#define SINGULAR_PATCHLEVEL 4
    8888#define SINGULAR_VERSION ((SINGULAR_MAJOR_VERSION*1000 + SINGULAR_MINOR_VERSION*100 + SINGULAR_SUB_VERSION*10)+SINGULAR_PATCHLEVEL)
    8989
  • libpolys/polys/shiftop.cc

    r356f8ad rf07380  
    368368  p_GetExpV(m,e,ri);
    369369
     370  if (p_mLastVblock(m, e, ri) + sh > ri->N/lV)
     371  {
     372    Werror("degree bound of Letterplace ring is %d, but at least %d is needed for this shift", ri->N/lV, p_mLastVblock(m, e, ri) + sh);
     373  }
    370374  for (int i = ri->N - sh*lV; i > 0; i--)
    371375  {
     
    506510  PrintLn(); WriteLPExpV(m2ExpV, ri);
    507511#endif
    508   if (m1Length + m2Length > ri->N)
    509   {
    510     WarnS("letterplace degree bound too low for this multiplication");
    511   }
    512   for (int i = 1 + m1Length; i < 1 + m1Length + m2Length; ++i)
     512  int last = m1Length + m2Length;
     513  if (last > ri->N)
     514  {
     515    Werror("degree bound of Letterplace ring is %d, but at least %d is needed for this multiplication", ri->N/ri->isLPring, last/ri->isLPring);
     516    last = ri->N;
     517  }
     518  for (int i = 1 + m1Length; i < 1 + last; ++i)
    513519  {
    514520    assume(m2ExpV[i - m1Length] <= 1);
     
    531537  PrintLn(); WriteLPExpV(m2ExpV, ri);
    532538#endif
    533   if (m1Length + m2Length > ri->N)
    534   {
    535     WarnS("letterplace degree bound too low for this multiplication");
     539  int last = m1Length + m2Length;
     540  if (last > ri->N)
     541  {
     542    Werror("degree bound of Letterplace ring is %d, but at least %d is needed for this multiplication", ri->N/ri->isLPring, last/ri->isLPring);
     543    last = ri->N;
    536544  }
    537545
    538546  // shift m1 by m2Length
    539   for (int i = m2Length + m1Length; i >= 1 + m2Length; --i)
     547  for (int i = last; i >= 1 + m2Length; --i)
    540548  {
    541549    m1ExpV[i] = m1ExpV[i - m2Length];
     
    816824      if(has_order_a)
    817825      {
    818         WerrorS("ordering (a(..),lp/rp not implemented for LP-rings");
     826        WerrorS("ordering (a(..),lp/rp not implemented for Letterplace rings");
    819827        return NULL;
    820828      }
     
    852860      else
    853861      { // should never happen:
    854         WerrorS("ordering not implemented for LP-rings");
     862        WerrorS("ordering not implemented for Letterplace rings");
    855863        return NULL;
    856864      }
     
    859867      break;
    860868    }
    861     default: WerrorS("ordering not implemented for LP-rings");
     869    default: WerrorS("ordering not implemented for Letterplace rings");
    862870      return NULL;
    863871  }
Note: See TracChangeset for help on using the changeset viewer.