/* 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.capturemoduleandroidtest;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class id {
        public static final int Button01=0x7f050000;
        public static final int Button02=0x7f050001;
        public static final int Button03=0x7f050002;
        public static final int Button04=0x7f050003;
        public static final int renderView=0x7f050004;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040000;
        public static final int run_button=0x7f040001;
        public static final int run_button2=0x7f040002;
        public static final int run_button3=0x7f040003;
        public static final int run_button4=0x7f040004;
    }
}
