| LEFT | RIGHT |
| 1 { | 1 { |
| 2 'includes': ['defaults.gypi'], | 2 'includes': [ |
| 3 'defaults.gypi', |
| 4 'common/common.gypi', |
| 5 ], |
| 3 | 6 |
| 4 'variables': { | 7 'variables': { |
| 5 'build_type%': 'devbuild', | 8 'build_type%': 'devbuild', |
| 6 'build_version%': '', | 9 'build_version%': '', |
| 7 }, | 10 }, |
| 8 | 11 |
| 9 'target_defaults': { | 12 'target_defaults': { |
| 10 'conditions': [ | 13 'conditions': [ |
| 11 [ | 14 [ |
| 12 'build_type=="devbuild"', | 15 'build_type=="devbuild"', |
| (...skipping 13 matching lines...) Expand all Loading... |
| 26 'VERSIONINFO_VERSION_STR=\\"<(build_version).0\\"', | 29 'VERSIONINFO_VERSION_STR=\\"<(build_version).0\\"', |
| 27 ], | 30 ], |
| 28 } | 31 } |
| 29 ], | 32 ], |
| 30 ], | 33 ], |
| 31 }, | 34 }, |
| 32 | 35 |
| 33 'targets': [{ | 36 'targets': [{ |
| 34 'target_name': 'shared', | 37 'target_name': 'shared', |
| 35 'type': 'static_library', | 38 'type': 'static_library', |
| 39 'dependencies': [ |
| 40 'common', |
| 41 ], |
| 36 'sources': [ | 42 'sources': [ |
| 37 'src/shared/AutoHandle.cpp', | 43 'src/shared/AutoHandle.cpp', |
| 44 'src/shared/AutoHandle.h', |
| 38 'src/shared/Communication.cpp', | 45 'src/shared/Communication.cpp', |
| 46 'src/shared/Communication.h', |
| 47 'src/shared/CriticalSection.h', |
| 39 'src/shared/Dictionary.cpp', | 48 'src/shared/Dictionary.cpp', |
| 49 'src/shared/Dictionary.h', |
| 50 'src/shared/EventWithSetter.cpp', |
| 51 'src/shared/EventWithSetter.h', |
| 40 'src/shared/Utils.cpp', | 52 'src/shared/Utils.cpp', |
| 41 'src/shared/Registry.h', | 53 'src/shared/Utils.h', |
| 42 'src/shared/Registry.cpp', | 54 'src/shared/Version.h', |
| 43 'src/shared/IE_version.h', | 55 'src/shared/MsHTMLUtils.cpp', |
| 44 'src/shared/IE_version.cpp', | 56 'src/shared/MsHTMLUtils.h', |
| 45 ] | 57 ], |
| 46 }, | 58 'include_dirs': [ |
| 47 | 59 '$(ADBLOCKPLUS_ATL)/include', |
| 60 ], |
| 61 }, |
| 62 |
| 48 { | 63 { |
| 49 'target_name': 'AdblockPlusEngine', | 64 'target_name': 'AdblockPlusEngine', |
| 50 'type': 'executable', | 65 'type': 'executable', |
| 51 'dependencies': [ | 66 'dependencies': [ |
| 52 'shared', | 67 'shared', |
| 53 'libadblockplus/libadblockplus.gyp:libadblockplus', | 68 'libadblockplus/libadblockplus.gyp:libadblockplus', |
| 54 ], | 69 ], |
| 55 'sources': [ | 70 'sources': [ |
| 56 'src/engine/Main.cpp', | 71 'src/engine/Main.cpp', |
| 72 'src/engine/NotificationWindow.cpp', |
| 73 'src/engine/NotificationWindow.h', |
| 57 'src/engine/Debug.cpp', | 74 'src/engine/Debug.cpp', |
| 58 'src/engine/UpdateInstallDialog.cpp', | 75 'src/engine/UpdateInstallDialog.cpp', |
| 59 'src/engine/Updater.cpp', | 76 'src/engine/Updater.cpp', |
| 60 'src/engine/engine.rc', | 77 'src/engine/engine.rc', |
| 78 ], |
| 79 'include_dirs': [ |
| 80 '$(ADBLOCKPLUS_ATL)/include', |
| 61 ], | 81 ], |
| 62 'libraries': [ | 82 'libraries': [ |
| 63 '-ladvapi32', | 83 '-ladvapi32', |
| 64 '-lole32', | 84 '-lole32', |
| 65 '-luser32', | 85 '-luser32', |
| 66 '-lshell32', | 86 '-lshell32', |
| 67 '-lshlwapi', | 87 '-lshlwapi', |
| 68 ], | 88 ], |
| 69 'msbuild_toolset': 'v110_xp', | 89 'msbuild_toolset': 'v110_xp', |
| 70 'msvs_settings': { | 90 'msvs_settings': { |
| 71 'VCLinkerTool': { | 91 'VCLinkerTool': { |
| 72 'DelayLoadDLLs': ['Shell32.dll'], | 92 'DelayLoadDLLs': ['Shell32.dll'], |
| 93 'conditions': [[ |
| 94 'target_arch=="ia32"', { |
| 95 'AdditionalLibraryDirectories': [ |
| 96 '$(ADBLOCKPLUS_ATL)/lib', |
| 97 ], |
| 98 }, { |
| 99 'AdditionalLibraryDirectories': [ |
| 100 '$(ADBLOCKPLUS_ATL)/lib/amd64', |
| 101 ], |
| 102 } |
| 103 ]], |
| 73 }, | 104 }, |
| 74 }, | 105 }, |
| 75 }, | 106 }, |
| 76 | 107 |
| 77 { | 108 { |
| 78 'target_name': 'AdblockPlus', | 109 'target_name': 'AdblockPlus', |
| 79 'type': 'shared_library', | 110 'type': 'shared_library', |
| 80 'dependencies': [ | 111 'dependencies': [ |
| 81 'shared', | 112 'shared', |
| 82 'libadblockplus/libadblockplus.gyp:libadblockplus', | 113 'libadblockplus/libadblockplus.gyp:libadblockplus', |
| 83 ], | 114 ], |
| 84 'sources': [ | 115 'sources': [ |
| 85 'src/plugin/AdblockPlus.def', | 116 'src/plugin/AdblockPlus.def', |
| 86 'src/plugin/AdblockPlus.idl', | 117 'src/plugin/AdblockPlus.idl', |
| 87 'src/plugin/AdblockPlus.rc', | 118 'src/plugin/AdblockPlus.rc', |
| 88 'src/plugin/AdblockPlus.rgs', | 119 'src/plugin/AdblockPlus.rgs', |
| 89 'src/plugin/AdblockPlusClient.cpp', | 120 'src/plugin/AdblockPlusClient.cpp', |
| 90 'src/plugin/AdblockPlusClient.h', | 121 'src/plugin/AdblockPlusClient.h', |
| 91 'src/plugin/AdblockPlusDomTraverser.cpp', | 122 'src/plugin/AdblockPlusDomTraverser.cpp', |
| 92 'src/plugin/AdblockPlusDomTraverser.h', | 123 'src/plugin/AdblockPlusDomTraverser.h', |
| 93 'src/plugin/AdblockPlusGuids.h', | 124 'src/plugin/AdblockPlusGuids.h', |
| 94 'src/plugin/ATL_Deprecate.cpp', | 125 'src/plugin/ATL_Deprecate.cpp', |
| 95 'src/plugin/ATL_Deprecate.h', | 126 'src/plugin/ATL_Deprecate.h', |
| 96 'src/plugin/BuildVariant.h', | |
| 97 'src/plugin/Config.h', | 127 'src/plugin/Config.h', |
| 98 'src/plugin/Console.h', | |
| 99 'src/plugin/NotificationMessage.cpp', | 128 'src/plugin/NotificationMessage.cpp', |
| 100 'src/plugin/NotificationMessage.h', | 129 'src/plugin/NotificationMessage.h', |
| 101 'src/plugin/Plugin.cpp', | 130 'src/plugin/Plugin.cpp', |
| 102 'src/plugin/Plugin.h', | 131 'src/plugin/Plugin.h', |
| 103 'src/plugin/PluginClass.cpp', | 132 'src/plugin/PluginClass.cpp', |
| 104 'src/plugin/PluginClass.h', | 133 'src/plugin/PluginClass.h', |
| 105 'src/plugin/PluginClient.h', | |
| 106 'src/plugin/PluginClientBase.cpp', | 134 'src/plugin/PluginClientBase.cpp', |
| 107 'src/plugin/PluginClientBase.h', | 135 'src/plugin/PluginClientBase.h', |
| 108 'src/plugin/PluginClientFactory.cpp', | 136 'src/plugin/PluginClientFactory.cpp', |
| 109 'src/plugin/PluginClientFactory.h', | 137 'src/plugin/PluginClientFactory.h', |
| 110 'src/plugin/PluginDebug.cpp', | 138 'src/plugin/PluginDebug.cpp', |
| 111 'src/plugin/PluginDebug.h', | 139 'src/plugin/PluginDebug.h', |
| 112 'src/plugin/PluginDomTraverserBase.h', | 140 'src/plugin/PluginDomTraverserBase.h', |
| 113 'src/plugin/PluginErrorCodes.h', | 141 'src/plugin/PluginErrorCodes.h', |
| 114 'src/plugin/PluginFilter.cpp', | 142 'src/plugin/PluginFilter.cpp', |
| 115 'src/plugin/PluginFilter.h', | 143 'src/plugin/PluginFilter.h', |
| 116 'src/plugin/PluginMimeFilterClient.cpp', | 144 'src/plugin/PluginMimeFilterClient.cpp', |
| 117 'src/plugin/PluginMimeFilterClient.h', | 145 'src/plugin/PluginMimeFilterClient.h', |
| 118 'src/plugin/PluginMutex.cpp', | 146 'src/plugin/PluginMutex.cpp', |
| 119 'src/plugin/PluginMutex.h', | 147 'src/plugin/PluginMutex.h', |
| 120 'src/plugin/PluginPassthroughObject.h', | |
| 121 'src/plugin/PluginSettings.cpp', | 148 'src/plugin/PluginSettings.cpp', |
| 122 'src/plugin/PluginSettings.h', | 149 'src/plugin/PluginSettings.h', |
| 123 'src/plugin/PluginStdAfx.cpp', | 150 'src/plugin/PluginStdAfx.cpp', |
| 124 'src/plugin/PluginStdAfx.h', | 151 'src/plugin/PluginStdAfx.h', |
| 125 'src/plugin/PluginSystem.cpp', | 152 'src/plugin/PluginSystem.cpp', |
| 126 'src/plugin/PluginSystem.h', | 153 'src/plugin/PluginSystem.h', |
| 127 'src/plugin/PluginTabBase.cpp', | 154 'src/plugin/PluginTabBase.cpp', |
| 128 'src/plugin/PluginTabBase.h', | 155 'src/plugin/PluginTabBase.h', |
| 129 'src/plugin/PluginUserSettings.cpp', | 156 'src/plugin/PluginUserSettings.cpp', |
| 130 'src/plugin/PluginUserSettings.h', | 157 'src/plugin/PluginUserSettings.h', |
| 131 'src/plugin/PluginUtil.cpp', | 158 'src/plugin/PluginUtil.cpp', |
| 132 'src/plugin/PluginUtil.h', | 159 'src/plugin/PluginUtil.h', |
| 133 'src/plugin/PluginWbPassThrough.cpp', | 160 'src/plugin/PluginWbPassThrough.cpp', |
| 134 'src/plugin/PluginWbPassThrough.h', | 161 'src/plugin/PluginWbPassThrough.h', |
| 135 'src/plugin/ProtocolCF.h', | |
| 136 'src/plugin/ProtocolCF.inl', | |
| 137 'src/plugin/ProtocolImpl.h', | |
| 138 'src/plugin/ProtocolImpl.inl', | |
| 139 'src/plugin/Resource.h', | 162 'src/plugin/Resource.h', |
| 140 'src/plugin/SinkPolicy.h', | |
| 141 'src/plugin/SinkPolicy.inl', | |
| 142 'src/plugin/WebBrowserEventsListener.h', | 163 'src/plugin/WebBrowserEventsListener.h', |
| 143 'src/plugin/WebBrowserEventsListener.cpp', | 164 'src/plugin/WebBrowserEventsListener.cpp', |
| 144 ], | 165 'src/plugin/passthroughapp/PassthroughObject.h', |
| 145 'include_dirs': [ | 166 'src/plugin/passthroughapp/ProtocolCF.h', |
| 146 '$(WindowsSDK_IncludePath)', | 167 'src/plugin/passthroughapp/ProtocolCF.inl', |
| 147 '$(VCInstallDir)atlmfc/include', | 168 'src/plugin/passthroughapp/ProtocolImpl.h', |
| 148 '$(WINDDKDIR)/inc/atl71', | 169 'src/plugin/passthroughapp/ProtocolImpl.inl', |
| 170 'src/plugin/passthroughapp/SinkPolicy.h', |
| 171 'src/plugin/passthroughapp/SinkPolicy.inl', |
| 172 ], |
| 173 'include_dirs': [ |
| 174 '$(ADBLOCKPLUS_ATL)/include', |
| 149 ], | 175 ], |
| 150 # See "Adding Visual Style Support to an Extension, Plug-in, MMC Snap-in or
a DLL | 176 # See "Adding Visual Style Support to an Extension, Plug-in, MMC Snap-in or
a DLL |
| 151 # That Is Brought into a Process" on the link here: | 177 # That Is Brought into a Process" on the link here: |
| 152 # http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85
%29.aspx#using_manifests | 178 # http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85
%29.aspx#using_manifests |
| 153 'defines': ['ISOLATION_AWARE_ENABLED'], | 179 'defines': ['ISOLATION_AWARE_ENABLED'], |
| 154 'libraries': [ | 180 'libraries': [ |
| 155 '-lwinhttp', | 181 '-lwinhttp', |
| 156 '-lshell32', | 182 '-lshell32', |
| 157 '-lComctl32', | 183 '-lComctl32', |
| 158 '-lGdi32', | 184 '-lGdi32', |
| 159 ], | 185 ], |
| 160 'configurations': { | |
| 161 # 'libraries' is not allowed under 'configurations' :-( | |
| 162 'Debug': { | |
| 163 'msvs_settings': { | |
| 164 'VCLinkerTool': { | |
| 165 'AdditionalDependencies': ['atlsd.lib'], | |
| 166 }, | |
| 167 }, | |
| 168 }, | |
| 169 'Release': { | |
| 170 'msvs_settings': { | |
| 171 'VCLinkerTool': { | |
| 172 'AdditionalDependencies': ['atls.lib'], | |
| 173 }, | |
| 174 }, | |
| 175 }, | |
| 176 }, | |
| 177 'msvs_settings': { | 186 'msvs_settings': { |
| 178 'VCLinkerTool': { | 187 'VCLinkerTool': { |
| 179 'conditions': [[ | 188 'conditions': [[ |
| 180 'target_arch=="ia32"', { | 189 'target_arch=="ia32"', { |
| 181 'AdditionalLibraryDirectories': [ | 190 'AdditionalLibraryDirectories': [ |
| 182 '$(VCInstallDir)atlmfc/lib', | 191 '$(ADBLOCKPLUS_ATL)/lib', |
| 183 '$(WindowsSDK_LibraryPath_x86)', | |
| 184 '$(WINDDKDIR)/lib/ATL/i386', | |
| 185 ], | 192 ], |
| 186 }, { | 193 }, { |
| 187 'AdditionalLibraryDirectories': [ | 194 'AdditionalLibraryDirectories': [ |
| 188 '$(VCInstallDir)atlmfc/lib/amd64', | 195 '$(ADBLOCKPLUS_ATL)/lib/amd64', |
| 189 '$(WindowsSDK_LibraryPath_x64)', | |
| 190 '$(WINDDKDIR)/lib/ATL/amd64', | |
| 191 ], | 196 ], |
| 192 } | 197 } |
| 193 ]], | 198 ]], |
| 194 'DelayLoadDLLs': ['Shell32.dll'], | 199 'DelayLoadDLLs': ['Shell32.dll'], |
| 195 }, | 200 }, |
| 196 }, | 201 }, |
| 197 }, | 202 }, |
| 198 | 203 |
| 199 { | 204 { |
| 200 'target_name': 'tests', | 205 'target_name': 'tests', |
| 201 'type': 'executable', | 206 'type': 'executable', |
| 202 'dependencies': [ | 207 'dependencies': [ |
| 203 'shared', | 208 'shared', |
| 204 'libadblockplus/third_party/googletest.gyp:googletest_main', | 209 'libadblockplus/third_party/googletest.gyp:googletest_main', |
| 205 ], | 210 ], |
| 206 'sources': [ | 211 'sources': [ |
| 207 'test/CommunicationTest.cpp', | 212 'test/CommunicationTest.cpp', |
| 208 'test/DictionaryTest.cpp', | 213 'test/DictionaryTest.cpp', |
| 209 'test/RegistryTest.cpp', | |
| 210 'test/UtilTest.cpp', | 214 'test/UtilTest.cpp', |
| 215 'test/UtilGetQueryStringTest.cpp', |
| 216 'test/UtilGetSchemeAndHierarchicalPartTest.cpp', |
| 211 ], | 217 ], |
| 212 'defines': ['WINVER=0x0501'], | 218 'defines': ['WINVER=0x0501'], |
| 213 'link_settings': { | 219 'link_settings': { |
| 214 'libraries': ['-ladvapi32', '-lshell32', '-lole32'], | 220 'libraries': ['-ladvapi32', '-lshell32', '-lole32', '-loleaut32'], |
| 215 }, | 221 }, |
| 216 'msvs_settings': { | 222 'msvs_settings': { |
| 217 'VCLinkerTool': { | 223 'VCLinkerTool': { |
| 218 'SubSystem': '1', # Console | 224 'SubSystem': '1', # Console |
| 219 'EntryPointSymbol': 'mainCRTStartup', | 225 'EntryPointSymbol': 'mainCRTStartup', |
| 220 }, | 226 }, |
| 221 }, | 227 }, |
| 222 }, | 228 }, |
| 223 | 229 |
| 224 { | 230 { |
| 225 'target_name': 'tests_plugin', | 231 'target_name': 'tests_plugin', |
| 226 'type': 'executable', | 232 'type': 'executable', |
| 227 'dependencies': [ | 233 'dependencies': [ |
| 228 'shared', | 234 'shared', |
| 229 'libadblockplus/libadblockplus.gyp:libadblockplus', | 235 'libadblockplus/libadblockplus.gyp:libadblockplus', |
| 230 'libadblockplus/third_party/googletest.gyp:googletest_main', | 236 'libadblockplus/third_party/googletest.gyp:googletest_main', |
| 231 ], | 237 ], |
| 232 'sources': [ | 238 'sources': [ |
| 239 'src/plugin/PluginDebug.cpp', |
| 240 'test/plugin/DebugTest.cpp', |
| 233 'src/plugin/PluginUserSettings.cpp', | 241 'src/plugin/PluginUserSettings.cpp', |
| 234 'src/plugin/PluginUserSettings.h', | 242 'src/plugin/PluginUserSettings.h', |
| 235 'test/plugin/UserSettingsTest.cpp', | 243 'test/plugin/UserSettingsTest.cpp', |
| 244 'src/plugin/PluginUtil.h', |
| 245 'test/plugin/UtilTest.cpp', |
| 236 # | 246 # |
| 237 # required only for linking | 247 # required only for linking |
| 238 # | 248 # |
| 239 'src/plugin/AdblockPlusClient.cpp', | 249 'src/plugin/AdblockPlusClient.cpp', |
| 240 'src/plugin/AdblockPlusDomTraverser.cpp', | 250 'src/plugin/AdblockPlusDomTraverser.cpp', |
| 241 'src/plugin/ATL_Deprecate.cpp', | 251 'src/plugin/ATL_Deprecate.cpp', |
| 242 'src/plugin/NotificationMessage.cpp', | 252 'src/plugin/NotificationMessage.cpp', |
| 243 'src/plugin/Plugin.cpp', | 253 'src/plugin/Plugin.cpp', |
| 244 'src/plugin/PluginClientBase.cpp', | 254 'src/plugin/PluginClientBase.cpp', |
| 245 'src/plugin/PluginClientFactory.cpp', | 255 'src/plugin/PluginClientFactory.cpp', |
| 246 'src/plugin/PluginClass.cpp', | 256 'src/plugin/PluginClass.cpp', |
| 247 'src/plugin/PluginDebug.cpp', | |
| 248 'src/plugin/PluginFilter.cpp', | 257 'src/plugin/PluginFilter.cpp', |
| 249 'src/plugin/PluginMimeFilterClient.cpp', | 258 'src/plugin/PluginMimeFilterClient.cpp', |
| 250 'src/plugin/PluginMutex.cpp', | 259 'src/plugin/PluginMutex.cpp', |
| 251 'src/plugin/PluginSettings.cpp', | 260 'src/plugin/PluginSettings.cpp', |
| 252 'src/plugin/PluginSystem.cpp', | 261 'src/plugin/PluginSystem.cpp', |
| 253 'src/plugin/PluginTabBase.cpp', | 262 'src/plugin/PluginTabBase.cpp', |
| 254 'src/plugin/PluginUtil.cpp', | 263 'src/plugin/PluginUtil.cpp', |
| 255 'src/plugin/PluginWbPassthrough.cpp', | 264 'src/plugin/PluginWbPassthrough.cpp', |
| 256 'src/plugin/WebBrowserEventsListener.h', | 265 'src/plugin/WebBrowserEventsListener.h', |
| 257 'src/plugin/WebBrowserEventsListener.cpp', | 266 'src/plugin/WebBrowserEventsListener.cpp', |
| 258 ], | 267 ], |
| 259 'include_dirs': [ | 268 'include_dirs': [ |
| 260 '$(WINDDKDIR)/inc/atl71', | 269 '$(ADBLOCKPLUS_ATL)/include', |
| 261 ], | 270 ], |
| 262 'defines': [ | 271 'defines': [ |
| 263 'WINVER=0x0501', | 272 'WINVER=0x0501', |
| 264 'PRODUCT_ADBLOCKPLUS' | 273 'PRODUCT_ADBLOCKPLUS' |
| 265 ], | 274 ], |
| 266 'link_settings': { | 275 'link_settings': { |
| 267 'libraries': ['-ladvapi32', '-lshell32', '-lole32', '-lComctl32', '-lGdi32
'], | 276 'libraries': ['-ladvapi32', '-lshell32', '-lole32', '-lComctl32', '-lGdi32
'], |
| 268 }, | 277 }, |
| 269 'msvs_settings': { | 278 'msvs_settings': { |
| 270 'VCLinkerTool': { | 279 'VCLinkerTool': { |
| 271 'SubSystem': '1', # Console | 280 'SubSystem': '1', # Console |
| 272 'EntryPointSymbol': 'mainCRTStartup', | 281 'EntryPointSymbol': 'mainCRTStartup', |
| 273 'conditions': [[ | 282 'conditions': [[ |
| 274 'target_arch=="ia32"', { | 283 'target_arch=="ia32"', { |
| 275 'AdditionalLibraryDirectories': [ | 284 'AdditionalLibraryDirectories': [ |
| 276 '$(VCInstallDir)atlmfc/lib', | 285 '$(ADBLOCKPLUS_ATL)/lib', |
| 277 '$(WindowsSDK_LibraryPath_x86)', | |
| 278 '$(WINDDKDIR)/lib/ATL/i386', | |
| 279 ], | 286 ], |
| 280 }, { | 287 }, { |
| 281 'AdditionalLibraryDirectories': [ | 288 'AdditionalLibraryDirectories': [ |
| 282 '$(VCInstallDir)atlmfc/lib/amd64', | 289 '$(ADBLOCKPLUS_ATL)/lib/amd64', |
| 283 '$(WindowsSDK_LibraryPath_x64)', | |
| 284 '$(WINDDKDIR)/lib/ATL/amd64', | |
| 285 ], | 290 ], |
| 286 } | 291 } |
| 287 ]], | 292 ]], |
| 288 }, | 293 }, |
| 289 }, | 294 }, |
| 290 'configurations': { | |
| 291 # 'libraries' is not allowed under 'configurations' :-( | |
| 292 'Debug': { | |
| 293 'msvs_settings': { | |
| 294 'VCLinkerTool': { | |
| 295 'AdditionalDependencies': ['atlsd.lib'], | |
| 296 }, | |
| 297 }, | |
| 298 }, | |
| 299 'Release': { | |
| 300 'msvs_settings': { | |
| 301 'VCLinkerTool': { | |
| 302 'AdditionalDependencies': ['atls.lib'], | |
| 303 }, | |
| 304 }, | |
| 305 }, | |
| 306 }, | |
| 307 }] | 295 }] |
| 308 } | 296 } |
| LEFT | RIGHT |