/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package org.webrtc.vieautotest;

public final class R {
    public static final class array {
        public static final int subtest_array=0x7f050001;
        public static final int test_array=0x7f050000;
    }
    public static final class attr {
    }
    public static final class drawable {
        public static final int logo=0x7f020000;
    }
    public static final class id {
        public static final int Button01=0x7f060004;
        public static final int LocalView=0x7f060001;
        public static final int RemoteView=0x7f060000;
        public static final int subtestSpinner=0x7f060003;
        public static final int testSpinner=0x7f060002;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int SpinnerSubtest=0x7f040004;
        public static final int SpinnerTitle=0x7f040003;
        public static final int TitleName=0x7f040001;
        public static final int app_name=0x7f040000;
        public static final int run_button=0x7f040002;
    }
}
