/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
<<<<<<< Updated upstream
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
=======
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
>>>>>>> Stashed changes
 * limitations under the License.
 */

package org.apache.jdo.tck.pc.fieldtypes;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.Locale;
import java.util.Map;

public class MapStringKeyCollections {
  public int identifier;
  public Map<String, Object> MapOfString_Object0;
  public Map<String, Object> MapOfString_Object1;
  public Map<String, Object> MapOfString_Object2;
  public Map<String, SimpleClass> MapOfString_SimpleClass3;
  public Map<String, SimpleClass> MapOfString_SimpleClass4;
  public Map<String, SimpleClass> MapOfString_SimpleClass5;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface6;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface7;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface8;
  public Map<String, String> MapOfString_String9;
  public Map<String, String> MapOfString_String10;
  public Map<String, String> MapOfString_String11;
  public Map<String, Date> MapOfString_Date12;
  public Map<String, Date> MapOfString_Date13;
  public Map<String, Date> MapOfString_Date14;
  public Map<String, Locale> MapOfString_Locale15;
  public Map<String, Locale> MapOfString_Locale16;
  public Map<String, Locale> MapOfString_Locale17;
  public Map<String, BigDecimal> MapOfString_BigDecimal18;
  public Map<String, BigDecimal> MapOfString_BigDecimal19;
  public Map<String, BigDecimal> MapOfString_BigDecimal20;
  public Map<String, BigInteger> MapOfString_BigInteger21;
  public Map<String, BigInteger> MapOfString_BigInteger22;
  public Map<String, BigInteger> MapOfString_BigInteger23;
  public Map<String, Byte> MapOfString_Byte24;
  public Map<String, Byte> MapOfString_Byte25;
  public Map<String, Byte> MapOfString_Byte26;
  public Map<String, Double> MapOfString_Double27;
  public Map<String, Double> MapOfString_Double28;
  public Map<String, Double> MapOfString_Double29;
  public Map<String, Float> MapOfString_Float30;
  public Map<String, Float> MapOfString_Float31;
  public Map<String, Float> MapOfString_Float32;
  public Map<String, Integer> MapOfString_Integer33;
  public Map<String, Integer> MapOfString_Integer34;
  public Map<String, Integer> MapOfString_Integer35;
  public Map<String, Long> MapOfString_Long36;
  public Map<String, Long> MapOfString_Long37;
  public Map<String, Long> MapOfString_Long38;
  public Map<String, Short> MapOfString_Short39;
  public Map<String, Short> MapOfString_Short40;
  public Map<String, Short> MapOfString_Short41;
  public Map<String, Object> MapOfString_Object42;
  public Map<String, Object> MapOfString_Object43;
  public Map<String, SimpleClass> MapOfString_SimpleClass45;
  public Map<String, SimpleClass> MapOfString_SimpleClass46;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface48;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface49;
  public Map<String, String> MapOfString_String51;
  public Map<String, String> MapOfString_String52;
  public Map<String, Date> MapOfString_Date54;
  public Map<String, Date> MapOfString_Date55;
  public Map<String, Locale> MapOfString_Locale57;
  public Map<String, Locale> MapOfString_Locale58;
  public Map<String, BigDecimal> MapOfString_BigDecimal60;
  public Map<String, BigDecimal> MapOfString_BigDecimal61;
  public Map<String, BigInteger> MapOfString_BigInteger63;
  public Map<String, BigInteger> MapOfString_BigInteger64;
  public Map<String, Byte> MapOfString_Byte66;
  public Map<String, Byte> MapOfString_Byte67;
  public Map<String, Double> MapOfString_Double69;
  public Map<String, Double> MapOfString_Double70;
  public Map<String, Float> MapOfString_Float72;
  public Map<String, Float> MapOfString_Float73;
  public Map<String, Integer> MapOfString_Integer75;
  public Map<String, Integer> MapOfString_Integer76;
  public Map<String, Long> MapOfString_Long78;
  public Map<String, Long> MapOfString_Long79;
  public Map<String, Short> MapOfString_Short81;
  public Map<String, Short> MapOfString_Short82;
  public Map<String, Object> MapOfString_Object84;
  public Map<String, Object> MapOfString_Object86;
  public Map<String, SimpleClass> MapOfString_SimpleClass87;
  public Map<String, SimpleClass> MapOfString_SimpleClass89;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface90;
  public Map<String, SimpleInterface> MapOfString_SimpleInterface92;
  public Map<String, String> MapOfString_String93;
  public Map<String, String> MapOfString_String95;
  public Map<String, Date> MapOfString_Date96;
  public Map<String, Date> MapOfString_Date98;
  public Map<String, Locale> MapOfString_Locale99;
  public Map<String, Locale> MapOfString_Locale101;
  public Map<String, BigDecimal> MapOfString_BigDecimal102;
  public Map<String, BigDecimal> MapOfString_BigDecimal104;
  public Map<String, BigInteger> MapOfString_BigInteger105;
  public Map<String, BigInteger> MapOfString_BigInteger107;
  public Map<String, Byte> MapOfString_Byte108;
  public Map<String, Byte> MapOfString_Byte110;
  public Map<String, Double> MapOfString_Double111;
  public Map<String, Double> MapOfString_Double113;
  public Map<String, Float> MapOfString_Float114;
  public Map<String, Float> MapOfString_Float116;
  public Map<String, Integer> MapOfString_Integer117;
  public Map<String, Integer> MapOfString_Integer119;
  public Map<String, Long> MapOfString_Long120;
  public Map<String, Long> MapOfString_Long122;
  public Map<String, Short> MapOfString_Short123;
  public Map<String, Short> MapOfString_Short125;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum126;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum127;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum128;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum129;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum130;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum131;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum132;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum133;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum134;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum135;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum136;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum137;
  public Map<String, SimpleEnum> MapOfString_SimpleEnum138;

  public static final String[] fieldSpecs = {
    "public Map MapOfString_Object0",
    "embedded-value=true public Map MapOfString_Object1",
    "embedded-value=false public Map MapOfString_Object2",
    "public Map MapOfString_SimpleClass3",
    "embedded-value=true public Map MapOfString_SimpleClass4",
    "embedded-value=false public Map MapOfString_SimpleClass5",
    "public Map MapOfString_SimpleInterface6",
    "embedded-value=true public Map MapOfString_SimpleInterface7",
    "embedded-value=false public Map MapOfString_SimpleInterface8",
    "public Map MapOfString_String9",
    "embedded-value=true public Map MapOfString_String10",
    "embedded-value=false public Map MapOfString_String11",
    "public Map MapOfString_Date12",
    "embedded-value=true public Map MapOfString_Date13",
    "embedded-value=false public Map MapOfString_Date14",
    "public Map MapOfString_Locale15",
    "embedded-value=true public Map MapOfString_Locale16",
    "embedded-value=false public Map MapOfString_Locale17",
    "public Map MapOfString_BigDecimal18",
    "embedded-value=true public Map MapOfString_BigDecimal19",
    "embedded-value=false public Map MapOfString_BigDecimal20",
    "public Map MapOfString_BigInteger21",
    "embedded-value=true public Map MapOfString_BigInteger22",
    "embedded-value=false public Map MapOfString_BigInteger23",
    "public Map MapOfString_Byte24",
    "embedded-value=true public Map MapOfString_Byte25",
    "embedded-value=false public Map MapOfString_Byte26",
    "public Map MapOfString_Double27",
    "embedded-value=true public Map MapOfString_Double28",
    "embedded-value=false public Map MapOfString_Double29",
    "public Map MapOfString_Float30",
    "embedded-value=true public Map MapOfString_Float31",
    "embedded-value=false public Map MapOfString_Float32",
    "public Map MapOfString_Integer33",
    "embedded-value=true public Map MapOfString_Integer34",
    "embedded-value=false public Map MapOfString_Integer35",
    "public Map MapOfString_Long36",
    "embedded-value=true public Map MapOfString_Long37",
    "embedded-value=false public Map MapOfString_Long38",
    "public Map MapOfString_Short39",
    "embedded-value=true public Map MapOfString_Short40",
    "embedded-value=false public Map MapOfString_Short41",
    "embedded-key=true  public Map MapOfString_Object42",
    "embedded-key=true embedded-value=true public Map MapOfString_Object43",
    "embedded-key=true  public Map MapOfString_SimpleClass45",
    "embedded-key=true embedded-value=true public Map MapOfString_SimpleClass46",
    "embedded-key=true  public Map MapOfString_SimpleInterface48",
    "embedded-key=true embedded-value=true public Map MapOfString_SimpleInterface49",
    "embedded-key=true  public Map MapOfString_String51",
    "embedded-key=true embedded-value=true public Map MapOfString_String52",
    "embedded-key=true  public Map MapOfString_Date54",
    "embedded-key=true embedded-value=true public Map MapOfString_Date55",
    "embedded-key=true  public Map MapOfString_Locale57",
    "embedded-key=true embedded-value=true public Map MapOfString_Locale58",
    "embedded-key=true  public Map MapOfString_BigDecimal60",
    "embedded-key=true embedded-value=true public Map MapOfString_BigDecimal61",
    "embedded-key=true  public Map MapOfString_BigInteger63",
    "embedded-key=true embedded-value=true public Map MapOfString_BigInteger64",
    "embedded-key=true  public Map MapOfString_Byte66",
    "embedded-key=true embedded-value=true public Map MapOfString_Byte67",
    "embedded-key=true  public Map MapOfString_Double69",
    "embedded-key=true embedded-value=true public Map MapOfString_Double70",
    "embedded-key=true  public Map MapOfString_Float72",
    "embedded-key=true embedded-value=true public Map MapOfString_Float73",
    "embedded-key=true  public Map MapOfString_Integer75",
    "embedded-key=true embedded-value=true public Map MapOfString_Integer76",
    "embedded-key=true  public Map MapOfString_Long78",
    "embedded-key=true embedded-value=true public Map MapOfString_Long79",
    "embedded-key=true  public Map MapOfString_Short81",
    "embedded-key=true embedded-value=true public Map MapOfString_Short82",
    "embedded-key=false  public Map MapOfString_Object84",
    "embedded-key=false embedded-value=false public Map MapOfString_Object86",
    "embedded-key=false  public Map MapOfString_SimpleClass87",
    "embedded-key=false embedded-value=false public Map MapOfString_SimpleClass89",
    "embedded-key=false  public Map MapOfString_SimpleInterface90",
    "embedded-key=false embedded-value=false public Map MapOfString_SimpleInterface92",
    "embedded-key=false  public Map MapOfString_String93",
    "embedded-key=false embedded-value=false public Map MapOfString_String95",
    "embedded-key=false  public Map MapOfString_Date96",
    "embedded-key=false embedded-value=false public Map MapOfString_Date98",
    "embedded-key=false  public Map MapOfString_Locale99",
    "embedded-key=false embedded-value=false public Map MapOfString_Locale101",
    "embedded-key=false  public Map MapOfString_BigDecimal102",
    "embedded-key=false embedded-value=false public Map MapOfString_BigDecimal104",
    "embedded-key=false  public Map MapOfString_BigInteger105",
    "embedded-key=false embedded-value=false public Map MapOfString_BigInteger107",
    "embedded-key=false  public Map MapOfString_Byte108",
    "embedded-key=false embedded-value=false public Map MapOfString_Byte110",
    "embedded-key=false  public Map MapOfString_Double111",
    "embedded-key=false embedded-value=false public Map MapOfString_Double113",
    "embedded-key=false  public Map MapOfString_Float114",
    "embedded-key=false embedded-value=false public Map MapOfString_Float116",
    "embedded-key=false  public Map MapOfString_Integer117",
    "embedded-key=false embedded-value=false public Map MapOfString_Integer119",
    "embedded-key=false  public Map MapOfString_Long120",
    "embedded-key=false embedded-value=false public Map MapOfString_Long122",
    "embedded-key=false  public Map MapOfString_Short123",
    "embedded-key=false embedded-value=false public Map MapOfString_Short125",
    "public Map MapOfString_SimpleEnum126",
    "embedded-value=true public Map MapOfString_SimpleEnum127",
    "embedded-value=false public Map MapOfString_SimpleEnum128",
    "embedded-key=true  public Map MapOfString_SimpleEnum129",
    "embedded-key=true embedded-value=true public Map MapOfString_SimpleEnum130",
    "embedded-key=false  public Map MapOfString_SimpleEnum131",
    "embedded-key=false embedded-value=false public Map MapOfString_SimpleEnum132",
    "public Map MapOfString_SimpleEnum133",
    "embedded-value=true public Map MapOfString_SimpleEnum134",
    "embedded-value=false public Map MapOfString_SimpleEnum135",
    "embedded-key=true  public Map MapOfString_SimpleEnum136",
    "embedded-key=true embedded-value=true public Map MapOfString_SimpleEnum137",
    "embedded-key=false  public Map MapOfString_SimpleEnum138"
  };

  public int getLength() {
    return fieldSpecs.length;
  }

  public Map<?, ?> get(int index) {
    switch (index) {
      case (0):
        return MapOfString_Object0;
      case (1):
        return MapOfString_Object1;
      case (2):
        return MapOfString_Object2;
      case (3):
        return MapOfString_SimpleClass3;
      case (4):
        return MapOfString_SimpleClass4;
      case (5):
        return MapOfString_SimpleClass5;
      case (6):
        return MapOfString_SimpleInterface6;
      case (7):
        return MapOfString_SimpleInterface7;
      case (8):
        return MapOfString_SimpleInterface8;
      case (9):
        return MapOfString_String9;
      case (10):
        return MapOfString_String10;
      case (11):
        return MapOfString_String11;
      case (12):
        return MapOfString_Date12;
      case (13):
        return MapOfString_Date13;
      case (14):
        return MapOfString_Date14;
      case (15):
        return MapOfString_Locale15;
      case (16):
        return MapOfString_Locale16;
      case (17):
        return MapOfString_Locale17;
      case (18):
        return MapOfString_BigDecimal18;
      case (19):
        return MapOfString_BigDecimal19;
      case (20):
        return MapOfString_BigDecimal20;
      case (21):
        return MapOfString_BigInteger21;
      case (22):
        return MapOfString_BigInteger22;
      case (23):
        return MapOfString_BigInteger23;
      case (24):
        return MapOfString_Byte24;
      case (25):
        return MapOfString_Byte25;
      case (26):
        return MapOfString_Byte26;
      case (27):
        return MapOfString_Double27;
      case (28):
        return MapOfString_Double28;
      case (29):
        return MapOfString_Double29;
      case (30):
        return MapOfString_Float30;
      case (31):
        return MapOfString_Float31;
      case (32):
        return MapOfString_Float32;
      case (33):
        return MapOfString_Integer33;
      case (34):
        return MapOfString_Integer34;
      case (35):
        return MapOfString_Integer35;
      case (36):
        return MapOfString_Long36;
      case (37):
        return MapOfString_Long37;
      case (38):
        return MapOfString_Long38;
      case (39):
        return MapOfString_Short39;
      case (40):
        return MapOfString_Short40;
      case (41):
        return MapOfString_Short41;
      case (42):
        return MapOfString_Object42;
      case (43):
        return MapOfString_Object43;
      case (44):
        return MapOfString_SimpleClass45;
      case (45):
        return MapOfString_SimpleClass46;
      case (46):
        return MapOfString_SimpleInterface48;
      case (47):
        return MapOfString_SimpleInterface49;
      case (48):
        return MapOfString_String51;
      case (49):
        return MapOfString_String52;
      case (50):
        return MapOfString_Date54;
      case (51):
        return MapOfString_Date55;
      case (52):
        return MapOfString_Locale57;
      case (53):
        return MapOfString_Locale58;
      case (54):
        return MapOfString_BigDecimal60;
      case (55):
        return MapOfString_BigDecimal61;
      case (56):
        return MapOfString_BigInteger63;
      case (57):
        return MapOfString_BigInteger64;
      case (58):
        return MapOfString_Byte66;
      case (59):
        return MapOfString_Byte67;
      case (60):
        return MapOfString_Double69;
      case (61):
        return MapOfString_Double70;
      case (62):
        return MapOfString_Float72;
      case (63):
        return MapOfString_Float73;
      case (64):
        return MapOfString_Integer75;
      case (65):
        return MapOfString_Integer76;
      case (66):
        return MapOfString_Long78;
      case (67):
        return MapOfString_Long79;
      case (68):
        return MapOfString_Short81;
      case (69):
        return MapOfString_Short82;
      case (70):
        return MapOfString_Object84;
      case (71):
        return MapOfString_Object86;
      case (72):
        return MapOfString_SimpleClass87;
      case (73):
        return MapOfString_SimpleClass89;
      case (74):
        return MapOfString_SimpleInterface90;
      case (75):
        return MapOfString_SimpleInterface92;
      case (76):
        return MapOfString_String93;
      case (77):
        return MapOfString_String95;
      case (78):
        return MapOfString_Date96;
      case (79):
        return MapOfString_Date98;
      case (80):
        return MapOfString_Locale99;
      case (81):
        return MapOfString_Locale101;
      case (82):
        return MapOfString_BigDecimal102;
      case (83):
        return MapOfString_BigDecimal104;
      case (84):
        return MapOfString_BigInteger105;
      case (85):
        return MapOfString_BigInteger107;
      case (86):
        return MapOfString_Byte108;
      case (87):
        return MapOfString_Byte110;
      case (88):
        return MapOfString_Double111;
      case (89):
        return MapOfString_Double113;
      case (90):
        return MapOfString_Float114;
      case (91):
        return MapOfString_Float116;
      case (92):
        return MapOfString_Integer117;
      case (93):
        return MapOfString_Integer119;
      case (94):
        return MapOfString_Long120;
      case (95):
        return MapOfString_Long122;
      case (96):
        return MapOfString_Short123;
      case (97):
        return MapOfString_Short125;
      case (98):
        return MapOfString_SimpleEnum126;
      case (99):
        return MapOfString_SimpleEnum127;
      case (100):
        return MapOfString_SimpleEnum128;
      case (101):
        return MapOfString_SimpleEnum129;
      case (102):
        return MapOfString_SimpleEnum130;
      case (103):
        return MapOfString_SimpleEnum131;
      case (104):
        return MapOfString_SimpleEnum132;
      case (105):
        return MapOfString_SimpleEnum133;
      case (106):
        return MapOfString_SimpleEnum134;
      case (107):
        return MapOfString_SimpleEnum135;
      case (108):
        return MapOfString_SimpleEnum136;
      case (109):
        return MapOfString_SimpleEnum137;
      case (110):
        return MapOfString_SimpleEnum138;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  @SuppressWarnings("unchecked")
  public boolean set(int index, @SuppressWarnings("rawtypes") Map value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        MapOfString_Object0 = value;
        break;
      case (1):
        MapOfString_Object1 = value;
        break;
      case (2):
        MapOfString_Object2 = value;
        break;
      case (3):
        MapOfString_SimpleClass3 = value;
        break;
      case (4):
        MapOfString_SimpleClass4 = value;
        break;
      case (5):
        MapOfString_SimpleClass5 = value;
        break;
      case (6):
        MapOfString_SimpleInterface6 = value;
        break;
      case (7):
        MapOfString_SimpleInterface7 = value;
        break;
      case (8):
        MapOfString_SimpleInterface8 = value;
        break;
      case (9):
        MapOfString_String9 = value;
        break;
      case (10):
        MapOfString_String10 = value;
        break;
      case (11):
        MapOfString_String11 = value;
        break;
      case (12):
        MapOfString_Date12 = value;
        break;
      case (13):
        MapOfString_Date13 = value;
        break;
      case (14):
        MapOfString_Date14 = value;
        break;
      case (15):
        MapOfString_Locale15 = value;
        break;
      case (16):
        MapOfString_Locale16 = value;
        break;
      case (17):
        MapOfString_Locale17 = value;
        break;
      case (18):
        MapOfString_BigDecimal18 = value;
        break;
      case (19):
        MapOfString_BigDecimal19 = value;
        break;
      case (20):
        MapOfString_BigDecimal20 = value;
        break;
      case (21):
        MapOfString_BigInteger21 = value;
        break;
      case (22):
        MapOfString_BigInteger22 = value;
        break;
      case (23):
        MapOfString_BigInteger23 = value;
        break;
      case (24):
        MapOfString_Byte24 = value;
        break;
      case (25):
        MapOfString_Byte25 = value;
        break;
      case (26):
        MapOfString_Byte26 = value;
        break;
      case (27):
        MapOfString_Double27 = value;
        break;
      case (28):
        MapOfString_Double28 = value;
        break;
      case (29):
        MapOfString_Double29 = value;
        break;
      case (30):
        MapOfString_Float30 = value;
        break;
      case (31):
        MapOfString_Float31 = value;
        break;
      case (32):
        MapOfString_Float32 = value;
        break;
      case (33):
        MapOfString_Integer33 = value;
        break;
      case (34):
        MapOfString_Integer34 = value;
        break;
      case (35):
        MapOfString_Integer35 = value;
        break;
      case (36):
        MapOfString_Long36 = value;
        break;
      case (37):
        MapOfString_Long37 = value;
        break;
      case (38):
        MapOfString_Long38 = value;
        break;
      case (39):
        MapOfString_Short39 = value;
        break;
      case (40):
        MapOfString_Short40 = value;
        break;
      case (41):
        MapOfString_Short41 = value;
        break;
      case (42):
        MapOfString_Object42 = value;
        break;
      case (43):
        MapOfString_Object43 = value;
        break;
      case (44):
        MapOfString_SimpleClass45 = value;
        break;
      case (45):
        MapOfString_SimpleClass46 = value;
        break;
      case (46):
        MapOfString_SimpleInterface48 = value;
        break;
      case (47):
        MapOfString_SimpleInterface49 = value;
        break;
      case (48):
        MapOfString_String51 = value;
        break;
      case (49):
        MapOfString_String52 = value;
        break;
      case (50):
        MapOfString_Date54 = value;
        break;
      case (51):
        MapOfString_Date55 = value;
        break;
      case (52):
        MapOfString_Locale57 = value;
        break;
      case (53):
        MapOfString_Locale58 = value;
        break;
      case (54):
        MapOfString_BigDecimal60 = value;
        break;
      case (55):
        MapOfString_BigDecimal61 = value;
        break;
      case (56):
        MapOfString_BigInteger63 = value;
        break;
      case (57):
        MapOfString_BigInteger64 = value;
        break;
      case (58):
        MapOfString_Byte66 = value;
        break;
      case (59):
        MapOfString_Byte67 = value;
        break;
      case (60):
        MapOfString_Double69 = value;
        break;
      case (61):
        MapOfString_Double70 = value;
        break;
      case (62):
        MapOfString_Float72 = value;
        break;
      case (63):
        MapOfString_Float73 = value;
        break;
      case (64):
        MapOfString_Integer75 = value;
        break;
      case (65):
        MapOfString_Integer76 = value;
        break;
      case (66):
        MapOfString_Long78 = value;
        break;
      case (67):
        MapOfString_Long79 = value;
        break;
      case (68):
        MapOfString_Short81 = value;
        break;
      case (69):
        MapOfString_Short82 = value;
        break;
      case (70):
        MapOfString_Object84 = value;
        break;
      case (71):
        MapOfString_Object86 = value;
        break;
      case (72):
        MapOfString_SimpleClass87 = value;
        break;
      case (73):
        MapOfString_SimpleClass89 = value;
        break;
      case (74):
        MapOfString_SimpleInterface90 = value;
        break;
      case (75):
        MapOfString_SimpleInterface92 = value;
        break;
      case (76):
        MapOfString_String93 = value;
        break;
      case (77):
        MapOfString_String95 = value;
        break;
      case (78):
        MapOfString_Date96 = value;
        break;
      case (79):
        MapOfString_Date98 = value;
        break;
      case (80):
        MapOfString_Locale99 = value;
        break;
      case (81):
        MapOfString_Locale101 = value;
        break;
      case (82):
        MapOfString_BigDecimal102 = value;
        break;
      case (83):
        MapOfString_BigDecimal104 = value;
        break;
      case (84):
        MapOfString_BigInteger105 = value;
        break;
      case (85):
        MapOfString_BigInteger107 = value;
        break;
      case (86):
        MapOfString_Byte108 = value;
        break;
      case (87):
        MapOfString_Byte110 = value;
        break;
      case (88):
        MapOfString_Double111 = value;
        break;
      case (89):
        MapOfString_Double113 = value;
        break;
      case (90):
        MapOfString_Float114 = value;
        break;
      case (91):
        MapOfString_Float116 = value;
        break;
      case (92):
        MapOfString_Integer117 = value;
        break;
      case (93):
        MapOfString_Integer119 = value;
        break;
      case (94):
        MapOfString_Long120 = value;
        break;
      case (95):
        MapOfString_Long122 = value;
        break;
      case (96):
        MapOfString_Short123 = value;
        break;
      case (97):
        MapOfString_Short125 = value;
        break;
      case (98):
        MapOfString_SimpleEnum126 = value;
        break;
      case (99):
        MapOfString_SimpleEnum127 = value;
        break;
      case (100):
        MapOfString_SimpleEnum128 = value;
        break;
      case (101):
        MapOfString_SimpleEnum129 = value;
        break;
      case (102):
        MapOfString_SimpleEnum130 = value;
        break;
      case (103):
        MapOfString_SimpleEnum131 = value;
        break;
      case (104):
        MapOfString_SimpleEnum132 = value;
        break;
      case (105):
        MapOfString_SimpleEnum133 = value;
        break;
      case (106):
        MapOfString_SimpleEnum134 = value;
        break;
      case (107):
        MapOfString_SimpleEnum135 = value;
        break;
      case (108):
        MapOfString_SimpleEnum136 = value;
        break;
      case (109):
        MapOfString_SimpleEnum137 = value;
        break;
      case (110):
        MapOfString_SimpleEnum138 = value;
        break;
      default:
        throw new IndexOutOfBoundsException();
    }
    return true;
  }

  public static class Oid implements Serializable {

    private static final long serialVersionUID = 1L;

    public int identifier;

    public Oid() {}

    public Oid(String s) {
      identifier = Integer.parseInt(justTheId(s));
    }

    public String toString() {
      return this.getClass().getName() + ": " + identifier;
    }

    public int hashCode() {
      return identifier;
    }

    public boolean equals(Object other) {
      if (other != null && (other instanceof Oid)) {
        Oid k = (Oid) other;
        return k.identifier == this.identifier;
      }
      return false;
    }

    protected static String justTheId(String str) {
      return str.substring(str.indexOf(':') + 1);
    }
  }
}
