174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes/*
2994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * this work for additional information regarding copyright ownership.
5994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * (the "License"); you may not use this file except in compliance with
7994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * the License.  You may obtain a copy of the License at
874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
9994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
1074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
11994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * See the License for the specific language governing permissions and
15994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * limitations under the License.
16994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */
17994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
18994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespackage org.apache.harmony.tests.java.text;
19994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
20994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CollationElementIterator;
21994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.Collator;
22994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.RuleBasedCollator;
23994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.StringCharacterIterator;
24994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Locale;
25994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
26994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport junit.framework.TestCase;
27994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
28994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes/**
29994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Test CollationElementIterator
3074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
31994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Only test normal condition.
3274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
33994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */
34994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespublic class CollationElementIteratorTest extends TestCase {
35994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
3674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  private RuleBasedCollator coll;
3774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
3874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  protected void setUp() {
3974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
4074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
4174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
4274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetOffset() {
4374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abc";
4474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = coll.getCollationElementIterator(text);
4574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int[] offsets = { 0, 1, 2, 3 };
4674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int offset = iterator.getOffset();
4774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int i = 0;
4874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(offsets[i++], offset);
4974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (offset != text.length()) {
5074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      iterator.next();
5174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      offset = iterator.getOffset();
5274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(offsets[i++], offset);
5374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
5474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
5574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
5674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testNext() {
5774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abc";
5874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = coll.getCollationElementIterator(text);
5974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int[] orders = new int[text.length()];
6074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
6174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int i = 0;
6274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
6374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      orders[i++] = order;
6474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.next();
6574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
6674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
6774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int offset = iterator.getOffset();
6874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(text.length(), offset);
6955dfcd8b9609f112b0542af6a705080d98e00d2accornelius
7055dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.reset();
7174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.previous();
7274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
7374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
7474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(orders[--i], order);
7574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.previous();
7674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
7774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
7874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(0, iterator.getOffset());
7974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
8074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
8174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testPrevious() {
8274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
8374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abc";
8474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = coll
8574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        .getCollationElementIterator(text);
8674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int[] orders = new int[text.length()];
8774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
8874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int i = 0;
8974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
9074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      orders[i++] = order;
9174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.next();
9274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
9374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
9474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int offset = iterator.getOffset();
9574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(text.length(), offset);
9655dfcd8b9609f112b0542af6a705080d98e00d2accornelius
9755dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.reset();
9874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.previous();
9974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
10074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
10174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(orders[--i], order);
10274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.previous();
10374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
10474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
10574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(0, iterator.getOffset());
10674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
10774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
10874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testReset() {
10974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abc";
11074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = coll.getCollationElementIterator(text);
11174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int[] orders = new int[text.length()];
11274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
11374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int i = 0;
11474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
11574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      orders[i++] = order;
11674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.next();
11774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
11874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
11974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int offset = iterator.getOffset();
12074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(text.length(), offset);
12174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
12274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.reset();
12374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(0, iterator.getOffset());
12474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
12574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
12674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetMaxExpansion() {
12774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "cha";
128ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
129ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath            Locale.forLanguageTag("es-u-co-trad"));
13074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
13174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
13274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    while (order != CollationElementIterator.NULLORDER) {
13374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(1, iterator.getMaxExpansion(order));
13474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      order = iterator.next();
13574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    }
13674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
13774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
13874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testPrimaryOrder() {
13974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("de", "DE"));
14074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "\u00e6";
14174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
14274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
14374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int pOrder = CollationElementIterator.primaryOrder(order);
14474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator2 = rbColl.getCollationElementIterator("ae");
14574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order2 = iterator2.next();
14674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int pOrder2 = CollationElementIterator.primaryOrder(order2);
14774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(pOrder, pOrder2);
14874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
14974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
15074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testSecondaryOrder() {
15174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR"));
15274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "a\u00e0";
15374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
15474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
15574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int sOrder1 = CollationElementIterator.secondaryOrder(order);
15674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
15774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.next();
15874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int sOrder2 = CollationElementIterator.secondaryOrder(order);
15974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
16074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(sOrder1, sOrder2);
16174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
16274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
16374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testTertiaryOrder() {
16474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR"));
16574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abAB";
16674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
16774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int order = iterator.next();
16874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int tOrder1 = CollationElementIterator.tertiaryOrder(order);
16974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.next();
17074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    int tOrder2 = CollationElementIterator.tertiaryOrder(order);
17174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(tOrder1, tOrder2);
17274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
17374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.next();
17474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    tOrder1 = CollationElementIterator.tertiaryOrder(order);
17574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    order = iterator.next();
17674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    tOrder2 = CollationElementIterator.tertiaryOrder(order);
17774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(tOrder1, tOrder2);
17874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
17974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
18074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testSetOffset() {
181ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
182ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath            Locale.forLanguageTag("es-u-co-trad"));
18374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "cha";
18474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
18555dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(0);
18655dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(0, iterator.getOffset());
18774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setOffset(1);
18855dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(0, iterator.getOffset());
18955dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(2);
19055dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(2, iterator.getOffset());
19174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
19274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
19374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testSetTextString() {
194ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
195ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath            Locale.forLanguageTag("es-u-co-trad"));
19674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "caa";
19774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
19855dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(0);
19955dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(0, iterator.getOffset());
20074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setOffset(1);
20174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(1, iterator.getOffset());
20255dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(2);
20355dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(2, iterator.getOffset());
20474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setText("cha");
20555dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(0);
20655dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(0, iterator.getOffset());
20774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setOffset(1);
20855dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(0, iterator.getOffset());
20955dfcd8b9609f112b0542af6a705080d98e00d2accornelius    iterator.setOffset(2);
21055dfcd8b9609f112b0542af6a705080d98e00d2accornelius    assertEquals(2, iterator.getOffset());
21174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
21274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
21374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testSetTextCharacterIterator() {
214ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath    RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
215ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath            Locale.forLanguageTag("es-u-co-trad"));
21674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "caa";
21774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
21874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setOffset(1);
21974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(1, iterator.getOffset());
22074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setText(new StringCharacterIterator("cha"));
22174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    iterator.setOffset(1);
22274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(1, iterator.getOffset());
22374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
224994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes}
225