diff --git a/set_flags.py b/set_flags.py
index a243c7c..b6221d1 100644
--- a/set_flags.py
+++ b/set_flags.py
@@ -13,116 +13,117 @@
 # Find the makefile/blueprint based on the benchmark, and make a copy of
 # it for restoring later.
 def backup_file(bench, file_type):
-  mk_file = os.path.join(config.android_home, config.bench_dict[bench],
-                         'Android.' + file_type)
-  try:
-    # Make a copy of the makefile/blueprint so that we can recover it after
-    # building the benchmark
-    subprocess.check_call([
-        'cp', mk_file,
-        os.path.join(config.android_home, config.bench_dict[bench],
-                     'tmp_makefile')
-    ])
-  except subprocess.CalledProcessError():
-    raise OSError('Cannot backup Android.%s file for %s' % (file_type, bench))
+    mk_file = os.path.join(config.android_home, config.bench_dict[bench],
+                           'Android.' + file_type)
+    try:
+        # Make a copy of the makefile/blueprint so that we can recover it after
+        # building the benchmark
+        subprocess.check_call([
+            'cp', mk_file,
+            os.path.join(config.android_home, config.bench_dict[bench],
+                         'tmp_makefile')
+        ])
+    except subprocess.CalledProcessError():
+        raise OSError('Cannot backup Android.%s file for %s' % (file_type,
+                                                                bench))
 
 
 # Insert lines to add LOCAL_CFLAGS/LOCAL_LDFLAGS to the benchmarks
 # makefile/blueprint
 def replace_flags(bench, android_type, file_type, cflags, ldflags):
-  # Use format ["Flag1", "Flag2"] for bp file
-  if file_type == 'bp':
-    if cflags:
-      cflags = '\", \"'.join(cflags.split())
-    if ldflags:
-      ldflags = '\", \"'.join(ldflags.split())
+    # Use format ["Flag1", "Flag2"] for bp file
+    if file_type == 'bp':
+        if cflags:
+            cflags = '\", \"'.join(cflags.split())
+        if ldflags:
+            ldflags = '\", \"'.join(ldflags.split())
 
-  if not cflags:
-    cflags = ''
-  else:
-    cflags = '\"' + cflags + '\",'
-  if not ldflags:
-    ldflags = ''
-  else:
-    ldflags = '\"' + ldflags + '\",'
+    if not cflags:
+        cflags = ''
+    else:
+        cflags = '\"' + cflags + '\",'
+    if not ldflags:
+        ldflags = ''
+    else:
+        ldflags = '\"' + ldflags + '\",'
 
-  # Two different diffs are used for aosp or internal android repo.
-  if android_type == 'aosp':
-    bench_diff = bench + '_flags_aosp.diff'
-  else:
-    bench_diff = bench + '_flags_internal.diff'
+    # Two different diffs are used for aosp or internal android repo.
+    if android_type == 'aosp':
+        bench_diff = bench + '_flags_aosp.diff'
+    else:
+        bench_diff = bench + '_flags_internal.diff'
 
-  # Replace CFLAGS_FOR_BENCH_SUITE marker with proper cflags
-  output = ''
-  with open(bench_diff) as f:
-    for line in f:
-      line = line.replace('CFLAGS_FOR_BENCH_SUITE', cflags)
-      line = line.replace('LDFLAGS_FOR_BENCH_SUITE', ldflags)
-      output += line
+    # Replace CFLAGS_FOR_BENCH_SUITE marker with proper cflags
+    output = ''
+    with open(bench_diff) as f:
+        for line in f:
+            line = line.replace('CFLAGS_FOR_BENCH_SUITE', cflags)
+            line = line.replace('LDFLAGS_FOR_BENCH_SUITE', ldflags)
+            output += line
 
-  with open('modified.diff', 'w') as f:
-    f.write(output)
+    with open('modified.diff', 'w') as f:
+        f.write(output)
 
 
 def apply_patches(bench):
-  bench_dir = os.path.join(config.android_home, config.bench_dict[bench])
-  bench_diff = 'modified.diff'
-  flags_patch = os.path.join(
-      os.path.dirname(os.path.realpath(__file__)), bench_diff)
-  try:
-    subprocess.check_call(['git', '-C', bench_dir, 'apply', flags_patch])
-  except subprocess.CalledProcessError:
-    raise OSError('Patch for adding flags for %s does not succeed.' % (bench))
+    bench_dir = os.path.join(config.android_home, config.bench_dict[bench])
+    bench_diff = 'modified.diff'
+    flags_patch = os.path.join(
+        os.path.dirname(os.path.realpath(__file__)), bench_diff)
+    try:
+        subprocess.check_call(['git', '-C', bench_dir, 'apply', flags_patch])
+    except subprocess.CalledProcessError:
+        raise OSError('Patch for adding flags for %s does not succeed.' % bench)
 
 
 def replace_flags_in_dir(bench, cflags, ldflags):
-  bench_mk = os.path.join(config.android_home, config.bench_dict[bench],
-                          'Android.mk')
+    bench_mk = os.path.join(config.android_home, config.bench_dict[bench],
+                            'Android.mk')
 
-  if not cflags:
-    cflags = ''
-  if not ldflags:
-    ldflags = ''
+    if not cflags:
+        cflags = ''
+    if not ldflags:
+        ldflags = ''
 
-  output = ''
-  with open(bench_mk) as f:
-    for line in f:
-      line = line.replace('$(CFLAGS_FOR_BENCH_SUITE)', cflags)
-      line = line.replace('$(LDFLAGS_FOR_BENCH_SUITE)', ldflags)
-      output += line
-  with open(bench_mk, 'w') as f:
-    f.write(output)
+    output = ''
+    with open(bench_mk) as f:
+        for line in f:
+            line = line.replace('$(CFLAGS_FOR_BENCH_SUITE)', cflags)
+            line = line.replace('$(LDFLAGS_FOR_BENCH_SUITE)', ldflags)
+            output += line
+    with open(bench_mk, 'w') as f:
+        f.write(output)
 
 
 def add_flags_Panorama(cflags, ldflags):
-  backup_file('Panorama', 'mk')
-  replace_flags_in_dir('Panorama', cflags, ldflags)
+    backup_file('Panorama', 'mk')
+    replace_flags_in_dir('Panorama', cflags, ldflags)
 
 
 def add_flags_Synthmark(cflags, ldflags):
-  backup_file('Synthmark', 'mk')
-  replace_flags_in_dir('Synthmark', cflags, ldflags)
+    backup_file('Synthmark', 'mk')
+    replace_flags_in_dir('Synthmark', cflags, ldflags)
 
 
 def add_flags_Skia(cflags, ldflags):
-  backup_file('Skia', 'bp')
-  replace_flags('Skia', config.android_type, 'bp', cflags, ldflags)
-  apply_patches('Skia')
+    backup_file('Skia', 'bp')
+    replace_flags('Skia', config.android_type, 'bp', cflags, ldflags)
+    apply_patches('Skia')
 
 
 def add_flags_Binder(cflags, ldflags):
-  backup_file('Binder', 'bp')
-  replace_flags('Binder', config.android_type, 'bp', cflags, ldflags)
-  apply_patches('Binder')
+    backup_file('Binder', 'bp')
+    replace_flags('Binder', config.android_type, 'bp', cflags, ldflags)
+    apply_patches('Binder')
 
 
 def add_flags_Hwui(cflags, ldflags):
-  backup_file('Hwui', 'bp')
-  replace_flags('Hwui', config.android_type, 'bp', cflags, ldflags)
-  apply_patches('Hwui')
+    backup_file('Hwui', 'bp')
+    replace_flags('Hwui', config.android_type, 'bp', cflags, ldflags)
+    apply_patches('Hwui')
 
 
 def add_flags_Dex2oat(cflags, ldflags):
-  backup_file('Dex2oat', 'bp')
-  replace_flags('Dex2oat', config.android_type, 'bp', cflags, ldflags)
-  apply_patches('Dex2oat')
+    backup_file('Dex2oat', 'bp')
+    replace_flags('Dex2oat', config.android_type, 'bp', cflags, ldflags)
+    apply_patches('Dex2oat')
