19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19963cd006c45716b034f656bf7e7179e6476f7e4dBjorn Bringertimport android.test.AndroidTestCase; 20761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringertimport android.test.suitebuilder.annotation.LargeTest; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringertimport java.io.IOException; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.OutputStream; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 27112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilsonimport java.util.Arrays; 28761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringertimport java.util.List; 29761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 30963cd006c45716b034f656bf7e7179e6476f7e4dBjorn Bringertpublic class MemoryFileTest extends AndroidTestCase { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void compareBuffers(byte[] buffer1, byte[] buffer2, int length) throws Exception { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < length; i++) { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (buffer1[i] != buffer2[i]) { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new Exception("readBytes did not read back what writeBytes wrote"); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Keep allocating new files till the system purges them. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43e1e37c632c2deb68f13c92f402c62daaca21afb1Brett Chabot // Flaky test - temporarily suppress from large suite for now 44e1e37c632c2deb68f13c92f402c62daaca21afb1Brett Chabot // @LargeTest 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPurge() throws Exception { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<MemoryFile> files = new ArrayList<MemoryFile>(); 471017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert try { 481017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert while (true) { 491017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert // This will fail if the process runs out of file descriptors before 501017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert // the kernel starts purging ashmem areas. 511017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert MemoryFile newFile = new MemoryFile("MemoryFileTest", 10000000); 521017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert newFile.allowPurging(true); 531017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert newFile.writeBytes(testString, 0, 0, testString.length); 541017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert files.add(newFile); 551017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert for (MemoryFile file : files) { 561017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert try { 571017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert file.readBytes(testString, 0, 0, testString.length); 581017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert } catch (IOException e) { 591017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert // Expected 601017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert return; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 641017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert } finally { 651017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert for (MemoryFile fileToClose : files) { 661017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert fileToClose.close(); 671017a134c19b3d296c7c05cf640db4b08816d090Bjorn Bringert } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRun() throws Exception { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MemoryFile file = new MemoryFile("MemoryFileTest", 1000000); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] buffer = new byte[testString.length]; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check low level accessors 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project file.writeBytes(testString, 0, 2000, testString.length); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project file.readBytes(buffer, 2000, 0, testString.length); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compareBuffers(testString, buffer, testString.length); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check streams 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer = new byte[testString.length]; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OutputStream os = file.getOutputStream(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project os.write(testString); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputStream is = file.getInputStream(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project is.mark(testString.length); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project is.read(buffer); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compareBuffers(testString, buffer, testString.length); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // test mark/reset 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer = new byte[testString.length]; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project is.reset(); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project is.read(buffer); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compareBuffers(testString, buffer, testString.length); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project file.close(); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 102112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson // http://code.google.com/p/android/issues/detail?id=11415 103112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson public void testOutputStreamAdvances() throws IOException { 104112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson MemoryFile file = new MemoryFile("MemoryFileTest", 10); 105112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson 106112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson OutputStream os = file.getOutputStream(); 107112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson os.write(new byte[] { 1, 2, 3, 4, 5 }); 108112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson os.write(new byte[] { -1, -1, 6, 7, 8, -1 }, 2, 3); 109112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson os.write(9); 110112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson try { 111112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson os.write(new byte[] { -1, -1 }); 112112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson fail(); 113112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson } catch (IndexOutOfBoundsException expected) { 114112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson } 115112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson 116112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson byte[] copy = new byte[file.length()]; 117112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson file.readBytes(copy, 0, 0, file.length()); 118112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson assertEquals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]", Arrays.toString(copy)); 119112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson } 120112d339673c379b71a989bd33b73648aafe58ce1Jesse Wilson 121c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert // Tests for the IndexOutOfBoundsException cases in read(). 122c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 123c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert private void readIndexOutOfBoundsException(int offset, int count, String msg) 124c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert throws Exception { 125c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", testString.length); 126c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert try { 127c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert file.writeBytes(testString, 0, 0, testString.length); 128c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert InputStream is = file.getInputStream(); 129c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert byte[] buffer = new byte[testString.length + 10]; 130c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert try { 131c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert is.read(buffer, offset, count); 132c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert fail(msg); 133c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } catch (IndexOutOfBoundsException ex) { 134c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert // this is what should happen 135c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } finally { 136c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert is.close(); 137c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 138c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } finally { 139c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert file.close(); 140c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 141c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 142c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 143c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert @SmallTest 144c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert public void testReadNegativeOffset() throws Exception { 145c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert readIndexOutOfBoundsException(-1, 5, 146c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert "read() with negative offset should throw IndexOutOfBoundsException"); 147c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 148c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 149c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert @SmallTest 150c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert public void testReadNegativeCount() throws Exception { 151c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert readIndexOutOfBoundsException(5, -1, 152c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert "read() with negative length should throw IndexOutOfBoundsException"); 153c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 154c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 155c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert @SmallTest 156c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert public void testReadOffsetOverflow() throws Exception { 157c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert readIndexOutOfBoundsException(testString.length + 10, 5, 158c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert "read() with offset outside buffer should throw IndexOutOfBoundsException"); 159c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 160c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 161c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert @SmallTest 162c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert public void testReadOffsetCountOverflow() throws Exception { 163c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert readIndexOutOfBoundsException(testString.length, 11, 164c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert "read() with offset + count outside buffer should throw IndexOutOfBoundsException"); 165c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 166c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 167c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert // Test behavior of read() at end of file 168c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert @SmallTest 169c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert public void testReadEOF() throws Exception { 170c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", testString.length); 171c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert try { 172c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert file.writeBytes(testString, 0, 0, testString.length); 173c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert InputStream is = file.getInputStream(); 174c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert try { 175c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert byte[] buffer = new byte[testString.length + 10]; 176c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert // read() with count larger than data should succeed, and return # of bytes read 177c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert assertEquals(testString.length, is.read(buffer)); 178c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert compareBuffers(testString, buffer, testString.length); 179c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert // Read at EOF should return -1 180c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert assertEquals(-1, is.read()); 181c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } finally { 182c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert is.close(); 183c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 184c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } finally { 185c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert file.close(); 186c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 187c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert } 188c1823701cc76790494fb622fe58f0942236cd7d0Bjorn Bringert 189761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // Tests that close() is idempotent 190761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert @SmallTest 191761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert public void testCloseClose() throws Exception { 192761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", 1000000); 193761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert byte[] data = new byte[512]; 194761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.writeBytes(data, 0, 0, 128); 195761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 196761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 197761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 198761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 199761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // Tests that we can't read from a closed memory file 200761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert @SmallTest 201761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert public void testCloseRead() throws Exception { 202761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", 1000000); 203761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 204761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 205761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert try { 206761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert byte[] data = new byte[512]; 207761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert assertEquals(128, file.readBytes(data, 0, 0, 128)); 208761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert fail("readBytes() after close() did not throw IOException."); 209761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } catch (IOException e) { 210761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // this is what should happen 211761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 212761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 213761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 214761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // Tests that we can't write to a closed memory file 215761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert @SmallTest 216761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert public void testCloseWrite() throws Exception { 217761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", 1000000); 218761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 219761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 220761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert try { 221761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert byte[] data = new byte[512]; 222761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.writeBytes(data, 0, 0, 128); 223761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert fail("writeBytes() after close() did not throw IOException."); 224761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } catch (IOException e) { 225761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // this is what should happen 226761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 227761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 228761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 229761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // Tests that we can't call allowPurging() after close() 230761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert @SmallTest 231761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert public void testCloseAllowPurging() throws Exception { 232761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", 1000000); 233761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert byte[] data = new byte[512]; 234761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.writeBytes(data, 0, 0, 128); 235761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 236761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 237761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert try { 238761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.allowPurging(true); 239761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert fail("allowPurging() after close() did not throw IOException."); 240761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } catch (IOException e) { 241761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // this is what should happen 242761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 243761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 244761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 245761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // Tests that we don't leak file descriptors or mmap areas 246761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert @LargeTest 247761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert public void testCloseLeak() throws Exception { 248761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // open enough memory files that we should run out of 249761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert // file descriptors or address space if we leak either. 250761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert for (int i = 0; i < 1025; i++) { 251761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert MemoryFile file = new MemoryFile("MemoryFileTest", 5000000); 252761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.writeBytes(testString, 0, 0, testString.length); 253761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert file.close(); 254761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 255761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert } 256761e0918d30b6a3f292625b44b86dffd1538bc78Bjorn Bringert 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final byte[] testString = new byte[] { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8, 4, 1, 9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9, 4, 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 6, 2, 8, 6, 2, 0, 8, 9, 9, 8, 6, 2, 8, 0, 3, 4, 8, 2, 5, 3, 4, 2, 1, 1, 7, 0, 6, 7, 9, 8, 2, 1, 4, 8, 0, 8, 6, 5, 1, 3, 2, 8, 2, 3, 0, 6, 6, 4, 7, 0, 9, 3, 8, 4, 4, 6, 0, 9, 5, 5, 0, 5, 8, 2, 2, 3, 1, 7, 2, 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 3, 5, 9, 4, 0, 8, 1, 2, 8, 4, 8, 1, 1, 1, 7, 4, 5, 0, 2, 8, 4, 1, 0, 2, 7, 0, 1, 9, 3, 8, 5, 2, 1, 1, 0, 5, 5, 5, 9, 6, 4, 4, 6, 2, 2, 9, 4, 8, 9, 5, 4, 9, 3, 0, 3, 8, 1, 9, 6, 4, 4, 2, 8, 8, 1, 0, 9, 7, 5, 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 5, 9, 3, 3, 4, 4, 6, 1, 2, 8, 4, 7, 5, 6, 4, 8, 2, 3, 3, 7, 8, 6, 7, 8, 3, 1, 6, 5, 2, 7, 1, 2, 0, 1, 9, 0, 9, 1, 4, 5, 6, 4, 8, 5, 6, 6, 9, 2, 3, 4, 6, 0, 3, 4, 8, 6, 1, 0, 4, 5, 4, 3, 2, 6, 6, 4, 8, 2, 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 3, 3, 9, 3, 6, 0, 7, 2, 6, 0, 2, 4, 9, 1, 4, 1, 2, 7, 3, 7, 2, 4, 5, 8, 7, 0, 0, 6, 6, 0, 6, 3, 1, 5, 5, 8, 8, 1, 7, 4, 8, 8, 1, 5, 2, 0, 9, 2, 0, 9, 6, 2, 8, 2, 9, 2, 5, 4, 0, 9, 1, 7, 1, 5, 3, 6, 4, 3, 6, 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 8, 9, 2, 5, 9, 0, 3, 6, 0, 0, 1, 1, 3, 3, 0, 5, 3, 0, 5, 4, 8, 8, 2, 0, 4, 6, 6, 5, 2, 1, 3, 8, 4, 1, 4, 6, 9, 5, 1, 9, 4, 1, 5, 1, 1, 6, 0, 9, 4, 3, 3, 0, 5, 7, 2, 7, 0, 3, 6, 5, 7, 5, 9, 5, 9, 1, 9, 5, 3, 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 9, 2, 1, 8, 6, 1, 1, 7, 3, 8, 1, 9, 3, 2, 6, 1, 1, 7, 9, 3, 1, 0, 5, 1, 1, 8, 5, 4, 8, 0, 7, 4, 4, 6, 2, 3, 7, 9, 9, 6, 2, 7, 4, 9, 5, 6, 7, 3, 5, 1, 8, 8, 5, 7, 5, 2, 7, 2, 4, 8, 9, 1, 2, 2, 7, 9, 3, 8, 1, 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 3, 0, 1, 1, 9, 4, 9, 1, 2, 9, 8, 3, 3, 6, 7, 3, 3, 6, 2, 4, 4, 0, 6, 5, 6, 6, 4, 3, 0, 8, 6, 0, 2, 1, 3, 9, 4, 9, 4, 6, 3, 9, 5, 2, 2, 4, 7, 3, 7, 1, 9, 0, 7, 0, 2, 1, 7, 9, 8, 6, 0, 9, 4, 3, 7, 0, 2, 7, 7, 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 5, 3, 9, 2, 1, 7, 1, 7, 6, 2, 9, 3, 1, 7, 6, 7, 5, 2, 3, 8, 4, 6, 7, 4, 8, 1, 8, 4, 6, 7, 6, 6, 9, 4, 0, 5, 1, 3, 2, 0, 0, 0, 5, 6, 8, 1, 2, 7, 1, 4, 5, 2, 6, 3, 5, 6, 0, 8, 2, 7, 7, 8, 5, 7, 7, 1, 3, 4, 2, 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 5, 7, 7, 8, 9, 6, 0, 9, 1, 7, 3, 6, 3, 7, 1, 7, 8, 7, 2, 1, 4, 6, 8, 4, 4, 0, 9, 0, 1, 2, 2, 4, 9, 5, 3, 4, 3, 0, 1, 4, 6, 5, 4, 9, 5, 8, 5, 3, 7, 1, 0, 5, 0, 7, 9, 2, 2, 7, 9, 6, 8, 9, 2, 5, 8, 9, 2, 3, 5, 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 2, 0, 1, 9, 9, 5, 6, 1, 1, 2, 1, 2, 9, 0, 2, 1, 9, 6, 0, 8, 6, 4, 0, 3, 4, 4, 1, 8, 1, 5, 9, 8, 1, 3, 6, 2, 9, 7, 7, 4, 7, 7, 1, 3, 0, 9, 9, 6, 0, 5, 1, 8, 7, 0, 7, 2, 1, 1, 3, 4, 9, 9, 9, 9, 9, 9, 8, 3, 7, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 9, 7, 8, 0, 4, 9, 9, 5, 1, 0, 5, 9, 7, 3, 1, 7, 3, 2, 8, 1, 6, 0, 9, 6, 3, 1, 8, 5, 9, 5, 0, 2, 4, 4, 5, 9, 4, 5, 5, 3, 4, 6, 9, 0, 8, 3, 0, 2, 6, 4, 2, 5, 2, 2, 3, 0, 8, 2, 5, 3, 3, 4, 4, 6, 8, 5, 0, 3, 5, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 6, 1, 9, 3, 1, 1, 8, 8, 1, 7, 1, 0, 1, 0, 0, 0, 3, 1, 3, 7, 8, 3, 8, 7, 5, 2, 8, 8, 6, 5, 8, 7, 5, 3, 3, 2, 0, 8, 3, 8, 1, 4, 2, 0, 6, 1, 7, 1, 7, 7, 6, 6, 9, 1, 4, 7, 3, 0, 3, 5, 9, 8, 2, 5, 3, 4, 9, 0, 4, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 8, 7, 5, 5, 4, 6, 8, 7, 3, 1, 1, 5, 9, 5, 6, 2, 8, 6, 3, 8, 8, 2, 3, 5, 3, 7, 8, 7, 5, 9, 3, 7, 5, 1, 9, 5, 7, 7, 8, 1, 8, 5, 7, 7, 8, 0, 5, 3, 2, 1, 7, 1, 2, 2, 6, 8, 0, 6, 6, 1, 3, 0, 0, 1, 9, 2, 7, 8, 7, 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 1, 1, 1, 9, 5, 9, 0, 9, 2, 1, 6, 4, 2, 0, 1, 9, 8, 9, 3, 8, 0, 9, 5, 2, 5, 7, 2, 0, 1, 0, 6, 5, 4, 8, 5, 8, 6, 3, 2, 7, 8, 8, 6, 5, 9, 3, 6, 1, 5, 3, 3, 8, 1, 8, 2, 7, 9, 6, 8, 2, 3, 0, 3, 0, 1, 9, 5, 2, 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 3, 5, 3, 0, 1, 8, 5, 2, 9, 6, 8, 9, 9, 5, 7, 7, 3, 6, 2, 2, 5, 9, 9, 4, 1, 3, 8, 9, 1, 2, 4, 9, 7, 2, 1, 7, 7, 5, 2, 8, 3, 4, 7, 9, 1, 3, 1, 5, 1, 5, 5, 7, 4, 8, 5, 7, 2, 4, 2, 4, 5, 4, 1, 5, 0, 6, 9, 5, 9, 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 0, 8, 2, 9, 5, 3, 3, 1, 1, 6, 8, 6, 1, 7, 2, 7, 8, 5, 5, 8, 8, 9, 0, 7, 5, 0, 9, 8, 3, 8, 1, 7, 5, 4, 6, 3, 7, 4, 6, 4, 9, 3, 9, 3, 1, 9, 2, 5, 5, 0, 6, 0, 4, 0, 0, 9, 2, 7, 7, 0, 1, 6, 7, 1, 1, 3, 9, 0, 0, 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 8, 4, 8, 8, 2, 4, 0, 1, 2, 8, 5, 8, 3, 6, 1, 6, 0, 3, 5, 6, 3, 7, 0, 7, 6, 6, 0, 1, 0, 4, 7, 1, 0, 1, 8, 1, 9, 4, 2, 9, 5, 5, 5, 9, 6, 1, 9, 8, 9, 4, 6, 7, 6, 7, 8, 3, 7, 4, 4, 9, 4, 4, 8, 2, 5, 5, 3, 7, 9, 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 7, 4, 7, 2, 6, 8, 4, 7, 1, 0, 4, 0, 4, 7, 5, 3, 4, 6, 4, 6, 2, 0, 8, 0, 4, 6, 6, 8, 4, 2, 5, 9, 0, 6, 9, 4, 9, 1, 2, 9, 3, 3, 1, 3, 6, 7, 7, 0, 2, 8, 9, 8, 9, 1, 5, 2, 1, 0, 4, 7, 5, 2, 1, 6, 2, 0, 5, 6, 9, 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 0, 2, 4, 0, 5, 8, 0, 3, 8, 1, 5, 0, 1, 9, 3, 5, 1, 1, 2, 5, 3, 3, 8, 2, 4, 3, 0, 0, 3, 5, 5, 8, 7, 6, 4, 0, 2, 4, 7, 4, 9, 6, 4, 7, 3, 2, 6, 3, 9, 1, 4, 1, 9, 9, 2, 7, 2, 6, 0, 4, 2, 6, 9, 9, 2, 2, 7, 9, 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 7, 8, 2, 3, 5, 4, 7, 8, 1, 6, 3, 6, 0, 0, 9, 3, 4, 1, 7, 2, 1, 6, 4, 1, 2, 1, 9, 9, 2, 4, 5, 8, 6, 3, 1, 5, 0, 3, 0, 2, 8, 6, 1, 8, 2, 9, 7, 4, 5, 5, 5, 7, 0, 6, 7, 4, 9, 8, 3, 8, 5, 0, 5, 4, 9, 4, 5, 8, 8, 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 8, 6, 9, 2, 6, 9, 9, 5, 6, 9, 0, 9, 2, 7, 2, 1, 0, 7, 9, 7, 5, 0, 9, 3, 0, 2, 9, 5, 5, 3, 2, 1, 1, 6, 5, 3, 4, 4, 9, 8, 7, 2, 0, 2, 7, 5, 5, 9, 6, 0, 2, 3, 6, 4, 8, 0, 6, 6, 5, 4, 9, 9, 1, 1, 9, 8, 8, 1, 8, 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 4, 7, 9, 7, 7, 5, 3, 5, 6, 6, 3, 6, 9, 8, 0, 7, 4, 2, 6, 5, 4, 2, 5, 2, 7, 8, 6, 2, 5, 5, 1, 8, 1, 8, 4, 1, 7, 5, 7, 4, 6, 7, 2, 8, 9, 0, 9, 7, 7, 7, 7, 2, 7, 9, 3, 8, 0, 0, 0, 8, 1, 6, 4, 7, 0, 6, 0, 0, 1, 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 1, 4, 5, 2, 4, 9, 1, 9, 2, 1, 7, 3, 2, 1, 7, 2, 1, 4, 7, 7, 2, 3, 5, 0, 1, 4, 1, 4, 4, 1, 9, 7, 3, 5, 6, 8, 5, 4, 8, 1, 6, 1, 3, 6, 1, 1, 5, 7, 3, 5, 2, 5, 5, 2, 1, 3, 3, 4, 7, 5, 7, 4, 1, 8, 4, 9, 4, 6, 8, 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 3, 8, 5, 2, 3, 3, 2, 3, 9, 0, 7, 3, 9, 4, 1, 4, 3, 3, 3, 4, 5, 4, 7, 7, 6, 2, 4, 1, 6, 8, 6, 2, 5, 1, 8, 9, 8, 3, 5, 6, 9, 4, 8, 5, 5, 6, 2, 0, 9, 9, 2, 1, 9, 2, 2, 2, 1, 8, 4, 2, 7, 2, 5, 5, 0, 2, 5, 4, 2, 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 6, 8, 8, 7, 6, 7, 1, 7, 9, 0, 4, 9, 4, 6, 0, 1, 6, 5, 3, 4, 6, 6, 8, 0, 4, 9, 8, 8, 6, 2, 7, 2, 3, 2, 7, 9, 1, 7, 8, 6, 0, 8, 5, 7, 8, 4, 3, 8, 3, 8, 2, 7, 9, 6, 7, 9, 7, 6, 6, 8, 1, 4, 5, 4, 1, 0, 0, 9, 5, 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 8, 8, 3, 7, 8, 6, 3, 6, 0, 9, 5, 0, 6, 8, 0, 0, 6, 4, 2, 2, 5, 1, 2, 5, 2, 0, 5, 1, 1, 7, 3, 9, 2, 9, 8, 4, 8, 9, 6, 0, 8, 4, 1, 2, 8, 4, 8, 8, 6, 2, 6, 9, 4, 5, 6, 0, 4, 2, 4, 1, 9, 6, 5, 2, 8, 5, 0, 2, 2, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 1, 0, 6, 6, 1, 1, 8, 6, 3, 0, 6, 7, 4, 4, 2, 7, 8, 6, 2, 2, 0, 3, 9, 1, 9, 4, 9, 4, 5, 0, 4, 7, 1, 2, 3, 7, 1, 3, 7, 8, 6, 9, 6, 0, 9, 5, 6, 3, 6, 4, 3, 7, 1, 9, 1, 7, 2, 8, 7, 4, 6, 7, 7, 6, 4, 6, 5, 7, 5, 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 3, 9, 6, 2, 4, 1, 3, 8, 9, 0, 8, 6, 5, 8, 3, 2, 6, 4, 5, 9, 9, 5, 8, 1, 3, 3, 9, 0, 4, 7, 8, 0, 2, 7, 5, 9, 0, 0, 9, 9, 4, 6, 5, 7, 6, 4, 0, 7, 8, 9, 5, 1, 2, 6, 9, 4, 6, 8, 3, 9, 8, 3, 5, 2, 5, 9, 5, 7, 0, 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 8, 2, 5, 8, 2, 2, 6, 2, 0, 5, 2, 2, 4, 8, 9, 4, 0, 7, 7, 2, 6, 7, 1, 9, 4, 7, 8, 2, 6, 8, 4, 8, 2, 6, 0, 1, 4, 7, 6, 9, 9, 0, 9, 0, 2, 6, 4, 0, 1, 3, 6, 3, 9, 4, 4, 3, 7, 4, 5, 5, 3, 0, 5, 0, 6, 8, 2, 0, 3, 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 9, 6, 2, 5, 2, 4, 5, 1, 7, 4, 9, 3, 9, 9, 6, 5, 1, 4, 3, 1, 4, 2, 9, 8, 0, 9, 1, 9, 0, 6, 5, 9, 2, 5, 0, 9, 3, 7, 2, 2, 1, 6, 9, 6, 4, 6, 1, 5, 1, 5, 7, 0, 9, 8, 5, 8, 3, 8, 7, 4, 1, 0, 5, 9, 7, 8, 8, 5, 9, 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 9, 7, 7, 2, 9, 7, 5, 4, 9, 8, 9, 3, 0, 1, 6, 1, 7, 5, 3, 9, 2, 8, 4, 6, 8, 1, 3, 8, 2, 6, 8, 6, 8, 3, 8, 6, 8, 9, 4, 2, 7, 7, 4, 1, 5, 5, 9, 9, 1, 8, 5, 5, 9, 2, 5, 2, 4, 5, 9, 5, 3, 9, 5, 9, 4, 3, 1, 0, 4, 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 9, 7, 2, 5, 2, 4, 6, 8, 0, 8, 4, 5, 9, 8, 7, 2, 7, 3, 6, 4, 4, 6, 9, 5, 8, 4, 8, 6, 5, 3, 8, 3, 6, 7, 3, 6, 2, 2, 2, 6, 2, 6, 0, 9, 9, 1, 2, 4, 6, 0, 8, 0, 5, 1, 2, 4, 3, 8, 8, 4, 3, 9, 0, 4, 5, 1, 2, 4, 4, 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 3, 6, 5, 4, 9, 7, 6, 2, 7, 8, 0, 7, 9, 7, 7, 1, 5, 6, 9, 1, 4, 3, 5, 9, 9, 7, 7, 0, 0, 1, 2, 9, 6, 1, 6, 0, 8, 9, 4, 4, 1, 6, 9, 4, 8, 6, 8, 5, 5, 5, 8, 4, 8, 4, 0, 6, 3, 5, 3, 4, 2, 2, 0, 7, 2, 2, 2, 5, 8, 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 8, 4, 8, 8, 6, 4, 8, 1, 5, 8, 4, 5, 6, 0, 2, 8, 5, 0, 6, 0, 1, 6, 8, 4, 2, 7, 3, 9, 4, 5, 2, 2, 6, 7, 4, 6, 7, 6, 7, 8, 8, 9, 5, 2, 5, 2, 1, 3, 8, 5, 2, 2, 5, 4, 9, 9, 5, 4, 6, 6, 6, 7, 2, 7, 8, 2, 3, 9, 8, 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 4, 5, 6, 5, 9, 6, 1, 1, 6, 3, 5, 4, 8, 8, 6, 2, 3, 0, 5, 7, 7, 4, 5, 6, 4, 9, 8, 0, 3, 5, 5, 9, 3, 6, 3, 4, 5, 6, 8, 1, 7, 4, 3, 2, 4, 1, 1, 2, 5, 1, 5, 0, 7, 6, 0, 6, 9, 4, 7, 9, 4, 5, 1, 0, 9, 6, 5, 9, 6, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 9, 4, 0, 2, 5, 2, 2, 8, 8, 7, 9, 7, 1, 0, 8, 9, 3, 1, 4, 5, 6, 6, 9, 1, 3, 6, 8, 6, 7, 2, 2, 8, 7, 4, 8, 9, 4, 0, 5, 6, 0, 1, 0, 1, 5, 0, 3, 3, 0, 8, 6, 1, 7, 9, 2, 8, 6, 8, 0, 9, 2, 0, 8, 7, 4, 7, 6, 0, 9, 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 7, 8, 2, 4, 9, 3, 8, 5, 8, 9, 0, 0, 9, 7, 1, 4, 9, 0, 9, 6, 7, 5, 9, 8, 5, 2, 6, 1, 3, 6, 5, 5, 4, 9, 7, 8, 1, 8, 9, 3, 1, 2, 9, 7, 8, 4, 8, 2, 1, 6, 8, 2, 9, 9, 8, 9, 4, 8, 7, 2, 2, 6, 5, 8, 8, 0, 4, 8, 5, 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 5, 6, 4, 0, 1, 4, 2, 7, 0, 4, 7, 7, 5, 5, 5, 1, 3, 2, 3, 7, 9, 6, 4, 1, 4, 5, 1, 5, 2, 3, 7, 4, 6, 2, 3, 4, 3, 6, 4, 5, 4, 2, 8, 5, 8, 4, 4, 4, 7, 9, 5, 2, 6, 5, 8, 6, 7, 8, 2, 1, 0, 5, 1, 1, 4, 1, 3, 5, 4, 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 3, 5, 7, 3, 9, 5, 2, 3, 1, 1, 3, 4, 2, 7, 1, 6, 6, 1, 0, 2, 1, 3, 5, 9, 6, 9, 5, 3, 6, 2, 3, 1, 4, 4, 2, 9, 5, 2, 4, 8, 4, 9, 3, 7, 1, 8, 7, 1, 1, 0, 1, 4, 5, 7, 6, 5, 4, 0, 3, 5, 9, 0, 2, 7, 9, 9, 3, 4, 4, 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 3, 7, 4, 2, 0, 0, 7, 3, 1, 0, 5, 7, 8, 5, 3, 9, 0, 6, 2, 1, 9, 8, 3, 8, 7, 4, 4, 7, 8, 0, 8, 4, 7, 8, 4, 8, 9, 6, 8, 3, 3, 2, 1, 4, 4, 5, 7, 1, 3, 8, 6, 8, 7, 5, 1, 9, 4, 3, 5, 0, 6, 4, 3, 0, 2, 1, 8, 4, 5, 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 1, 9, 1, 0, 4, 8, 4, 8, 1, 0, 0, 5, 3, 7, 0, 6, 1, 4, 6, 8, 0, 6, 7, 4, 9, 1, 9, 2, 7, 8, 1, 9, 1, 1, 9, 7, 9, 3, 9, 9, 5, 2, 0, 6, 1, 4, 1, 9, 6, 6, 3, 4, 2, 8, 7, 5, 4, 4, 4, 0, 6, 4, 3, 7, 4, 5, 1, 2, 3, 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 1, 8, 1, 9, 2, 1, 7, 9, 9, 9, 8, 3, 9, 1, 0, 1, 5, 9, 1, 9, 5, 6, 1, 8, 1, 4, 6, 7, 5, 1, 4, 2, 6, 9, 1, 2, 3, 9, 7, 4, 8, 9, 4, 0, 9, 0, 7, 1, 8, 6, 4, 9, 4, 2, 3, 1, 9, 6, 1, 5, 6, 7, 9, 4, 5, 2, 0, 8, 0, 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 5, 1, 4, 6, 5, 5, 0, 2, 2, 5, 2, 3, 1, 6, 0, 3, 8, 8, 1, 9, 3, 0, 1, 4, 2, 0, 9, 3, 7, 6, 2, 1, 3, 7, 8, 5, 5, 9, 5, 6, 6, 3, 8, 9, 3, 7, 7, 8, 7, 0, 8, 3, 0, 3, 9, 0, 6, 9, 7, 9, 2, 0, 7, 7, 3, 4, 6, 7, 2, 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 1, 8, 2, 5, 6, 2, 5, 9, 9, 6, 6, 1, 5, 0, 1, 4, 2, 1, 5, 0, 3, 0, 6, 8, 0, 3, 8, 4, 4, 7, 7, 3, 4, 5, 4, 9, 2, 0, 2, 6, 0, 5, 4, 1, 4, 6, 6, 5, 9, 2, 5, 2, 0, 1, 4, 9, 7, 4, 4, 2, 8, 5, 0, 7, 3, 2, 5, 1, 8, 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 6, 0, 0, 2, 1, 3, 2, 4, 3, 4, 0, 8, 8, 1, 9, 0, 7, 1, 0, 4, 8, 6, 3, 3, 1, 7, 3, 4, 6, 4, 9, 6, 5, 1, 4, 5, 3, 9, 0, 5, 7, 9, 6, 2, 6, 8, 5, 6, 1, 0, 0, 5, 5, 0, 8, 1, 0, 6, 6, 5, 8, 7, 9, 6, 9, 9, 8, 1, 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 3, 5, 7, 4, 7, 3, 6, 3, 8, 4, 0, 5, 2, 5, 7, 1, 4, 5, 9, 1, 0, 2, 8, 9, 7, 0, 6, 4, 1, 4, 0, 1, 1, 0, 9, 7, 1, 2, 0, 6, 2, 8, 0, 4, 3, 9, 0, 3, 9, 7, 5, 9, 5, 1, 5, 6, 7, 7, 1, 5, 7, 7, 0, 0, 4, 2, 0, 3, 3, 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 8, 6, 9, 9, 3, 6, 0, 0, 7, 2, 3, 0, 5, 5, 8, 7, 6, 3, 1, 7, 6, 3, 5, 9, 4, 2, 1, 8, 7, 3, 1, 2, 5, 1, 4, 7, 1, 2, 0, 5, 3, 2, 9, 2, 8, 1, 9, 1, 8, 2, 6, 1, 8, 6, 1, 2, 5, 8, 6, 7, 3, 2, 1, 5, 7, 9, 1, 9, 8, 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 1, 4, 8, 4, 8, 8, 2, 9, 1, 6, 4, 4, 7, 0, 6, 0, 9, 5, 7, 5, 2, 7, 0, 6, 9, 5, 7, 2, 2, 0, 9, 1, 7, 5, 6, 7, 1, 1, 6, 7, 2, 2, 9, 1, 0, 9, 8, 1, 6, 9, 0, 9, 1, 5, 2, 8, 0, 1, 7, 3, 5, 0, 6, 7, 1, 2, 7, 4, 8, 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 8, 3, 2, 2, 2, 8, 7, 1, 8, 3, 5, 2, 0, 9, 3, 5, 3, 9, 6, 5, 7, 2, 5, 1, 2, 1, 0, 8, 3, 5, 7, 9, 1, 5, 1, 3, 6, 9, 8, 8, 2, 0, 9, 1, 4, 4, 4, 2, 1, 0, 0, 6, 7, 5, 1, 0, 3, 3, 4, 6, 7, 1, 1, 0, 3, 1, 4, 1, 2, 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 7, 1, 1, 1, 3, 6, 9, 9, 0, 8, 6, 5, 8, 5, 1, 6, 3, 9, 8, 3, 1, 5, 0, 1, 9, 7, 0, 1, 6, 5, 1, 5, 1, 1, 6, 8, 5, 1, 7, 1, 4, 3, 7, 6, 5, 7, 6, 1, 8, 3, 5, 1, 5, 5, 6, 5, 0, 8, 8, 4, 9, 0, 9, 9, 8, 9, 8, 5, 9, 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 8, 2, 3, 8, 7, 3, 4, 5, 5, 2, 8, 3, 3, 1, 6, 3, 5, 5, 0, 7, 6, 4, 7, 9, 1, 8, 5, 3, 5, 8, 9, 3, 2, 2, 6, 1, 8, 5, 4, 8, 9, 6, 3, 2, 1, 3, 2, 9, 3, 3, 0, 8, 9, 8, 5, 7, 0, 6, 4, 2, 0, 4, 6, 7, 5, 2, 5, 9, 0, 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 0, 9, 1, 5, 4, 8, 1, 4, 1, 6, 5, 4, 9, 8, 5, 9, 4, 6, 1, 6, 3, 7, 1, 8, 0, 2, 7, 0, 9, 8, 1, 9, 9, 4, 3, 0, 9, 9, 2, 4, 4, 8, 8, 9, 5, 7, 5, 7, 1, 2, 8, 2, 8, 9, 0, 5, 9, 2, 3, 2, 3, 3, 2, 6, 0, 9, 7, 2, 9, 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 7, 1, 2, 0, 8, 4, 4, 3, 3, 5, 7, 3, 2, 6, 5, 4, 8, 9, 3, 8, 2, 3, 9, 1, 1, 9, 3, 2, 5, 9, 7, 4, 6, 3, 6, 6, 7, 3, 0, 5, 8, 3, 6, 0, 4, 1, 4, 2, 8, 1, 3, 8, 8, 3, 0, 3, 2, 0, 3, 8, 2, 4, 9, 0, 3, 7, 5, 8, 9, 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 5, 2, 4, 3, 7, 4, 4, 1, 7, 0, 2, 9, 1, 3, 2, 7, 6, 5, 6, 1, 8, 0, 9, 3, 7, 7, 3, 4, 4, 4, 0, 3, 0, 7, 0, 7, 4, 6, 9, 2, 1, 1, 2, 0, 1, 9, 1, 3, 0, 2, 0, 3, 3, 0, 3, 8, 0, 1, 9, 7, 6, 2, 1, 1, 0, 1, 1, 0, 0, 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 4, 9, 2, 9, 3, 2, 1, 5, 1, 6, 0, 8, 4, 2, 4, 4, 4, 8, 5, 9, 6, 3, 7, 6, 6, 9, 8, 3, 8, 9, 5, 2, 2, 8, 6, 8, 4, 7, 8, 3, 1, 2, 3, 5, 5, 2, 6, 5, 8, 2, 1, 3, 1, 4, 4, 9, 5, 7, 6, 8, 5, 7, 2, 6, 2, 4, 3, 3, 4, 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 1, 8, 9, 3, 0, 3, 9, 6, 8, 6, 4, 2, 6, 2, 4, 3, 4, 1, 0, 7, 7, 3, 2, 2, 6, 9, 7, 8, 0, 2, 8, 0, 7, 3, 1, 8, 9, 1, 5, 4, 4, 1, 1, 0, 1, 0, 4, 4, 6, 8, 2, 3, 2, 5, 2, 7, 1, 6, 2, 0, 1, 0, 5, 2, 6, 5, 2, 2, 7, 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 1, 1, 1, 6, 6, 0, 3, 9, 6, 6, 6, 5, 5, 7, 3, 0, 9, 2, 5, 4, 7, 1, 1, 0, 5, 5, 7, 8, 5, 3, 7, 6, 3, 4, 6, 6, 8, 2, 0, 6, 5, 3, 1, 0, 9, 8, 9, 6, 5, 2, 6, 9, 1, 8, 6, 2, 0, 5, 6, 4, 7, 6, 9, 3, 1, 2, 5, 7, 0, 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 8, 6, 3, 5, 6, 6, 2, 0, 1, 8, 5, 5, 8, 1, 0, 0, 7, 2, 9, 3, 6, 0, 6, 5, 9, 8, 7, 6, 4, 8, 6, 1, 1, 7, 9, 1, 0, 4, 5, 3, 3, 4, 8, 8, 5, 0, 3, 4, 6, 1, 1, 3, 6, 5, 7, 6, 8, 6, 7, 5, 3, 2, 4, 9, 4, 4, 1, 6, 6, 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 0, 3, 9, 6, 2, 6, 5, 7, 9, 7, 8, 7, 7, 1, 8, 5, 5, 6, 0, 8, 4, 5, 5, 2, 9, 6, 5, 4, 1, 2, 6, 6, 5, 4, 0, 8, 5, 3, 0, 6, 1, 4, 3, 4, 4, 4, 3, 1, 8, 5, 8, 6, 7, 6, 9, 7, 5, 1, 4, 5, 6, 6, 1, 4, 0, 6, 8, 0, 0, 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 0, 0, 2, 3, 7, 8, 7, 7, 6, 5, 9, 1, 3, 4, 4, 0, 1, 7, 1, 2, 7, 4, 9, 4, 7, 0, 4, 2, 0, 5, 6, 2, 2, 3, 0, 5, 3, 8, 9, 9, 4, 5, 6, 1, 3, 1, 4, 0, 7, 1, 1, 2, 7, 0, 0, 0, 4, 0, 7, 8, 5, 4, 7, 3, 3, 2, 6, 9, 9, 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 9, 0, 8, 1, 4, 5, 4, 6, 6, 4, 6, 4, 5, 8, 8, 0, 7, 9, 7, 2, 7, 0, 8, 2, 6, 6, 8, 3, 0, 6, 3, 4, 3, 2, 8, 5, 8, 7, 8, 5, 6, 9, 8, 3, 0, 5, 2, 3, 5, 8, 0, 8, 9, 3, 3, 0, 6, 5, 7, 5, 7, 4, 0, 6, 7, 9, 5, 4, 5, 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 1, 6, 3, 7, 7, 5, 2, 5, 4, 2, 0, 2, 1, 1, 4, 9, 5, 5, 7, 6, 1, 5, 8, 1, 4, 0, 0, 2, 5, 0, 1, 2, 6, 2, 2, 8, 5, 9, 4, 1, 3, 0, 2, 1, 6, 4, 7, 1, 5, 5, 0, 9, 7, 9, 2, 5, 9, 2, 3, 0, 9, 9, 0, 7, 9, 6, 5, 4, 7, 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 7, 6, 1, 2, 5, 5, 1, 7, 6, 5, 6, 7, 5, 1, 3, 5, 7, 5, 1, 7, 8, 2, 9, 6, 6, 6, 4, 5, 4, 7, 7, 9, 1, 7, 4, 5, 0, 1, 1, 2, 9, 9, 6, 1, 4, 8, 9, 0, 3, 0, 4, 6, 3, 9, 9, 4, 7, 1, 3, 2, 9, 6, 2, 1, 0, 7, 3, 4, 0, 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 3, 7, 5, 1, 8, 9, 5, 7, 3, 5, 9, 6, 1, 4, 5, 8, 9, 0, 1, 9, 3, 8, 9, 7, 1, 3, 1, 1, 1, 7, 9, 0, 4, 2, 9, 7, 8, 2, 8, 5, 6, 4, 7, 5, 0, 3, 2, 0, 3, 1, 9, 8, 6, 9, 1, 5, 1, 4, 0, 2, 8, 7, 0, 8, 0, 8, 5, 9, 9, 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 4, 8, 0, 1, 0, 9, 4, 1, 2, 1, 4, 7, 2, 2, 1, 3, 1, 7, 9, 4, 7, 6, 4, 7, 7, 7, 2, 6, 2, 2, 4, 1, 4, 2, 5, 4, 8, 5, 4, 5, 4, 0, 3, 3, 2, 1, 5, 7, 1, 8, 5, 3, 0, 6, 1, 4, 2, 2, 8, 8, 1, 3, 7, 5, 8, 5, 0, 4, 3, 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 6, 3, 3, 2, 1, 7, 5, 1, 8, 2, 9, 7, 9, 8, 6, 6, 2, 2, 3, 7, 1, 7, 2, 1, 5, 9, 1, 6, 0, 7, 7, 1, 6, 6, 9, 2, 5, 4, 7, 4, 8, 7, 3, 8, 9, 8, 6, 6, 5, 4, 9, 4, 9, 4, 5, 0, 1, 1, 4, 6, 5, 4, 0, 6, 2, 8, 4, 3, 3, 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 3, 9, 3, 7, 9, 0, 0, 3, 9, 7, 6, 9, 2, 6, 5, 6, 7, 2, 1, 4, 6, 3, 8, 5, 3, 0, 6, 7, 3, 6, 0, 9, 6, 5, 7, 1, 2, 0, 9, 1, 8, 0, 7, 6, 3, 8, 3, 2, 7, 1, 6, 6, 4, 1, 6, 2, 7, 4, 8, 8, 8, 8, 0, 0, 7, 8, 6, 9, 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 5, 6, 0, 2, 9, 0, 2, 2, 8, 4, 7, 2, 1, 0, 4, 0, 3, 1, 7, 2, 1, 1, 8, 6, 0, 8, 2, 0, 4, 1, 9, 0, 0, 0, 4, 2, 2, 9, 6, 6, 1, 7, 1, 1, 9, 6, 3, 7, 7, 9, 2, 1, 3, 3, 7, 5, 7, 5, 1, 1, 4, 9, 5, 9, 5, 0, 1, 5, 6, 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 0, 4, 9, 6, 3, 1, 8, 6, 2, 9, 4, 7, 2, 6, 5, 4, 7, 3, 6, 4, 2, 5, 2, 3, 0, 8, 1, 7, 7, 0, 3, 6, 7, 5, 1, 5, 9, 0, 6, 7, 3, 5, 0, 2, 3, 5, 0, 7, 2, 8, 3, 5, 4, 0, 5, 6, 7, 0, 4, 0, 3, 8, 6, 7, 4, 3, 5, 1, 3, 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 2, 2, 2, 2, 4, 7, 7, 1, 5, 8, 9, 1, 5, 0, 4, 9, 5, 3, 0, 9, 8, 4, 4, 4, 8, 9, 3, 3, 3, 0, 9, 6, 3, 4, 0, 8, 7, 8, 0, 7, 6, 9, 3, 2, 5, 9, 9, 3, 9, 7, 8, 0, 5, 4, 1, 9, 3, 4, 1, 4, 4, 7, 3, 7, 7, 4, 4, 1, 8, 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 2, 6, 3, 1, 2, 9, 8, 6, 0, 8, 0, 9, 9, 8, 8, 8, 6, 8, 7, 4, 1, 3, 2, 6, 0, 4, 7, 2, 1, 5, 6, 9, 5, 1, 6, 2, 3, 9, 6, 5, 8, 6, 4, 5, 7, 3, 0, 2, 1, 6, 3, 1, 5, 9, 8, 1, 9, 3, 1, 9, 5, 1, 6, 7, 3, 5, 3, 8, 1, 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 9, 7, 4, 1, 6, 7, 7, 2, 9, 4, 7, 8, 6, 7, 2, 4, 2, 2, 9, 2, 4, 6, 5, 4, 3, 6, 6, 8, 0, 0, 9, 8, 0, 6, 7, 6, 9, 2, 8, 2, 3, 8, 2, 8, 0, 6, 8, 9, 9, 6, 4, 0, 0, 4, 8, 2, 4, 3, 5, 4, 0, 3, 7, 0, 1, 4, 1, 6, 3, 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 4, 9, 6, 5, 8, 9, 7, 9, 4, 0, 9, 2, 4, 3, 2, 3, 7, 8, 9, 6, 9, 0, 7, 0, 6, 9, 7, 7, 9, 4, 2, 2, 3, 6, 2, 5, 0, 8, 2, 2, 1, 6, 8, 8, 9, 5, 7, 3, 8, 3, 7, 9, 8, 6, 2, 3, 0, 0, 1, 5, 9, 3, 7, 7, 6, 4, 7, 1, 6, 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 1, 2, 2, 8, 9, 3, 5, 7, 8, 6, 0, 1, 5, 8, 8, 1, 6, 1, 7, 5, 5, 7, 8, 2, 9, 7, 3, 5, 2, 3, 3, 4, 4, 6, 0, 4, 2, 8, 1, 5, 1, 2, 6, 2, 7, 2, 0, 3, 7, 3, 4, 3, 1, 4, 6, 5, 3, 1, 9, 7, 7, 7, 7, 4, 1, 6, 0, 3, 1, 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 9, 0, 6, 6, 5, 5, 4, 1, 8, 7, 6, 3, 9, 7, 9, 2, 9, 3, 3, 4, 4, 1, 9, 5, 2, 1, 5, 4, 1, 3, 4, 1, 8, 9, 9, 4, 8, 5, 4, 4, 4, 7, 3, 4, 5, 6, 7, 3, 8, 3, 1, 6, 2, 4, 9, 9, 3, 4, 1, 9, 1, 3, 1, 8, 1, 4, 8, 0, 9, 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 7, 7, 7, 7, 1, 0, 3, 8, 6, 3, 8, 7, 7, 3, 4, 3, 1, 7, 7, 2, 0, 7, 5, 4, 5, 6, 5, 4, 5, 3, 2, 2, 0, 7, 7, 7, 0, 9, 2, 1, 2, 0, 1, 9, 0, 5, 1, 6, 6, 0, 9, 6, 2, 8, 0, 4, 9, 0, 9, 2, 6, 3, 6, 0, 1, 9, 7, 5, 9, 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 8, 2, 8, 1, 6, 1, 3, 3, 2, 3, 1, 6, 6, 6, 3, 6, 5, 2, 8, 6, 1, 9, 3, 2, 6, 6, 8, 6, 3, 3, 6, 0, 6, 2, 7, 3, 5, 6, 7, 6, 3, 0, 3, 5, 4, 4, 7, 7, 6, 2, 8, 0, 3, 5, 0, 4, 5, 0, 7, 7, 7, 2, 3, 5, 5, 4, 7, 1, 0, 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 8, 5, 9, 5, 4, 8, 7, 0, 2, 7, 9, 0, 8, 1, 4, 3, 5, 6, 2, 4, 0, 1, 4, 5, 1, 7, 1, 8, 0, 6, 2, 4, 6, 4, 3, 6, 2, 6, 7, 9, 4, 5, 6, 1, 2, 7, 5, 3, 1, 8, 1, 3, 4, 0, 7, 8, 3, 3, 0, 3, 3, 6, 2, 5, 4, 2, 3, 2, 7, 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 3, 9, 4, 4, 9, 7, 5, 3, 8, 2, 4, 3, 7, 2, 0, 5, 8, 3, 5, 3, 1, 1, 4, 7, 7, 1, 1, 9, 9, 2, 6, 0, 6, 3, 8, 1, 3, 3, 4, 6, 7, 7, 6, 8, 7, 9, 6, 9, 5, 9, 7, 0, 3, 0, 9, 8, 3, 3, 9, 1, 3, 0, 7, 7, 1, 0, 9, 8, 7, 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 4, 0, 8, 5, 9, 1, 3, 3, 7, 4, 6, 4, 1, 4, 4, 2, 8, 2, 2, 7, 7, 2, 6, 3, 4, 6, 5, 9, 4, 7, 0, 4, 7, 4, 5, 8, 7, 8, 4, 7, 7, 8, 7, 2, 0, 1, 9, 2, 7, 7, 1, 5, 2, 8, 0, 7, 3, 1, 7, 6, 7, 9, 0, 7, 7, 0, 7, 1, 5, 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 2, 1, 3, 4, 4, 4, 7, 3, 0, 6, 0, 5, 7, 0, 0, 7, 3, 3, 4, 9, 2, 4, 3, 6, 9, 3, 1, 1, 3, 8, 3, 5, 0, 4, 9, 3, 1, 6, 3, 1, 2, 8, 4, 0, 4, 2, 5, 1, 2, 1, 9, 2, 5, 6, 5, 1, 7, 9, 8, 0, 6, 9, 4, 1, 1, 3, 5, 2, 8, 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 1, 3, 1, 4, 7, 0, 1, 3, 0, 4, 7, 8, 1, 6, 4, 3, 7, 8, 8, 5, 1, 8, 5, 2, 9, 0, 9, 2, 8, 5, 4, 5, 2, 0, 1, 1, 6, 5, 8, 3, 9, 3, 4, 1, 9, 6, 5, 6, 2, 1, 3, 4, 9, 1, 4, 3, 4, 1, 5, 9, 5, 6, 2, 5, 8, 6, 5, 8, 6, 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 5, 7, 0, 5, 5, 2, 6, 9, 0, 4, 9, 6, 5, 2, 0, 9, 8, 5, 8, 0, 3, 3, 8, 5, 0, 7, 2, 2, 4, 2, 6, 4, 8, 2, 9, 3, 9, 7, 2, 8, 5, 8, 4, 7, 8, 3, 1, 6, 3, 0, 5, 7, 7, 7, 7, 5, 6, 0, 6, 8, 8, 8, 7, 6, 4, 4, 6, 2, 4, 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 2, 4, 6, 8, 5, 7, 9, 2, 6, 0, 3, 9, 5, 3, 5, 2, 7, 7, 3, 4, 8, 0, 3, 0, 4, 8, 0, 2, 9, 0, 0, 5, 8, 7, 6, 0, 7, 5, 8, 2, 5, 1, 0, 4, 7, 4, 7, 0, 9, 1, 6, 4, 3, 9, 6, 1, 3, 6, 2, 6, 7, 6, 0, 4, 4, 9, 2, 5, 6, 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 7, 4, 2, 0, 4, 2, 0, 8, 3, 2, 0, 8, 5, 6, 6, 1, 1, 9, 0, 6, 2, 5, 4, 5, 4, 3, 3, 7, 2, 1, 3, 1, 5, 3, 5, 9, 5, 8, 4, 5, 0, 6, 8, 7, 7, 2, 4, 6, 0, 2, 9, 0, 1, 6, 1, 8, 7, 6, 6, 7, 9, 5, 2, 4, 0, 6, 1, 6, 3, 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 2, 5, 2, 2, 5, 7, 7, 1, 9, 5, 4, 2, 9, 1, 6, 2, 9, 9, 1, 9, 3, 0, 6, 4, 5, 5, 3, 7, 7, 9, 9, 1, 4, 0, 3, 7, 3, 4, 0, 4, 3, 2, 8, 7, 5, 2, 6, 2, 8, 8, 8, 9, 6, 3, 9, 9, 5, 8, 7, 9, 4, 7, 5, 7, 2, 9, 1, 7, 4, 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 4, 2, 6, 3, 5, 7, 4, 5, 5, 2, 5, 4, 0, 7, 9, 0, 9, 1, 4, 5, 1, 3, 5, 7, 1, 1, 1, 3, 6, 9, 4, 1, 0, 9, 1, 1, 9, 3, 9, 3, 2, 5, 1, 9, 1, 0, 7, 6, 0, 2, 0, 8, 2, 5, 2, 0, 2, 6, 1, 8, 7, 9, 8, 5, 3, 1, 8, 8, 7, 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 0, 5, 8, 4, 2, 9, 7, 2, 5, 9, 1, 6, 7, 7, 8, 1, 3, 1, 4, 9, 6, 9, 9, 0, 0, 9, 0, 1, 9, 2, 1, 1, 6, 9, 7, 1, 7, 3, 7, 2, 7, 8, 4, 7, 6, 8, 4, 7, 2, 6, 8, 6, 0, 8, 4, 9, 0, 0, 3, 3, 7, 7, 0, 2, 4, 2, 4, 2, 9, 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 6, 5, 1, 3, 0, 0, 5, 0, 0, 5, 1, 6, 8, 3, 2, 3, 3, 6, 4, 3, 5, 0, 3, 8, 9, 5, 1, 7, 0, 2, 9, 8, 9, 3, 9, 2, 2, 3, 3, 4, 5, 1, 7, 2, 2, 0, 1, 3, 8, 1, 2, 8, 0, 6, 9, 6, 5, 0, 1, 1, 7, 8, 4, 4, 0, 8, 7, 4, 5, 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 9, 6, 0, 1, 2, 1, 2, 2, 8, 5, 9, 9, 3, 7, 1, 6, 2, 3, 1, 3, 0, 1, 7, 1, 1, 4, 4, 4, 8, 4, 6, 4, 0, 9, 0, 3, 8, 9, 0, 6, 4, 4, 9, 5, 4, 4, 4, 0, 0, 6, 1, 9, 8, 6, 9, 0, 7, 5, 4, 8, 5, 1, 6, 0, 2, 6, 3, 2, 7, 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 0, 5, 2, 9, 8, 3, 4, 9, 1, 8, 7, 4, 0, 7, 8, 6, 6, 8, 0, 8, 8, 1, 8, 3, 3, 8, 5, 1, 0, 2, 2, 8, 3, 3, 4, 5, 0, 8, 5, 0, 4, 8, 6, 0, 8, 2, 5, 0, 3, 9, 3, 0, 2, 1, 3, 3, 2, 1, 9, 7, 1, 5, 5, 1, 8, 4, 3, 0, 6, 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 5, 4, 5, 5, 0, 0, 7, 6, 6, 8, 2, 8, 2, 9, 4, 9, 3, 0, 4, 1, 3, 7, 7, 6, 5, 5, 2, 7, 9, 3, 9, 7, 5, 1, 7, 5, 4, 6, 1, 3, 9, 5, 3, 9, 8, 4, 6, 8, 3, 3, 9, 3, 6, 3, 8, 3, 0, 4, 7, 4, 6, 1, 1, 9, 9, 6, 6, 5, 3, 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 5, 8, 1, 5, 3, 8, 4, 2, 0, 5, 6, 8, 5, 3, 3, 8, 6, 2, 1, 8, 6, 7, 2, 5, 2, 3, 3, 4, 0, 2, 8, 3, 0, 8, 7, 1, 1, 2, 3, 2, 8, 2, 7, 8, 9, 2, 1, 2, 5, 0, 7, 7, 1, 2, 6, 2, 9, 4, 6, 3, 2, 2, 9, 5, 6, 3, 9, 8, 9, 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 9, 8, 9, 3, 5, 8, 2, 1, 1, 6, 7, 4, 5, 6, 2, 7, 0, 1, 0, 2, 1, 8, 3, 5, 6, 4, 6, 2, 2, 0, 1, 3, 4, 9, 6, 7, 1, 5, 1, 8, 8, 1, 9, 0, 9, 7, 3, 0, 3, 8, 1, 1, 9, 8, 0, 0, 4, 9, 7, 3, 4, 0, 7, 2, 3, 9, 6, 1, 0, 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 6, 8, 5, 4, 0, 6, 6, 4, 3, 1, 9, 3, 9, 5, 0, 9, 7, 9, 0, 1, 9, 0, 6, 9, 9, 6, 3, 9, 5, 5, 2, 4, 5, 3, 0, 0, 5, 4, 5, 0, 5, 8, 0, 6, 8, 5, 5, 0, 1, 9, 5, 6, 7, 3, 0, 2, 2, 9, 2, 1, 9, 1, 3, 9, 3, 3, 9, 1, 8, 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 6, 8, 0, 3, 4, 4, 9, 0, 3, 9, 8, 2, 0, 5, 9, 5, 5, 1, 0, 0, 2, 2, 6, 3, 5, 3, 5, 3, 6, 1, 9, 2, 0, 4, 1, 9, 9, 4, 7, 4, 5, 5, 3, 8, 5, 9, 3, 8, 1, 0, 2, 3, 4, 3, 9, 5, 5, 4, 4, 9, 5, 9, 7, 7, 8, 3, 7, 7, 9, 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 2, 3, 7, 4, 2, 1, 6, 1, 7, 2, 7, 1, 1, 1, 7, 2, 3, 6, 4, 3, 4, 3, 5, 4, 3, 9, 4, 7, 8, 2, 2, 1, 8, 1, 8, 5, 2, 8, 6, 2, 4, 0, 8, 5, 1, 4, 0, 0, 6, 6, 6, 0, 4, 4, 3, 3, 2, 5, 8, 8, 8, 5, 6, 9, 8, 6, 7, 0, 5, 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 3, 1, 5, 4, 7, 0, 6, 9, 6, 5, 7, 4, 7, 4, 5, 8, 5, 5, 0, 3, 3, 2, 3, 2, 3, 3, 4, 2, 1, 0, 7, 3, 0, 1, 5, 4, 5, 9, 4, 0, 5, 1, 6, 5, 5, 3, 7, 9, 0, 6, 8, 6, 6, 2, 7, 3, 3, 3, 7, 9, 9, 5, 8, 5, 1, 1, 5, 6, 2, 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 7, 8, 4, 3, 2, 2, 9, 8, 8, 2, 7, 3, 7, 2, 3, 1, 9, 8, 9, 8, 7, 5, 7, 1, 4, 1, 5, 9, 5, 7, 8, 1, 1, 1, 9, 6, 3, 5, 8, 3, 3, 0, 0, 5, 9, 4, 0, 8, 7, 3, 0, 6, 8, 1, 2, 1, 6, 0, 2, 8, 7, 6, 4, 9, 6, 2, 8, 6, 7, 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 4, 6, 0, 4, 7, 7, 4, 6, 4, 9, 1, 5, 9, 9, 5, 0, 5, 4, 9, 7, 3, 7, 4, 2, 5, 6, 2, 6, 9, 0, 1, 0, 4, 9, 0, 3, 7, 7, 8, 1, 9, 8, 6, 8, 3, 5, 9, 3, 8, 1, 4, 6, 5, 7, 4, 1, 2, 6, 8, 0, 4, 9, 2, 5, 6, 4, 8, 7, 9, 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 5, 5, 6, 1, 4, 5, 3, 7, 2, 3, 4, 7, 8, 6, 7, 3, 3, 0, 3, 9, 0, 4, 6, 8, 8, 3, 8, 3, 4, 3, 6, 3, 4, 6, 5, 5, 3, 7, 9, 4, 9, 8, 6, 4, 1, 9, 2, 7, 0, 5, 6, 3, 8, 7, 2, 9, 3, 1, 7, 4, 8, 7, 2, 3, 3, 2, 0, 8, 3, 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7, 6, 0, 1, 1, 2, 3, 0, 2, 9, 9, 1, 1, 3, 6, 7, 9, 3, 8, 6, 2, 7, 0, 8, 9, 4, 3, 8, 7, 9, 9, 3, 6, 2, 0, 1, 6, 2, 9, 5, 1, 5, 4, 1, 3, 3, 7, 1, 4, 2, 4, 8, 9, 2, 8, 3, 0, 7, 2, 2, 0, 1, 2, 6, 9, 0, 1, 4, 7, 5, 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 6, 6, 8, 4, 7, 6, 5, 3, 5, 7, 6, 1, 6, 4, 7, 7, 3, 7, 9, 4, 6, 7, 5, 2, 0, 0, 4, 9, 0, 7, 5, 7, 1, 5, 5, 5, 2, 7, 8, 1, 9, 6, 5, 3, 6, 2, 1, 3, 2, 3, 9, 2, 6, 4, 0, 6, 1, 6, 0, 1, 3, 6, 3, 5, 8, 1, 5, 5, 9, 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 7, 4, 2, 2, 0, 2, 0, 2, 0, 3, 1, 8, 7, 2, 7, 7, 6, 0, 5, 2, 7, 7, 2, 1, 9, 0, 0, 5, 5, 6, 1, 4, 8, 4, 2, 5, 5, 5, 1, 8, 7, 9, 2, 5, 3, 0, 3, 4, 3, 5, 1, 3, 9, 8, 4, 4, 2, 5, 3, 2, 2, 3, 4, 1, 5, 7, 6, 2, 3, 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 6, 1, 0, 6, 4, 2, 5, 0, 6, 3, 9, 0, 4, 9, 7, 5, 0, 0, 8, 6, 5, 6, 2, 7, 1, 0, 9, 5, 3, 5, 9, 1, 9, 4, 6, 5, 8, 9, 7, 5, 1, 4, 1, 3, 1, 0, 3, 4, 8, 2, 2, 7, 6, 9, 3, 0, 6, 2, 4, 7, 4, 3, 5, 3, 6, 3, 2, 5, 6, 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 1, 6, 0, 7, 8, 1, 5, 4, 7, 8, 1, 8, 1, 1, 5, 2, 8, 4, 3, 6, 6, 7, 9, 5, 7, 0, 6, 1, 1, 0, 8, 6, 1, 5, 3, 3, 1, 5, 0, 4, 4, 5, 2, 1, 2, 7, 4, 7, 3, 9, 2, 4, 5, 4, 4, 9, 4, 5, 4, 2, 3, 6, 8, 2, 8, 8, 6, 0, 6, 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 3, 4, 0, 8, 4, 1, 4, 8, 6, 3, 7, 7, 6, 7, 0, 0, 9, 6, 1, 2, 0, 7, 1, 5, 1, 2, 4, 9, 1, 4, 0, 4, 3, 0, 2, 7, 2, 5, 3, 8, 6, 0, 7, 6, 4, 8, 2, 3, 6, 3, 4, 1, 4, 3, 3, 4, 6, 2, 3, 5, 1, 8, 9, 7, 5, 7, 6, 6, 4, 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5, 2, 1, 6, 4, 1, 3, 7, 6, 7, 9, 6, 9, 0, 3, 1, 4, 9, 5, 0, 1, 9, 1, 0, 8, 5, 7, 5, 9, 8, 4, 4, 2, 3, 9, 1, 9, 8, 6, 2, 9, 1, 6, 4, 2, 1, 9, 3, 9, 9, 4, 9, 0, 7, 2, 3, 6, 2, 3, 4, 6, 4, 6, 8, 4, 4, 1, 1, 7, 3, 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 4, 0, 3, 2, 6, 5, 9, 1, 8, 4, 0, 4, 4, 3, 7, 8, 0, 5, 1, 3, 3, 3, 8, 9, 4, 5, 2, 5, 7, 4, 2, 3, 9, 9, 5, 0, 8, 2, 9, 6, 5, 9, 1, 2, 2, 8, 5, 0, 8, 5, 5, 5, 8, 2, 1, 5, 7, 2, 5, 0, 3, 1, 0, 7, 1, 2, 5, 7, 0, 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 2, 6, 6, 8, 3, 0, 2, 4, 0, 2, 9, 2, 9, 5, 2, 5, 2, 2, 0, 1, 1, 8, 7, 2, 6, 7, 6, 7, 5, 6, 2, 2, 0, 4, 1, 5, 4, 2, 0, 5, 1, 6, 1, 8, 4, 1, 6, 3, 4, 8, 4, 7, 5, 6, 5, 1, 6, 9, 9, 9, 8, 1, 1, 6, 1, 4, 1, 0, 1, 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 0, 2, 9, 9, 6, 0, 7, 8, 3, 8, 6, 9, 0, 9, 2, 9, 1, 6, 0, 3, 0, 2, 8, 8, 4, 0, 0, 2, 6, 9, 1, 0, 4, 1, 4, 0, 7, 9, 2, 8, 8, 6, 2, 1, 5, 0, 7, 8, 4, 2, 4, 5, 1, 6, 7, 0, 9, 0, 8, 7, 0, 0, 0, 6, 9, 9, 2, 8, 2, 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 2, 0, 6, 6, 0, 4, 1, 8, 3, 7, 1, 8, 0, 6, 5, 3, 5, 5, 6, 7, 2, 5, 2, 5, 3, 2, 5, 6, 7, 5, 3, 2, 8, 6, 1, 2, 9, 1, 0, 4, 2, 4, 8, 7, 7, 6, 1, 8, 2, 5, 8, 2, 9, 7, 6, 5, 1, 5, 7, 9, 5, 9, 8, 4, 7, 0, 3, 5, 6, 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 2, 2, 6, 2, 9, 3, 4, 8, 6, 0, 0, 3, 4, 1, 5, 8, 7, 2, 2, 9, 8, 0, 5, 3, 4, 9, 8, 9, 6, 5, 0, 2, 2, 6, 2, 9, 1, 7, 4, 8, 7, 8, 8, 2, 0, 2, 7, 3, 4, 2, 0, 9, 2, 2, 2, 2, 4, 5, 3, 3, 9, 8, 5, 6, 2, 6, 4, 7, 6, 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 9, 1, 4, 9, 0, 5, 5, 6, 2, 8, 4, 2, 5, 0, 3, 9, 1, 2, 7, 5, 7, 7, 1, 0, 2, 8, 4, 0, 2, 7, 9, 9, 8, 0, 6, 6, 3, 6, 5, 8, 2, 5, 4, 8, 8, 9, 2, 6, 4, 8, 8, 0, 2, 5, 4, 5, 6, 6, 1, 0, 1, 7, 2, 9, 6, 7, 0, 2, 6, 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 4, 0, 7, 6, 5, 5, 9, 0, 4, 2, 9, 0, 9, 9, 4, 5, 6, 8, 1, 5, 0, 6, 5, 2, 6, 5, 3, 0, 5, 3, 7, 1, 8, 2, 9, 4, 1, 2, 7, 0, 3, 3, 6, 9, 3, 1, 3, 7, 8, 5, 1, 7, 8, 6, 0, 9, 0, 4, 0, 7, 0, 8, 6, 6, 7, 1, 1, 4, 9, 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 5, 5, 8, 3, 4, 3, 4, 3, 4, 7, 6, 9, 3, 3, 8, 5, 7, 8, 1, 7, 1, 1, 3, 8, 6, 4, 5, 5, 8, 7, 3, 6, 7, 8, 1, 2, 3, 0, 1, 4, 5, 8, 7, 6, 8, 7, 1, 2, 6, 6, 0, 3, 4, 8, 9, 1, 3, 9, 0, 9, 5, 6, 2, 0, 0, 9, 9, 3, 9, 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 6, 1, 0, 3, 1, 0, 2, 9, 1, 6, 1, 6, 1, 5, 2, 8, 8, 1, 3, 8, 4, 3, 7, 9, 0, 9, 9, 0, 4, 2, 3, 1, 7, 4, 7, 3, 3, 6, 3, 9, 4, 8, 0, 4, 5, 7, 5, 9, 3, 1, 4, 9, 3, 1, 4, 0, 5, 2, 9, 7, 6, 3, 4, 7, 5, 7, 4, 8, 1, 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 9, 3, 5, 6, 7, 0, 9, 1, 1, 0, 1, 3, 7, 7, 5, 1, 7, 2, 1, 0, 0, 8, 0, 3, 1, 5, 5, 9, 0, 2, 4, 8, 5, 3, 0, 9, 0, 6, 6, 9, 2, 0, 3, 7, 6, 7, 1, 9, 2, 2, 0, 3, 3, 2, 2, 9, 0, 9, 4, 3, 3, 4, 6, 7, 6, 8, 5, 1, 4, 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 2, 1, 4, 4, 7, 7, 3, 7, 9, 3, 9, 3, 7, 5, 1, 7, 0, 3, 4, 4, 3, 6, 6, 1, 9, 9, 1, 0, 4, 0, 3, 3, 7, 5, 1, 1, 1, 7, 3, 5, 4, 7, 1, 9, 1, 8, 5, 5, 0, 4, 6, 4, 4, 9, 0, 2, 6, 3, 6, 5, 5, 1, 2, 8, 1, 6, 2, 2, 8, 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 2, 4, 4, 6, 2, 5, 7, 5, 9, 1, 6, 3, 3, 3, 0, 3, 9, 1, 0, 7, 2, 2, 5, 3, 8, 3, 7, 4, 2, 1, 8, 2, 1, 4, 0, 8, 8, 3, 5, 0, 8, 6, 5, 7, 3, 9, 1, 7, 7, 1, 5, 0, 9, 6, 8, 2, 8, 8, 7, 4, 7, 8, 2, 6, 5, 6, 9, 9, 5, 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 9, 5, 7, 4, 4, 9, 0, 6, 6, 1, 7, 5, 8, 3, 4, 4, 1, 3, 7, 5, 2, 2, 3, 9, 7, 0, 9, 6, 8, 3, 4, 0, 8, 0, 0, 5, 3, 5, 5, 9, 8, 4, 9, 1, 7, 5, 4, 1, 7, 3, 8, 1, 8, 8, 3, 9, 9, 9, 4, 4, 6, 9, 7, 4, 8, 6, 7, 6, 2, 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 5, 5, 1, 6, 5, 8, 2, 7, 6, 5, 8, 4, 8, 3, 5, 8, 8, 4, 5, 3, 1, 4, 2, 7, 7, 5, 6, 8, 7, 9, 0, 0, 2, 9, 0, 9, 5, 1, 7, 0, 2, 8, 3, 5, 2, 9, 7, 1, 6, 3, 4, 4, 5, 6, 2, 1, 2, 9, 6, 4, 0, 4, 3, 5, 2, 3, 1, 1, 7, 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 0, 0, 6, 6, 5, 1, 0, 1, 2, 4, 1, 2, 0, 0, 6, 5, 9, 7, 5, 5, 8, 5, 1, 2, 7, 6, 1, 7, 8, 5, 8, 3, 8, 2, 9, 2, 0, 4, 1, 9, 7, 4, 8, 4, 4, 2, 3, 6, 0, 8, 0, 0, 7, 1, 9, 3, 0, 4, 5, 7, 6, 1, 8, 9, 3, 2, 3, 4, 9, 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 2, 9, 2, 7, 9, 6, 5, 0, 1, 9, 8, 7, 5, 1, 8, 7, 2, 1, 2, 7, 2, 6, 7, 5, 0, 7, 9, 8, 1, 2, 5, 5, 4, 7, 0, 9, 5, 8, 9, 0, 4, 5, 5, 6, 3, 5, 7, 9, 2, 1, 2, 2, 1, 0, 3, 3, 3, 4, 6, 6, 9, 7, 4, 9, 9, 2, 3, 5, 6, 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 0, 2, 5, 4, 9, 4, 7, 8, 0, 2, 4, 9, 0, 1, 1, 4, 1, 9, 5, 2, 1, 2, 3, 8, 2, 8, 1, 5, 3, 0, 9, 1, 1, 4, 0, 7, 9, 0, 7, 3, 8, 6, 0, 2, 5, 1, 5, 2, 2, 7, 4, 2, 9, 9, 5, 8, 1, 8, 0, 7, 2, 4, 7, 1, 6, 2, 5, 9, 1, 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 6, 8, 5, 4, 5, 1, 3, 3, 3, 1, 2, 3, 9, 4, 8, 0, 4, 9, 4, 7, 0, 7, 9, 1, 1, 9, 1, 5, 3, 2, 6, 7, 3, 4, 3, 0, 2, 8, 2, 4, 4, 1, 8, 6, 0, 4, 1, 4, 2, 6, 3, 6, 3, 9, 5, 4, 8, 0, 0, 0, 4, 4, 8, 0, 0, 2, 6, 7, 0, 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 9, 6, 2, 4, 8, 2, 0, 1, 7, 9, 2, 8, 9, 6, 4, 7, 6, 6, 9, 7, 5, 8, 3, 1, 8, 3, 2, 7, 1, 3, 1, 4, 2, 5, 1, 7, 0, 2, 9, 6, 9, 2, 3, 4, 8, 8, 9, 6, 2, 7, 6, 6, 8, 4, 4, 0, 3, 2, 3, 2, 6, 0, 9, 2, 7, 5, 2, 4, 9, 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 0, 3, 5, 7, 9, 9, 6, 4, 6, 9, 2, 5, 6, 5, 0, 4, 9, 3, 6, 8, 1, 8, 3, 6, 0, 9, 0, 0, 3, 2, 3, 8, 0, 9, 2, 9, 3, 4, 5, 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 5, 8, 8, 9, 7, 0, 6, 9, 5, 3, 6, 5, 3, 4, 9, 4, 0, 6, 0, 3, 4, 0, 2, 1, 6, 6, 5, 4, 4, 3, 7, 5, 5, 8, 9, 0, 0, 4, 5, 6, 3, 2, 8, 8, 2, 2, 5, 0, 5, 4, 5, 2, 5, 5, 6, 4, 0, 5, 6, 4, 4, 8, 2, 4, 6, 5, 1, 5, 1, 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8, 7, 5, 4, 7, 1, 1, 9, 6, 2, 1, 8, 4, 4, 3, 9, 6, 5, 8, 2, 5, 3, 3, 7, 5, 4, 3, 8, 8, 5, 6, 9, 0, 9, 4, 1, 1, 3, 0, 3, 1, 5, 0, 9, 5, 2, 6, 1, 7, 9, 3, 7, 8, 0, 0, 2, 9, 7, 4, 1, 2, 0, 7, 6, 6, 5, 1, 4, 7, 9, 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 9, 4, 2, 5, 9, 0, 2, 9, 8, 9, 6, 9, 5, 9, 4, 6, 9, 9, 5, 5, 6, 5, 7, 6, 1, 2, 1, 8, 6, 5, 6, 1, 9, 6, 7, 3, 3, 7, 8, 6, 2, 3, 6, 2, 5, 6, 1, 2, 5, 2, 1, 6, 3, 2, 0, 8, 6, 2, 8, 6, 9, 2, 2, 2, 1, 0, 3, 2, 7, 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4, 8, 8, 9, 2, 1, 8, 6, 5, 4, 3, 6, 4, 8, 0, 2, 2, 9, 6, 7, 8, 0, 7, 0, 5, 7, 6, 5, 6, 1, 5, 1, 4, 4, 6, 3, 2, 0, 4, 6, 9, 2, 7, 9, 0, 6, 8, 2, 1, 2, 0, 7, 3, 8, 8, 3, 7, 7, 8, 1, 4, 2, 3, 3, 5, 6, 2, 8, 2, 3, 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 0, 8, 9, 6, 3, 2, 0, 8, 0, 6, 8, 2, 2, 2, 4, 6, 8, 0, 1, 2, 2, 4, 8, 2, 6, 1, 1, 7, 7, 1, 8, 5, 8, 9, 6, 3, 8, 1, 4, 0, 9, 1, 8, 3, 9, 0, 3, 6, 7, 3, 6, 7, 2, 2, 2, 0, 8, 8, 8, 3, 2, 1, 5, 1, 3, 7, 5, 5, 6, 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 0, 3, 7, 2, 7, 9, 8, 3, 9, 4, 0, 0, 4, 1, 5, 2, 9, 7, 0, 0, 2, 8, 7, 8, 3, 0, 7, 6, 6, 7, 0, 9, 4, 4, 4, 7, 4, 5, 6, 0, 1, 3, 4, 5, 5, 6, 4, 1, 7, 2, 5, 4, 3, 7, 0, 9, 0, 6, 9, 7, 9, 3, 9, 6, 1, 2, 2, 5, 7, 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, 4, 2, 9, 8, 9, 4, 6, 7, 1, 5, 4, 3, 5, 7, 8, 4, 6, 8, 7, 8, 8, 6, 1, 4, 4, 4, 5, 8, 1, 2, 3, 1, 4, 5, 9, 3, 5, 7, 1, 9, 8, 4, 9, 2, 2, 5, 2, 8, 4, 7, 1, 6, 0, 5, 0, 4, 9, 2, 2, 1, 2, 4, 2, 4, 7, 0, 1, 4, 1, 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2, 1, 4, 7, 8, 0, 5, 7, 3, 4, 5, 5, 1, 0, 5, 0, 0, 8, 0, 1, 9, 0, 8, 6, 9, 9, 6, 0, 3, 3, 0, 2, 7, 6, 3, 4, 7, 8, 7, 0, 8, 1, 0, 8, 1, 7, 5, 4, 5, 0, 1, 1, 9, 3, 0, 7, 1, 4, 1, 2, 2, 3, 3, 9, 0, 8, 6, 6, 3, 9, 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 8, 3, 3, 9, 5, 2, 9, 4, 2, 5, 7, 8, 6, 9, 0, 5, 0, 7, 6, 4, 3, 1, 0, 0, 6, 3, 8, 3, 5, 1, 9, 8, 3, 4, 3, 8, 9, 3, 4, 1, 5, 9, 6, 1, 3, 1, 8, 5, 4, 3, 4, 7, 5, 4, 6, 4, 9, 5, 5, 6, 9, 7, 8, 1, 0, 3, 8, 2, 9, 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 0, 9, 7, 1, 6, 4, 6, 5, 1, 4, 3, 8, 4, 0, 7, 0, 0, 7, 0, 7, 3, 6, 0, 4, 1, 1, 2, 3, 7, 3, 5, 9, 9, 8, 4, 3, 4, 5, 2, 2, 5, 1, 6, 1, 0, 5, 0, 7, 0, 2, 7, 0, 5, 6, 2, 3, 5, 2, 6, 6, 0, 1, 2, 7, 6, 4, 8, 4, 8, 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 0, 8, 4, 0, 7, 6, 1, 1, 8, 3, 0, 1, 3, 0, 5, 2, 7, 9, 3, 2, 0, 5, 4, 2, 7, 4, 6, 2, 8, 6, 5, 4, 0, 3, 6, 0, 3, 6, 7, 4, 5, 3, 2, 8, 6, 5, 1, 0, 5, 7, 0, 6, 5, 8, 7, 4, 8, 8, 2, 2, 5, 6, 9, 8, 1, 5, 7, 9, 3, 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6, 7, 8, 9, 7, 6, 6, 9, 7, 4, 2, 2, 0, 5, 7, 5, 0, 5, 9, 6, 8, 3, 4, 4, 0, 8, 6, 9, 7, 3, 5, 0, 2, 0, 1, 4, 1, 0, 2, 0, 6, 7, 2, 3, 5, 8, 5, 0, 2, 0, 0, 7, 2, 4, 5, 2, 2, 5, 6, 3, 2, 6, 5, 1, 3, 4, 1, 0, 5, 5, 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9, 2, 4, 0, 1, 9, 0, 2, 7, 4, 2, 1, 6, 2, 4, 8, 4, 3, 9, 1, 4, 0, 3, 5, 9, 9, 8, 9, 5, 3, 5, 3, 9, 4, 5, 9, 0, 9, 4, 4, 0, 7, 0, 4, 6, 9, 1, 2, 0, 9, 1, 4, 0, 9, 3, 8, 7, 0, 0, 1, 2, 6, 4, 5, 6, 0, 0, 1, 6, 2, 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, 7, 4, 2, 8, 8, 0, 2, 1, 0, 9, 2, 7, 6, 4, 5, 7, 9, 3, 1, 0, 6, 5, 7, 9, 2, 2, 9, 5, 5, 2, 4, 9, 8, 8, 7, 2, 7, 5, 8, 4, 6, 1, 0, 1, 2, 6, 4, 8, 3, 6, 9, 9, 9, 8, 9, 2, 2, 5, 6, 9, 5, 9, 6, 8, 8, 1, 5, 9, 2, 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 0, 5, 6, 0, 0, 1, 0, 1, 6, 5, 5, 2, 5, 6, 3, 7, 5, 6, 7, 8 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 404