From 74bec8d909d67348c441e198f843d49fd7306807 Mon Sep 17 00:00:00 2001 From: stefan boberg Date: Mon, 23 Sep 2019 08:42:45 -0400 Subject: [PATCH] Copying //UE4/Dev-RenderPlat-Staging[at]8684824 to Dev-Main (//UE4/Dev-Main) #rb none #ROBOMERGE-OWNER: robert.manuszewski #ROBOMERGE-AUTHOR: marcus.wassmer #ROBOMERGE-SOURCE: CL 8684840 in //UE4/Main/... #ROBOMERGE-BOT: CORE (Main -> Dev-Core) (v436-8951088) This still contains some ARRAY_COUNT deprecation warnings but we will fix those next [CL 8974328 by stefan boberg in Dev-Core branch] --- .../Python/Mac/bin/python2.7-gdb.py | 1661 +++++ .../ThirdParty/Python/Mac/bin/smtpd2.7.py | 555 -- .../ThirdParty/Python/Mac/bin/smtpd2.py | 555 -- .../Mac/lib/python2.7/_sysconfigdata.py | 34 +- .../Python/Mac/lib/python2.7/config/Makefile | 20 +- .../Build/BatchFiles/Linux/BuildThirdParty.sh | 2 +- Engine/Build/Commit.gitdeps.xml | 4862 +++++++------- .../AppIcon.appiconset/Contents.json | 98 + .../Assets.xcassets/Contents.json | 6 + .../FrameworkWrapper/IOS/AppDelegate.h | 36 + .../FrameworkWrapper/IOS/AppDelegate.mm | 45 + .../FrameworkWrapper/IOS/main.mm | 18 + .../ViewControllers/ViewController.h | 22 + .../ViewControllers/ViewController.m | 21 + .../FrameworkWrapper/Views/UnrealView.h | 60 + .../FrameworkWrapper/Views/UnrealView.mm | 408 ++ .../FrameworkWrapper/ue4commandline.txt | 1 + Engine/Build/InstalledEngineBuild.xml | 34 + Engine/Config/BaseDeviceProfiles.ini | 8 + Engine/Config/BaseEditor.ini | 1 + Engine/Config/BaseEngine.ini | 9 +- Engine/Config/BaseLightmass.ini | 4 + .../LinuxAArch64/DataDrivenPlatformInfo.ini | 25 + .../LinuxAArch64/LinuxAArch64Engine.ini | 31 + .../LLDBDataFormatters/UE4DataFormatters.py | 2 +- .../Private/LensDistortionRendering.cpp | 2 +- ...LensDistortionDisplacementMapRendering.cpp | 2 +- .../Private/OpenColorIOShaderMap.cpp | 10 +- .../Public/OpenColorIOShaderType.h | 5 +- .../OpenColorIO/Public/OpenColorIOShared.h | 4 +- .../Source/ChaosNiagara/ChaosNiagara.Build.cs | 2 - .../Private/GeometryCacheSceneProxy.cpp | 5 +- .../HairStrandsNiagara.Build.cs | 1 - .../Private/PixelStreamingNvVideoEncoder.cpp | 2 +- .../Channels/RemoteSessionARCameraChannel.cpp | 92 +- .../HoudiniNiagara/HoudiniNiagara.Build.cs | 3 - .../HoudiniNiagaraEditor.Build.cs | 2 - .../Private/NiagaraRibbonVertexFactory.ush | 150 +- .../Private/NiagaraVFParticleAccess.usf | 2 +- .../Niagara/Source/Niagara/Niagara.Build.cs | 2 - .../Private/NiagaraRendererRibbons.cpp | 601 +- .../Private/NiagaraRendererSprites.cpp | 1 - .../Source/Niagara/Public/NiagaraCommon.h | 6 +- .../Niagara/Public/NiagaraRendererRibbons.h | 28 +- .../Private/NiagaraCustomVersion.cpp | 4 +- .../NiagaraShader/Private/NiagaraShader.cpp | 12 +- .../NiagaraShader/Public/NiagaraShaderType.h | 5 +- .../Private/NiagaraRibbonVertexFactory.cpp | 43 +- .../Private/NiagaraSpriteVertexFactory.cpp | 2 + .../Public/NiagaraDrawIndirect.h | 4 +- .../Public/NiagaraRibbonVertexFactory.h | 32 +- .../Source/MagicLeap/MagicLeap.Build.cs | 1 - .../Source/AvfMedia/AvfMedia.Build.cs | 10 +- .../Source/MediaIOCore/MediaIOCore.Build.cs | 3 +- .../Source/WebMMedia/WebMMedia.Build.cs | 1 - ...WmfMediaHardwareVideoDecodingRendering.cpp | 2 +- .../WmfMediaHardwareVideoDecodingShaders.h | 2 +- .../Source/WmfMedia/WmfMedia.Build.cs | 3 +- .../Private/AppleARKitVideoOverlay.cpp | 146 +- .../GoogleARCorePassthroughCameraRenderer.cpp | 91 +- .../Private/HoloLensTargetPlatform.cpp | 3 - .../Source/OculusHMD/OculusHMD.Build.cs | 1 - .../Source/OculusHMD/Private/OculusHMD.cpp | 2 +- .../OculusHMD_CustomPresent_Vulkan.cpp | 2 +- .../Private/OculusHMD_StressTester.cpp | 2 +- .../Source/OpenXRHMD/OpenXRHMD.Build.cs | 1 - .../Private/ProceduralMeshComponent.cpp | 1 - .../SteamVR/Source/SteamVR/SteamVR.Build.cs | 1 - .../Source/PFMExporter/PFMExporter.Build.cs | 3 +- .../PFMExporter/Private/PFMExporterShader.cpp | 2 +- .../WebMMoviePlayer/WebMMoviePlayer.Build.cs | 5 +- .../Private/WindowsMixedRealityHMD.cpp | 2 +- .../WindowsMixedRealityHMD.Build.cs | 1 - .../WindowsMixedRealityRHI.Build.cs | 1 - .../WindowsMoviePlayer.Build.cs | 3 +- .../nDisplay/Source/MPCDI/MPCDI.Build.cs | 3 +- .../Source/MPCDI/Private/MPCDIShader.h | 4 +- .../Source/OutputRemap/OutputRemap.Build.cs | 3 +- .../OutputRemap/Private/OutputRemapShader.cpp | 2 +- .../Source/PicpMPCDI/PicpMPCDI.Build.cs | 3 +- .../PicpMPCDI/Private/PicpMPCDIShader.h | 4 +- .../Shaders/Private/BasePassPixelShader.usf | 2 +- .../Private/BasePassTessellationShaders.usf | 48 +- .../Shaders/Private/BasePassVertexShader.usf | 2 - .../Private/BurleyNormalizedSSSCommon.ush | 172 + Engine/Shaders/Private/Common.ush | 40 +- .../Private/DebugViewModeVertexShader.usf | 3 - .../Private/DeferredLightingCommon.ush | 4 +- Engine/Shaders/Private/Definitions.usf | 1 - .../Shaders/Private/DepthOnlyVertexShader.usf | 3 - .../Private/DiaphragmDOF/DOFReduce.usf | 42 +- .../Shaders/Private/DistortAccumulateVS.usf | 1 - Engine/Shaders/Private/FilterPixelShader.usf | 208 +- Engine/Shaders/Private/FilterVertexShader.usf | 41 +- .../Shaders/Private/ForwardLightingCommon.ush | 3 + .../Private/GeometryCacheVertexFactory.ush | 2 +- Engine/Shaders/Private/HZB.usf | 196 + Engine/Shaders/Private/HZBOcclusion.usf | 57 - .../Shaders/Private/HitProxyVertexShader.usf | 2 - .../Shaders/Private/LightMapDensityShader.usf | 2 - Engine/Shaders/Private/MaterialTemplate.ush | 296 +- Engine/Shaders/Private/MeshDecals.usf | 1 - Engine/Shaders/Private/MonteCarlo.ush | 7 +- .../Material/PathTracingGlossy.ush | 2 +- .../Private/PositionOnlyDepthVertexShader.usf | 1 - Engine/Shaders/Private/PostProcessBloom.usf | 173 +- .../Private/PostProcessCombineLUTs.usf | 48 +- Engine/Shaders/Private/PostProcessCommon.ush | 2 +- .../Shaders/Private/PostProcessDownsample.usf | 120 +- .../Private/PostProcessEyeAdaptation.usf | 223 +- .../Shaders/Private/PostProcessFFTBloom.usf | 1 - .../Shaders/Private/PostProcessHistogram.usf | 91 +- .../Private/PostProcessHistogramCommon.ush | 32 +- .../Private/PostProcessHistogramReduce.usf | 18 +- .../Shaders/Private/PostProcessLensBlur.usf | 91 - .../Shaders/Private/PostProcessLensFlares.usf | 96 +- .../Private/PostProcessMaterialShaders.usf | 78 +- .../Private/PostProcessMitchellNetravali.usf | 64 +- .../Private/PostProcessSelectionOutline.usf | 2 +- .../Shaders/Private/PostProcessSubsurface.usf | 258 +- .../Shaders/Private/PostProcessTemporalAA.usf | 65 +- .../Shaders/Private/PostProcessTestImage.usf | 43 +- .../Private/PostProcessVisualizeHDR.usf | 14 +- .../RayTracingAmbientOcclusionRGS.usf | 2 +- .../RayTracing/RayTracingBuiltInShaders.usf | 5 +- .../RayTracingCreateGatherPointsRGS.usf | 6 +- .../Private/RayTracing/RayTracingDebug.usf | 18 - ...ayTracingGlobalIlluminationCompositePS.usf | 36 - .../RayTracingGlobalIlluminationRGS.usf | 18 +- .../RayTracing/RayTracingLightingCommon.ush | 10 +- .../RayTracingMaterialHitShaders.usf | 2 +- .../RayTracing/RayTracingReflections.usf | 102 +- Engine/Shaders/Private/ReductionCommon.ush | 60 + .../Shaders/Private/ResolveVertexShader.usf | 8 +- .../Private/SSRT/SSRTDiffuseIndirect.usf | 736 ++- .../Private/SSRT/SSRTPrevFrameReduction.usf | 193 + Engine/Shaders/Private/SSRT/SSRTRayCast.ush | 391 +- .../Shaders/Private/SSRT/SSRTReflections.usf | 22 +- .../Private/SSRT/SSRTTileClassification.usf | 199 + .../SSRT/SSRTTileClassificationBuffer.ush | 40 + .../Shaders/Private/SceneTexturesCommon.ush | 4 + Engine/Shaders/Private/ScreenPass.usf | 12 +- .../Private/ScreenSpaceDenoise/SSDCommon.ush | 62 +- .../SSDComposeHarmonics.usf | 301 + .../ScreenSpaceDenoise/SSDDefinitions.ush | 107 +- .../Private/ScreenSpaceDenoise/SSDInjest.usf | 51 +- .../SSDPublicBufferEncoding.ush | 117 + .../ScreenSpaceDenoise/SSDPublicHarmonics.ush | 140 + .../Private/ScreenSpaceDenoise/SSDReduce.usf | 236 + .../SSDSignalAccumulator.ush | 180 +- .../SSDSignalAccumulatorArray.ush | 147 + .../ScreenSpaceDenoise/SSDSignalArray.ush | 44 +- .../SSDSignalBufferEncoding.ush | 785 +++ .../SSDSignalCompression.ush | 89 + .../ScreenSpaceDenoise/SSDSignalCore.ush | 690 +- .../ScreenSpaceDenoise/SSDSignalFramework.ush | 154 +- .../SSDSpatialAccumulation.usf | 437 +- .../ScreenSpaceDenoise/SSDSpatialKernel.ush | 695 +- .../SSDTemporalAccumulation.usf | 256 +- Engine/Shaders/Private/SeparableSSS.ush | 5 +- ...mpleElementTexture2DPreviewPixelShader.usf | 31 +- Engine/Shaders/Private/SkyAtmosphere.usf | 52 +- .../Private/SubsurfaceBurleyNormalized.ush | 781 +++ .../Private/SubsurfaceProfileCommon.ush | 6 +- .../Private/Tools/VisualizeTexture.usf | 6 +- Engine/Shaders/Private/TransmissionCommon.ush | 5 +- Engine/Shaders/Private/VelocityShader.usf | 3 - .../Private/VirtualTextureMaterial.usf | 1 - .../Private/VolumetricFogVoxelization.usf | 3 + .../Private/VolumetricLightmapStreaming.usf | 125 + Engine/Shaders/Public/Platform.ush | 26 +- .../Public/Platform/Metal/MetalCommon.ush | 8 +- .../Public/Platform/Vulkan/VulkanCommon.ush | 2 +- Engine/Shaders/Public/ShaderVersion.ush | 4 +- .../Shared/RaytracingDebugDefinitions.h | 1 + .../Shared/ThirdParty/NVIDIA/Nvapi.tps | 6 + .../Shared/ThirdParty/NVIDIA/nvHLSLExtns.h | 1621 +++++ .../ThirdParty/NVIDIA/nvHLSLExtnsInternal.h | 767 +++ .../ThirdParty/NVIDIA/nvShaderExtnEnums.h | 121 + .../Private/AllDesktopTargetPlatform.cpp | 2 - .../Private/MetalBackend.cpp | 86 +- .../Private/MetalDerivedData.cpp | 1298 +++- .../Private/MetalDerivedData.h | 1 + .../Private/MetalShaderCompiler.cpp | 9 +- .../Private/MetalShaderFormat.cpp | 2 +- .../AssetTools/Private/AssetTools.cpp | 4 +- .../AssetTypeActions_Texture2D.cpp | 37 + .../AssetTypeActions_Texture2D.h | 1 + .../AssetTypeActions_Texture2DArray.cpp | 3 + .../AssetTypeActions_Texture2DArray.h | 17 + .../AudioFormatOgg/AudioFormatOgg.Build.cs | 2 +- .../AudioFormatOpus/AudioFormatOpus.Build.cs | 2 +- .../Private/BlueprintNativeCodeGenUtils.cpp | 6 +- .../DesktopPlatform/DesktopPlatform.Build.cs | 2 +- .../Private/DesktopPlatformBase.cpp | 13 +- .../Private/IOSTargetPlatform.cpp | 16 +- .../Private/Launcher/LauncherWorker.cpp | 4 + .../Private/Profiles/LauncherProfile.h | 4 + ...inuxAArch64NoEditorTargetPlatform.Build.cs | 40 + ...nuxAArch64NoEditorTargetPlatformModule.cpp | 46 + .../LinuxClientTargetPlatform.Build.cs | 4 + .../LinuxClientTargetPlatformModule.cpp | 4 +- .../LinuxNoEditorTargetPlatform.Build.cs | 4 + .../LinuxNoEditorTargetPlatformModule.cpp | 4 +- .../LinuxServerTargetPlatform.Build.cs | 4 + .../LinuxServerTargetPlatformModule.cpp | 4 +- .../LinuxTargetPlatform.Build.cs | 4 + .../Private/LinuxTargetDevice.h | 5 +- .../Private/LinuxTargetPlatform.h | 1 - .../Private/LinuxTargetPlatformModule.cpp | 4 +- .../LocalizationService.Build.cs | 2 +- .../Classes/MacTargetSettings.h | 4 + .../Private/MacTargetPlatformModule.cpp | 5 + .../Private/ExportMaterialProxy.h | 17 +- .../Private/MaterialUtilities.cpp | 16 +- .../Private/GlslBackend.cpp | 5 +- .../Private/OpenGLShaderCompiler.cpp | 1239 +++- .../Private/ShaderFormatOpenGL.cpp | 11 - .../Public/ShaderFormatOpenGL.h | 2 +- .../ShaderFormatOpenGL.Build.cs | 15 +- .../Private/VectorVMShaderCompiler.cpp | 3 +- .../Private/ShaderPreprocessor.cpp | 26 +- .../Public/ShaderPreprocessor.h | 5 +- .../Private/ShaderFormatsPropertyDetails.cpp | 7 - .../SourceControl/SourceControl.Build.cs | 25 +- .../StandaloneRenderer.Build.cs | 2 +- .../Private/TargetPlatformManagerModule.cpp | 4 + .../TargetPlatform/TargetPlatform.Build.cs | 2 +- .../Private/TextureCompressorModule.cpp | 3 +- .../Public/TextureCompressorModule.h | 6 + .../Private/TextureFormatASTC.cpp | 2 +- .../TextureFormatASTC.Build.cs | 2 +- .../Private/TextureFormatAndroid.cpp | 4 +- .../Private/TextureFormatDXT.cpp | 2 +- .../Private/TextureFormatIntelISPCTexComp.cpp | 2 +- .../Private/TextureFormatPVR.cpp | 2 +- .../Private/TextureFormatUncompressed.cpp | 14 +- .../Private/VulkanBackend.cpp | 5 +- .../Private/VulkanShaderCompiler.cpp | 22 +- .../Private/VulkanShaderFormat.cpp | 18 +- .../Private/VulkanShaderFormat.h | 4 - .../VulkanShaderFormat.Build.cs | 6 +- .../External/LC_ServerCommandThread.cpp | 2 +- .../Private/D3DShaderCompiler.cpp | 202 +- .../Private/ShaderFormatD3D.cpp | 13 +- .../ShaderFormatD3D/Private/ShaderFormatD3D.h | 1 - .../Private/GenericWindowsTargetPlatform.h | 7 - .../Private/XGEControllerModule.cpp | 2 +- .../Private/BehaviorTreeGraph.cpp | 7 +- .../Private/LinuxTargetSettingsDetails.cpp | 4 - .../Private/WindowsTargetSettingsDetails.cpp | 2 +- .../EditorStyle/Private/SlateEditorStyle.cpp | 9 +- .../Private/LandscapeEdMode.cpp | 2 +- .../LevelEditor/Private/LevelEditor.cpp | 6 - .../Private/LevelEditorActions.cpp | 1 - .../Private/LevelEditorToolBar.cpp | 11 - .../LevelEditor/Public/LevelEditorActions.h | 1 - .../MaterialEditor/Private/MaterialEditor.cpp | 13 +- .../Private/MaterialPropertyHelpers.cpp | 2 - .../MaterialEditor/Private/MaterialStats.cpp | 6 +- .../Private/MaterialStatsCommon.cpp | 14 +- .../Private/SMaterialLayersFunctionsTree.cpp | 1 - .../Models/TextureEditorViewportClient.cpp | 10 +- .../Private/TextureEditorToolkit.cpp | 18 +- .../Classes/Factories/Texture2DArrayFactory.h | 31 + .../Texture2dArrayThumbnailRenderer.h | 24 + .../Classes/Factories/TextureFactory.h | 3 +- .../UnrealEd/Private/CookOnTheFlyServer.cpp | 2 +- .../UnrealEd/Private/EditorBuildUtils.cpp | 4 +- .../Editor/UnrealEd/Private/EditorServer.cpp | 1 + .../Private/Factories/EditorFactories.cpp | 102 +- .../Factories/Texture2DArrayFactory.cpp | 96 + .../Private/Kismet2/DebuggerCommands.cpp | 4 + .../UnrealEd/Private/LevelEditorViewport.cpp | 79 + .../Lightmass/ImportVolumetricLightmap.cpp | 520 +- .../UnrealEd/Private/Lightmass/Lightmass.cpp | 28 +- .../UnrealEd/Private/Lightmass/Lightmass.h | 2 +- .../Private/Lightmass/LightmassRender.cpp | 9 +- .../UnrealEd/Private/MaterialGraphSchema.cpp | 3 + .../UnrealEd/Private/MeshPaintRendering.cpp | 8 +- .../UnrealEd/Private/PreferenceStubs.cpp | 5 +- ...yTracingDebugVisualizationMenuCommands.cpp | 2 + .../Private/SEditorViewportViewMenu.cpp | 2 +- .../UnrealEd/Private/Texture2DPreview.cpp | 30 +- .../UnrealEd/Private/ThumbnailManager.cpp | 3 +- .../Texture2DArrayThumbnailRenderer.cpp | 33 + .../TextureThumbnailRenderer.cpp | 9 + .../UnrealEd/Private/VolumeTexturePreview.cpp | 2 +- .../Editor/UnrealEd/Public/Texture2DPreview.h | 4 +- .../Source/Editor/UnrealEd/Public/UnrealEd.h | 1 + .../Android/AndroidPlatform.Automation.cs | 2 +- .../AutomationUtils/CommandUtils.cs | 4 + .../AutomationUtils/Platform.cs | 2 +- .../HTML5/HTML5Platform.Automation.cs | 2 +- .../IOS/IOSPlatform.Automation.cs | 797 +-- .../Linux/LinuxPlatform.Automation.cs | 27 +- .../Lumin/LuminPlatform.Automation.cs | 2 +- .../Scripts/BuildPhysX.Automation.cs | 42 +- .../Scripts/BuildPluginCommand.Automation.cs | 8 +- .../Programs/IOS/iPhonePackager/Config.cs | 2 +- .../Programs/IOS/iPhonePackager/CookTime.cs | 20 +- .../IOS/iPhonePackager/iPhonePackager.cs | 2 +- .../Programs/SlateViewer/SlateViewer.Build.cs | 2 +- .../Configuration/UEBuildBinary.cs | 9 +- .../Configuration/UEBuildPlatform.cs | 3 +- .../Configuration/UEBuildTarget.cs | 10 + .../Platform/Android/AndroidToolChain.cs | 78 +- .../Platform/IOS/IOSToolChain.cs | 747 ++- .../Platform/IOS/UEBuildIOS.cs | 65 +- .../Platform/IOS/UEDeployIOS.cs | 18 +- .../Platform/Linux/LinuxExports.cs | 2 +- .../Platform/Linux/LinuxProjectGenerator.cs | 1 + .../Platform/Linux/UEBuildLinux.cs | 69 +- .../ProjectFiles/ProjectFileGenerator.cs | 16 + .../Xcode/XcodeFrameworkWrapperProject.cs | 315 + .../UnrealBuildTool/UnrealBuildTool.csproj | 1 + .../Private/CPUSolver/CPUSolver.cpp | 14 +- .../Private/ImportExport/Exporter.cpp | 1 + .../Private/ImportExport/Mesh.h | 2 + .../Lighting/AdaptiveVolumetricLightmap.cpp | 278 +- .../Private/Lighting/Collision.cpp | 153 +- .../Private/Lighting/Collision.h | 8 + .../Private/Lighting/Embree.cpp | 265 +- .../UnrealLightmass/Private/Lighting/Embree.h | 16 +- .../Private/Lighting/LightingMesh.h | 5 + .../Private/Lighting/LightingSystem.cpp | 108 +- .../Private/Lighting/LightingSystem.h | 13 +- .../Private/Lighting/StaticMesh.cpp | 41 + .../Private/Lighting/StaticMesh.h | 11 +- .../Private/Lighting/TextureMapping.cpp | 2 +- .../Private/LightmassCore/Math/LMkDOP.h | 243 +- .../UnrealLightmass/Public/ImportExport.h | 2 +- .../UnrealLightmass/Public/SceneExport.h | 6 + .../Runtime/Apple/MetalRHI/MetalRHI.Build.cs | 1 - .../Apple/MetalRHI/Private/MetalBuffer.cpp | 18 +- .../Apple/MetalRHI/Private/MetalBuffer.h | 1 + .../MetalRHI/Private/MetalCommandEncoder.cpp | 13 +- .../MetalRHI/Private/MetalCommandEncoder.h | 14 +- .../MetalRHI/Private/MetalCommandQueue.cpp | 18 +- .../MetalRHI/Private/MetalCommandQueue.h | 4 + .../Apple/MetalRHI/Private/MetalCommands.cpp | 82 +- .../Apple/MetalRHI/Private/MetalContext.cpp | 26 +- .../Apple/MetalRHI/Private/MetalContext.h | 4 +- .../Private/MetalDebugCommandEncoder.h | 3 +- .../MetalRHI/Private/MetalIndexBuffer.cpp | 121 +- .../Apple/MetalRHI/Private/MetalPipeline.cpp | 907 ++- .../Apple/MetalRHI/Private/MetalPipeline.h | 7 +- .../Apple/MetalRHI/Private/MetalQuery.cpp | 2 +- .../Apple/MetalRHI/Private/MetalRHI.cpp | 12 +- .../Apple/MetalRHI/Private/MetalRHIPrivate.h | 17 + .../MetalRHI/Private/MetalRenderPass.cpp | 539 +- .../Apple/MetalRHI/Private/MetalRenderPass.h | 14 + .../MetalRHI/Private/MetalRenderTarget.cpp | 288 +- .../Apple/MetalRHI/Private/MetalShaders.cpp | 155 +- .../MetalRHI/Private/MetalStateCache.cpp | 302 +- .../Apple/MetalRHI/Private/MetalStateCache.h | 9 +- .../Private/MetalStructuredBuffer.cpp | 115 +- .../Apple/MetalRHI/Private/MetalUAV.cpp | 2 +- .../MetalRHI/Private/MetalUniformBuffer.cpp | 928 +-- .../MetalRHI/Private/MetalVertexBuffer.cpp | 275 +- .../Runtime/Apple/MetalRHI/Public/MetalRHI.h | 17 +- .../Apple/MetalRHI/Public/MetalResources.h | 173 +- .../MetalRHI/Public/MetalShaderResources.h | 5 + .../ApplicationCore/ApplicationCore.Build.cs | 2 +- .../Private/Android/AndroidWindow.cpp | 3 + .../Private/HTML5/HTML5Application.cpp | 122 +- .../IOS/IOSPlatformApplicationMisc.cpp | 1 - .../ApplicationCore/Private/IOS/IOSView.cpp | 166 +- .../ApplicationCore/Public/IOS/IOSView.h | 9 - Engine/Source/Runtime/Core/Core.Build.cs | 10 +- .../Core/Private/HAL/ConsoleManager.cpp | 9 - .../Runtime/Core/Private/HAL/MallocAnsi.cpp | 13 +- .../Runtime/Core/Private/HAL/MallocBinned.cpp | 6 +- .../Runtime/Core/Private/HAL/MallocTBB.cpp | 4 +- .../Private/Linux/LinuxPlatformProcess.cpp | 5 + .../Runtime/Core/Private/Math/Sobol.cpp | 36 + .../Runtime/Core/Public/HAL/ThreadSingleton.h | 11 +- .../Public/Linux/LinuxPlatformProperties.h | 14 +- .../Runtime/Core/Public/Mac/MacPlatformMisc.h | 2 +- .../Source/Runtime/Core/Public/Math/Halton.h | 21 + .../Source/Runtime/Core/Public/Math/Sobol.h | 3 + .../Runtime/Core/Public/UObject/NameTypes.h | 36 + .../Public/UObject/RenderingObjectVersion.h | 11 + .../Source/Runtime/D3D12RHI/D3D12RHI.Build.cs | 1 - .../Runtime/D3D12RHI/Private/D3D12Adapter.cpp | 15 +- .../Runtime/D3D12RHI/Private/D3D12Adapter.h | 12 +- .../D3D12RHI/Private/D3D12Allocation.cpp | 22 +- .../D3D12RHI/Private/D3D12CommandList.cpp | 2 +- .../D3D12RHI/Private/D3D12Commands.cpp | 33 +- .../D3D12RHI/Private/D3D12DescriptorCache.cpp | 61 +- .../D3D12RHI/Private/D3D12DescriptorCache.h | 2 +- .../Runtime/D3D12RHI/Private/D3D12Device.cpp | 5 + .../Runtime/D3D12RHI/Private/D3D12Device.h | 1 + .../Private/D3D12DirectCommandListManager.cpp | 2 +- .../D3D12RHI/Private/D3D12IndexBuffer.cpp | 24 +- .../D3D12RHI/Private/D3D12PipelineState.h | 70 +- .../D3D12RHI/Private/D3D12Pipelinestate.cpp | 34 +- .../Runtime/D3D12RHI/Private/D3D12Query.cpp | 12 +- .../Runtime/D3D12RHI/Private/D3D12RHI.cpp | 8 - .../D3D12RHI/Private/D3D12RHIPrivate.h | 27 +- .../D3D12RHI/Private/D3D12RayTracing.cpp | 29 +- .../D3D12RHI/Private/D3D12RayTracing.h | 2 +- .../D3D12RHI/Private/D3D12RenderTarget.cpp | 355 +- .../D3D12RHI/Private/D3D12Resources.cpp | 14 +- .../D3D12RHI/Private/D3D12RootSignature.cpp | 4 +- .../Runtime/D3D12RHI/Private/D3D12Shader.h | 49 +- .../Runtime/D3D12RHI/Private/D3D12Shaders.cpp | 71 +- .../D3D12RHI/Private/D3D12StateCache.cpp | 12 - .../D3D12RHI/Private/D3D12StateCachePrivate.h | 2 - .../Private/D3D12StructuredBuffer.cpp | 8 +- .../Runtime/D3D12RHI/Private/D3D12Texture.h | 6 +- .../Runtime/D3D12RHI/Private/D3D12UAV.cpp | 2 +- .../D3D12RHI/Private/D3D12VertexBuffer.cpp | 28 +- .../Private/HoloLens/HoloLensD3D12DiskCache.h | 2 +- .../HoloLens/HoloLensD3D12PipelineState.h | 1 - .../Private/Windows/WindowsD3D12Device.cpp | 51 +- .../Private/Windows/WindowsD3D12DiskCache.h | 2 +- .../Windows/WindowsD3D12PipelineState.cpp | 172 +- .../Windows/WindowsD3D12PipelineState.h | 1 - .../Private/Windows/WindowsD3D12Viewport.cpp | 2 +- .../Runtime/D3D12RHI/Public/D3D12Resources.h | 8 +- .../Runtime/D3D12RHI/Public/D3D12Util.h | 45 - .../EmptyRHI/Private/EmptyCommands.cpp | 5 - .../EmptyRHI/Private/EmptyIndexBuffer.cpp | 4 +- .../Runtime/EmptyRHI/Private/EmptyShaders.cpp | 7 - .../Private/EmptyStructuredBuffer.cpp | 4 +- .../EmptyRHI/Private/EmptyVertexBuffer.cpp | 4 +- .../Source/Runtime/EmptyRHI/Public/EmptyRHI.h | 14 +- .../Classes/Components/PrimitiveComponent.h | 6 +- .../Engine/Classes/Engine/SubsurfaceProfile.h | 52 + .../Runtime/Engine/Classes/Engine/Texture.h | 3 +- .../Engine/Classes/Engine/Texture2DArray.cpp | 391 ++ .../Engine/Classes/Engine/Texture2DArray.h | 121 + .../Classes/Engine/TextureLightProfile.h | 4 + .../Classes/Engine/TextureRenderTarget2D.h | 37 +- .../Engine/Classes/Materials/Material.h | 6 +- .../MaterialExpressionFunctionInput.h | 1 + ...aterialExpressionParticleSubUVProperties.h | 26 + .../MaterialExpressionShaderStageSwitch.h | 37 + ...lExpressionTextureSampleParameter2DArray.h | 25 + .../Classes/Materials/MaterialInstance.h | 2 + .../Materials/MaterialLayersFunctions.h | 31 +- Engine/Source/Runtime/Engine/Engine.Build.cs | 2 +- .../Engine/Private/Atmosphere/Atmosphere.h | 2 +- .../Private/Components/ActorComponent.cpp | 20 +- .../Private/Components/LightComponent.cpp | 2 +- .../Components/PointLightComponent.cpp | 2 +- .../Private/Components/PrimitiveComponent.cpp | 28 - .../Private/Components/RectLightComponent.cpp | 2 +- .../Components/ReflectionCaptureComponent.cpp | 7 + .../Components/SkyAtmosphereComponent.cpp | 2 +- .../Private/Components/SkyLightComponent.cpp | 8 +- .../Components/StaticMeshComponent.cpp | 7 +- .../Runtime/Engine/Private/DDSLoader.cpp | 91 +- .../Engine/Private/DebugViewModeHelpers.cpp | 4 +- .../Private/DebugViewModeMaterialProxy.cpp | 5 +- .../Engine/Private/DeveloperSettings.cpp | 8 +- .../Engine/Private/GPUSkinVertexFactory.cpp | 140 +- .../Private/GeometryCacheVertexFactory.cpp | 2 +- .../Engine/Private/InstancedStaticMesh.cpp | 6 +- .../Engine/Private/InstancedStaticMesh.h | 2 +- .../Source/Runtime/Engine/Private/Level.cpp | 19 +- .../Runtime/Engine/Private/LocalPlayer.cpp | 2 +- .../Runtime/Engine/Private/MapBuildData.cpp | 26 +- .../Materials/HLSLMaterialTranslator.h | 95 +- .../Engine/Private/Materials/Material.cpp | 54 +- .../Private/Materials/MaterialExpressions.cpp | 304 +- .../Private/Materials/MaterialInstance.cpp | 122 +- .../Private/Materials/MaterialShader.cpp | 572 +- .../Private/Materials/MaterialShared.cpp | 56 +- .../Materials/MaterialUniformExpressions.cpp | 71 +- .../Materials/MaterialUniformExpressions.h | 5 + .../Private/Materials/MeshMaterialShader.cpp | 14 +- .../Private/MeshParticleVertexFactory.cpp | 6 +- .../Private/Particles/FXSystemPrivate.h | 4 +- .../Particles/ParticleSystemRender.cpp | 10 +- .../Private/PrecomputedVolumetricLightmap.cpp | 873 ++- .../Runtime/Engine/Private/RawIndexBuffer.cpp | 2 +- .../Engine/Private/RendererSettings.cpp | 10 + .../Private/Rendering/BurleyNormalizedSSS.cpp | 250 + .../Private/Rendering/BurleyNormalizedSSS.h | 31 + .../Private/Rendering/SubsurfaceProfile.cpp | 163 +- .../Runtime/Engine/Private/SceneView.cpp | 39 +- .../Private/ShaderCompiler/ShaderCompiler.cpp | 50 +- .../Engine/Private/ShaderDerivedDataVersion.h | 4 +- .../Runtime/Engine/Private/ShowFlags.cpp | 10 +- .../Engine/Private/SkeletalRenderCPUSkin.cpp | 1 - .../Engine/Private/SkeletalRenderGPUSkin.cpp | 7 +- .../Engine/Private/SkeletalRenderStatic.cpp | 1 - .../Runtime/Engine/Private/StaticMesh.cpp | 1 - .../Runtime/Engine/Private/StatsRender2.cpp | 45 +- .../Source/Runtime/Engine/Private/Texture.cpp | 2 +- .../Runtime/Engine/Private/Texture2D.cpp | 118 +- .../Engine/Private/TextureDerivedData.cpp | 13 +- .../Engine/Private/TextureDerivedDataTask.cpp | 9 +- .../Engine/Private/TextureLightProfile.cpp | 11 + .../Engine/Private/TextureRenderTarget2D.cpp | 51 +- .../Runtime/Engine/Private/UnrealClient.cpp | 2 +- .../Engine/Private/UpdateTextureShaders.cpp | 2 + .../Private/VT/VirtualTextureUploadCache.cpp | 2 +- .../Private/VectorFieldVisualization.cpp | 2 +- .../Runtime/Engine/Private/VolumeTexture.cpp | 2 - .../Source/Runtime/Engine/Private/World.cpp | 22 + .../ComponentRecreateRenderStateContext.h | 45 +- .../Engine/Public/CubemapUnwrapUtils.h | 2 +- .../Source/Runtime/Engine/Public/DDSLoader.h | 32 +- .../Runtime/Engine/Public/MaterialCompiler.h | 24 +- .../Engine/Public/MaterialShaderType.h | 12 +- .../Runtime/Engine/Public/MaterialShared.h | 68 +- .../Engine/Public/MeshMaterialShaderType.h | 8 +- .../Public/PrecomputedVolumetricLightmap.h | 210 +- .../Runtime/Engine/Public/SceneInterface.h | 8 +- .../Runtime/Engine/Public/ScreenRendering.h | 2 +- .../Source/Runtime/Engine/Public/ShowFlags.h | 1 - .../Runtime/Engine/Public/ShowFlagsValues.inl | 2 - .../Engine/Public/StaticParameterSet.h | 252 +- .../Runtime/Engine/Public/TextureResource.h | 21 +- .../Engine/Public/UpdateTextureShaders.h | 32 +- .../Runtime/EyeTracker/EyeTracker.Build.cs | 1 - .../Private/GameplayMediaEncoderCommon.h | 2 +- .../HTML5JS/Private/HTML5JavaScriptFx.js | 4 + .../HeadMountedDisplay.Build.cs | 1 - .../DefaultSpectatorScreenController.cpp | 4 +- .../Classes/IOSRuntimeSettings.h | 12 +- .../Private/IOSRuntimeSettings.cpp | 12 +- .../Runtime/InputCore/InputCore.Build.cs | 2 +- .../Runtime/Landscape/Private/Landscape.cpp | 4 +- .../Landscape/Private/LandscapeGrass.cpp | 28 +- .../Landscape/Private/LandscapeRender.cpp | 23 +- .../Landscape/Public/LandscapeRender.h | 2 +- Engine/Source/Runtime/Launch/Launch.Build.cs | 12 +- .../Launch/Private/LaunchEngineLoop.cpp | 16 +- .../AudioMixerSDL/AudioMixerSDL.Build.cs | 8 +- .../Runtime/MediaAssets/MediaAssets.Build.cs | 3 +- .../Solaris/ProtoLem/Public/IVplIde.h | 77 + .../Runtime/NullDrv/Private/NullRHI.cpp | 4 +- .../Source/Runtime/NullDrv/Public/NullRHI.h | 23 +- .../Runtime/Online/Voice/Voice.Build.cs | 2 +- .../Runtime/OpenGLDrv/OpenGLDrv.Build.cs | 8 +- .../OpenGLDrv/Private/IOS/IOSOpenGL.cpp | 354 - .../Runtime/OpenGLDrv/Private/IOS/IOSOpenGL.h | 151 - .../OpenGLDrv/Private/Linux/OpenGLLinux.cpp | 10 +- .../OpenGLDrv/Private/OpenGLCommands.cpp | 11 +- .../OpenGLDrv/Private/OpenGLDevice.cpp | 4 +- .../OpenGLDrv/Private/OpenGLDrvPrivate.h | 2 - .../OpenGLDrv/Private/OpenGLIndexBuffer.cpp | 6 +- .../OpenGLDrv/Private/OpenGLShaders.cpp | 13 - .../Private/OpenGLStructuredBuffer.cpp | 4 +- .../OpenGLDrv/Private/OpenGLTexture.cpp | 5 +- .../Runtime/OpenGLDrv/Private/OpenGLUAV.cpp | 6 - .../OpenGLDrv/Private/OpenGLVertexBuffer.cpp | 6 +- .../Source/Runtime/OpenGLDrv/Public/OpenGL.h | 2 +- .../Source/Runtime/OpenGLDrv/Public/OpenGL3.h | 6 +- .../Runtime/OpenGLDrv/Public/OpenGLDrv.h | 22 +- .../RHI/Private/Apple/AppleDynamicRHI.cpp | 78 +- .../Runtime/RHI/Private/GPUProfiler.cpp | 94 +- Engine/Source/Runtime/RHI/Private/RHI.cpp | 32 +- .../Runtime/RHI/Private/RHICommandList.cpp | 390 +- .../RHI/Private/Windows/WindowsDynamicRHI.cpp | 19 +- Engine/Source/Runtime/RHI/Public/DynamicRHI.h | 78 +- .../Source/Runtime/RHI/Public/GPUProfiler.h | 20 + Engine/Source/Runtime/RHI/Public/MultiGPU.h | 8 +- Engine/Source/Runtime/RHI/Public/RHI.h | 51 +- .../Runtime/RHI/Public/RHICommandList.h | 407 +- .../Runtime/RHI/Public/RHIDefinitions.h | 100 +- .../RHI/Public/RHIShaderFormatDefinitions.inl | 17 - .../Public/RHIShaderPlatformDefinitions.inl | 9 - .../Runtime/RHI/Public/RHIStaticStates.h | 2 + .../RHI/Public/RHISurfaceDataConversion.h | 650 ++ .../Source/Runtime/RHI/Public/RHIUtilities.h | 53 +- .../Source/Runtime/RHI/Public/RHIValidation.h | 86 +- Engine/Source/Runtime/RHI/RHI.Build.cs | 2 +- .../Private/BuiltInRayTracingShaders.cpp | 0 .../Private/ClearQuad.cpp | 2 +- .../Private/ClearReplacementShaders.cpp | 0 .../Private/CommonRenderResources.cpp | 2 +- .../Private/DynamicBufferAllocator.cpp | 2 +- .../RenderCore/Private/GenerateMips.cpp | 59 +- .../Private/LongGPUTask.cpp | 2 +- .../Private/MediaShaders.cpp | 0 .../Private/OculusShaders.cpp | 0 .../Private/OneColorShader.cpp | 18 +- .../RealtimeGPUProfiler.cpp | 4 +- .../Private/RGBAToYUV420Shader.cpp | 0 .../Runtime/RenderCore/Private/RenderCore.cpp | 3 +- .../Private/RenderGraphBarrierBatcher.cpp | 27 +- .../Private/RenderGraphBarrierBatcher.h | 9 +- .../RenderCore/Private/RenderGraphBuilder.cpp | 367 +- .../RenderCore/Private/RenderGraphEvent.cpp | 30 +- .../RenderCore/Private/RenderGraphPass.cpp | 7 +- .../RenderCore/Private/RenderGraphUtils.cpp | 226 +- .../Private/RenderGraphValidation.cpp | 405 +- .../RenderCore/Private/RenderTargetPool.cpp | 298 +- .../RenderCore/Private/RenderUtils.cpp | 30 +- .../RenderCore/Private/RenderingThread.cpp | 2 +- .../Private/ResolveShader.cpp | 32 + .../Runtime/RenderCore/Private/Shader.cpp | 155 +- .../RenderCore/Private/ShaderCodeLibrary.cpp | 71 +- .../Runtime/RenderCore/Private/ShaderCore.cpp | 11 +- .../Private/ShaderParameterMetadata.cpp | 38 + .../Private/ShaderParameterStruct.cpp | 41 +- .../RenderCore/Private/ShaderParameters.cpp | 2 +- .../RenderCore/Private/VisualizeTexture.cpp | 121 +- .../Public/BuiltInRayTracingShaders.h | 10 +- .../Runtime/RenderCore/Public/ClearQuad.h | 83 + .../Public/ClearReplacementShaders.h | 38 +- .../RenderCore/Public/CommonRenderResources.h | 5 +- .../Runtime/RenderCore/Public/GenerateMips.h | 1 + .../Runtime/RenderCore/Public/GlobalShader.h | 4 +- .../Runtime/RenderCore/Public/LongGPUTask.h | 10 + .../Public/MediaShaders.h | 86 +- .../Public/OculusShaders.h | 14 +- .../Public/OneColorShader.h | 10 +- .../Public/RGBAToYUV420Shader.h | 0 .../Runtime/RenderCore/Public/RenderCore.h | 3 +- .../RenderCore/Public/RenderGraphBuilder.h | 35 +- .../RenderCore/Public/RenderGraphBuilder.inl | 68 +- .../RenderCore/Public/RenderGraphEvent.h | 12 +- .../RenderCore/Public/RenderGraphEvent.inl | 35 +- .../RenderCore/Public/RenderGraphPass.h | 72 +- .../RenderCore/Public/RenderGraphResources.h | 206 +- .../RenderCore/Public/RenderGraphUtils.h | 73 +- .../RenderCore/Public/RenderGraphValidation.h | 21 +- .../RenderCore/Public/RenderTargetPool.h | 1 + .../Runtime/RenderCore/Public/RenderUtils.h | 9 - .../RenderCore/Public/RendererInterface.h | 20 +- .../RenderCore/Public/RenderingThread.h | 8 + .../Public/ResolveShader.h | 51 +- .../Source/Runtime/RenderCore/Public/Shader.h | 232 +- .../RenderCore/Public/ShaderCodeLibrary.h | 4 - .../Runtime/RenderCore/Public/ShaderCore.h | 39 + .../RenderCore/Public/ShaderParameterMacros.h | 35 +- .../Public/ShaderParameterMetadata.h | 6 +- .../RenderCore/Public/ShaderParameterStruct.h | 29 +- .../RenderCore/Public/ShaderParameterUtils.h | 32 +- .../RenderCore/Public/ShaderParameters.h | 16 +- .../RenderCore/Public/VisualizeTexture.h | 10 +- .../Renderer/Private/AtmosphereRendering.cpp | 34 +- .../Renderer/Private/BasePassRendering.h | 4 +- .../Private/ClusteredDeferredShadingPass.cpp | 2 +- .../PostProcessAmbientOcclusion.cpp | 11 +- .../PostProcessDeferredDecals.cpp | 50 - .../PostProcessMeshDecals.cpp | 2 +- .../PostProcessPassThrough.h | 2 +- .../Renderer/Private/ConvertToUniformMesh.cpp | 8 +- .../Private/DebugViewModeRendering.cpp | 21 +- .../Private/DeferredShadingRenderer.cpp | 37 +- .../Private/DeferredShadingRenderer.h | 66 +- .../Renderer/Private/DepthRendering.cpp | 2 +- .../Runtime/Renderer/Private/DepthRendering.h | 4 +- .../Private/DistanceFieldAmbientOcclusion.cpp | 2 +- .../Renderer/Private/DistortionRendering.cpp | 3 +- .../Runtime/Renderer/Private/FogRendering.cpp | 4 +- .../Runtime/Renderer/Private/GPUBenchmark.cpp | 2 +- .../Private/GPUFastFourierTransform.cpp | 52 +- .../Private/GPUFastFourierTransform.h | 22 +- .../Runtime/Renderer/Private/GPUScene.cpp | 34 +- .../Runtime/Renderer/Private/GPUScene.h | 4 +- .../Private/IndirectLightRendering.cpp | 71 +- .../Private/IndirectLightingCache.cpp | 2 +- .../Private/LightFunctionRendering.cpp | 4 +- .../Renderer/Private/LightGridInjection.cpp | 78 +- .../Private/LightMapDensityRendering.cpp | 4 +- .../Private/LightMapDensityRendering.h | 4 +- .../Renderer/Private/LightMapRendering.cpp | 19 +- .../Renderer/Private/LightMapRendering.h | 4 +- .../Renderer/Private/LightRendering.cpp | 15 +- .../Runtime/Renderer/Private/LightRendering.h | 2 +- .../Renderer/Private/LightSceneInfo.cpp | 2 +- .../Renderer/Private/LightShaftRendering.cpp | 62 +- .../Renderer/Private/MeshDrawCommands.cpp | 49 +- .../Private/MobileShadingRenderer.cpp | 4 +- .../Private/PlanarReflectionRendering.cpp | 37 +- .../Private/PostProcess/DiaphragmDOF.cpp | 83 +- .../Private/PostProcess/DiaphragmDOF.h | 5 +- .../Private/PostProcess/PostProcessAA.cpp | 4 +- .../PostProcess/PostProcessBloomSetup.cpp | 710 +- .../PostProcess/PostProcessBloomSetup.h | 64 +- .../PostProcess/PostProcessBokehDOF.cpp | 2 +- .../PostProcess/PostProcessBusyWait.cpp | 2 +- .../PostProcess/PostProcessCombineLUTs.cpp | 1234 ++-- .../PostProcess/PostProcessCombineLUTs.h | 86 +- .../Private/PostProcess/PostProcessDOF.cpp | 6 +- .../PostProcess/PostProcessDownsample.cpp | 559 +- .../PostProcess/PostProcessDownsample.h | 102 +- .../PostProcess/PostProcessEyeAdaptation.cpp | 1316 ++-- .../PostProcess/PostProcessEyeAdaptation.h | 180 +- .../PostProcess/PostProcessFFTBloom.cpp | 1746 +++-- .../Private/PostProcess/PostProcessFFTBloom.h | 144 +- .../PostProcess/PostProcessGBufferHints.cpp | 2 +- .../PostProcess/PostProcessHistogram.cpp | 290 +- .../PostProcess/PostProcessHistogram.h | 48 +- .../PostProcessHistogramReduce.cpp | 174 - .../PostProcess/PostProcessHistogramReduce.h | 29 - .../PostProcess/PostProcessLensBlur.cpp | 247 - .../Private/PostProcess/PostProcessLensBlur.h | 30 - .../PostProcess/PostProcessLensFlares.cpp | 527 +- .../PostProcess/PostProcessLensFlares.h | 75 +- .../PostProcess/PostProcessMaterial.cpp | 1252 ++-- .../Private/PostProcess/PostProcessMaterial.h | 150 +- .../PostProcessMitchellNetravali.cpp | 174 +- .../PostProcessMitchellNetravali.h | 39 +- .../PostProcess/PostProcessMotionBlur.cpp | 231 +- .../PostProcess/PostProcessMotionBlur.h | 32 +- .../PostProcess/PostProcessNoiseBlur.cpp | 2 +- .../PostProcess/PostProcessSubsurface.cpp | 820 ++- .../PostProcess/PostProcessTemporalAA.cpp | 781 ++- .../PostProcess/PostProcessTemporalAA.h | 83 +- .../PostProcess/PostProcessTestImage.cpp | 278 +- .../PostProcess/PostProcessTestImage.h | 22 +- .../PostProcess/PostProcessTonemap.cpp | 81 +- .../Private/PostProcess/PostProcessTonemap.h | 33 +- .../PostProcess/PostProcessUpscale.cpp | 2 +- .../PostProcess/PostProcessVisualizeHDR.cpp | 77 +- .../PostProcessWeightedSampleSum.cpp | 1810 ++--- .../PostProcessWeightedSampleSum.h | 112 +- .../Private/PostProcess/PostProcessing.cpp | 2000 +++--- .../Private/PostProcess/PostProcessing.h | 2 +- .../PostProcess/RenderingCompositionGraph.cpp | 23 +- .../PostProcess/RenderingCompositionGraph.h | 41 + .../PostProcess/SceneRenderTargets.cpp | 58 +- .../PostProcess/VisualizeShadingModels.cpp | 2 +- .../Renderer/Private/PrimitiveSceneInfo.cpp | 4 +- .../RayTracing/RayTracingAmbientOcclusion.cpp | 124 +- .../Private/RayTracing/RayTracingDebug.cpp | 45 +- .../RayTracing/RayTracingDynamicGeometry.cpp | 1 + .../RayTracingGlobalIllumination.cpp | 434 +- .../RayTracingMaterialHitShaders.cpp | 2 + .../RayTracing/RayTracingPrimaryRays.cpp | 189 + .../RayTracing/RayTracingReflections.cpp | 66 +- .../Private/RayTracing/RayTracingShadows.cpp | 5 + .../Private/RayTracing/RayTracingSkyLight.h | 4 +- .../RayTracing/RayTracingTranslucency.cpp | 199 +- .../Private/RayTracing/RaytracingOptions.h | 29 + .../Private/RayTracing/RaytracingSkylight.cpp | 2 +- .../Private/ReflectionEnvironment.cpp | 18 +- .../Private/ReflectionEnvironmentCapture.cpp | 18 +- .../Renderer/Private/RendererScene.cpp | 934 ++- .../Private/SceneCaptureRendering.cpp | 4 +- .../Private/SceneHitProxyRendering.cpp | 6 +- .../Renderer/Private/SceneOcclusion.cpp | 208 +- .../Runtime/Renderer/Private/ScenePrivate.h | 56 +- .../Renderer/Private/SceneRendering.cpp | 43 +- .../Runtime/Renderer/Private/SceneRendering.h | 37 +- .../Private/SceneTextureParameters.cpp | 16 +- .../Private/SceneTextureReductions.cpp | 277 + .../Renderer/Private/SceneVisibility.cpp | 29 +- .../Runtime/Renderer/Private/ScreenPass.cpp | 89 +- .../Runtime/Renderer/Private/ScreenPass.h | 295 +- .../Renderer/Private/ScreenSpaceDenoise.cpp | 776 ++- .../Renderer/Private/ScreenSpaceDenoise.h | 68 +- .../Private/ScreenSpaceRayTracing.cpp | 472 +- .../Renderer/Private/ShaderBaseClasses.cpp | 47 +- .../Runtime/Renderer/Private/ShaderPrint.cpp | 2 +- .../Renderer/Private/ShadowDepthRendering.cpp | 22 +- .../Renderer/Private/ShadowRendering.cpp | 2 +- .../Renderer/Private/ShadowRendering.h | 6 +- .../Runtime/Renderer/Private/ShadowSetup.cpp | 16 +- .../Private/SkyAtmosphereRendering.cpp | 48 +- .../Renderer/Private/SystemTextures.cpp | 29 +- .../Private/Tests/RayTracingTestbed.cpp | 11 +- .../Renderer/Private/TranslucentLighting.cpp | 14 +- .../Renderer/Private/TranslucentRendering.cpp | 4 +- .../VT/RuntimeVirtualTextureRender.cpp | 8 +- .../Renderer/Private/VelocityRendering.cpp | 6 +- .../Private/VisualizeTexturePresent.cpp | 7 +- .../Private/VisualizeVolumetricLightmap.cpp | 8 +- .../Renderer/Private/VolumetricFog.cpp | 33 +- .../Private/VolumetricFogLightFunction.cpp | 2 +- .../Private/VolumetricFogVoxelization.cpp | 5 +- .../Runtime/Renderer/Public/MaterialShader.h | 16 + .../Public/SceneRenderTargetParameters.h | 45 +- .../Runtime/Renderer/Public/VolumeRendering.h | 4 +- .../Source/Runtime/Renderer/Renderer.Build.cs | 3 +- .../Runtime/SignalProcessing/Public/DSP/Dsp.h | 12 +- Engine/Source/Runtime/Slate/Slate.Build.cs | 2 +- .../Private/Rendering/DrawElements.cpp | 2 +- .../Public/Rendering/DrawElementPayloads.h | 4 +- .../Public/Rendering/RenderingCommon.h | 83 +- .../Public/Rendering/SlateRenderBatch.h | 2 +- .../Private/Slate3DRenderer.cpp | 7 +- .../Private/SlateElementIndexBuffer.cpp | 25 - .../Private/SlateElementIndexBuffer.h | 3 - .../Private/SlateElementVertexBuffer.h | 29 - .../Private/SlateRHIRenderer.cpp | 30 +- .../Private/SlateRHIRenderer.h | 8 +- .../Private/SlateRHIRenderingPolicy.cpp | 93 +- .../Private/SlateUpdatableBuffer.cpp | 138 +- .../Private/SlateUpdatableBuffer.h | 35 +- .../Runtime/UMG/Private/Slate/SMeshWidget.cpp | 22 +- .../UMG/Private/Slate/SRetainerWidget.cpp | 3 +- .../Runtime/UMG/Public/Slate/SMeshWidget.h | 11 +- .../UtilityShaders/Private/UtilityShaders.cpp | 6 - .../Runtime/UtilityShaders/Public/ClearQuad.h | 84 - .../UtilityShaders/Public/LongGPUTask.h | 10 - .../UtilityShaders/UtilityShaders.Build.cs | 17 - .../Private/Android/VulkanAndroidPlatform.cpp | 2 +- .../Private/Android/VulkanAndroidPlatform.h | 8 +- .../Private/Linux/VulkanLinuxPlatform.cpp | 12 +- .../Private/Linux/VulkanLinuxPlatform.h | 4 +- .../Private/Lumin/VulkanLuminPlatform.cpp | 8 +- .../Private/Lumin/VulkanLuminPlatform.h | 5 +- .../VulkanRHI/Private/VulkanCommandWrappers.h | 9 +- .../VulkanRHI/Private/VulkanCommands.cpp | 9 +- .../Runtime/VulkanRHI/Private/VulkanDebug.cpp | 2 +- .../VulkanRHI/Private/VulkanDevice.cpp | 128 +- .../Runtime/VulkanRHI/Private/VulkanDevice.h | 62 +- .../Private/VulkanGenericPlatform.cpp | 2 +- .../VulkanRHI/Private/VulkanGenericPlatform.h | 7 +- .../VulkanRHI/Private/VulkanIndexBuffer.cpp | 4 +- .../VulkanRHI/Private/VulkanLayers.cpp | 104 +- .../Runtime/VulkanRHI/Private/VulkanQuery.cpp | 2 +- .../Runtime/VulkanRHI/Private/VulkanRHI.cpp | 41 +- .../VulkanRHI/Private/VulkanRenderTarget.cpp | 101 +- .../VulkanRHI/Private/VulkanResources.h | 3 +- .../VulkanRHI/Private/VulkanShaders.cpp | 7 - .../Private/VulkanStructuredBuffer.cpp | 4 +- .../VulkanRHI/Private/VulkanSwapChain.cpp | 2 +- .../VulkanRHI/Private/VulkanTexture.cpp | 2 +- .../VulkanRHI/Private/VulkanUniformBuffer.cpp | 2 +- .../VulkanRHI/Private/VulkanVertexBuffer.cpp | 4 +- .../Private/Windows/VulkanWindowsPlatform.cpp | 24 +- .../Private/Windows/VulkanWindowsPlatform.h | 10 +- .../VulkanRHI/Public/VulkanConfiguration.h | 52 +- .../VulkanRHI/Public/VulkanDynamicRHI.h | 65 +- .../Runtime/VulkanRHI/VulkanRHI.Build.cs | 7 +- .../Private/IOS/IOSPlatformWebBrowser.cpp | 40 +- .../Private/IOS/IOSPlatformWebBrowser.h | 1 - .../WebBrowserTexture.Build.cs | 1 - .../Windows/D3D11RHI/D3D11RHI.Build.cs | 4 +- .../D3D11RHI/Private/D3D11Commands.cpp | 19 +- .../Windows/D3D11RHI/Private/D3D11Device.cpp | 27 +- .../D3D11RHI/Private/D3D11IndexBuffer.cpp | 4 +- .../Windows/D3D11RHI/Private/D3D11RHI.cpp | 8 +- .../D3D11RHI/Private/D3D11RHIPrivate.h | 15 +- .../D3D11RHI/Private/D3D11RenderTarget.cpp | 649 +- .../Windows/D3D11RHI/Private/D3D11Shaders.cpp | 158 +- .../Private/D3D11StructuredBuffer.cpp | 4 +- .../Windows/D3D11RHI/Private/D3D11UAV.cpp | 2 +- .../Windows/D3D11RHI/Private/D3D11Util.cpp | 28 +- .../D3D11RHI/Private/D3D11VertexBuffer.cpp | 4 +- .../Private/Windows/WindowsD3D11Device.cpp | 109 +- .../Windows/D3D11RHI/Public/D3D11Resources.h | 13 +- .../Windows/D3D11RHI/Public/D3D11Util.h | 4 +- .../NVIDIA/nvapi/NvApiDriverSettings.c | 78 +- .../NVIDIA/nvapi/NvApiDriverSettings.h | 98 +- .../ThirdParty/NVIDIA/nvapi/nvHLSLExtns.h | 1415 +++- .../NVIDIA/nvapi/nvHLSLExtnsInternal.h | 284 +- .../NVIDIA/nvapi/nvShaderExtnEnums.h | 51 +- Engine/Source/ThirdParty/NVIDIA/nvapi/nvapi.h | 5809 ++++++++++++++--- .../NVIDIA/nvapi/nvapi_lite_common.h | 54 +- .../ThirdParty/NVIDIA/nvapi/nvapi_lite_sli.h | 24 +- .../NVIDIA/nvapi/nvapi_lite_stereo.h | 2 +- .../NVIDIA/nvapi/nvapi_lite_surround.h | 34 + .../arm-unknown-linux-gnueabihf/openssl/aes.h | 149 - .../openssl/asn1.h | 1419 ---- .../openssl/asn1_mac.h | 579 -- .../openssl/asn1t.h | 973 --- .../arm-unknown-linux-gnueabihf/openssl/bio.h | 883 --- .../openssl/blowfish.h | 130 - .../arm-unknown-linux-gnueabihf/openssl/bn.h | 949 --- .../openssl/buffer.h | 125 - .../openssl/camellia.h | 132 - .../openssl/cast.h | 107 - .../openssl/cmac.h | 82 - .../arm-unknown-linux-gnueabihf/openssl/cms.h | 555 -- .../openssl/comp.h | 83 - .../openssl/conf.h | 267 - .../openssl/conf_api.h | 89 - .../openssl/crypto.h | 661 -- .../arm-unknown-linux-gnueabihf/openssl/des.h | 257 - .../openssl/des_old.h | 497 -- .../arm-unknown-linux-gnueabihf/openssl/dh.h | 393 -- .../arm-unknown-linux-gnueabihf/openssl/dsa.h | 332 - .../arm-unknown-linux-gnueabihf/openssl/dso.h | 451 -- .../openssl/dtls1.h | 272 - .../openssl/e_os2.h | 328 - .../openssl/ebcdic.h | 26 - .../arm-unknown-linux-gnueabihf/openssl/ec.h | 1282 ---- .../openssl/ecdh.h | 134 - .../openssl/ecdsa.h | 335 - .../openssl/engine.h | 960 --- .../arm-unknown-linux-gnueabihf/openssl/err.h | 389 -- .../arm-unknown-linux-gnueabihf/openssl/evp.h | 1534 ----- .../openssl/hmac.h | 109 - .../openssl/idea.h | 105 - .../openssl/krb5_asn.h | 240 - .../openssl/kssl.h | 197 - .../openssl/lhash.h | 240 - .../arm-unknown-linux-gnueabihf/openssl/md4.h | 119 - .../arm-unknown-linux-gnueabihf/openssl/md5.h | 119 - .../openssl/mdc2.h | 94 - .../openssl/modes.h | 163 - .../openssl/obj_mac.h | 4194 ------------ .../openssl/objects.h | 1143 ---- .../openssl/ocsp.h | 637 -- .../openssl/opensslconf.h | 273 - .../openssl/opensslv.h | 97 - .../openssl/ossl_typ.h | 212 - .../arm-unknown-linux-gnueabihf/openssl/pem.h | 615 -- .../openssl/pem2.h | 70 - .../openssl/pkcs12.h | 342 - .../openssl/pkcs7.h | 481 -- .../openssl/pqueue.h | 99 - .../openssl/rand.h | 150 - .../arm-unknown-linux-gnueabihf/openssl/rc2.h | 103 - .../arm-unknown-linux-gnueabihf/openssl/rc4.h | 88 - .../openssl/ripemd.h | 105 - .../arm-unknown-linux-gnueabihf/openssl/rsa.h | 664 -- .../openssl/safestack.h | 2672 -------- .../openssl/seed.h | 149 - .../arm-unknown-linux-gnueabihf/openssl/sha.h | 214 - .../arm-unknown-linux-gnueabihf/openssl/srp.h | 179 - .../openssl/srtp.h | 147 - .../arm-unknown-linux-gnueabihf/openssl/ssl.h | 3169 --------- .../openssl/ssl2.h | 265 - .../openssl/ssl23.h | 84 - .../openssl/ssl3.h | 774 --- .../openssl/stack.h | 107 - .../openssl/symhacks.h | 516 -- .../openssl/tls1.h | 810 --- .../arm-unknown-linux-gnueabihf/openssl/ts.h | 862 --- .../openssl/txt_db.h | 112 - .../arm-unknown-linux-gnueabihf/openssl/ui.h | 415 -- .../openssl/ui_compat.h | 88 - .../openssl/whrlpool.h | 41 - .../openssl/x509.h | 1328 ---- .../openssl/x509_vfy.h | 647 -- .../openssl/x509v3.h | 1055 --- .../i686-unknown-linux-gnu/openssl/aes.h | 149 - .../i686-unknown-linux-gnu/openssl/asn1.h | 1419 ---- .../i686-unknown-linux-gnu/openssl/asn1_mac.h | 579 -- .../i686-unknown-linux-gnu/openssl/asn1t.h | 973 --- .../i686-unknown-linux-gnu/openssl/bio.h | 883 --- .../i686-unknown-linux-gnu/openssl/blowfish.h | 130 - .../Linux/i686-unknown-linux-gnu/openssl/bn.h | 949 --- .../i686-unknown-linux-gnu/openssl/buffer.h | 125 - .../i686-unknown-linux-gnu/openssl/camellia.h | 132 - .../i686-unknown-linux-gnu/openssl/cast.h | 107 - .../i686-unknown-linux-gnu/openssl/cmac.h | 82 - .../i686-unknown-linux-gnu/openssl/cms.h | 555 -- .../i686-unknown-linux-gnu/openssl/comp.h | 83 - .../i686-unknown-linux-gnu/openssl/conf.h | 267 - .../i686-unknown-linux-gnu/openssl/conf_api.h | 89 - .../i686-unknown-linux-gnu/openssl/crypto.h | 661 -- .../i686-unknown-linux-gnu/openssl/des.h | 257 - .../i686-unknown-linux-gnu/openssl/des_old.h | 497 -- .../Linux/i686-unknown-linux-gnu/openssl/dh.h | 393 -- .../i686-unknown-linux-gnu/openssl/dsa.h | 332 - .../i686-unknown-linux-gnu/openssl/dso.h | 451 -- .../i686-unknown-linux-gnu/openssl/dtls1.h | 272 - .../i686-unknown-linux-gnu/openssl/e_os2.h | 328 - .../i686-unknown-linux-gnu/openssl/ebcdic.h | 26 - .../Linux/i686-unknown-linux-gnu/openssl/ec.h | 1282 ---- .../i686-unknown-linux-gnu/openssl/ecdh.h | 134 - .../i686-unknown-linux-gnu/openssl/ecdsa.h | 335 - .../i686-unknown-linux-gnu/openssl/engine.h | 960 --- .../i686-unknown-linux-gnu/openssl/err.h | 389 -- .../i686-unknown-linux-gnu/openssl/evp.h | 1534 ----- .../i686-unknown-linux-gnu/openssl/hmac.h | 109 - .../i686-unknown-linux-gnu/openssl/idea.h | 105 - .../i686-unknown-linux-gnu/openssl/krb5_asn.h | 240 - .../i686-unknown-linux-gnu/openssl/kssl.h | 197 - .../i686-unknown-linux-gnu/openssl/lhash.h | 240 - .../i686-unknown-linux-gnu/openssl/md4.h | 119 - .../i686-unknown-linux-gnu/openssl/md5.h | 119 - .../i686-unknown-linux-gnu/openssl/mdc2.h | 94 - .../i686-unknown-linux-gnu/openssl/modes.h | 163 - .../i686-unknown-linux-gnu/openssl/obj_mac.h | 4194 ------------ .../i686-unknown-linux-gnu/openssl/objects.h | 1143 ---- .../i686-unknown-linux-gnu/openssl/ocsp.h | 637 -- .../openssl/opensslconf.h | 270 - .../i686-unknown-linux-gnu/openssl/opensslv.h | 97 - .../i686-unknown-linux-gnu/openssl/ossl_typ.h | 211 - .../i686-unknown-linux-gnu/openssl/pem.h | 615 -- .../i686-unknown-linux-gnu/openssl/pem2.h | 70 - .../i686-unknown-linux-gnu/openssl/pkcs12.h | 342 - .../i686-unknown-linux-gnu/openssl/pkcs7.h | 481 -- .../i686-unknown-linux-gnu/openssl/pqueue.h | 99 - .../i686-unknown-linux-gnu/openssl/rand.h | 150 - .../i686-unknown-linux-gnu/openssl/rc2.h | 103 - .../i686-unknown-linux-gnu/openssl/rc4.h | 88 - .../i686-unknown-linux-gnu/openssl/ripemd.h | 105 - .../i686-unknown-linux-gnu/openssl/rsa.h | 664 -- .../openssl/safestack.h | 2672 -------- .../i686-unknown-linux-gnu/openssl/seed.h | 149 - .../i686-unknown-linux-gnu/openssl/sha.h | 214 - .../i686-unknown-linux-gnu/openssl/srp.h | 179 - .../i686-unknown-linux-gnu/openssl/srtp.h | 147 - .../i686-unknown-linux-gnu/openssl/ssl.h | 3169 --------- .../i686-unknown-linux-gnu/openssl/ssl2.h | 265 - .../i686-unknown-linux-gnu/openssl/ssl23.h | 84 - .../i686-unknown-linux-gnu/openssl/ssl3.h | 774 --- .../i686-unknown-linux-gnu/openssl/stack.h | 107 - .../i686-unknown-linux-gnu/openssl/symhacks.h | 516 -- .../i686-unknown-linux-gnu/openssl/tls1.h | 810 --- .../Linux/i686-unknown-linux-gnu/openssl/ts.h | 862 --- .../i686-unknown-linux-gnu/openssl/txt_db.h | 112 - .../Linux/i686-unknown-linux-gnu/openssl/ui.h | 415 -- .../openssl/ui_compat.h | 88 - .../i686-unknown-linux-gnu/openssl/whrlpool.h | 41 - .../i686-unknown-linux-gnu/openssl/x509.h | 1328 ---- .../i686-unknown-linux-gnu/openssl/x509_vfy.h | 647 -- .../i686-unknown-linux-gnu/openssl/x509v3.h | 1055 --- .../Python/CopyPythonInstall_Mac.command | 66 +- .../ThirdParty/Python/Mac/include/pyconfig.h | 2 +- .../src/video/wayland/SDL_waylandwindow.c | 39 +- .../ShaderConductor/CMakeLists.txt | 5 + .../include/dxc/Support/SPIRVOptions.h | 5 + .../lib/DxcSupport/HLSLOptions.cpp | 5 + .../include/clang/SPIRV/FeatureManager.h | 1 + .../clang/lib/SPIRV/DeclResultIdMapper.cpp | 4 +- .../tools/clang/lib/SPIRV/FeatureManager.cpp | 3 + .../tools/clang/lib/SPIRV/SPIRVEmitter.cpp | 71 +- .../External/SPIRV-Cross/spirv_glsl.cpp | 29 +- .../External/SPIRV-Cross/spirv_glsl.hpp | 3 + .../External/SPIRV-Cross/spirv_msl.cpp | 570 +- .../External/SPIRV-Cross/spirv_msl.hpp | 16 +- .../include/spirv-tools/optimizer.hpp | 5 + .../SPIRV-Tools/source/opt/CMakeLists.txt | 2 + .../opt/aggressive_dead_code_elim_pass.cpp | 2 +- .../source/opt/fused_multiply_add_pass.cpp | 91 + .../source/opt/fused_multiply_add_pass.h | 45 + .../SPIRV-Tools/source/opt/optimizer.cpp | 17 +- .../External/SPIRV-Tools/source/opt/passes.h | 1 + .../ShaderConductor/ShaderConductor.hpp | 5 + .../Source/Core/ShaderConductor.cpp | 52 +- .../Source/ThirdParty/hlslcc/HLSLCC.Build.cs | 25 +- .../hlslcc/src/hlslcc_lib/ast_function.cpp | 4 +- .../hlslcc/src/hlslcc_lib/glsl_types.cpp | 22 +- .../hlslcc/hlslcc/src/hlslcc_lib/glsl_types.h | 3 +- .../hlslcc_lib/opt_constant_propagation.cpp | 4 + .../src/hlslcc_lib/opt_copy_propagation.cpp | 19 + .../opt_copy_propagation_elements.cpp | 6 + .../arm-unknown-linux-gnueabihf/jemalloc.h | 268 - .../jemalloc_defs.h | 25 - .../Linux/i686-unknown-linux-gnu/jemalloc.h | 268 - .../i686-unknown-linux-gnu/jemalloc_defs.h | 25 - .../arm-unknown-linux-gnueabihf/curl/curl.h | 2411 ------- .../curl/curlbuild.h | 198 - .../curl/curlrules.h | 262 - .../curl/curlver.h | 77 - .../arm-unknown-linux-gnueabihf/curl/easy.h | 102 - .../curl/mprintf.h | 74 - .../arm-unknown-linux-gnueabihf/curl/multi.h | 435 -- .../curl/stdcheaders.h | 33 - .../curl/typecheck-gcc.h | 622 -- .../Linux/i686-unknown-linux-gnu/curl/curl.h | 2419 ------- .../i686-unknown-linux-gnu/curl/curlbuild.h | 198 - .../i686-unknown-linux-gnu/curl/curlrules.h | 262 - .../i686-unknown-linux-gnu/curl/curlver.h | 77 - .../Linux/i686-unknown-linux-gnu/curl/easy.h | 102 - .../i686-unknown-linux-gnu/curl/mprintf.h | 74 - .../Linux/i686-unknown-linux-gnu/curl/multi.h | 435 -- .../i686-unknown-linux-gnu/curl/stdcheaders.h | 33 - .../curl/typecheck-gcc.h | 622 -- .../Linux/arm-unknown-linux-gnueabihf/zconf.h | 428 -- .../Linux/arm-unknown-linux-gnueabihf/zlib.h | 1613 ----- .../Linux/i686-unknown-linux-gnu/zconf.h | 511 -- .../Linux/i686-unknown-linux-gnu/zlib.h | 1768 ----- 1060 files changed, 50751 insertions(+), 119644 deletions(-) create mode 100644 Engine/Binaries/ThirdParty/Python/Mac/bin/python2.7-gdb.py delete mode 100644 Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.7.py delete mode 100644 Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.py create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/Contents.json create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.h create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.mm create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/main.mm create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.h create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.m create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.h create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.mm create mode 100644 Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ue4commandline.txt create mode 100644 Engine/Config/LinuxAArch64/DataDrivenPlatformInfo.ini create mode 100644 Engine/Config/LinuxAArch64/LinuxAArch64Engine.ini create mode 100644 Engine/Shaders/Private/BurleyNormalizedSSSCommon.ush create mode 100644 Engine/Shaders/Private/HZB.usf delete mode 100644 Engine/Shaders/Private/PostProcessLensBlur.usf delete mode 100644 Engine/Shaders/Private/RayTracing/RayTracingGlobalIlluminationCompositePS.usf create mode 100644 Engine/Shaders/Private/ReductionCommon.ush create mode 100644 Engine/Shaders/Private/SSRT/SSRTPrevFrameReduction.usf create mode 100644 Engine/Shaders/Private/SSRT/SSRTTileClassification.usf create mode 100644 Engine/Shaders/Private/SSRT/SSRTTileClassificationBuffer.ush create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDComposeHarmonics.usf create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDPublicBufferEncoding.ush create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDPublicHarmonics.ush create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDReduce.usf create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDSignalAccumulatorArray.ush create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDSignalBufferEncoding.ush create mode 100644 Engine/Shaders/Private/ScreenSpaceDenoise/SSDSignalCompression.ush create mode 100644 Engine/Shaders/Private/SubsurfaceBurleyNormalized.ush create mode 100644 Engine/Shaders/Private/VolumetricLightmapStreaming.usf create mode 100644 Engine/Shaders/Shared/ThirdParty/NVIDIA/Nvapi.tps create mode 100644 Engine/Shaders/Shared/ThirdParty/NVIDIA/nvHLSLExtns.h create mode 100644 Engine/Shaders/Shared/ThirdParty/NVIDIA/nvHLSLExtnsInternal.h create mode 100644 Engine/Shaders/Shared/ThirdParty/NVIDIA/nvShaderExtnEnums.h create mode 100644 Engine/Source/Developer/AssetTools/Private/AssetTypeActions/AssetTypeActions_Texture2DArray.cpp create mode 100644 Engine/Source/Developer/AssetTools/Private/AssetTypeActions/AssetTypeActions_Texture2DArray.h create mode 100644 Engine/Source/Developer/Linux/LinuxAArch64NoEditorTargetPlatform/LinuxAArch64NoEditorTargetPlatform.Build.cs create mode 100644 Engine/Source/Developer/Linux/LinuxAArch64NoEditorTargetPlatform/Private/LinuxAArch64NoEditorTargetPlatformModule.cpp create mode 100644 Engine/Source/Editor/UnrealEd/Classes/Factories/Texture2DArrayFactory.h create mode 100644 Engine/Source/Editor/UnrealEd/Classes/Factories/Texture2dArrayThumbnailRenderer.h create mode 100644 Engine/Source/Editor/UnrealEd/Private/Factories/Texture2DArrayFactory.cpp create mode 100644 Engine/Source/Editor/UnrealEd/Private/ThumbnailRendering/Texture2DArrayThumbnailRenderer.cpp create mode 100644 Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeFrameworkWrapperProject.cs create mode 100644 Engine/Source/Runtime/Core/Public/Math/Halton.h create mode 100644 Engine/Source/Runtime/Engine/Classes/Engine/Texture2DArray.cpp create mode 100644 Engine/Source/Runtime/Engine/Classes/Engine/Texture2DArray.h create mode 100644 Engine/Source/Runtime/Engine/Classes/Materials/MaterialExpressionParticleSubUVProperties.h create mode 100644 Engine/Source/Runtime/Engine/Classes/Materials/MaterialExpressionShaderStageSwitch.h create mode 100644 Engine/Source/Runtime/Engine/Classes/Materials/MaterialExpressionTextureSampleParameter2DArray.h create mode 100644 Engine/Source/Runtime/Engine/Private/Rendering/BurleyNormalizedSSS.cpp create mode 100644 Engine/Source/Runtime/Engine/Private/Rendering/BurleyNormalizedSSS.h create mode 100644 Engine/Source/Runtime/NotForLicensees/Solaris/ProtoLem/Public/IVplIde.h delete mode 100644 Engine/Source/Runtime/OpenGLDrv/Private/IOS/IOSOpenGL.cpp delete mode 100644 Engine/Source/Runtime/OpenGLDrv/Private/IOS/IOSOpenGL.h create mode 100644 Engine/Source/Runtime/RHI/Public/RHISurfaceDataConversion.h rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/BuiltInRayTracingShaders.cpp (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/ClearQuad.cpp (99%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/ClearReplacementShaders.cpp (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/LongGPUTask.cpp (99%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/MediaShaders.cpp (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/OculusShaders.cpp (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/OneColorShader.cpp (57%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/RGBAToYUV420Shader.cpp (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Private/ResolveShader.cpp (52%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/BuiltInRayTracingShaders.h (86%) create mode 100644 Engine/Source/Runtime/RenderCore/Public/ClearQuad.h rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/ClearReplacementShaders.h (84%) create mode 100644 Engine/Source/Runtime/RenderCore/Public/LongGPUTask.h rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/MediaShaders.h (76%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/OculusShaders.h (87%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/OneColorShader.h (93%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/RGBAToYUV420Shader.h (100%) rename Engine/Source/Runtime/{UtilityShaders => RenderCore}/Public/ResolveShader.h (82%) delete mode 100644 Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessHistogramReduce.cpp delete mode 100644 Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessHistogramReduce.h delete mode 100644 Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessLensBlur.cpp delete mode 100644 Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessLensBlur.h create mode 100644 Engine/Source/Runtime/Renderer/Private/RayTracing/RayTracingPrimaryRays.cpp create mode 100644 Engine/Source/Runtime/Renderer/Private/SceneTextureReductions.cpp delete mode 100644 Engine/Source/Runtime/UtilityShaders/Private/UtilityShaders.cpp delete mode 100644 Engine/Source/Runtime/UtilityShaders/Public/ClearQuad.h delete mode 100644 Engine/Source/Runtime/UtilityShaders/Public/LongGPUTask.h delete mode 100644 Engine/Source/Runtime/UtilityShaders/UtilityShaders.Build.cs delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/aes.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/asn1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/asn1_mac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/asn1t.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/bio.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/blowfish.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/bn.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/buffer.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/camellia.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/cast.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/cmac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/cms.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/comp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/conf.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/conf_api.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/crypto.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/des.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/des_old.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/dh.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/dsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/dso.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/dtls1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/e_os2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ebcdic.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ec.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ecdh.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ecdsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/engine.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/err.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/evp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/hmac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/idea.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/krb5_asn.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/kssl.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/lhash.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/md4.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/md5.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/mdc2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/modes.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/obj_mac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/objects.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ocsp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/opensslconf.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/opensslv.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ossl_typ.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/pem.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/pem2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/pkcs12.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/pkcs7.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/pqueue.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/rand.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/rc2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/rc4.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ripemd.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/rsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/safestack.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/seed.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/sha.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/srp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/srtp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ssl.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ssl2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ssl23.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ssl3.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/stack.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/symhacks.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/tls1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ts.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/txt_db.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ui.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/ui_compat.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/whrlpool.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/x509.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/x509_vfy.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/arm-unknown-linux-gnueabihf/openssl/x509v3.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/aes.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/asn1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/asn1_mac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/asn1t.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/bio.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/blowfish.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/bn.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/buffer.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/camellia.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/cast.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/cmac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/cms.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/comp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/conf.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/conf_api.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/crypto.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/des.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/des_old.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/dh.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/dsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/dso.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/dtls1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/e_os2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ebcdic.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ec.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ecdh.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ecdsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/engine.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/err.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/evp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/hmac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/idea.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/krb5_asn.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/kssl.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/lhash.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/md4.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/md5.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/mdc2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/modes.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/obj_mac.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/objects.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ocsp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/opensslconf.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/opensslv.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ossl_typ.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/pem.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/pem2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/pkcs12.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/pkcs7.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/pqueue.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/rand.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/rc2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/rc4.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ripemd.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/rsa.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/safestack.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/seed.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/sha.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/srp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/srtp.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ssl.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ssl2.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ssl23.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ssl3.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/stack.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/symhacks.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/tls1.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ts.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/txt_db.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ui.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/ui_compat.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/whrlpool.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/x509.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/x509_vfy.h delete mode 100644 Engine/Source/ThirdParty/OpenSSL/1_0_2h/include/Linux/i686-unknown-linux-gnu/openssl/x509v3.h create mode 100644 Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/External/SPIRV-Tools/source/opt/fused_multiply_add_pass.cpp create mode 100644 Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/External/SPIRV-Tools/source/opt/fused_multiply_add_pass.h delete mode 100644 Engine/Source/ThirdParty/jemalloc/include/Linux/arm-unknown-linux-gnueabihf/jemalloc.h delete mode 100644 Engine/Source/ThirdParty/jemalloc/include/Linux/arm-unknown-linux-gnueabihf/jemalloc_defs.h delete mode 100644 Engine/Source/ThirdParty/jemalloc/include/Linux/i686-unknown-linux-gnu/jemalloc.h delete mode 100644 Engine/Source/ThirdParty/jemalloc/include/Linux/i686-unknown-linux-gnu/jemalloc_defs.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/curl.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/curlbuild.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/curlrules.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/curlver.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/easy.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/mprintf.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/multi.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/stdcheaders.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/arm-unknown-linux-gnueabihf/curl/typecheck-gcc.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/curl.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/curlbuild.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/curlrules.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/curlver.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/easy.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/mprintf.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/multi.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/stdcheaders.h delete mode 100644 Engine/Source/ThirdParty/libcurl/7_48_0/include/Linux/i686-unknown-linux-gnu/curl/typecheck-gcc.h delete mode 100644 Engine/Source/ThirdParty/zlib/v1.2.8/include/Linux/arm-unknown-linux-gnueabihf/zconf.h delete mode 100644 Engine/Source/ThirdParty/zlib/v1.2.8/include/Linux/arm-unknown-linux-gnueabihf/zlib.h delete mode 100644 Engine/Source/ThirdParty/zlib/v1.2.8/include/Linux/i686-unknown-linux-gnu/zconf.h delete mode 100644 Engine/Source/ThirdParty/zlib/v1.2.8/include/Linux/i686-unknown-linux-gnu/zlib.h diff --git a/Engine/Binaries/ThirdParty/Python/Mac/bin/python2.7-gdb.py b/Engine/Binaries/ThirdParty/Python/Mac/bin/python2.7-gdb.py new file mode 100644 index 000000000000..e218a31f59c1 --- /dev/null +++ b/Engine/Binaries/ThirdParty/Python/Mac/bin/python2.7-gdb.py @@ -0,0 +1,1661 @@ +#!/usr/bin/python +''' +From gdb 7 onwards, gdb's build can be configured --with-python, allowing gdb +to be extended with Python code e.g. for library-specific data visualizations, +such as for the C++ STL types. Documentation on this API can be seen at: +http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html + + +This python module deals with the case when the process being debugged (the +"inferior process" in gdb parlance) is itself python, or more specifically, +linked against libpython. In this situation, almost every item of data is a +(PyObject*), and having the debugger merely print their addresses is not very +enlightening. + +This module embeds knowledge about the implementation details of libpython so +that we can emit useful visualizations e.g. a string, a list, a dict, a frame +giving file/line information and the state of local variables + +In particular, given a gdb.Value corresponding to a PyObject* in the inferior +process, we can generate a "proxy value" within the gdb process. For example, +given a PyObject* in the inferior process that is in fact a PyListObject* +holding three PyObject* that turn out to be PyStringObject* instances, we can +generate a proxy value within the gdb process that is a list of strings: + ["foo", "bar", "baz"] + +Doing so can be expensive for complicated graphs of objects, and could take +some time, so we also have a "write_repr" method that writes a representation +of the data to a file-like object. This allows us to stop the traversal by +having the file-like object raise an exception if it gets too much data. + +With both "proxyval" and "write_repr" we keep track of the set of all addresses +visited so far in the traversal, to avoid infinite recursion due to cycles in +the graph of object references. + +We try to defer gdb.lookup_type() invocations for python types until as late as +possible: for a dynamically linked python binary, when the process starts in +the debugger, the libpython.so hasn't been dynamically loaded yet, so none of +the type names are known to the debugger + +The module also extends gdb with some python-specific commands. +''' + +# NOTE: some gdbs are linked with Python 3, so this file should be dual-syntax +# compatible (2.6+ and 3.0+). See #19308. + +from __future__ import print_function, with_statement +import gdb +import locale +import os +import sys + +if sys.version_info[0] >= 3: + unichr = chr + xrange = range + long = int + +# Look up the gdb.Type for some standard types: +# Those need to be refreshed as types (pointer sizes) may change when +# gdb loads different executables + +def _type_char_ptr(): + return gdb.lookup_type('char').pointer() # char* + + +def _type_unsigned_char_ptr(): + return gdb.lookup_type('unsigned char').pointer() # unsigned char* + + +def _sizeof_void_p(): + return gdb.lookup_type('void').pointer().sizeof + + +Py_TPFLAGS_HEAPTYPE = (1 << 9) + +Py_TPFLAGS_INT_SUBCLASS = (1 << 23) +Py_TPFLAGS_LONG_SUBCLASS = (1 << 24) +Py_TPFLAGS_LIST_SUBCLASS = (1 << 25) +Py_TPFLAGS_TUPLE_SUBCLASS = (1 << 26) +Py_TPFLAGS_STRING_SUBCLASS = (1 << 27) +Py_TPFLAGS_UNICODE_SUBCLASS = (1 << 28) +Py_TPFLAGS_DICT_SUBCLASS = (1 << 29) +Py_TPFLAGS_BASE_EXC_SUBCLASS = (1 << 30) +Py_TPFLAGS_TYPE_SUBCLASS = (1 << 31) + + +MAX_OUTPUT_LEN=1024 + +ENCODING = locale.getpreferredencoding() + +class NullPyObjectPtr(RuntimeError): + pass + + +def safety_limit(val): + # Given an integer value from the process being debugged, limit it to some + # safety threshold so that arbitrary breakage within said process doesn't + # break the gdb process too much (e.g. sizes of iterations, sizes of lists) + return min(val, 1000) + + +def safe_range(val): + # As per range, but don't trust the value too much: cap it to a safety + # threshold in case the data was corrupted + return xrange(safety_limit(int(val))) + +if sys.version_info[0] >= 3: + def write_unicode(file, text): + file.write(text) +else: + def write_unicode(file, text): + # Write a byte or unicode string to file. Unicode strings are encoded to + # ENCODING encoding with 'backslashreplace' error handler to avoid + # UnicodeEncodeError. + if isinstance(text, unicode): + text = text.encode(ENCODING, 'backslashreplace') + file.write(text) + + +class StringTruncated(RuntimeError): + pass + +class TruncatedStringIO(object): + '''Similar to cStringIO, but can truncate the output by raising a + StringTruncated exception''' + def __init__(self, maxlen=None): + self._val = '' + self.maxlen = maxlen + + def write(self, data): + if self.maxlen: + if len(data) + len(self._val) > self.maxlen: + # Truncation: + self._val += data[0:self.maxlen - len(self._val)] + raise StringTruncated() + + self._val += data + + def getvalue(self): + return self._val + +class PyObjectPtr(object): + """ + Class wrapping a gdb.Value that's either a (PyObject*) within the + inferior process, or some subclass pointer e.g. (PyStringObject*) + + There will be a subclass for every refined PyObject type that we care + about. + + Note that at every stage the underlying pointer could be NULL, point + to corrupt data, etc; this is the debugger, after all. + """ + _typename = 'PyObject' + + def __init__(self, gdbval, cast_to=None): + if cast_to: + self._gdbval = gdbval.cast(cast_to) + else: + self._gdbval = gdbval + + def field(self, name): + ''' + Get the gdb.Value for the given field within the PyObject, coping with + some python 2 versus python 3 differences. + + Various libpython types are defined using the "PyObject_HEAD" and + "PyObject_VAR_HEAD" macros. + + In Python 2, this these are defined so that "ob_type" and (for a var + object) "ob_size" are fields of the type in question. + + In Python 3, this is defined as an embedded PyVarObject type thus: + PyVarObject ob_base; + so that the "ob_size" field is located insize the "ob_base" field, and + the "ob_type" is most easily accessed by casting back to a (PyObject*). + ''' + if self.is_null(): + raise NullPyObjectPtr(self) + + if name == 'ob_type': + pyo_ptr = self._gdbval.cast(PyObjectPtr.get_gdb_type()) + return pyo_ptr.dereference()[name] + + if name == 'ob_size': + try: + # Python 2: + return self._gdbval.dereference()[name] + except RuntimeError: + # Python 3: + return self._gdbval.dereference()['ob_base'][name] + + # General case: look it up inside the object: + return self._gdbval.dereference()[name] + + def pyop_field(self, name): + ''' + Get a PyObjectPtr for the given PyObject* field within this PyObject, + coping with some python 2 versus python 3 differences. + ''' + return PyObjectPtr.from_pyobject_ptr(self.field(name)) + + def write_field_repr(self, name, out, visited): + ''' + Extract the PyObject* field named "name", and write its representation + to file-like object "out" + ''' + field_obj = self.pyop_field(name) + field_obj.write_repr(out, visited) + + def get_truncated_repr(self, maxlen): + ''' + Get a repr-like string for the data, but truncate it at "maxlen" bytes + (ending the object graph traversal as soon as you do) + ''' + out = TruncatedStringIO(maxlen) + try: + self.write_repr(out, set()) + except StringTruncated: + # Truncation occurred: + return out.getvalue() + '...(truncated)' + + # No truncation occurred: + return out.getvalue() + + def type(self): + return PyTypeObjectPtr(self.field('ob_type')) + + def is_null(self): + return 0 == long(self._gdbval) + + def is_optimized_out(self): + ''' + Is the value of the underlying PyObject* visible to the debugger? + + This can vary with the precise version of the compiler used to build + Python, and the precise version of gdb. + + See e.g. https://bugzilla.redhat.com/show_bug.cgi?id=556975 with + PyEval_EvalFrameEx's "f" + ''' + return self._gdbval.is_optimized_out + + def safe_tp_name(self): + try: + return self.type().field('tp_name').string() + except NullPyObjectPtr: + # NULL tp_name? + return 'unknown' + except RuntimeError: + # Can't even read the object at all? + return 'unknown' + + def proxyval(self, visited): + ''' + Scrape a value from the inferior process, and try to represent it + within the gdb process, whilst (hopefully) avoiding crashes when + the remote data is corrupt. + + Derived classes will override this. + + For example, a PyIntObject* with ob_ival 42 in the inferior process + should result in an int(42) in this process. + + visited: a set of all gdb.Value pyobject pointers already visited + whilst generating this value (to guard against infinite recursion when + visiting object graphs with loops). Analogous to Py_ReprEnter and + Py_ReprLeave + ''' + + class FakeRepr(object): + """ + Class representing a non-descript PyObject* value in the inferior + process for when we don't have a custom scraper, intended to have + a sane repr(). + """ + + def __init__(self, tp_name, address): + self.tp_name = tp_name + self.address = address + + def __repr__(self): + # For the NULL pointer, we have no way of knowing a type, so + # special-case it as per + # http://bugs.python.org/issue8032#msg100882 + if self.address == 0: + return '0x0' + return '<%s at remote 0x%x>' % (self.tp_name, self.address) + + return FakeRepr(self.safe_tp_name(), + long(self._gdbval)) + + def write_repr(self, out, visited): + ''' + Write a string representation of the value scraped from the inferior + process to "out", a file-like object. + ''' + # Default implementation: generate a proxy value and write its repr + # However, this could involve a lot of work for complicated objects, + # so for derived classes we specialize this + return out.write(repr(self.proxyval(visited))) + + @classmethod + def subclass_from_type(cls, t): + ''' + Given a PyTypeObjectPtr instance wrapping a gdb.Value that's a + (PyTypeObject*), determine the corresponding subclass of PyObjectPtr + to use + + Ideally, we would look up the symbols for the global types, but that + isn't working yet: + (gdb) python print gdb.lookup_symbol('PyList_Type')[0].value + Traceback (most recent call last): + File "", line 1, in + NotImplementedError: Symbol type not yet supported in Python scripts. + Error while executing Python code. + + For now, we use tp_flags, after doing some string comparisons on the + tp_name for some special-cases that don't seem to be visible through + flags + ''' + try: + tp_name = t.field('tp_name').string() + tp_flags = int(t.field('tp_flags')) + except RuntimeError: + # Handle any kind of error e.g. NULL ptrs by simply using the base + # class + return cls + + #print('tp_flags = 0x%08x' % tp_flags) + #print('tp_name = %r' % tp_name) + + name_map = {'bool': PyBoolObjectPtr, + 'classobj': PyClassObjectPtr, + 'instance': PyInstanceObjectPtr, + 'NoneType': PyNoneStructPtr, + 'frame': PyFrameObjectPtr, + 'set' : PySetObjectPtr, + 'frozenset' : PySetObjectPtr, + 'builtin_function_or_method' : PyCFunctionObjectPtr, + } + if tp_name in name_map: + return name_map[tp_name] + + if tp_flags & Py_TPFLAGS_HEAPTYPE: + return HeapTypeObjectPtr + + if tp_flags & Py_TPFLAGS_INT_SUBCLASS: + return PyIntObjectPtr + if tp_flags & Py_TPFLAGS_LONG_SUBCLASS: + return PyLongObjectPtr + if tp_flags & Py_TPFLAGS_LIST_SUBCLASS: + return PyListObjectPtr + if tp_flags & Py_TPFLAGS_TUPLE_SUBCLASS: + return PyTupleObjectPtr + if tp_flags & Py_TPFLAGS_STRING_SUBCLASS: + return PyStringObjectPtr + if tp_flags & Py_TPFLAGS_UNICODE_SUBCLASS: + return PyUnicodeObjectPtr + if tp_flags & Py_TPFLAGS_DICT_SUBCLASS: + return PyDictObjectPtr + if tp_flags & Py_TPFLAGS_BASE_EXC_SUBCLASS: + return PyBaseExceptionObjectPtr + #if tp_flags & Py_TPFLAGS_TYPE_SUBCLASS: + # return PyTypeObjectPtr + + # Use the base class: + return cls + + @classmethod + def from_pyobject_ptr(cls, gdbval): + ''' + Try to locate the appropriate derived class dynamically, and cast + the pointer accordingly. + ''' + try: + p = PyObjectPtr(gdbval) + cls = cls.subclass_from_type(p.type()) + return cls(gdbval, cast_to=cls.get_gdb_type()) + except RuntimeError: + # Handle any kind of error e.g. NULL ptrs by simply using the base + # class + pass + return cls(gdbval) + + @classmethod + def get_gdb_type(cls): + return gdb.lookup_type(cls._typename).pointer() + + def as_address(self): + return long(self._gdbval) + + +class ProxyAlreadyVisited(object): + ''' + Placeholder proxy to use when protecting against infinite recursion due to + loops in the object graph. + + Analogous to the values emitted by the users of Py_ReprEnter and Py_ReprLeave + ''' + def __init__(self, rep): + self._rep = rep + + def __repr__(self): + return self._rep + + +def _write_instance_repr(out, visited, name, pyop_attrdict, address): + '''Shared code for use by old-style and new-style classes: + write a representation to file-like object "out"''' + out.write('<') + out.write(name) + + # Write dictionary of instance attributes: + if isinstance(pyop_attrdict, PyDictObjectPtr): + out.write('(') + first = True + for pyop_arg, pyop_val in pyop_attrdict.iteritems(): + if not first: + out.write(', ') + first = False + out.write(pyop_arg.proxyval(visited)) + out.write('=') + pyop_val.write_repr(out, visited) + out.write(')') + out.write(' at remote 0x%x>' % address) + + +class InstanceProxy(object): + + def __init__(self, cl_name, attrdict, address): + self.cl_name = cl_name + self.attrdict = attrdict + self.address = address + + def __repr__(self): + if isinstance(self.attrdict, dict): + kwargs = ', '.join(["%s=%r" % (arg, val) + for arg, val in self.attrdict.iteritems()]) + return '<%s(%s) at remote 0x%x>' % (self.cl_name, + kwargs, self.address) + else: + return '<%s at remote 0x%x>' % (self.cl_name, + self.address) + +def _PyObject_VAR_SIZE(typeobj, nitems): + if _PyObject_VAR_SIZE._type_size_t is None: + _PyObject_VAR_SIZE._type_size_t = gdb.lookup_type('size_t') + + return ( ( typeobj.field('tp_basicsize') + + nitems * typeobj.field('tp_itemsize') + + (_sizeof_void_p() - 1) + ) & ~(_sizeof_void_p() - 1) + ).cast(_PyObject_VAR_SIZE._type_size_t) +_PyObject_VAR_SIZE._type_size_t = None + +class HeapTypeObjectPtr(PyObjectPtr): + _typename = 'PyObject' + + def get_attr_dict(self): + ''' + Get the PyDictObject ptr representing the attribute dictionary + (or None if there's a problem) + ''' + try: + typeobj = self.type() + dictoffset = int_from_int(typeobj.field('tp_dictoffset')) + if dictoffset != 0: + if dictoffset < 0: + type_PyVarObject_ptr = gdb.lookup_type('PyVarObject').pointer() + tsize = int_from_int(self._gdbval.cast(type_PyVarObject_ptr)['ob_size']) + if tsize < 0: + tsize = -tsize + size = _PyObject_VAR_SIZE(typeobj, tsize) + dictoffset += size + assert dictoffset > 0 + assert dictoffset % _sizeof_void_p() == 0 + + dictptr = self._gdbval.cast(_type_char_ptr()) + dictoffset + PyObjectPtrPtr = PyObjectPtr.get_gdb_type().pointer() + dictptr = dictptr.cast(PyObjectPtrPtr) + return PyObjectPtr.from_pyobject_ptr(dictptr.dereference()) + except RuntimeError: + # Corrupt data somewhere; fail safe + pass + + # Not found, or some kind of error: + return None + + def proxyval(self, visited): + ''' + Support for new-style classes. + + Currently we just locate the dictionary using a transliteration to + python of _PyObject_GetDictPtr, ignoring descriptors + ''' + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('<...>') + visited.add(self.as_address()) + + pyop_attr_dict = self.get_attr_dict() + if pyop_attr_dict: + attr_dict = pyop_attr_dict.proxyval(visited) + else: + attr_dict = {} + tp_name = self.safe_tp_name() + + # New-style class: + return InstanceProxy(tp_name, attr_dict, long(self._gdbval)) + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('<...>') + return + visited.add(self.as_address()) + + pyop_attrdict = self.get_attr_dict() + _write_instance_repr(out, visited, + self.safe_tp_name(), pyop_attrdict, self.as_address()) + +class ProxyException(Exception): + def __init__(self, tp_name, args): + self.tp_name = tp_name + self.args = args + + def __repr__(self): + return '%s%r' % (self.tp_name, self.args) + +class PyBaseExceptionObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyBaseExceptionObject* i.e. an exception + within the process being debugged. + """ + _typename = 'PyBaseExceptionObject' + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('(...)') + visited.add(self.as_address()) + arg_proxy = self.pyop_field('args').proxyval(visited) + return ProxyException(self.safe_tp_name(), + arg_proxy) + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('(...)') + return + visited.add(self.as_address()) + + out.write(self.safe_tp_name()) + self.write_field_repr('args', out, visited) + +class PyBoolObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyBoolObject* i.e. one of the two + instances (Py_True/Py_False) within the process being debugged. + """ + _typename = 'PyBoolObject' + + def proxyval(self, visited): + if int_from_int(self.field('ob_ival')): + return True + else: + return False + + +class PyClassObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyClassObject* i.e. a + instance within the process being debugged. + """ + _typename = 'PyClassObject' + + +class BuiltInFunctionProxy(object): + def __init__(self, ml_name): + self.ml_name = ml_name + + def __repr__(self): + return "" % self.ml_name + +class BuiltInMethodProxy(object): + def __init__(self, ml_name, pyop_m_self): + self.ml_name = ml_name + self.pyop_m_self = pyop_m_self + + def __repr__(self): + return ('' + % (self.ml_name, + self.pyop_m_self.safe_tp_name(), + self.pyop_m_self.as_address()) + ) + +class PyCFunctionObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyCFunctionObject* + (see Include/methodobject.h and Objects/methodobject.c) + """ + _typename = 'PyCFunctionObject' + + def proxyval(self, visited): + m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*) + ml_name = m_ml['ml_name'].string() + + pyop_m_self = self.pyop_field('m_self') + if pyop_m_self.is_null(): + return BuiltInFunctionProxy(ml_name) + else: + return BuiltInMethodProxy(ml_name, pyop_m_self) + + +class PyCodeObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyCodeObject* i.e. a instance + within the process being debugged. + """ + _typename = 'PyCodeObject' + + def addr2line(self, addrq): + ''' + Get the line number for a given bytecode offset + + Analogous to PyCode_Addr2Line; translated from pseudocode in + Objects/lnotab_notes.txt + ''' + co_lnotab = self.pyop_field('co_lnotab').proxyval(set()) + + # Initialize lineno to co_firstlineno as per PyCode_Addr2Line + # not 0, as lnotab_notes.txt has it: + lineno = int_from_int(self.field('co_firstlineno')) + + addr = 0 + for addr_incr, line_incr in zip(co_lnotab[::2], co_lnotab[1::2]): + addr += ord(addr_incr) + if addr > addrq: + return lineno + lineno += ord(line_incr) + return lineno + + +class PyDictObjectPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyDictObject* i.e. a dict instance + within the process being debugged. + """ + _typename = 'PyDictObject' + + def iteritems(self): + ''' + Yields a sequence of (PyObjectPtr key, PyObjectPtr value) pairs, + analogous to dict.iteritems() + ''' + for i in safe_range(self.field('ma_mask') + 1): + ep = self.field('ma_table') + i + pyop_value = PyObjectPtr.from_pyobject_ptr(ep['me_value']) + if not pyop_value.is_null(): + pyop_key = PyObjectPtr.from_pyobject_ptr(ep['me_key']) + yield (pyop_key, pyop_value) + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('{...}') + visited.add(self.as_address()) + + result = {} + for pyop_key, pyop_value in self.iteritems(): + proxy_key = pyop_key.proxyval(visited) + proxy_value = pyop_value.proxyval(visited) + result[proxy_key] = proxy_value + return result + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('{...}') + return + visited.add(self.as_address()) + + out.write('{') + first = True + for pyop_key, pyop_value in self.iteritems(): + if not first: + out.write(', ') + first = False + pyop_key.write_repr(out, visited) + out.write(': ') + pyop_value.write_repr(out, visited) + out.write('}') + +class PyInstanceObjectPtr(PyObjectPtr): + _typename = 'PyInstanceObject' + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('<...>') + visited.add(self.as_address()) + + # Get name of class: + in_class = self.pyop_field('in_class') + cl_name = in_class.pyop_field('cl_name').proxyval(visited) + + # Get dictionary of instance attributes: + in_dict = self.pyop_field('in_dict').proxyval(visited) + + # Old-style class: + return InstanceProxy(cl_name, in_dict, long(self._gdbval)) + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('<...>') + return + visited.add(self.as_address()) + + # Old-style class: + + # Get name of class: + in_class = self.pyop_field('in_class') + cl_name = in_class.pyop_field('cl_name').proxyval(visited) + + # Get dictionary of instance attributes: + pyop_in_dict = self.pyop_field('in_dict') + + _write_instance_repr(out, visited, + cl_name, pyop_in_dict, self.as_address()) + +class PyIntObjectPtr(PyObjectPtr): + _typename = 'PyIntObject' + + def proxyval(self, visited): + result = int_from_int(self.field('ob_ival')) + return result + +class PyListObjectPtr(PyObjectPtr): + _typename = 'PyListObject' + + def __getitem__(self, i): + # Get the gdb.Value for the (PyObject*) with the given index: + field_ob_item = self.field('ob_item') + return field_ob_item[i] + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('[...]') + visited.add(self.as_address()) + + result = [PyObjectPtr.from_pyobject_ptr(self[i]).proxyval(visited) + for i in safe_range(int_from_int(self.field('ob_size')))] + return result + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('[...]') + return + visited.add(self.as_address()) + + out.write('[') + for i in safe_range(int_from_int(self.field('ob_size'))): + if i > 0: + out.write(', ') + element = PyObjectPtr.from_pyobject_ptr(self[i]) + element.write_repr(out, visited) + out.write(']') + +class PyLongObjectPtr(PyObjectPtr): + _typename = 'PyLongObject' + + def proxyval(self, visited): + ''' + Python's Include/longobjrep.h has this declaration: + struct _longobject { + PyObject_VAR_HEAD + digit ob_digit[1]; + }; + + with this description: + The absolute value of a number is equal to + SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) + Negative numbers are represented with ob_size < 0; + zero is represented by ob_size == 0. + + where SHIFT can be either: + #define PyLong_SHIFT 30 + #define PyLong_SHIFT 15 + ''' + ob_size = long(self.field('ob_size')) + if ob_size == 0: + return 0 + + ob_digit = self.field('ob_digit') + + if gdb.lookup_type('digit').sizeof == 2: + SHIFT = 15 + else: + SHIFT = 30 + + digits = [long(ob_digit[i]) * 2**(SHIFT*i) + for i in safe_range(abs(ob_size))] + result = sum(digits) + if ob_size < 0: + result = -result + return result + + def write_repr(self, out, visited): + # This ensures the trailing 'L' is printed when gdb is linked + # with a Python 3 interpreter. + out.write(repr(self.proxyval(visited)).rstrip('L')) + out.write('L') + + +class PyNoneStructPtr(PyObjectPtr): + """ + Class wrapping a gdb.Value that's a PyObject* pointing to the + singleton (we hope) _Py_NoneStruct with ob_type PyNone_Type + """ + _typename = 'PyObject' + + def proxyval(self, visited): + return None + + +class PyFrameObjectPtr(PyObjectPtr): + _typename = 'PyFrameObject' + + def __init__(self, gdbval, cast_to=None): + PyObjectPtr.__init__(self, gdbval, cast_to) + + if not self.is_optimized_out(): + self.co = PyCodeObjectPtr.from_pyobject_ptr(self.field('f_code')) + self.co_name = self.co.pyop_field('co_name') + self.co_filename = self.co.pyop_field('co_filename') + + self.f_lineno = int_from_int(self.field('f_lineno')) + self.f_lasti = int_from_int(self.field('f_lasti')) + self.co_nlocals = int_from_int(self.co.field('co_nlocals')) + self.co_varnames = PyTupleObjectPtr.from_pyobject_ptr(self.co.field('co_varnames')) + + def iter_locals(self): + ''' + Yield a sequence of (name,value) pairs of PyObjectPtr instances, for + the local variables of this frame + ''' + if self.is_optimized_out(): + return + + f_localsplus = self.field('f_localsplus') + for i in safe_range(self.co_nlocals): + pyop_value = PyObjectPtr.from_pyobject_ptr(f_localsplus[i]) + if not pyop_value.is_null(): + pyop_name = PyObjectPtr.from_pyobject_ptr(self.co_varnames[i]) + yield (pyop_name, pyop_value) + + def iter_globals(self): + ''' + Yield a sequence of (name,value) pairs of PyObjectPtr instances, for + the global variables of this frame + ''' + if self.is_optimized_out(): + return () + + pyop_globals = self.pyop_field('f_globals') + return pyop_globals.iteritems() + + def iter_builtins(self): + ''' + Yield a sequence of (name,value) pairs of PyObjectPtr instances, for + the builtin variables + ''' + if self.is_optimized_out(): + return () + + pyop_builtins = self.pyop_field('f_builtins') + return pyop_builtins.iteritems() + + def get_var_by_name(self, name): + ''' + Look for the named local variable, returning a (PyObjectPtr, scope) pair + where scope is a string 'local', 'global', 'builtin' + + If not found, return (None, None) + ''' + for pyop_name, pyop_value in self.iter_locals(): + if name == pyop_name.proxyval(set()): + return pyop_value, 'local' + for pyop_name, pyop_value in self.iter_globals(): + if name == pyop_name.proxyval(set()): + return pyop_value, 'global' + for pyop_name, pyop_value in self.iter_builtins(): + if name == pyop_name.proxyval(set()): + return pyop_value, 'builtin' + return None, None + + def filename(self): + '''Get the path of the current Python source file, as a string''' + if self.is_optimized_out(): + return '(frame information optimized out)' + return self.co_filename.proxyval(set()) + + def current_line_num(self): + '''Get current line number as an integer (1-based) + + Translated from PyFrame_GetLineNumber and PyCode_Addr2Line + + See Objects/lnotab_notes.txt + ''' + if self.is_optimized_out(): + return None + f_trace = self.field('f_trace') + if long(f_trace) != 0: + # we have a non-NULL f_trace: + return self.f_lineno + else: + #try: + return self.co.addr2line(self.f_lasti) + #except ValueError: + # return self.f_lineno + + def current_line(self): + '''Get the text of the current source line as a string, with a trailing + newline character''' + if self.is_optimized_out(): + return '(frame information optimized out)' + filename = self.filename() + try: + f = open(filename, 'r') + except IOError: + return None + with f: + all_lines = f.readlines() + # Convert from 1-based current_line_num to 0-based list offset: + return all_lines[self.current_line_num()-1] + + def write_repr(self, out, visited): + if self.is_optimized_out(): + out.write('(frame information optimized out)') + return + out.write('Frame 0x%x, for file %s, line %i, in %s (' + % (self.as_address(), + self.co_filename.proxyval(visited), + self.current_line_num(), + self.co_name.proxyval(visited))) + first = True + for pyop_name, pyop_value in self.iter_locals(): + if not first: + out.write(', ') + first = False + + out.write(pyop_name.proxyval(visited)) + out.write('=') + pyop_value.write_repr(out, visited) + + out.write(')') + + def print_traceback(self): + if self.is_optimized_out(): + sys.stdout.write(' (frame information optimized out)\n') + return + visited = set() + sys.stdout.write(' File "%s", line %i, in %s\n' + % (self.co_filename.proxyval(visited), + self.current_line_num(), + self.co_name.proxyval(visited))) + +class PySetObjectPtr(PyObjectPtr): + _typename = 'PySetObject' + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('%s(...)' % self.safe_tp_name()) + visited.add(self.as_address()) + + members = [] + table = self.field('table') + for i in safe_range(self.field('mask')+1): + setentry = table[i] + key = setentry['key'] + if key != 0: + key_proxy = PyObjectPtr.from_pyobject_ptr(key).proxyval(visited) + if key_proxy != '': + members.append(key_proxy) + if self.safe_tp_name() == 'frozenset': + return frozenset(members) + else: + return set(members) + + def write_repr(self, out, visited): + out.write(self.safe_tp_name()) + + # Guard against infinite loops: + if self.as_address() in visited: + out.write('(...)') + return + visited.add(self.as_address()) + + out.write('([') + first = True + table = self.field('table') + for i in safe_range(self.field('mask')+1): + setentry = table[i] + key = setentry['key'] + if key != 0: + pyop_key = PyObjectPtr.from_pyobject_ptr(key) + key_proxy = pyop_key.proxyval(visited) # FIXME! + if key_proxy != '': + if not first: + out.write(', ') + first = False + pyop_key.write_repr(out, visited) + out.write('])') + + +class PyStringObjectPtr(PyObjectPtr): + _typename = 'PyStringObject' + + def __str__(self): + field_ob_size = self.field('ob_size') + field_ob_sval = self.field('ob_sval') + char_ptr = field_ob_sval.address.cast(_type_unsigned_char_ptr()) + # When gdb is linked with a Python 3 interpreter, this is really + # a latin-1 mojibake decoding of the original string... + return ''.join([chr(char_ptr[i]) for i in safe_range(field_ob_size)]) + + def proxyval(self, visited): + return str(self) + + def write_repr(self, out, visited): + val = repr(self.proxyval(visited)) + if sys.version_info[0] >= 3: + val = val.encode('ascii', 'backslashreplace').decode('ascii') + out.write(val) + +class PyTupleObjectPtr(PyObjectPtr): + _typename = 'PyTupleObject' + + def __getitem__(self, i): + # Get the gdb.Value for the (PyObject*) with the given index: + field_ob_item = self.field('ob_item') + return field_ob_item[i] + + def proxyval(self, visited): + # Guard against infinite loops: + if self.as_address() in visited: + return ProxyAlreadyVisited('(...)') + visited.add(self.as_address()) + + result = tuple([PyObjectPtr.from_pyobject_ptr(self[i]).proxyval(visited) + for i in safe_range(int_from_int(self.field('ob_size')))]) + return result + + def write_repr(self, out, visited): + # Guard against infinite loops: + if self.as_address() in visited: + out.write('(...)') + return + visited.add(self.as_address()) + + out.write('(') + for i in safe_range(int_from_int(self.field('ob_size'))): + if i > 0: + out.write(', ') + element = PyObjectPtr.from_pyobject_ptr(self[i]) + element.write_repr(out, visited) + if self.field('ob_size') == 1: + out.write(',)') + else: + out.write(')') + +class PyTypeObjectPtr(PyObjectPtr): + _typename = 'PyTypeObject' + + +if sys.maxunicode >= 0x10000: + _unichr = unichr +else: + # Needed for proper surrogate support if sizeof(Py_UNICODE) is 2 in gdb + def _unichr(x): + if x < 0x10000: + return unichr(x) + x -= 0x10000 + ch1 = 0xD800 | (x >> 10) + ch2 = 0xDC00 | (x & 0x3FF) + return unichr(ch1) + unichr(ch2) + +class PyUnicodeObjectPtr(PyObjectPtr): + _typename = 'PyUnicodeObject' + + def char_width(self): + _type_Py_UNICODE = gdb.lookup_type('Py_UNICODE') + return _type_Py_UNICODE.sizeof + + def proxyval(self, visited): + # From unicodeobject.h: + # Py_ssize_t length; /* Length of raw Unicode data in buffer */ + # Py_UNICODE *str; /* Raw Unicode buffer */ + field_length = long(self.field('length')) + field_str = self.field('str') + + # Gather a list of ints from the Py_UNICODE array; these are either + # UCS-2 or UCS-4 code points: + if self.char_width() > 2: + Py_UNICODEs = [int(field_str[i]) for i in safe_range(field_length)] + else: + # A more elaborate routine if sizeof(Py_UNICODE) is 2 in the + # inferior process: we must join surrogate pairs. + Py_UNICODEs = [] + i = 0 + limit = safety_limit(field_length) + while i < limit: + ucs = int(field_str[i]) + i += 1 + if ucs < 0xD800 or ucs >= 0xDC00 or i == field_length: + Py_UNICODEs.append(ucs) + continue + # This could be a surrogate pair. + ucs2 = int(field_str[i]) + if ucs2 < 0xDC00 or ucs2 > 0xDFFF: + continue + code = (ucs & 0x03FF) << 10 + code |= ucs2 & 0x03FF + code += 0x00010000 + Py_UNICODEs.append(code) + i += 1 + + # Convert the int code points to unicode characters, and generate a + # local unicode instance. + # This splits surrogate pairs if sizeof(Py_UNICODE) is 2 here (in gdb). + result = u''.join([_unichr(ucs) for ucs in Py_UNICODEs]) + return result + + def write_repr(self, out, visited): + val = repr(self.proxyval(visited)) + if sys.version_info[0] >= 3: + val = val.encode('ascii', 'backslashreplace').decode('ascii') + # This ensures the 'u' prefix is printed when gdb is linked + # with a Python 3 interpreter. + out.write('u') + out.write(val.lstrip('u')) + + +def int_from_int(gdbval): + return int(str(gdbval)) + + +def stringify(val): + # TODO: repr() puts everything on one line; pformat can be nicer, but + # can lead to v.long results; this function isolates the choice + if True: + return repr(val) + else: + from pprint import pformat + return pformat(val) + + +class PyObjectPtrPrinter: + "Prints a (PyObject*)" + + def __init__ (self, gdbval): + self.gdbval = gdbval + + def to_string (self): + pyop = PyObjectPtr.from_pyobject_ptr(self.gdbval) + if True: + return pyop.get_truncated_repr(MAX_OUTPUT_LEN) + else: + # Generate full proxy value then stringify it. + # Doing so could be expensive + proxyval = pyop.proxyval(set()) + return stringify(proxyval) + +def pretty_printer_lookup(gdbval): + type = gdbval.type.unqualified() + if type.code == gdb.TYPE_CODE_PTR: + type = type.target().unqualified() + t = str(type) + if t in ("PyObject", "PyFrameObject"): + return PyObjectPtrPrinter(gdbval) + +""" +During development, I've been manually invoking the code in this way: +(gdb) python + +import sys +sys.path.append('/home/david/coding/python-gdb') +import libpython +end + +then reloading it after each edit like this: +(gdb) python reload(libpython) + +The following code should ensure that the prettyprinter is registered +if the code is autoloaded by gdb when visiting libpython.so, provided +that this python file is installed to the same path as the library (or its +.debug file) plus a "-gdb.py" suffix, e.g: + /usr/lib/libpython2.6.so.1.0-gdb.py + /usr/lib/debug/usr/lib/libpython2.6.so.1.0.debug-gdb.py +""" +def register (obj): + if obj == None: + obj = gdb + + # Wire up the pretty-printer + obj.pretty_printers.append(pretty_printer_lookup) + +register (gdb.current_objfile ()) + + + +# Unfortunately, the exact API exposed by the gdb module varies somewhat +# from build to build +# See http://bugs.python.org/issue8279?#msg102276 + +class Frame(object): + ''' + Wrapper for gdb.Frame, adding various methods + ''' + def __init__(self, gdbframe): + self._gdbframe = gdbframe + + def older(self): + older = self._gdbframe.older() + if older: + return Frame(older) + else: + return None + + def newer(self): + newer = self._gdbframe.newer() + if newer: + return Frame(newer) + else: + return None + + def select(self): + '''If supported, select this frame and return True; return False if unsupported + + Not all builds have a gdb.Frame.select method; seems to be present on Fedora 12 + onwards, but absent on Ubuntu buildbot''' + if not hasattr(self._gdbframe, 'select'): + print ('Unable to select frame: ' + 'this build of gdb does not expose a gdb.Frame.select method') + return False + self._gdbframe.select() + return True + + def get_index(self): + '''Calculate index of frame, starting at 0 for the newest frame within + this thread''' + index = 0 + # Go down until you reach the newest frame: + iter_frame = self + while iter_frame.newer(): + index += 1 + iter_frame = iter_frame.newer() + return index + + # We divide frames into: + # - "python frames": + # - "bytecode frames" i.e. PyEval_EvalFrameEx + # - "other python frames": things that are of interest from a python + # POV, but aren't bytecode (e.g. GC, GIL) + # - everything else + + def is_python_frame(self): + '''Is this a PyEval_EvalFrameEx frame, or some other important + frame? (see is_other_python_frame for what "important" means in this + context)''' + if self.is_evalframeex(): + return True + if self.is_other_python_frame(): + return True + return False + + def is_evalframeex(self): + '''Is this a PyEval_EvalFrameEx frame?''' + if self._gdbframe.name() == 'PyEval_EvalFrameEx': + ''' + I believe we also need to filter on the inline + struct frame_id.inline_depth, only regarding frames with + an inline depth of 0 as actually being this function + + So we reject those with type gdb.INLINE_FRAME + ''' + if self._gdbframe.type() == gdb.NORMAL_FRAME: + # We have a PyEval_EvalFrameEx frame: + return True + + return False + + def is_other_python_frame(self): + '''Is this frame worth displaying in python backtraces? + Examples: + - waiting on the GIL + - garbage-collecting + - within a CFunction + If it is, return a descriptive string + For other frames, return False + ''' + if self.is_waiting_for_gil(): + return 'Waiting for the GIL' + elif self.is_gc_collect(): + return 'Garbage-collecting' + else: + # Detect invocations of PyCFunction instances: + older = self.older() + if older and older._gdbframe.name() == 'PyCFunction_Call': + # Within that frame: + # "func" is the local containing the PyObject* of the + # PyCFunctionObject instance + # "f" is the same value, but cast to (PyCFunctionObject*) + # "self" is the (PyObject*) of the 'self' + try: + # Use the prettyprinter for the func: + func = older._gdbframe.read_var('func') + return str(func) + except RuntimeError: + return 'PyCFunction invocation (unable to read "func")' + + # This frame isn't worth reporting: + return False + + def is_waiting_for_gil(self): + '''Is this frame waiting on the GIL?''' + # This assumes the _POSIX_THREADS version of Python/ceval_gil.h: + name = self._gdbframe.name() + if name: + return ('PyThread_acquire_lock' in name + and 'lock_PyThread_acquire_lock' not in name) + + def is_gc_collect(self): + '''Is this frame "collect" within the garbage-collector?''' + return self._gdbframe.name() == 'collect' + + def get_pyop(self): + try: + f = self._gdbframe.read_var('f') + frame = PyFrameObjectPtr.from_pyobject_ptr(f) + if not frame.is_optimized_out(): + return frame + # gdb is unable to get the "f" argument of PyEval_EvalFrameEx() + # because it was "optimized out". Try to get "f" from the frame + # of the caller, PyEval_EvalCodeEx(). + orig_frame = frame + caller = self._gdbframe.older() + if caller: + f = caller.read_var('f') + frame = PyFrameObjectPtr.from_pyobject_ptr(f) + if not frame.is_optimized_out(): + return frame + return orig_frame + except ValueError: + return None + + @classmethod + def get_selected_frame(cls): + _gdbframe = gdb.selected_frame() + if _gdbframe: + return Frame(_gdbframe) + return None + + @classmethod + def get_selected_python_frame(cls): + '''Try to obtain the Frame for the python-related code in the selected + frame, or None''' + frame = cls.get_selected_frame() + + while frame: + if frame.is_python_frame(): + return frame + frame = frame.older() + + # Not found: + return None + + @classmethod + def get_selected_bytecode_frame(cls): + '''Try to obtain the Frame for the python bytecode interpreter in the + selected GDB frame, or None''' + frame = cls.get_selected_frame() + + while frame: + if frame.is_evalframeex(): + return frame + frame = frame.older() + + # Not found: + return None + + def print_summary(self): + if self.is_evalframeex(): + pyop = self.get_pyop() + if pyop: + line = pyop.get_truncated_repr(MAX_OUTPUT_LEN) + write_unicode(sys.stdout, '#%i %s\n' % (self.get_index(), line)) + if not pyop.is_optimized_out(): + line = pyop.current_line() + if line is not None: + sys.stdout.write(' %s\n' % line.strip()) + else: + sys.stdout.write('#%i (unable to read python frame information)\n' % self.get_index()) + else: + info = self.is_other_python_frame() + if info: + sys.stdout.write('#%i %s\n' % (self.get_index(), info)) + else: + sys.stdout.write('#%i\n' % self.get_index()) + + def print_traceback(self): + if self.is_evalframeex(): + pyop = self.get_pyop() + if pyop: + pyop.print_traceback() + if not pyop.is_optimized_out(): + line = pyop.current_line() + if line is not None: + sys.stdout.write(' %s\n' % line.strip()) + else: + sys.stdout.write(' (unable to read python frame information)\n') + else: + info = self.is_other_python_frame() + if info: + sys.stdout.write(' %s\n' % info) + else: + sys.stdout.write(' (not a python frame)\n') + +class PyList(gdb.Command): + '''List the current Python source code, if any + + Use + py-list START + to list at a different line number within the python source. + + Use + py-list START, END + to list a specific range of lines within the python source. + ''' + + def __init__(self): + gdb.Command.__init__ (self, + "py-list", + gdb.COMMAND_FILES, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + import re + + start = None + end = None + + m = re.match(r'\s*(\d+)\s*', args) + if m: + start = int(m.group(0)) + end = start + 10 + + m = re.match(r'\s*(\d+)\s*,\s*(\d+)\s*', args) + if m: + start, end = map(int, m.groups()) + + # py-list requires an actual PyEval_EvalFrameEx frame: + frame = Frame.get_selected_bytecode_frame() + if not frame: + print('Unable to locate gdb frame for python bytecode interpreter') + return + + pyop = frame.get_pyop() + if not pyop or pyop.is_optimized_out(): + print('Unable to read information on python frame') + return + + filename = pyop.filename() + lineno = pyop.current_line_num() + + if start is None: + start = lineno - 5 + end = lineno + 5 + + if start<1: + start = 1 + + try: + f = open(filename, 'r') + except IOError as err: + sys.stdout.write('Unable to open %s: %s\n' + % (filename, err)) + return + with f: + all_lines = f.readlines() + # start and end are 1-based, all_lines is 0-based; + # so [start-1:end] as a python slice gives us [start, end] as a + # closed interval + for i, line in enumerate(all_lines[start-1:end]): + linestr = str(i+start) + # Highlight current line: + if i + start == lineno: + linestr = '>' + linestr + sys.stdout.write('%4s %s' % (linestr, line)) + + +# ...and register the command: +PyList() + +def move_in_stack(move_up): + '''Move up or down the stack (for the py-up/py-down command)''' + frame = Frame.get_selected_python_frame() + while frame: + if move_up: + iter_frame = frame.older() + else: + iter_frame = frame.newer() + + if not iter_frame: + break + + if iter_frame.is_python_frame(): + # Result: + if iter_frame.select(): + iter_frame.print_summary() + return + + frame = iter_frame + + if move_up: + print('Unable to find an older python frame') + else: + print('Unable to find a newer python frame') + +class PyUp(gdb.Command): + 'Select and print the python stack frame that called this one (if any)' + def __init__(self): + gdb.Command.__init__ (self, + "py-up", + gdb.COMMAND_STACK, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + move_in_stack(move_up=True) + +class PyDown(gdb.Command): + 'Select and print the python stack frame called by this one (if any)' + def __init__(self): + gdb.Command.__init__ (self, + "py-down", + gdb.COMMAND_STACK, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + move_in_stack(move_up=False) + +# Not all builds of gdb have gdb.Frame.select +if hasattr(gdb.Frame, 'select'): + PyUp() + PyDown() + +class PyBacktraceFull(gdb.Command): + 'Display the current python frame and all the frames within its call stack (if any)' + def __init__(self): + gdb.Command.__init__ (self, + "py-bt-full", + gdb.COMMAND_STACK, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + frame = Frame.get_selected_python_frame() + while frame: + if frame.is_python_frame(): + frame.print_summary() + frame = frame.older() + +PyBacktraceFull() + +class PyBacktrace(gdb.Command): + 'Display the current python frame and all the frames within its call stack (if any)' + def __init__(self): + gdb.Command.__init__ (self, + "py-bt", + gdb.COMMAND_STACK, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + sys.stdout.write('Traceback (most recent call first):\n') + frame = Frame.get_selected_python_frame() + while frame: + if frame.is_python_frame(): + frame.print_traceback() + frame = frame.older() + +PyBacktrace() + +class PyPrint(gdb.Command): + 'Look up the given python variable name, and print it' + def __init__(self): + gdb.Command.__init__ (self, + "py-print", + gdb.COMMAND_DATA, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + name = str(args) + + frame = Frame.get_selected_python_frame() + if not frame: + print('Unable to locate python frame') + return + + pyop_frame = frame.get_pyop() + if not pyop_frame: + print('Unable to read information on python frame') + return + + pyop_var, scope = pyop_frame.get_var_by_name(name) + + if pyop_var: + print('%s %r = %s' + % (scope, + name, + pyop_var.get_truncated_repr(MAX_OUTPUT_LEN))) + else: + print('%r not found' % name) + +PyPrint() + +class PyLocals(gdb.Command): + 'Look up the given python variable name, and print it' + def __init__(self): + gdb.Command.__init__ (self, + "py-locals", + gdb.COMMAND_DATA, + gdb.COMPLETE_NONE) + + + def invoke(self, args, from_tty): + name = str(args) + + frame = Frame.get_selected_python_frame() + if not frame: + print('Unable to locate python frame') + return + + pyop_frame = frame.get_pyop() + if not pyop_frame: + print('Unable to read information on python frame') + return + + for pyop_name, pyop_value in pyop_frame.iter_locals(): + print('%s = %s' + % (pyop_name.proxyval(set()), + pyop_value.get_truncated_repr(MAX_OUTPUT_LEN))) + +PyLocals() diff --git a/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.7.py b/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.7.py deleted file mode 100644 index b3867e5128a1..000000000000 --- a/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.7.py +++ /dev/null @@ -1,555 +0,0 @@ -#!/Users/nshin/.pyenv/versions/2.7.14/bin/python2.7 -"""An RFC 2821 smtp proxy. - -Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]] - -Options: - - --nosetuid - -n - This program generally tries to setuid `nobody', unless this flag is - set. The setuid call will fail if this program is not run as root (in - which case, use this flag). - - --version - -V - Print the version number and exit. - - --class classname - -c classname - Use `classname' as the concrete SMTP proxy class. Uses `PureProxy' by - default. - - --debug - -d - Turn on debugging prints. - - --help - -h - Print this message and exit. - -Version: %(__version__)s - -If localhost is not given then `localhost' is used, and if localport is not -given then 8025 is used. If remotehost is not given then `localhost' is used, -and if remoteport is not given, then 25 is used. -""" - -# Overview: -# -# This file implements the minimal SMTP protocol as defined in RFC 821. It -# has a hierarchy of classes which implement the backend functionality for the -# smtpd. A number of classes are provided: -# -# SMTPServer - the base class for the backend. Raises NotImplementedError -# if you try to use it. -# -# DebuggingServer - simply prints each message it receives on stdout. -# -# PureProxy - Proxies all messages to a real smtpd which does final -# delivery. One known problem with this class is that it doesn't handle -# SMTP errors from the backend server at all. This should be fixed -# (contributions are welcome!). -# -# MailmanProxy - An experimental hack to work with GNU Mailman -# . Using this server as your real incoming smtpd, your -# mailhost will automatically recognize and accept mail destined to Mailman -# lists when those lists are created. Every message not destined for a list -# gets forwarded to a real backend smtpd, as with PureProxy. Again, errors -# are not handled correctly yet. -# -# Please note that this script requires Python 2.0 -# -# Author: Barry Warsaw -# -# TODO: -# -# - support mailbox delivery -# - alias files -# - ESMTP -# - handle error codes from the backend smtpd - -import sys -import os -import errno -import getopt -import time -import socket -import asyncore -import asynchat - -__all__ = ["SMTPServer","DebuggingServer","PureProxy","MailmanProxy"] - -program = sys.argv[0] -__version__ = 'Python SMTP proxy version 0.2' - - -class Devnull: - def write(self, msg): pass - def flush(self): pass - - -DEBUGSTREAM = Devnull() -NEWLINE = '\n' -EMPTYSTRING = '' -COMMASPACE = ', ' - - -def usage(code, msg=''): - print >> sys.stderr, __doc__ % globals() - if msg: - print >> sys.stderr, msg - sys.exit(code) - - -class SMTPChannel(asynchat.async_chat): - COMMAND = 0 - DATA = 1 - - def __init__(self, server, conn, addr): - asynchat.async_chat.__init__(self, conn) - self.__server = server - self.__conn = conn - self.__addr = addr - self.__line = [] - self.__state = self.COMMAND - self.__greeting = 0 - self.__mailfrom = None - self.__rcpttos = [] - self.__data = '' - self.__fqdn = socket.getfqdn() - try: - self.__peer = conn.getpeername() - except socket.error, err: - # a race condition may occur if the other end is closing - # before we can get the peername - self.close() - if err[0] != errno.ENOTCONN: - raise - return - print >> DEBUGSTREAM, 'Peer:', repr(self.__peer) - self.push('220 %s %s' % (self.__fqdn, __version__)) - self.set_terminator('\r\n') - - # Overrides base class for convenience - def push(self, msg): - asynchat.async_chat.push(self, msg + '\r\n') - - # Implementation of base class abstract method - def collect_incoming_data(self, data): - self.__line.append(data) - - # Implementation of base class abstract method - def found_terminator(self): - line = EMPTYSTRING.join(self.__line) - print >> DEBUGSTREAM, 'Data:', repr(line) - self.__line = [] - if self.__state == self.COMMAND: - if not line: - self.push('500 Error: bad syntax') - return - method = None - i = line.find(' ') - if i < 0: - command = line.upper() - arg = None - else: - command = line[:i].upper() - arg = line[i+1:].strip() - method = getattr(self, 'smtp_' + command, None) - if not method: - self.push('502 Error: command "%s" not implemented' % command) - return - method(arg) - return - else: - if self.__state != self.DATA: - self.push('451 Internal confusion') - return - # Remove extraneous carriage returns and de-transparency according - # to RFC 821, Section 4.5.2. - data = [] - for text in line.split('\r\n'): - if text and text[0] == '.': - data.append(text[1:]) - else: - data.append(text) - self.__data = NEWLINE.join(data) - status = self.__server.process_message(self.__peer, - self.__mailfrom, - self.__rcpttos, - self.__data) - self.__rcpttos = [] - self.__mailfrom = None - self.__state = self.COMMAND - self.set_terminator('\r\n') - if not status: - self.push('250 Ok') - else: - self.push(status) - - # SMTP and ESMTP commands - def smtp_HELO(self, arg): - if not arg: - self.push('501 Syntax: HELO hostname') - return - if self.__greeting: - self.push('503 Duplicate HELO/EHLO') - else: - self.__greeting = arg - self.push('250 %s' % self.__fqdn) - - def smtp_NOOP(self, arg): - if arg: - self.push('501 Syntax: NOOP') - else: - self.push('250 Ok') - - def smtp_QUIT(self, arg): - # args is ignored - self.push('221 Bye') - self.close_when_done() - - # factored - def __getaddr(self, keyword, arg): - address = None - keylen = len(keyword) - if arg[:keylen].upper() == keyword: - address = arg[keylen:].strip() - if not address: - pass - elif address[0] == '<' and address[-1] == '>' and address != '<>': - # Addresses can be in the form but watch out - # for null address, e.g. <> - address = address[1:-1] - return address - - def smtp_MAIL(self, arg): - print >> DEBUGSTREAM, '===> MAIL', arg - address = self.__getaddr('FROM:', arg) if arg else None - if not address: - self.push('501 Syntax: MAIL FROM:
') - return - if self.__mailfrom: - self.push('503 Error: nested MAIL command') - return - self.__mailfrom = address - print >> DEBUGSTREAM, 'sender:', self.__mailfrom - self.push('250 Ok') - - def smtp_RCPT(self, arg): - print >> DEBUGSTREAM, '===> RCPT', arg - if not self.__mailfrom: - self.push('503 Error: need MAIL command') - return - address = self.__getaddr('TO:', arg) if arg else None - if not address: - self.push('501 Syntax: RCPT TO:
') - return - self.__rcpttos.append(address) - print >> DEBUGSTREAM, 'recips:', self.__rcpttos - self.push('250 Ok') - - def smtp_RSET(self, arg): - if arg: - self.push('501 Syntax: RSET') - return - # Resets the sender, recipients, and data, but not the greeting - self.__mailfrom = None - self.__rcpttos = [] - self.__data = '' - self.__state = self.COMMAND - self.push('250 Ok') - - def smtp_DATA(self, arg): - if not self.__rcpttos: - self.push('503 Error: need RCPT command') - return - if arg: - self.push('501 Syntax: DATA') - return - self.__state = self.DATA - self.set_terminator('\r\n.\r\n') - self.push('354 End data with .') - - -class SMTPServer(asyncore.dispatcher): - def __init__(self, localaddr, remoteaddr): - self._localaddr = localaddr - self._remoteaddr = remoteaddr - asyncore.dispatcher.__init__(self) - try: - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - # try to re-use a server port if possible - self.set_reuse_addr() - self.bind(localaddr) - self.listen(5) - except: - # cleanup asyncore.socket_map before raising - self.close() - raise - else: - print >> DEBUGSTREAM, \ - '%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % ( - self.__class__.__name__, time.ctime(time.time()), - localaddr, remoteaddr) - - def handle_accept(self): - pair = self.accept() - if pair is not None: - conn, addr = pair - print >> DEBUGSTREAM, 'Incoming connection from %s' % repr(addr) - channel = SMTPChannel(self, conn, addr) - - # API for "doing something useful with the message" - def process_message(self, peer, mailfrom, rcpttos, data): - """Override this abstract method to handle messages from the client. - - peer is a tuple containing (ipaddr, port) of the client that made the - socket connection to our smtp port. - - mailfrom is the raw address the client claims the message is coming - from. - - rcpttos is a list of raw addresses the client wishes to deliver the - message to. - - data is a string containing the entire full text of the message, - headers (if supplied) and all. It has been `de-transparencied' - according to RFC 821, Section 4.5.2. In other words, a line - containing a `.' followed by other text has had the leading dot - removed. - - This function should return None, for a normal `250 Ok' response; - otherwise it returns the desired response string in RFC 821 format. - - """ - raise NotImplementedError - - -class DebuggingServer(SMTPServer): - # Do something with the gathered message - def process_message(self, peer, mailfrom, rcpttos, data): - inheaders = 1 - lines = data.split('\n') - print '---------- MESSAGE FOLLOWS ----------' - for line in lines: - # headers first - if inheaders and not line: - print 'X-Peer:', peer[0] - inheaders = 0 - print line - print '------------ END MESSAGE ------------' - - -class PureProxy(SMTPServer): - def process_message(self, peer, mailfrom, rcpttos, data): - lines = data.split('\n') - # Look for the last header - i = 0 - for line in lines: - if not line: - break - i += 1 - lines.insert(i, 'X-Peer: %s' % peer[0]) - data = NEWLINE.join(lines) - refused = self._deliver(mailfrom, rcpttos, data) - # TBD: what to do with refused addresses? - print >> DEBUGSTREAM, 'we got some refusals:', refused - - def _deliver(self, mailfrom, rcpttos, data): - import smtplib - refused = {} - try: - s = smtplib.SMTP() - s.connect(self._remoteaddr[0], self._remoteaddr[1]) - try: - refused = s.sendmail(mailfrom, rcpttos, data) - finally: - s.quit() - except smtplib.SMTPRecipientsRefused, e: - print >> DEBUGSTREAM, 'got SMTPRecipientsRefused' - refused = e.recipients - except (socket.error, smtplib.SMTPException), e: - print >> DEBUGSTREAM, 'got', e.__class__ - # All recipients were refused. If the exception had an associated - # error code, use it. Otherwise,fake it with a non-triggering - # exception code. - errcode = getattr(e, 'smtp_code', -1) - errmsg = getattr(e, 'smtp_error', 'ignore') - for r in rcpttos: - refused[r] = (errcode, errmsg) - return refused - - -class MailmanProxy(PureProxy): - def process_message(self, peer, mailfrom, rcpttos, data): - from cStringIO import StringIO - from Mailman import Utils - from Mailman import Message - from Mailman import MailList - # If the message is to a Mailman mailing list, then we'll invoke the - # Mailman script directly, without going through the real smtpd. - # Otherwise we'll forward it to the local proxy for disposition. - listnames = [] - for rcpt in rcpttos: - local = rcpt.lower().split('@')[0] - # We allow the following variations on the theme - # listname - # listname-admin - # listname-owner - # listname-request - # listname-join - # listname-leave - parts = local.split('-') - if len(parts) > 2: - continue - listname = parts[0] - if len(parts) == 2: - command = parts[1] - else: - command = '' - if not Utils.list_exists(listname) or command not in ( - '', 'admin', 'owner', 'request', 'join', 'leave'): - continue - listnames.append((rcpt, listname, command)) - # Remove all list recipients from rcpttos and forward what we're not - # going to take care of ourselves. Linear removal should be fine - # since we don't expect a large number of recipients. - for rcpt, listname, command in listnames: - rcpttos.remove(rcpt) - # If there's any non-list destined recipients left, - print >> DEBUGSTREAM, 'forwarding recips:', ' '.join(rcpttos) - if rcpttos: - refused = self._deliver(mailfrom, rcpttos, data) - # TBD: what to do with refused addresses? - print >> DEBUGSTREAM, 'we got refusals:', refused - # Now deliver directly to the list commands - mlists = {} - s = StringIO(data) - msg = Message.Message(s) - # These headers are required for the proper execution of Mailman. All - # MTAs in existence seem to add these if the original message doesn't - # have them. - if not msg.getheader('from'): - msg['From'] = mailfrom - if not msg.getheader('date'): - msg['Date'] = time.ctime(time.time()) - for rcpt, listname, command in listnames: - print >> DEBUGSTREAM, 'sending message to', rcpt - mlist = mlists.get(listname) - if not mlist: - mlist = MailList.MailList(listname, lock=0) - mlists[listname] = mlist - # dispatch on the type of command - if command == '': - # post - msg.Enqueue(mlist, tolist=1) - elif command == 'admin': - msg.Enqueue(mlist, toadmin=1) - elif command == 'owner': - msg.Enqueue(mlist, toowner=1) - elif command == 'request': - msg.Enqueue(mlist, torequest=1) - elif command in ('join', 'leave'): - # TBD: this is a hack! - if command == 'join': - msg['Subject'] = 'subscribe' - else: - msg['Subject'] = 'unsubscribe' - msg.Enqueue(mlist, torequest=1) - - -class Options: - setuid = 1 - classname = 'PureProxy' - - -def parseargs(): - global DEBUGSTREAM - try: - opts, args = getopt.getopt( - sys.argv[1:], 'nVhc:d', - ['class=', 'nosetuid', 'version', 'help', 'debug']) - except getopt.error, e: - usage(1, e) - - options = Options() - for opt, arg in opts: - if opt in ('-h', '--help'): - usage(0) - elif opt in ('-V', '--version'): - print >> sys.stderr, __version__ - sys.exit(0) - elif opt in ('-n', '--nosetuid'): - options.setuid = 0 - elif opt in ('-c', '--class'): - options.classname = arg - elif opt in ('-d', '--debug'): - DEBUGSTREAM = sys.stderr - - # parse the rest of the arguments - if len(args) < 1: - localspec = 'localhost:8025' - remotespec = 'localhost:25' - elif len(args) < 2: - localspec = args[0] - remotespec = 'localhost:25' - elif len(args) < 3: - localspec = args[0] - remotespec = args[1] - else: - usage(1, 'Invalid arguments: %s' % COMMASPACE.join(args)) - - # split into host/port pairs - i = localspec.find(':') - if i < 0: - usage(1, 'Bad local spec: %s' % localspec) - options.localhost = localspec[:i] - try: - options.localport = int(localspec[i+1:]) - except ValueError: - usage(1, 'Bad local port: %s' % localspec) - i = remotespec.find(':') - if i < 0: - usage(1, 'Bad remote spec: %s' % remotespec) - options.remotehost = remotespec[:i] - try: - options.remoteport = int(remotespec[i+1:]) - except ValueError: - usage(1, 'Bad remote port: %s' % remotespec) - return options - - -if __name__ == '__main__': - options = parseargs() - # Become nobody - classname = options.classname - if "." in classname: - lastdot = classname.rfind(".") - mod = __import__(classname[:lastdot], globals(), locals(), [""]) - classname = classname[lastdot+1:] - else: - import __main__ as mod - class_ = getattr(mod, classname) - proxy = class_((options.localhost, options.localport), - (options.remotehost, options.remoteport)) - if options.setuid: - try: - import pwd - except ImportError: - print >> sys.stderr, \ - 'Cannot import module "pwd"; try running with -n option.' - sys.exit(1) - nobody = pwd.getpwnam('nobody')[2] - try: - os.setuid(nobody) - except OSError, e: - if e.errno != errno.EPERM: raise - print >> sys.stderr, \ - 'Cannot setuid "nobody"; try running with -n option.' - sys.exit(1) - try: - asyncore.loop() - except KeyboardInterrupt: - pass diff --git a/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.py b/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.py deleted file mode 100644 index b3867e5128a1..000000000000 --- a/Engine/Binaries/ThirdParty/Python/Mac/bin/smtpd2.py +++ /dev/null @@ -1,555 +0,0 @@ -#!/Users/nshin/.pyenv/versions/2.7.14/bin/python2.7 -"""An RFC 2821 smtp proxy. - -Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]] - -Options: - - --nosetuid - -n - This program generally tries to setuid `nobody', unless this flag is - set. The setuid call will fail if this program is not run as root (in - which case, use this flag). - - --version - -V - Print the version number and exit. - - --class classname - -c classname - Use `classname' as the concrete SMTP proxy class. Uses `PureProxy' by - default. - - --debug - -d - Turn on debugging prints. - - --help - -h - Print this message and exit. - -Version: %(__version__)s - -If localhost is not given then `localhost' is used, and if localport is not -given then 8025 is used. If remotehost is not given then `localhost' is used, -and if remoteport is not given, then 25 is used. -""" - -# Overview: -# -# This file implements the minimal SMTP protocol as defined in RFC 821. It -# has a hierarchy of classes which implement the backend functionality for the -# smtpd. A number of classes are provided: -# -# SMTPServer - the base class for the backend. Raises NotImplementedError -# if you try to use it. -# -# DebuggingServer - simply prints each message it receives on stdout. -# -# PureProxy - Proxies all messages to a real smtpd which does final -# delivery. One known problem with this class is that it doesn't handle -# SMTP errors from the backend server at all. This should be fixed -# (contributions are welcome!). -# -# MailmanProxy - An experimental hack to work with GNU Mailman -# . Using this server as your real incoming smtpd, your -# mailhost will automatically recognize and accept mail destined to Mailman -# lists when those lists are created. Every message not destined for a list -# gets forwarded to a real backend smtpd, as with PureProxy. Again, errors -# are not handled correctly yet. -# -# Please note that this script requires Python 2.0 -# -# Author: Barry Warsaw -# -# TODO: -# -# - support mailbox delivery -# - alias files -# - ESMTP -# - handle error codes from the backend smtpd - -import sys -import os -import errno -import getopt -import time -import socket -import asyncore -import asynchat - -__all__ = ["SMTPServer","DebuggingServer","PureProxy","MailmanProxy"] - -program = sys.argv[0] -__version__ = 'Python SMTP proxy version 0.2' - - -class Devnull: - def write(self, msg): pass - def flush(self): pass - - -DEBUGSTREAM = Devnull() -NEWLINE = '\n' -EMPTYSTRING = '' -COMMASPACE = ', ' - - -def usage(code, msg=''): - print >> sys.stderr, __doc__ % globals() - if msg: - print >> sys.stderr, msg - sys.exit(code) - - -class SMTPChannel(asynchat.async_chat): - COMMAND = 0 - DATA = 1 - - def __init__(self, server, conn, addr): - asynchat.async_chat.__init__(self, conn) - self.__server = server - self.__conn = conn - self.__addr = addr - self.__line = [] - self.__state = self.COMMAND - self.__greeting = 0 - self.__mailfrom = None - self.__rcpttos = [] - self.__data = '' - self.__fqdn = socket.getfqdn() - try: - self.__peer = conn.getpeername() - except socket.error, err: - # a race condition may occur if the other end is closing - # before we can get the peername - self.close() - if err[0] != errno.ENOTCONN: - raise - return - print >> DEBUGSTREAM, 'Peer:', repr(self.__peer) - self.push('220 %s %s' % (self.__fqdn, __version__)) - self.set_terminator('\r\n') - - # Overrides base class for convenience - def push(self, msg): - asynchat.async_chat.push(self, msg + '\r\n') - - # Implementation of base class abstract method - def collect_incoming_data(self, data): - self.__line.append(data) - - # Implementation of base class abstract method - def found_terminator(self): - line = EMPTYSTRING.join(self.__line) - print >> DEBUGSTREAM, 'Data:', repr(line) - self.__line = [] - if self.__state == self.COMMAND: - if not line: - self.push('500 Error: bad syntax') - return - method = None - i = line.find(' ') - if i < 0: - command = line.upper() - arg = None - else: - command = line[:i].upper() - arg = line[i+1:].strip() - method = getattr(self, 'smtp_' + command, None) - if not method: - self.push('502 Error: command "%s" not implemented' % command) - return - method(arg) - return - else: - if self.__state != self.DATA: - self.push('451 Internal confusion') - return - # Remove extraneous carriage returns and de-transparency according - # to RFC 821, Section 4.5.2. - data = [] - for text in line.split('\r\n'): - if text and text[0] == '.': - data.append(text[1:]) - else: - data.append(text) - self.__data = NEWLINE.join(data) - status = self.__server.process_message(self.__peer, - self.__mailfrom, - self.__rcpttos, - self.__data) - self.__rcpttos = [] - self.__mailfrom = None - self.__state = self.COMMAND - self.set_terminator('\r\n') - if not status: - self.push('250 Ok') - else: - self.push(status) - - # SMTP and ESMTP commands - def smtp_HELO(self, arg): - if not arg: - self.push('501 Syntax: HELO hostname') - return - if self.__greeting: - self.push('503 Duplicate HELO/EHLO') - else: - self.__greeting = arg - self.push('250 %s' % self.__fqdn) - - def smtp_NOOP(self, arg): - if arg: - self.push('501 Syntax: NOOP') - else: - self.push('250 Ok') - - def smtp_QUIT(self, arg): - # args is ignored - self.push('221 Bye') - self.close_when_done() - - # factored - def __getaddr(self, keyword, arg): - address = None - keylen = len(keyword) - if arg[:keylen].upper() == keyword: - address = arg[keylen:].strip() - if not address: - pass - elif address[0] == '<' and address[-1] == '>' and address != '<>': - # Addresses can be in the form but watch out - # for null address, e.g. <> - address = address[1:-1] - return address - - def smtp_MAIL(self, arg): - print >> DEBUGSTREAM, '===> MAIL', arg - address = self.__getaddr('FROM:', arg) if arg else None - if not address: - self.push('501 Syntax: MAIL FROM:
') - return - if self.__mailfrom: - self.push('503 Error: nested MAIL command') - return - self.__mailfrom = address - print >> DEBUGSTREAM, 'sender:', self.__mailfrom - self.push('250 Ok') - - def smtp_RCPT(self, arg): - print >> DEBUGSTREAM, '===> RCPT', arg - if not self.__mailfrom: - self.push('503 Error: need MAIL command') - return - address = self.__getaddr('TO:', arg) if arg else None - if not address: - self.push('501 Syntax: RCPT TO:
') - return - self.__rcpttos.append(address) - print >> DEBUGSTREAM, 'recips:', self.__rcpttos - self.push('250 Ok') - - def smtp_RSET(self, arg): - if arg: - self.push('501 Syntax: RSET') - return - # Resets the sender, recipients, and data, but not the greeting - self.__mailfrom = None - self.__rcpttos = [] - self.__data = '' - self.__state = self.COMMAND - self.push('250 Ok') - - def smtp_DATA(self, arg): - if not self.__rcpttos: - self.push('503 Error: need RCPT command') - return - if arg: - self.push('501 Syntax: DATA') - return - self.__state = self.DATA - self.set_terminator('\r\n.\r\n') - self.push('354 End data with .') - - -class SMTPServer(asyncore.dispatcher): - def __init__(self, localaddr, remoteaddr): - self._localaddr = localaddr - self._remoteaddr = remoteaddr - asyncore.dispatcher.__init__(self) - try: - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - # try to re-use a server port if possible - self.set_reuse_addr() - self.bind(localaddr) - self.listen(5) - except: - # cleanup asyncore.socket_map before raising - self.close() - raise - else: - print >> DEBUGSTREAM, \ - '%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % ( - self.__class__.__name__, time.ctime(time.time()), - localaddr, remoteaddr) - - def handle_accept(self): - pair = self.accept() - if pair is not None: - conn, addr = pair - print >> DEBUGSTREAM, 'Incoming connection from %s' % repr(addr) - channel = SMTPChannel(self, conn, addr) - - # API for "doing something useful with the message" - def process_message(self, peer, mailfrom, rcpttos, data): - """Override this abstract method to handle messages from the client. - - peer is a tuple containing (ipaddr, port) of the client that made the - socket connection to our smtp port. - - mailfrom is the raw address the client claims the message is coming - from. - - rcpttos is a list of raw addresses the client wishes to deliver the - message to. - - data is a string containing the entire full text of the message, - headers (if supplied) and all. It has been `de-transparencied' - according to RFC 821, Section 4.5.2. In other words, a line - containing a `.' followed by other text has had the leading dot - removed. - - This function should return None, for a normal `250 Ok' response; - otherwise it returns the desired response string in RFC 821 format. - - """ - raise NotImplementedError - - -class DebuggingServer(SMTPServer): - # Do something with the gathered message - def process_message(self, peer, mailfrom, rcpttos, data): - inheaders = 1 - lines = data.split('\n') - print '---------- MESSAGE FOLLOWS ----------' - for line in lines: - # headers first - if inheaders and not line: - print 'X-Peer:', peer[0] - inheaders = 0 - print line - print '------------ END MESSAGE ------------' - - -class PureProxy(SMTPServer): - def process_message(self, peer, mailfrom, rcpttos, data): - lines = data.split('\n') - # Look for the last header - i = 0 - for line in lines: - if not line: - break - i += 1 - lines.insert(i, 'X-Peer: %s' % peer[0]) - data = NEWLINE.join(lines) - refused = self._deliver(mailfrom, rcpttos, data) - # TBD: what to do with refused addresses? - print >> DEBUGSTREAM, 'we got some refusals:', refused - - def _deliver(self, mailfrom, rcpttos, data): - import smtplib - refused = {} - try: - s = smtplib.SMTP() - s.connect(self._remoteaddr[0], self._remoteaddr[1]) - try: - refused = s.sendmail(mailfrom, rcpttos, data) - finally: - s.quit() - except smtplib.SMTPRecipientsRefused, e: - print >> DEBUGSTREAM, 'got SMTPRecipientsRefused' - refused = e.recipients - except (socket.error, smtplib.SMTPException), e: - print >> DEBUGSTREAM, 'got', e.__class__ - # All recipients were refused. If the exception had an associated - # error code, use it. Otherwise,fake it with a non-triggering - # exception code. - errcode = getattr(e, 'smtp_code', -1) - errmsg = getattr(e, 'smtp_error', 'ignore') - for r in rcpttos: - refused[r] = (errcode, errmsg) - return refused - - -class MailmanProxy(PureProxy): - def process_message(self, peer, mailfrom, rcpttos, data): - from cStringIO import StringIO - from Mailman import Utils - from Mailman import Message - from Mailman import MailList - # If the message is to a Mailman mailing list, then we'll invoke the - # Mailman script directly, without going through the real smtpd. - # Otherwise we'll forward it to the local proxy for disposition. - listnames = [] - for rcpt in rcpttos: - local = rcpt.lower().split('@')[0] - # We allow the following variations on the theme - # listname - # listname-admin - # listname-owner - # listname-request - # listname-join - # listname-leave - parts = local.split('-') - if len(parts) > 2: - continue - listname = parts[0] - if len(parts) == 2: - command = parts[1] - else: - command = '' - if not Utils.list_exists(listname) or command not in ( - '', 'admin', 'owner', 'request', 'join', 'leave'): - continue - listnames.append((rcpt, listname, command)) - # Remove all list recipients from rcpttos and forward what we're not - # going to take care of ourselves. Linear removal should be fine - # since we don't expect a large number of recipients. - for rcpt, listname, command in listnames: - rcpttos.remove(rcpt) - # If there's any non-list destined recipients left, - print >> DEBUGSTREAM, 'forwarding recips:', ' '.join(rcpttos) - if rcpttos: - refused = self._deliver(mailfrom, rcpttos, data) - # TBD: what to do with refused addresses? - print >> DEBUGSTREAM, 'we got refusals:', refused - # Now deliver directly to the list commands - mlists = {} - s = StringIO(data) - msg = Message.Message(s) - # These headers are required for the proper execution of Mailman. All - # MTAs in existence seem to add these if the original message doesn't - # have them. - if not msg.getheader('from'): - msg['From'] = mailfrom - if not msg.getheader('date'): - msg['Date'] = time.ctime(time.time()) - for rcpt, listname, command in listnames: - print >> DEBUGSTREAM, 'sending message to', rcpt - mlist = mlists.get(listname) - if not mlist: - mlist = MailList.MailList(listname, lock=0) - mlists[listname] = mlist - # dispatch on the type of command - if command == '': - # post - msg.Enqueue(mlist, tolist=1) - elif command == 'admin': - msg.Enqueue(mlist, toadmin=1) - elif command == 'owner': - msg.Enqueue(mlist, toowner=1) - elif command == 'request': - msg.Enqueue(mlist, torequest=1) - elif command in ('join', 'leave'): - # TBD: this is a hack! - if command == 'join': - msg['Subject'] = 'subscribe' - else: - msg['Subject'] = 'unsubscribe' - msg.Enqueue(mlist, torequest=1) - - -class Options: - setuid = 1 - classname = 'PureProxy' - - -def parseargs(): - global DEBUGSTREAM - try: - opts, args = getopt.getopt( - sys.argv[1:], 'nVhc:d', - ['class=', 'nosetuid', 'version', 'help', 'debug']) - except getopt.error, e: - usage(1, e) - - options = Options() - for opt, arg in opts: - if opt in ('-h', '--help'): - usage(0) - elif opt in ('-V', '--version'): - print >> sys.stderr, __version__ - sys.exit(0) - elif opt in ('-n', '--nosetuid'): - options.setuid = 0 - elif opt in ('-c', '--class'): - options.classname = arg - elif opt in ('-d', '--debug'): - DEBUGSTREAM = sys.stderr - - # parse the rest of the arguments - if len(args) < 1: - localspec = 'localhost:8025' - remotespec = 'localhost:25' - elif len(args) < 2: - localspec = args[0] - remotespec = 'localhost:25' - elif len(args) < 3: - localspec = args[0] - remotespec = args[1] - else: - usage(1, 'Invalid arguments: %s' % COMMASPACE.join(args)) - - # split into host/port pairs - i = localspec.find(':') - if i < 0: - usage(1, 'Bad local spec: %s' % localspec) - options.localhost = localspec[:i] - try: - options.localport = int(localspec[i+1:]) - except ValueError: - usage(1, 'Bad local port: %s' % localspec) - i = remotespec.find(':') - if i < 0: - usage(1, 'Bad remote spec: %s' % remotespec) - options.remotehost = remotespec[:i] - try: - options.remoteport = int(remotespec[i+1:]) - except ValueError: - usage(1, 'Bad remote port: %s' % remotespec) - return options - - -if __name__ == '__main__': - options = parseargs() - # Become nobody - classname = options.classname - if "." in classname: - lastdot = classname.rfind(".") - mod = __import__(classname[:lastdot], globals(), locals(), [""]) - classname = classname[lastdot+1:] - else: - import __main__ as mod - class_ = getattr(mod, classname) - proxy = class_((options.localhost, options.localport), - (options.remotehost, options.remoteport)) - if options.setuid: - try: - import pwd - except ImportError: - print >> sys.stderr, \ - 'Cannot import module "pwd"; try running with -n option.' - sys.exit(1) - nobody = pwd.getpwnam('nobody')[2] - try: - os.setuid(nobody) - except OSError, e: - if e.errno != errno.EPERM: raise - print >> sys.stderr, \ - 'Cannot setuid "nobody"; try running with -n option.' - sys.exit(1) - try: - asyncore.loop() - except KeyboardInterrupt: - pass diff --git a/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/_sysconfigdata.py b/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/_sysconfigdata.py index c2676faafe68..211730784004 100644 --- a/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/_sysconfigdata.py +++ b/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/_sysconfigdata.py @@ -9,23 +9,23 @@ build_time_vars = {'AC_APPLE_UNIVERSAL_BUILD': 0, 'BEOS_THREADS': 0, 'BINDIR': '/Users/nshin/.pyenv/versions/2.7.14/bin', 'BINLIBDEST': '/Users/nshin/.pyenv/versions/2.7.14/lib/python2.7', - 'BLDLIBRARY': 'libpython2.7.a', - 'BLDSHARED': 'clang -bundle -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib', + 'BLDLIBRARY': '-L. -lpython2.7', + 'BLDSHARED': 'clang -bundle -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib', 'BUILDEXE': '.exe', 'BUILDPYTHON': 'python.exe', 'CC': 'clang', 'CCSHARED': '', - 'CFLAGS': '-fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes', + 'CFLAGS': '-fno-strict-aliasing -I/usr/local/opt/openssl/include -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes', 'CFLAGSFORSHARED': '', 'CONFIGFILES': 'configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in', - 'CONFIG_ARGS': "'--prefix=/Users/nshin/.pyenv/versions/2.7.14' '--libdir=/Users/nshin/.pyenv/versions/2.7.14/lib' 'CC=clang' 'LDFLAGS=-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib ' 'CPPFLAGS=-I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include ' 'PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig/:'", + 'CONFIG_ARGS': "'--prefix=/Users/nshin/.pyenv/versions/2.7.14' '--enable-shared' '--libdir=/Users/nshin/.pyenv/versions/2.7.14/lib' 'CC=clang' 'CFLAGS=-I/usr/local/opt/openssl/include ' 'LDFLAGS=-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib' 'CPPFLAGS=-I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -I/usr/local/opt/openssl/include' 'PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig/:/usr/local/opt/openssl/lib/pkgconfig'", 'CONFINCLUDEDIR': '/Users/nshin/.pyenv/versions/2.7.14/include', 'CONFINCLUDEPY': '/Users/nshin/.pyenv/versions/2.7.14/include/python2.7', 'COREPYTHONPATH': ':plat-darwin:plat-mac:plat-mac/lib-scriptpackages:lib-tk:lib-old', - 'COVERAGE_INFO': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14/coverage.info', - 'COVERAGE_REPORT': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14/lcov-report', + 'COVERAGE_INFO': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14/coverage.info', + 'COVERAGE_REPORT': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14/lcov-report', 'COVERAGE_REPORT_OPTIONS': '--no-branch-coverage --title "CPython lcov report"', - 'CPPFLAGS': '-I. -IInclude -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include', + 'CPPFLAGS': '-I. -IInclude -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -I/usr/local/opt/openssl/include', 'CXX': 'c++', 'C_THREADS': 0, 'DESTDIRS': '/Users/nshin/.pyenv/versions/2.7.14 /Users/nshin/.pyenv/versions/2.7.14/lib /Users/nshin/.pyenv/versions/2.7.14/lib/python2.7 /Users/nshin/.pyenv/versions/2.7.14/lib/python2.7/lib-dynload', @@ -357,13 +357,13 @@ build_time_vars = {'AC_APPLE_UNIVERSAL_BUILD': 0, 'INSTALL_PROGRAM': '/usr/bin/install -c', 'INSTALL_SCRIPT': '/usr/bin/install -c', 'INSTALL_SHARED': '/usr/bin/install -c -m 555', - 'INSTSONAME': 'libpython2.7.a', + 'INSTSONAME': 'libpython2.7.dylib', 'LDCXXSHARED': 'c++ -bundle -undefined dynamic_lookup', - 'LDFLAGS': '-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib', + 'LDFLAGS': '-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib', 'LDLAST': '', - 'LDLIBRARY': 'libpython2.7.a', + 'LDLIBRARY': 'libpython2.7.dylib', 'LDLIBRARYDIR': '', - 'LDSHARED': 'clang -bundle -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib', + 'LDSHARED': 'clang -bundle -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib', 'LIBC': '', 'LIBDEST': '/Users/nshin/.pyenv/versions/2.7.14/lib/python2.7', 'LIBDIR': '/Users/nshin/.pyenv/versions/2.7.14/lib', @@ -443,19 +443,19 @@ build_time_vars = {'AC_APPLE_UNIVERSAL_BUILD': 0, 'PYTHON_FOR_REGEN': 'python2.7', 'PYTHON_HEADERS': '\\', 'PYTHON_OBJS': '\\', - 'PY_CFLAGS': '-fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -DPy_BUILD_CORE', + 'PY_CFLAGS': '-fno-strict-aliasing -I/usr/local/opt/openssl/include -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -I/usr/local/opt/openssl/include -DPy_BUILD_CORE', 'PY_FORMAT_LONG_LONG': '"ll"', 'PY_FORMAT_SIZE_T': '"z"', 'PY_UNICODE_TYPE': 'unsigned short', 'Py_DEBUG': 0, - 'Py_ENABLE_SHARED': 0, + 'Py_ENABLE_SHARED': 1, 'Py_UNICODE_SIZE': 2, 'Py_USING_UNICODE': 1, 'QUICKTESTOPTS': '-l -x test_subprocess test_io test_lib2to3 \\', 'RANLIB': 'ranlib', 'RESSRCDIR': 'Mac/Resources/framework', 'RETSIGTYPE': 'void', - 'RUNSHARED': '', + 'RUNSHARED': 'DYLD_LIBRARY_PATH=/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14', 'SCRIPTDIR': '/Users/nshin/.pyenv/versions/2.7.14/lib', 'SETPGRP_HAVE_ARG': 0, 'SGI_ABI': '', @@ -498,7 +498,7 @@ build_time_vars = {'AC_APPLE_UNIVERSAL_BUILD': 0, 'TESTOPTS': '-l', 'TESTPATH': '', 'TESTPROG': './Lib/test/regrtest.py', - 'TESTPYTHON': './python.exe -Wd -3 -E -tt', + 'TESTPYTHON': 'DYLD_LIBRARY_PATH=/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14 ./python.exe -Wd -3 -E -tt', 'TESTPYTHONOPTS': '', 'THREADOBJ': 'Python/thread.o', 'TIME_WITH_SYS_TIME': 1, @@ -523,8 +523,8 @@ build_time_vars = {'AC_APPLE_UNIVERSAL_BUILD': 0, 'WITH_VALGRIND': 0, 'X87_DOUBLE_ROUNDING': 0, 'XMLLIBSUBDIRS': 'xml xml/dom xml/etree xml/parsers xml/sax', - 'abs_builddir': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14', - 'abs_srcdir': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14', + 'abs_builddir': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14', + 'abs_srcdir': '/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14', 'build': 'x86_64-apple-darwin17.7.0', 'datarootdir': '/Users/nshin/.pyenv/versions/2.7.14/share', 'exec_prefix': '/Users/nshin/.pyenv/versions/2.7.14', diff --git a/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/config/Makefile b/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/config/Makefile index 57f51215b3f2..761acd762d79 100755 --- a/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/config/Makefile +++ b/Engine/Binaries/ThirdParty/Python/Mac/lib/python2.7/config/Makefile @@ -28,8 +28,8 @@ MODLIBS= $(LOCALMODLIBS) $(BASEMODLIBS) VERSION= 2.7 srcdir= . -abs_srcdir= /var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14 -abs_builddir= /var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190530142129.23034/Python-2.7.14 +abs_srcdir= /var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14 +abs_builddir= /var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14 build= x86_64-apple-darwin17.7.0 host= x86_64-apple-darwin17.7.0 @@ -73,19 +73,19 @@ MAKESETUP= $(srcdir)/Modules/makesetup # Compiler options OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes BASECFLAGS= -fno-strict-aliasing -CFLAGS= $(BASECFLAGS) -g -O2 $(OPT) $(EXTRA_CFLAGS) +CFLAGS= $(BASECFLAGS) -I/usr/local/opt/openssl/include $(OPT) $(EXTRA_CFLAGS) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables -CPPFLAGS= -I. -IInclude -I$(srcdir)/Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -LDFLAGS= -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib +CPPFLAGS= -I. -IInclude -I$(srcdir)/Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -I/usr/local/opt/openssl/include +LDFLAGS= -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib LDLAST= SGI_ABI= CCSHARED= LINKFORSHARED= -u _PyMac_Error ARFLAGS= rc # Extra C flags added for building the interpreter object files. -CFLAGSFORSHARED= +CFLAGSFORSHARED=$(CCSHARED) # C flags used for building the interpreter object files PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE @@ -147,7 +147,7 @@ export MACOSX_DEPLOYMENT_TARGET OTHER_LIBTOOL_OPT= # Environment to run shared python without installed libraries -RUNSHARED= +RUNSHARED= DYLD_LIBRARY_PATH=/var/folders/fg/yssrsyhn27vb9nlw0fvscwpm0000gn/T/python-build.20190605175505.11658/Python-2.7.14 # ensurepip options ENSUREPIP= no @@ -159,7 +159,7 @@ EXEMODE= 755 FILEMODE= 644 # configure script arguments -CONFIG_ARGS= '--prefix=/Users/nshin/.pyenv/versions/2.7.14' '--libdir=/Users/nshin/.pyenv/versions/2.7.14/lib' 'CC=clang' 'LDFLAGS=-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib ' 'CPPFLAGS=-I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include ' 'PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig/:' +CONFIG_ARGS= '--prefix=/Users/nshin/.pyenv/versions/2.7.14' '--enable-shared' '--libdir=/Users/nshin/.pyenv/versions/2.7.14/lib' 'CC=clang' 'CFLAGS=-I/usr/local/opt/openssl/include ' 'LDFLAGS=-L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/nshin/.pyenv/versions/2.7.14/lib -L/usr/local/opt/openssl/lib' 'CPPFLAGS=-I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/opt/openssl/include -I/Users/nshin/.pyenv/versions/2.7.14/include -I/usr/local/opt/openssl/include' 'PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig/:/usr/local/opt/openssl/lib/pkgconfig' # Subdirectories with code @@ -176,8 +176,8 @@ DIST= $(DISTFILES) $(DISTDIRS) LIBRARY= libpython$(VERSION).a -LDLIBRARY= libpython$(VERSION).a -BLDLIBRARY= $(LDLIBRARY) +LDLIBRARY= libpython$(VERSION).dylib +BLDLIBRARY= -L. -lpython$(VERSION) DLLLIBRARY= LDLIBRARYDIR= INSTSONAME= $(LDLIBRARY) diff --git a/Engine/Build/BatchFiles/Linux/BuildThirdParty.sh b/Engine/Build/BatchFiles/Linux/BuildThirdParty.sh index 5bbeefb5fc1e..0c2002c91e5a 100755 --- a/Engine/Build/BatchFiles/Linux/BuildThirdParty.sh +++ b/Engine/Build/BatchFiles/Linux/BuildThirdParty.sh @@ -11,7 +11,7 @@ set -e MAKE_ARGS=-j4 -ARCHES=("amd64 x86_64-unknown-linux-gnu" "i386 i686-unknown-linux-gnu" "armhf arm-unknown-linux-gnueabihf" "arm64 aarch64-unknown-linux-gnueabi") +ARCHES=("amd64 x86_64-unknown-linux-gnu" "arm64 aarch64-unknown-linux-gnueabi") ConvertArchFormat() { diff --git a/Engine/Build/Commit.gitdeps.xml b/Engine/Build/Commit.gitdeps.xml index 6309956ecf55..cb82407144e5 100644 --- a/Engine/Build/Commit.gitdeps.xml +++ b/Engine/Build/Commit.gitdeps.xml @@ -41,16 +41,16 @@ - + - - + + - + - + - + @@ -2435,7 +2435,6 @@ - @@ -3290,45 +3289,29 @@ - - - - - - - - - - + + + - - - - - - - - - - - - + + + - + - + @@ -3361,112 +3344,111 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - @@ -3702,7 +3684,7 @@ - + @@ -5255,7 +5237,6 @@ - @@ -6087,7 +6068,7 @@ - + @@ -6096,7 +6077,7 @@ - + @@ -6173,6 +6154,15 @@ + + + + + + + + + @@ -7384,6 +7374,8 @@ + + @@ -9976,6 +9968,7 @@ + @@ -10293,6 +10286,7 @@ + @@ -28746,7 +28740,10 @@ + + + @@ -46597,7 +46594,6 @@ - @@ -46606,7 +46602,7 @@ - + @@ -47127,8 +47123,6 @@ - - @@ -47298,8 +47292,6 @@ - - @@ -47844,11 +47836,11 @@ - - - - - + + + + + @@ -48049,26 +48041,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -49101,16 +49073,10 @@ - - - - - - @@ -49129,10 +49095,6 @@ - - - - @@ -49271,9 +49233,6 @@ - - - @@ -49448,7 +49407,6 @@ - @@ -49555,7 +49513,6 @@ - @@ -50076,7 +50033,6 @@ - @@ -50097,8 +50053,13 @@ - - + + + + + + + @@ -50147,11 +50108,6 @@ - - - - - @@ -50205,8 +50161,6 @@ - - @@ -50268,9 +50222,6 @@ - - - @@ -50296,7 +50247,6 @@ - @@ -50678,10 +50628,6 @@ - - - - @@ -51453,60 +51399,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -52411,7 +52303,7 @@ - + @@ -57649,250 +57541,270 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -58304,274 +58216,296 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59045,6 +58979,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -59392,8 +59348,6 @@ - - @@ -59585,12 +59539,6 @@ - - - - - - @@ -60014,10 +59962,6 @@ - - - - @@ -60045,8 +59989,6 @@ - - @@ -61223,7 +61165,6 @@ - @@ -61237,7 +61178,6 @@ - @@ -61254,7 +61194,6 @@ - @@ -61264,7 +61203,6 @@ - @@ -61294,10 +61232,11 @@ - + + @@ -61330,7 +61269,7 @@ - + @@ -61350,9 +61289,8 @@ - - + @@ -61369,17 +61307,15 @@ - - + - @@ -61392,6 +61328,7 @@ + @@ -61416,7 +61353,7 @@ - + @@ -61438,7 +61375,7 @@ - + @@ -61451,9 +61388,8 @@ - + - @@ -61518,7 +61454,7 @@ - + @@ -61526,7 +61462,6 @@ - @@ -61552,7 +61487,6 @@ - @@ -61584,7 +61518,6 @@ - @@ -61594,6 +61527,8 @@ + + @@ -61630,7 +61565,6 @@ - @@ -61641,7 +61575,6 @@ - @@ -61682,6 +61615,7 @@ + @@ -61691,6 +61625,7 @@ + @@ -61702,7 +61637,7 @@ - + @@ -61723,7 +61658,7 @@ - + @@ -61746,7 +61681,7 @@ - + @@ -61772,7 +61707,7 @@ - + @@ -61809,7 +61744,6 @@ - @@ -61829,7 +61763,7 @@ - + @@ -61848,7 +61782,7 @@ - + @@ -61866,7 +61800,6 @@ - @@ -61877,7 +61810,6 @@ - @@ -61909,7 +61841,7 @@ - + @@ -61923,14 +61855,15 @@ - + + @@ -61991,23 +61924,24 @@ - + - + + @@ -62038,14 +61972,15 @@ + - - + + @@ -62058,6 +61993,7 @@ + @@ -62072,7 +62008,7 @@ - + @@ -62081,7 +62017,7 @@ - + @@ -62116,7 +62052,6 @@ - @@ -62153,7 +62088,7 @@ - + @@ -62185,11 +62120,9 @@ - - @@ -62212,7 +62145,6 @@ - @@ -62236,7 +62168,6 @@ - @@ -62272,14 +62203,12 @@ - + - - @@ -62290,12 +62219,12 @@ + - @@ -62305,6 +62234,7 @@ + @@ -62324,11 +62254,10 @@ - + - @@ -62356,7 +62285,7 @@ - + @@ -62375,7 +62304,6 @@ - @@ -62410,6 +62338,7 @@ + @@ -62434,6 +62363,7 @@ + @@ -62450,7 +62380,7 @@ - + @@ -62494,7 +62424,7 @@ - + @@ -62505,7 +62435,7 @@ - + @@ -62524,8 +62454,9 @@ + - + @@ -62592,7 +62523,7 @@ - + @@ -62601,7 +62532,7 @@ - + @@ -62615,7 +62546,6 @@ - @@ -62645,10 +62575,10 @@ - + - + @@ -62669,17 +62599,16 @@ - - + - + @@ -62778,7 +62707,6 @@ - @@ -62797,8 +62725,9 @@ - + + @@ -62827,6 +62756,7 @@ + @@ -62846,7 +62776,7 @@ - + @@ -62867,7 +62797,7 @@ - + @@ -62888,7 +62818,7 @@ - + @@ -62908,6 +62838,7 @@ + @@ -62919,7 +62850,7 @@ - + @@ -62927,6 +62858,7 @@ + @@ -62956,7 +62888,7 @@ - + @@ -62972,7 +62904,6 @@ - @@ -62991,9 +62922,9 @@ + - @@ -63010,11 +62941,12 @@ - + + @@ -63044,7 +62976,6 @@ - @@ -63072,7 +63003,6 @@ - @@ -63083,7 +63013,6 @@ - @@ -63094,7 +63023,7 @@ - + @@ -63160,7 +63089,7 @@ - + @@ -63170,6 +63099,7 @@ + @@ -63196,7 +63126,6 @@ - @@ -63212,7 +63141,7 @@ - + @@ -63221,7 +63150,6 @@ - @@ -63245,10 +63173,10 @@ - + - + @@ -63264,7 +63192,7 @@ - + @@ -63276,11 +63204,10 @@ - - + @@ -63288,8 +63215,9 @@ - + + @@ -63310,6 +63238,7 @@ + @@ -63327,7 +63256,6 @@ - @@ -63338,7 +63266,6 @@ - @@ -63366,7 +63293,6 @@ - @@ -63410,7 +63336,6 @@ - @@ -63428,7 +63353,6 @@ - @@ -63444,6 +63368,7 @@ + @@ -63463,7 +63388,7 @@ - + @@ -63489,7 +63414,7 @@ - + @@ -63500,9 +63425,10 @@ + - + @@ -63512,7 +63438,7 @@ - + @@ -63520,9 +63446,9 @@ - + - + @@ -63551,9 +63477,9 @@ - + - + @@ -63576,7 +63502,7 @@ - + @@ -63603,7 +63529,7 @@ - + @@ -63626,10 +63552,10 @@ - + - + @@ -63662,7 +63588,7 @@ - + @@ -63673,18 +63599,18 @@ - + - + - + @@ -63729,9 +63655,11 @@ + + @@ -63745,13 +63673,12 @@ - - + @@ -63761,16 +63688,17 @@ + - + - + @@ -63809,7 +63737,6 @@ - @@ -63827,14 +63754,13 @@ - - + @@ -63870,6 +63796,7 @@ + @@ -63888,7 +63815,7 @@ - + @@ -63907,11 +63834,11 @@ - + - + @@ -63931,6 +63858,7 @@ + @@ -63943,6 +63871,7 @@ + @@ -63953,6 +63882,7 @@ + @@ -63962,7 +63892,7 @@ - + @@ -63984,12 +63914,11 @@ - - + @@ -64022,13 +63951,13 @@ + - @@ -64038,6 +63967,7 @@ + @@ -64047,7 +63977,6 @@ - @@ -64077,7 +64006,7 @@ - + @@ -64125,7 +64054,6 @@ - @@ -64137,7 +64065,6 @@ - @@ -64147,12 +64074,12 @@ - + @@ -64197,21 +64124,23 @@ - - + + + - + + @@ -64305,8 +64234,8 @@ + - @@ -64321,11 +64250,9 @@ - - @@ -64341,7 +64268,7 @@ - + @@ -64353,7 +64280,7 @@ - + @@ -64365,10 +64292,10 @@ - + - + @@ -64376,7 +64303,7 @@ - + @@ -64413,7 +64340,6 @@ - @@ -64443,7 +64369,7 @@ - + @@ -64456,19 +64382,18 @@ - + - - + @@ -64479,7 +64404,7 @@ - + @@ -64498,7 +64423,7 @@ - + @@ -64513,7 +64438,7 @@ - + @@ -64529,7 +64454,7 @@ - + @@ -64551,7 +64476,6 @@ - @@ -64573,7 +64497,6 @@ - @@ -64584,7 +64507,7 @@ - + @@ -64592,7 +64515,6 @@ - @@ -64604,7 +64526,6 @@ - @@ -64614,6 +64535,7 @@ + @@ -64653,13 +64575,12 @@ - + - @@ -64694,13 +64615,14 @@ + - + @@ -64724,7 +64646,6 @@ - @@ -64736,19 +64657,19 @@ - + - + - + @@ -64757,9 +64678,10 @@ + - + @@ -64818,7 +64740,7 @@ - + @@ -64870,8 +64792,9 @@ - + + @@ -64883,13 +64806,14 @@ - + + @@ -64906,13 +64830,12 @@ - + - @@ -64925,7 +64848,6 @@ - @@ -64933,7 +64855,7 @@ - + @@ -64988,6 +64910,7 @@ + @@ -65022,8 +64945,8 @@ + - @@ -65039,7 +64962,6 @@ - @@ -65049,7 +64971,6 @@ - @@ -65116,7 +65037,7 @@ - + @@ -65129,6 +65050,7 @@ + @@ -65137,11 +65059,11 @@ - + @@ -65195,6 +65117,7 @@ + @@ -65209,7 +65132,6 @@ - @@ -65229,7 +65151,6 @@ - @@ -65245,17 +65166,19 @@ + - + - + - - + + + @@ -65285,6 +65208,7 @@ + @@ -65292,8 +65216,9 @@ - + + @@ -65306,11 +65231,9 @@ - - @@ -65361,7 +65284,6 @@ - @@ -65430,7 +65352,7 @@ - + @@ -65452,7 +65374,7 @@ - + @@ -65464,12 +65386,12 @@ + - @@ -65494,7 +65416,7 @@ - + @@ -65513,7 +65435,6 @@ - @@ -65522,7 +65443,6 @@ - @@ -65563,7 +65483,7 @@ - + @@ -65571,13 +65491,13 @@ - + - + @@ -65599,9 +65519,8 @@ - + - @@ -65648,6 +65567,7 @@ + @@ -65662,11 +65582,10 @@ - + - - + @@ -65732,10 +65651,10 @@ + - @@ -65752,6 +65671,7 @@ + @@ -65766,7 +65686,7 @@ - + @@ -65810,6 +65730,7 @@ + @@ -65826,12 +65747,12 @@ + - @@ -65869,6 +65790,7 @@ + @@ -65947,9 +65869,9 @@ - - + + @@ -65961,7 +65883,7 @@ - + @@ -65972,7 +65894,7 @@ - + @@ -65982,7 +65904,7 @@ - + @@ -65997,7 +65919,7 @@ - + @@ -66011,6 +65933,7 @@ + @@ -66024,6 +65947,7 @@ + @@ -66044,7 +65968,9 @@ + + @@ -66076,7 +66002,6 @@ - @@ -66091,10 +66016,10 @@ - + @@ -66115,7 +66040,7 @@ - + @@ -66133,7 +66058,6 @@ - @@ -66197,12 +66121,13 @@ + - + - + @@ -66231,7 +66156,7 @@ - + @@ -66255,7 +66180,7 @@ - + @@ -66304,7 +66229,7 @@ - + @@ -66336,12 +66261,14 @@ + + @@ -66357,7 +66284,7 @@ - + @@ -66369,7 +66296,7 @@ - + @@ -66378,15 +66305,18 @@ + + + @@ -66418,7 +66348,7 @@ - + @@ -66440,7 +66370,7 @@ - + @@ -66453,7 +66383,7 @@ - + @@ -66473,13 +66403,14 @@ - + + @@ -66506,7 +66437,7 @@ - + @@ -66546,13 +66477,11 @@ - - @@ -66577,7 +66506,7 @@ - + @@ -66589,6 +66518,7 @@ + @@ -66602,7 +66532,7 @@ - + @@ -66617,7 +66547,6 @@ - @@ -66690,12 +66619,14 @@ + + @@ -66712,15 +66643,14 @@ - + - + - @@ -66736,14 +66666,13 @@ - + - + - - + @@ -66760,6 +66689,7 @@ + @@ -66769,7 +66699,7 @@ - + @@ -66779,21 +66709,19 @@ - - + - + - @@ -66801,13 +66729,11 @@ - - @@ -66819,6 +66745,7 @@ + @@ -66835,7 +66762,6 @@ - @@ -66898,6 +66824,7 @@ + @@ -66905,7 +66832,7 @@ - + @@ -66918,7 +66845,7 @@ - + @@ -66932,11 +66859,11 @@ + - - + @@ -66952,7 +66879,7 @@ - + @@ -66978,13 +66905,13 @@ + - @@ -67024,14 +66951,14 @@ - + - + @@ -67042,7 +66969,7 @@ - + @@ -67054,8 +66981,8 @@ - - + + @@ -67066,6 +66993,7 @@ + @@ -67073,7 +67001,7 @@ - + @@ -67088,7 +67016,6 @@ - @@ -67099,7 +67026,7 @@ - + @@ -67110,13 +67037,13 @@ - + - + @@ -67127,7 +67054,8 @@ - + + @@ -67135,14 +67063,13 @@ - - + @@ -67155,7 +67082,7 @@ - + @@ -67189,11 +67116,14 @@ + + + @@ -67212,7 +67142,8 @@ - + + @@ -67224,9 +67155,10 @@ - + + @@ -67242,14 +67174,15 @@ + - + - + @@ -67262,18 +67195,15 @@ - - - @@ -67283,7 +67213,7 @@ - + @@ -67294,9 +67224,9 @@ - + - + @@ -67315,10 +67245,11 @@ - + + @@ -67344,7 +67275,6 @@ - @@ -67374,6 +67304,7 @@ + @@ -67392,7 +67323,6 @@ - @@ -67410,7 +67340,6 @@ - @@ -67424,6 +67353,7 @@ + @@ -67439,12 +67369,13 @@ + - + @@ -67457,7 +67388,7 @@ - + @@ -67471,10 +67402,10 @@ + - - + @@ -67547,14 +67478,14 @@ - + - + @@ -67570,7 +67501,7 @@ - + @@ -67617,7 +67548,6 @@ - @@ -67659,12 +67589,11 @@ - - - + + + - @@ -67709,7 +67638,7 @@ - + @@ -67726,6 +67655,7 @@ + @@ -67734,11 +67664,9 @@ - - @@ -67784,6 +67712,7 @@ + @@ -67809,7 +67738,7 @@ - + @@ -67819,7 +67748,7 @@ - + @@ -67844,11 +67773,9 @@ - - @@ -67859,7 +67786,6 @@ - @@ -67867,8 +67793,7 @@ - - + @@ -67896,7 +67821,7 @@ - + @@ -67905,6 +67830,7 @@ + @@ -67931,7 +67857,6 @@ - @@ -67963,7 +67888,7 @@ - + @@ -67973,13 +67898,14 @@ - + + @@ -68003,7 +67929,6 @@ - @@ -68055,26 +67980,25 @@ - + - + - - + - + @@ -68085,14 +68009,13 @@ - - + + - @@ -68130,10 +68053,10 @@ - + - + @@ -68204,7 +68127,7 @@ - + @@ -68226,15 +68149,14 @@ + - - @@ -68298,7 +68220,7 @@ - + @@ -68390,7 +68312,7 @@ - + @@ -68402,7 +68324,6 @@ - @@ -68418,7 +68339,7 @@ - + @@ -68429,7 +68350,6 @@ - @@ -68456,7 +68376,7 @@ - + @@ -68509,8 +68429,9 @@ + - + @@ -68532,7 +68453,7 @@ - + @@ -68540,7 +68461,8 @@ - + + @@ -68552,7 +68474,8 @@ - + + @@ -68566,10 +68489,11 @@ - + + @@ -68604,7 +68528,7 @@ - + @@ -68623,7 +68547,7 @@ - + @@ -68684,11 +68608,12 @@ - + - + + @@ -68708,7 +68633,7 @@ - + @@ -68724,7 +68649,6 @@ - @@ -68737,7 +68661,7 @@ - + @@ -68750,7 +68674,7 @@ - + @@ -68777,10 +68701,9 @@ - + - @@ -68789,11 +68712,12 @@ - + + @@ -68807,7 +68731,7 @@ - + @@ -68840,7 +68764,7 @@ - + @@ -68848,7 +68772,7 @@ - + @@ -68857,7 +68781,6 @@ - @@ -68867,7 +68790,6 @@ - @@ -68877,12 +68799,12 @@ - + - + @@ -68901,6 +68823,7 @@ + @@ -68909,7 +68832,6 @@ - @@ -68976,12 +68898,10 @@ - - @@ -69038,7 +68958,6 @@ - @@ -69046,7 +68965,7 @@ - + @@ -69061,6 +68980,7 @@ + @@ -69074,6 +68994,7 @@ + @@ -69081,7 +69002,6 @@ - @@ -69090,7 +69010,6 @@ - @@ -69126,7 +69045,7 @@ - + @@ -69143,7 +69062,7 @@ - + @@ -69172,7 +69091,7 @@ - + @@ -69182,6 +69101,7 @@ + @@ -69193,7 +69113,7 @@ - + @@ -69202,8 +69122,9 @@ - + + @@ -69221,7 +69142,6 @@ - @@ -69265,7 +69185,7 @@ - + @@ -69309,7 +69229,7 @@ - + @@ -69321,12 +69241,12 @@ - + - + @@ -69354,6 +69274,7 @@ + @@ -69383,13 +69304,13 @@ + - - + @@ -69401,14 +69322,14 @@ - + - + - + @@ -69462,8 +69383,7 @@ - - + @@ -69473,7 +69393,7 @@ - + @@ -69484,6 +69404,7 @@ + @@ -69499,7 +69420,6 @@ - @@ -69509,6 +69429,7 @@ + @@ -69520,7 +69441,7 @@ - + @@ -69556,14 +69477,14 @@ - + - + @@ -69573,7 +69494,7 @@ - + @@ -69652,10 +69573,8 @@ - - @@ -69671,11 +69590,12 @@ - + + @@ -69703,7 +69623,6 @@ - @@ -69765,9 +69684,8 @@ - + - @@ -69776,9 +69694,9 @@ - + @@ -69811,7 +69729,7 @@ - + @@ -69875,7 +69793,7 @@ - + @@ -69886,7 +69804,7 @@ - + @@ -69911,15 +69829,17 @@ + + + - @@ -69944,7 +69864,7 @@ - + @@ -69954,7 +69874,6 @@ - @@ -69980,7 +69899,7 @@ - + @@ -70002,7 +69921,7 @@ - + @@ -70014,7 +69933,7 @@ - + @@ -70027,7 +69946,6 @@ - @@ -70037,13 +69955,14 @@ - + - + + @@ -70088,7 +70007,7 @@ - + @@ -70106,6 +70025,7 @@ + @@ -70122,7 +70042,6 @@ - @@ -70173,7 +70092,6 @@ - @@ -70187,7 +70105,7 @@ - + @@ -70260,7 +70178,7 @@ - + @@ -70281,7 +70199,7 @@ - + @@ -70305,7 +70223,6 @@ - @@ -70340,10 +70257,10 @@ - + @@ -70356,7 +70273,7 @@ - + @@ -70413,7 +70330,7 @@ - + @@ -70426,7 +70343,7 @@ - + @@ -70441,7 +70358,6 @@ - @@ -70459,10 +70375,12 @@ - + + + @@ -70480,7 +70398,6 @@ - @@ -70516,6 +70433,7 @@ + @@ -70529,6 +70447,7 @@ + @@ -70550,6 +70469,7 @@ + @@ -70557,7 +70477,7 @@ - + @@ -70573,7 +70493,7 @@ - + @@ -70601,7 +70521,7 @@ - + @@ -70675,7 +70595,7 @@ - + @@ -70697,7 +70617,7 @@ - + @@ -70776,6 +70696,7 @@ + @@ -70790,15 +70711,16 @@ + - + - + @@ -70815,7 +70737,7 @@ - + @@ -70857,14 +70779,16 @@ - + + + @@ -70892,23 +70816,22 @@ - + - - + + - + - + - @@ -70935,6 +70858,7 @@ + @@ -70948,7 +70872,7 @@ - + @@ -70957,6 +70881,7 @@ + @@ -70989,10 +70914,11 @@ - + + - + @@ -71035,7 +70961,7 @@ - + @@ -71059,7 +70985,7 @@ - + @@ -71079,7 +71005,7 @@ - + @@ -71132,7 +71058,6 @@ - @@ -71144,6 +71069,7 @@ + @@ -71153,7 +71079,7 @@ - + @@ -71162,12 +71088,11 @@ - + - @@ -71177,7 +71102,7 @@ - + @@ -71198,6 +71123,7 @@ + @@ -71212,16 +71138,15 @@ - + - + - @@ -71234,7 +71159,7 @@ - + @@ -71283,7 +71208,7 @@ - + @@ -71292,7 +71217,7 @@ - + @@ -71310,7 +71235,7 @@ - + @@ -71320,7 +71245,7 @@ - + @@ -71368,7 +71293,7 @@ - + @@ -71377,7 +71302,6 @@ - @@ -71391,8 +71315,7 @@ - - + @@ -71427,13 +71350,13 @@ - - + + @@ -71453,6 +71376,7 @@ + @@ -71470,13 +71394,14 @@ + - + @@ -71519,19 +71444,20 @@ + - + - + - + @@ -71585,7 +71511,7 @@ - + @@ -71602,6 +71528,7 @@ + @@ -71687,7 +71614,6 @@ - @@ -71776,8 +71702,7 @@ - - + @@ -71808,18 +71733,17 @@ - + - + - @@ -71841,13 +71765,12 @@ - - + - + @@ -71855,6 +71778,7 @@ + @@ -71901,7 +71825,7 @@ - + @@ -71929,9 +71853,9 @@ - + - + @@ -71947,7 +71871,7 @@ - + @@ -71958,6 +71882,7 @@ + @@ -71980,7 +71905,7 @@ - + @@ -71994,7 +71919,6 @@ - @@ -72007,13 +71931,14 @@ - + + @@ -72060,9 +71985,9 @@ - + @@ -72151,14 +72076,16 @@ + + - + @@ -72188,7 +72115,6 @@ - @@ -72258,7 +72184,6 @@ - @@ -72273,9 +72198,11 @@ + + @@ -72292,7 +72219,7 @@ - + @@ -72322,6 +72249,7 @@ + @@ -72340,7 +72268,6 @@ - @@ -72354,7 +72281,6 @@ - @@ -72371,6 +72297,7 @@ + @@ -72379,7 +72306,7 @@ - + @@ -72392,7 +72319,7 @@ - + @@ -72418,6 +72345,7 @@ + @@ -72488,7 +72416,7 @@ - + @@ -72534,7 +72462,7 @@ - + @@ -72572,12 +72500,12 @@ - + - + @@ -72587,7 +72515,7 @@ - + @@ -72621,7 +72549,6 @@ - @@ -72641,7 +72568,7 @@ - + @@ -72663,7 +72590,7 @@ - + @@ -72681,7 +72608,7 @@ - + @@ -72749,7 +72676,7 @@ - + @@ -72770,7 +72697,7 @@ - + @@ -72783,7 +72710,6 @@ - @@ -72824,7 +72750,6 @@ - @@ -72834,7 +72759,7 @@ - + @@ -72857,6 +72782,7 @@ + @@ -72908,6 +72834,7 @@ + @@ -72917,7 +72844,7 @@ - + @@ -72932,9 +72859,10 @@ + - + @@ -72970,16 +72898,17 @@ + + - - + @@ -72991,7 +72920,7 @@ - + @@ -73007,16 +72936,17 @@ - + + - + @@ -73059,7 +72989,7 @@ - + @@ -73089,6 +73019,7 @@ + @@ -73113,9 +73044,9 @@ - + - + @@ -73140,7 +73071,7 @@ - + @@ -73162,10 +73093,11 @@ + - + @@ -73207,12 +73139,11 @@ - + - @@ -73233,7 +73164,7 @@ - + @@ -73285,14 +73216,14 @@ - + - + @@ -73303,7 +73234,6 @@ - @@ -73350,7 +73280,8 @@ - + + @@ -73367,10 +73298,11 @@ - + + @@ -73405,6 +73337,7 @@ + @@ -73471,8 +73404,9 @@ - + + @@ -73488,10 +73422,9 @@ - + - @@ -73511,13 +73444,12 @@ - + - - + @@ -73555,11 +73487,12 @@ + - + @@ -73572,7 +73505,6 @@ - @@ -73584,13 +73516,14 @@ + - + @@ -73604,7 +73537,6 @@ - @@ -73612,7 +73544,7 @@ - + @@ -73640,11 +73572,12 @@ - + + @@ -73655,7 +73588,7 @@ - + @@ -73683,7 +73616,6 @@ - @@ -73734,9 +73666,8 @@ - - + @@ -73812,7 +73743,6 @@ - @@ -73836,14 +73766,15 @@ + - - + + @@ -73862,6 +73793,7 @@ + @@ -73870,17 +73802,16 @@ + - - - + @@ -73888,7 +73819,6 @@ - @@ -73922,7 +73852,6 @@ - @@ -73935,7 +73864,6 @@ - @@ -73954,12 +73882,13 @@ + - + @@ -73968,7 +73897,6 @@ - @@ -73979,7 +73907,7 @@ - + @@ -73992,10 +73920,9 @@ - - + @@ -74013,7 +73940,7 @@ - + @@ -74029,7 +73956,7 @@ - + @@ -74057,7 +73984,6 @@ - @@ -74086,7 +74012,6 @@ - @@ -74105,7 +74030,6 @@ - @@ -74132,7 +74056,7 @@ - + @@ -74205,7 +74129,7 @@ - + @@ -74231,7 +74155,6 @@ - @@ -74251,16 +74174,15 @@ - - + - + @@ -74315,8 +74237,9 @@ + - + @@ -74325,7 +74248,7 @@ - + @@ -74333,9 +74256,8 @@ - + - @@ -74350,12 +74272,13 @@ + - + @@ -74367,7 +74290,6 @@ - @@ -74379,7 +74301,7 @@ - + @@ -74415,6 +74337,7 @@ + @@ -74456,7 +74379,6 @@ - @@ -74488,7 +74410,7 @@ - + @@ -74496,7 +74418,6 @@ - @@ -74519,8 +74440,8 @@ - - + + @@ -74543,12 +74464,13 @@ - + + - + @@ -74557,10 +74479,10 @@ - + @@ -74605,13 +74527,12 @@ - - + @@ -74632,7 +74553,7 @@ - + @@ -74651,9 +74572,8 @@ - - + @@ -74676,7 +74596,6 @@ - @@ -74687,11 +74606,9 @@ - - @@ -74711,15 +74628,14 @@ + - - - + @@ -74757,7 +74673,6 @@ - @@ -74787,7 +74702,6 @@ - @@ -74800,7 +74714,6 @@ - @@ -74829,8 +74742,8 @@ - - + + @@ -74843,7 +74756,7 @@ - + @@ -74852,6 +74765,7 @@ + @@ -74887,11 +74801,12 @@ - + + @@ -74916,6 +74831,7 @@ + @@ -74945,11 +74861,10 @@ - + - @@ -74968,7 +74883,7 @@ - + @@ -74977,6 +74892,7 @@ + @@ -75022,6 +74938,7 @@ + @@ -75077,7 +74994,6 @@ - @@ -75103,7 +75019,6 @@ - @@ -75126,6 +75041,7 @@ + @@ -75138,7 +75054,7 @@ - + @@ -75147,7 +75063,7 @@ - + @@ -75175,7 +75091,6 @@ - @@ -75204,6 +75119,7 @@ + @@ -75232,7 +75148,6 @@ - @@ -75286,7 +75201,6 @@ - @@ -75316,11 +75230,10 @@ - + - @@ -75339,7 +75252,8 @@ - + + @@ -75356,7 +75270,7 @@ - + @@ -75370,6 +75284,7 @@ + @@ -75377,9 +75292,7 @@ - - @@ -75436,7 +75349,7 @@ - + @@ -75496,13 +75409,12 @@ - - + @@ -75516,7 +75428,7 @@ - + @@ -75539,7 +75451,7 @@ - + @@ -75586,7 +75498,6 @@ - @@ -75596,7 +75507,7 @@ - + @@ -75636,7 +75547,7 @@ - + @@ -75660,11 +75571,12 @@ - + + @@ -75721,7 +75633,6 @@ - @@ -75790,8 +75701,7 @@ - - + @@ -75828,6 +75738,7 @@ + @@ -75839,7 +75750,7 @@ - + @@ -75856,7 +75767,7 @@ - + @@ -75879,13 +75790,11 @@ - - @@ -75926,6 +75835,7 @@ + @@ -75936,6 +75846,7 @@ + @@ -75955,7 +75866,6 @@ - @@ -75964,7 +75874,6 @@ - @@ -76017,7 +75926,7 @@ - + @@ -76034,7 +75943,7 @@ - + @@ -76069,6 +75978,7 @@ + @@ -76077,6 +75987,7 @@ + @@ -76114,12 +76025,14 @@ + + @@ -76185,6 +76098,7 @@ + @@ -76201,15 +76115,15 @@ - + - + @@ -76226,7 +76140,7 @@ - + @@ -76238,12 +76152,12 @@ + - @@ -76256,7 +76170,7 @@ - + @@ -76281,7 +76195,7 @@ - + @@ -76306,6 +76220,7 @@ + @@ -76330,10 +76245,10 @@ - + - + @@ -76357,7 +76272,6 @@ - @@ -76382,6 +76296,7 @@ + @@ -76393,7 +76308,7 @@ - + @@ -76438,7 +76353,7 @@ - + @@ -76447,7 +76362,6 @@ - @@ -76480,9 +76394,9 @@ - + - + @@ -76502,7 +76416,6 @@ - @@ -76517,7 +76430,6 @@ - @@ -76531,7 +76443,7 @@ - + @@ -76554,10 +76466,8 @@ - - @@ -76580,7 +76490,7 @@ - + @@ -76593,7 +76503,6 @@ - @@ -76608,7 +76517,7 @@ - + @@ -76635,7 +76544,7 @@ - + @@ -76668,6 +76577,7 @@ + @@ -76702,13 +76612,14 @@ - + + @@ -76746,11 +76657,11 @@ + - @@ -76766,7 +76677,7 @@ - + @@ -76791,15 +76702,16 @@ - + - + + @@ -76826,9 +76738,7 @@ - - - + @@ -76836,7 +76746,7 @@ - + @@ -76845,8 +76755,9 @@ - + + @@ -76867,7 +76778,6 @@ - @@ -76903,7 +76813,6 @@ - @@ -76923,7 +76832,7 @@ - + @@ -76934,12 +76843,13 @@ - + + @@ -76953,8 +76863,7 @@ - - + @@ -76980,7 +76889,6 @@ - @@ -77037,7 +76945,6 @@ - @@ -77060,9 +76967,11 @@ + + @@ -77084,8 +76993,6 @@ - - @@ -77096,7 +77003,7 @@ - + @@ -77114,7 +77021,7 @@ - + @@ -77128,7 +77035,7 @@ - + @@ -77136,7 +77043,7 @@ - + @@ -77157,7 +77064,6 @@ - @@ -77174,7 +77080,7 @@ - + @@ -77184,7 +77090,7 @@ - + @@ -77209,7 +77115,7 @@ - + @@ -77227,7 +77133,6 @@ - @@ -77307,6 +77212,7 @@ + @@ -77330,7 +77236,6 @@ - @@ -77353,11 +77258,12 @@ - + + + - @@ -77378,6 +77284,7 @@ + @@ -77402,6 +77309,7 @@ + @@ -77417,7 +77325,6 @@ - @@ -77436,7 +77343,7 @@ - + @@ -77475,7 +77382,7 @@ - + @@ -77489,10 +77396,9 @@ - - + @@ -77537,6 +77443,7 @@ + @@ -77552,7 +77459,6 @@ - @@ -77607,7 +77513,6 @@ - @@ -77633,6 +77538,7 @@ + @@ -77652,7 +77558,7 @@ - + @@ -77667,18 +77573,19 @@ - + - + + @@ -77697,7 +77604,8 @@ - + + @@ -77723,7 +77631,7 @@ - + @@ -77757,7 +77665,7 @@ - + @@ -77818,7 +77726,6 @@ - @@ -77826,7 +77733,6 @@ - @@ -77853,6 +77759,7 @@ + @@ -77860,7 +77767,6 @@ - @@ -77868,7 +77774,6 @@ - @@ -77879,14 +77784,13 @@ - + - @@ -77918,10 +77822,9 @@ - - + @@ -77937,14 +77840,15 @@ + - + @@ -78004,7 +77908,7 @@ - + @@ -78014,7 +77918,8 @@ - + + @@ -78038,7 +77943,7 @@ - + @@ -78061,8 +77966,7 @@ - - + @@ -78075,7 +77979,6 @@ - @@ -78088,7 +77991,6 @@ - @@ -78115,9 +78017,9 @@ - + @@ -78150,11 +78052,10 @@ - + - @@ -78183,7 +78084,6 @@ - @@ -78216,11 +78116,11 @@ - + @@ -78250,6 +78150,7 @@ + @@ -78265,6 +78166,7 @@ + @@ -78279,12 +78181,12 @@ - + - + @@ -78304,6 +78206,7 @@ + @@ -78335,7 +78238,7 @@ - + @@ -78348,6 +78251,7 @@ + @@ -78376,7 +78280,7 @@ - + @@ -78387,7 +78291,7 @@ - + @@ -78397,7 +78301,7 @@ - + @@ -78426,9 +78330,8 @@ - - + @@ -78481,7 +78384,7 @@ - + @@ -78491,7 +78394,7 @@ - + @@ -78500,7 +78403,7 @@ - + @@ -78530,7 +78433,7 @@ - + @@ -78546,6 +78449,7 @@ + @@ -78567,13 +78471,11 @@ - - @@ -78598,7 +78500,6 @@ - @@ -78646,7 +78547,7 @@ - + @@ -78657,8 +78558,9 @@ + - + @@ -78680,7 +78582,7 @@ - + @@ -78702,7 +78604,7 @@ - + @@ -78717,6 +78619,7 @@ + @@ -78726,10 +78629,8 @@ - - @@ -78746,7 +78647,7 @@ - + @@ -78756,6 +78657,7 @@ + @@ -78790,13 +78692,12 @@ - + - @@ -78830,16 +78731,14 @@ - - + - + - @@ -78893,7 +78792,7 @@ - + @@ -78904,7 +78803,6 @@ - @@ -78959,10 +78857,11 @@ + - + @@ -78974,11 +78873,11 @@ - + @@ -79022,7 +78921,6 @@ - @@ -79031,12 +78929,10 @@ - - - + @@ -79056,7 +78952,6 @@ - @@ -79072,7 +78967,7 @@ - + @@ -79097,7 +78992,7 @@ - + @@ -79115,7 +79010,7 @@ - + @@ -79142,7 +79037,7 @@ - + @@ -79165,7 +79060,7 @@ - + @@ -79185,6 +79080,7 @@ + @@ -79192,6 +79088,7 @@ + @@ -79225,12 +79122,12 @@ - + @@ -79252,7 +79149,7 @@ - + @@ -79268,7 +79165,6 @@ - @@ -79341,6 +79237,7 @@ + @@ -79364,7 +79261,8 @@ - + + @@ -79381,6 +79279,7 @@ + @@ -79429,7 +79328,6 @@ - @@ -79515,23 +79413,23 @@ - + - + - + @@ -79577,7 +79475,7 @@ - + @@ -79643,8 +79541,7 @@ - - + @@ -79671,8 +79568,8 @@ + - @@ -79687,7 +79584,7 @@ - + @@ -79718,7 +79615,6 @@ - @@ -79741,7 +79637,7 @@ - + @@ -79752,8 +79648,8 @@ - - + + @@ -79808,7 +79704,7 @@ - + @@ -79858,14 +79754,14 @@ + - - + @@ -79904,6 +79800,7 @@ + @@ -79913,12 +79810,11 @@ - + - @@ -79937,9 +79833,10 @@ + - + @@ -79952,14 +79849,12 @@ - - @@ -79977,7 +79872,8 @@ - + + @@ -79986,18 +79882,19 @@ - + + - + @@ -80043,7 +79940,7 @@ - + @@ -80060,15 +79957,14 @@ - - + - + @@ -80078,7 +79974,7 @@ - + @@ -80093,13 +79989,13 @@ - + - + @@ -80114,22 +80010,21 @@ - + - - + + - - + @@ -80143,7 +80038,7 @@ - + @@ -80154,7 +80049,7 @@ - + @@ -80167,8 +80062,8 @@ - - + + @@ -80189,7 +80084,6 @@ - @@ -80212,7 +80106,7 @@ - + @@ -80234,6 +80128,7 @@ + @@ -80248,9 +80143,10 @@ + - + @@ -80261,7 +80157,7 @@ - + @@ -80269,7 +80165,7 @@ - + @@ -80302,13 +80198,13 @@ - + - + @@ -80327,7 +80223,7 @@ - + @@ -80385,14 +80281,12 @@ - - @@ -80401,13 +80295,12 @@ - - + @@ -80422,9 +80315,9 @@ + - @@ -80432,7 +80325,7 @@ - + @@ -80449,7 +80342,6 @@ - @@ -80469,15 +80361,15 @@ + - + - - + @@ -80512,10 +80404,9 @@ - - + @@ -80537,20 +80428,21 @@ - + - + + @@ -80569,6 +80461,7 @@ + @@ -80629,6 +80522,7 @@ + @@ -80669,7 +80563,6 @@ - @@ -80684,11 +80577,11 @@ - + - + @@ -80696,7 +80589,7 @@ - + @@ -80763,7 +80656,7 @@ - + @@ -80805,12 +80698,12 @@ - + - - + + - + @@ -80826,7 +80719,6 @@ - @@ -80835,6 +80727,7 @@ + @@ -80875,7 +80768,7 @@ - + @@ -80935,6 +80828,7 @@ + @@ -80955,7 +80849,7 @@ - + @@ -80963,7 +80857,6 @@ - @@ -80971,7 +80864,8 @@ - + + @@ -80985,7 +80879,7 @@ - + @@ -81002,7 +80896,7 @@ - + @@ -81023,7 +80917,7 @@ - + @@ -81051,6 +80945,7 @@ + @@ -81066,6 +80961,7 @@ + @@ -81082,17 +80978,17 @@ - + - + - + @@ -81149,16 +81045,16 @@ - + - + - + @@ -81181,6 +81077,7 @@ + @@ -81196,6 +81093,7 @@ + @@ -81204,7 +81102,7 @@ - + @@ -81251,6 +81149,7 @@ + @@ -81266,6 +81165,7 @@ + @@ -81292,12 +81192,13 @@ - + + @@ -81311,7 +81212,6 @@ - @@ -81320,7 +81220,7 @@ - + @@ -81360,7 +81260,7 @@ - + @@ -81372,6 +81272,7 @@ + @@ -81400,11 +81301,13 @@ + + @@ -81457,7 +81360,6 @@ - @@ -81525,7 +81427,7 @@ - + @@ -81539,7 +81441,7 @@ - + @@ -81548,12 +81450,13 @@ + - + @@ -81592,7 +81495,6 @@ - @@ -81640,7 +81542,7 @@ - + @@ -81653,7 +81555,6 @@ - @@ -81674,7 +81575,6 @@ - @@ -81687,7 +81587,6 @@ - @@ -81764,7 +81663,6 @@ - @@ -81788,6 +81686,7 @@ + @@ -81809,7 +81708,6 @@ - @@ -81821,17 +81719,17 @@ - + + - @@ -81842,7 +81740,6 @@ - @@ -81864,7 +81761,7 @@ - + @@ -81894,13 +81791,13 @@ + - @@ -81934,14 +81831,13 @@ - - + - + @@ -81962,7 +81858,7 @@ - + @@ -81972,7 +81868,6 @@ - @@ -81989,7 +81884,7 @@ - + @@ -82016,6 +81911,7 @@ + @@ -82026,7 +81922,6 @@ - @@ -82036,7 +81931,6 @@ - @@ -82048,7 +81942,6 @@ - @@ -82083,12 +81976,12 @@ - + @@ -82101,7 +81994,6 @@ - @@ -82109,7 +82001,7 @@ - + @@ -82141,14 +82033,12 @@ - - @@ -82231,7 +82121,7 @@ - + @@ -82255,12 +82145,12 @@ + - @@ -82276,7 +82166,7 @@ - + @@ -82290,7 +82180,7 @@ - + @@ -82305,6 +82195,7 @@ + @@ -82315,6 +82206,7 @@ + @@ -82324,7 +82216,7 @@ - + @@ -82345,6 +82237,7 @@ + @@ -82384,8 +82277,9 @@ + - + @@ -82424,7 +82318,7 @@ - + @@ -82437,7 +82331,7 @@ - + @@ -82456,10 +82350,11 @@ - + + @@ -82489,7 +82384,7 @@ - + @@ -82499,9 +82394,9 @@ - + @@ -82561,7 +82456,7 @@ - + @@ -82573,7 +82468,6 @@ - @@ -82623,12 +82517,13 @@ - + + @@ -82704,6 +82599,7 @@ + @@ -82711,7 +82607,7 @@ - + @@ -82721,7 +82617,6 @@ - @@ -82744,7 +82639,7 @@ - + @@ -82754,7 +82649,7 @@ - + @@ -82790,6 +82685,7 @@ + @@ -82820,6 +82716,7 @@ + @@ -82837,7 +82734,7 @@ - + @@ -82878,6 +82775,7 @@ + @@ -82961,8 +82859,7 @@ - - + @@ -82972,9 +82869,10 @@ - + + @@ -83024,7 +82922,7 @@ - + @@ -83032,11 +82930,11 @@ - + - + @@ -83060,7 +82958,6 @@ - @@ -83075,7 +82972,7 @@ - + @@ -83103,9 +83000,9 @@ + - @@ -83119,7 +83016,7 @@ - + @@ -83166,7 +83063,6 @@ - @@ -83178,7 +83074,6 @@ - @@ -83196,11 +83091,12 @@ - + + @@ -83237,8 +83133,7 @@ - - + @@ -83253,7 +83148,7 @@ - + @@ -83268,6 +83163,7 @@ + @@ -83348,17 +83244,16 @@ - + - - + @@ -83372,6 +83267,7 @@ + @@ -83382,7 +83278,6 @@ - @@ -83451,7 +83346,6 @@ - @@ -83490,7 +83384,6 @@ - @@ -83531,13 +83424,14 @@ - + + @@ -83559,7 +83453,6 @@ - @@ -83592,7 +83485,7 @@ - + @@ -83603,6 +83496,7 @@ + @@ -83627,7 +83521,6 @@ - @@ -83636,7 +83529,6 @@ - @@ -83659,7 +83551,7 @@ - + @@ -83684,14 +83576,14 @@ - - + + - + @@ -83750,6 +83642,7 @@ + @@ -83759,7 +83652,7 @@ - + @@ -83771,15 +83664,15 @@ - + - + @@ -83836,6 +83729,7 @@ + @@ -83848,7 +83742,7 @@ - + @@ -83917,7 +83811,6 @@ - @@ -83932,10 +83825,7 @@ - - - @@ -83945,7 +83835,7 @@ - + @@ -83955,7 +83845,8 @@ - + + @@ -83972,7 +83863,8 @@ - + + @@ -83992,7 +83884,7 @@ - + @@ -84063,9 +83955,7 @@ - - - + @@ -84095,8 +83985,7 @@ - - + @@ -84181,7 +84070,6 @@ - @@ -84207,7 +84095,7 @@ - + @@ -84218,7 +84106,7 @@ - + @@ -84235,7 +84123,7 @@ - + @@ -84276,10 +84164,11 @@ - + + @@ -84299,16 +84188,16 @@ - + - + - + @@ -84358,6 +84247,7 @@ + @@ -84366,9 +84256,10 @@ + - + @@ -84379,9 +84270,11 @@ + + @@ -84392,7 +84285,7 @@ - + @@ -84401,12 +84294,10 @@ - - @@ -84414,13 +84305,13 @@ - + - + @@ -84434,6 +84325,7 @@ + @@ -84477,7 +84369,7 @@ - + @@ -84532,11 +84424,12 @@ - + + @@ -84563,10 +84456,9 @@ - - + @@ -84596,7 +84488,7 @@ - + @@ -84606,14 +84498,13 @@ - - + @@ -84627,7 +84518,7 @@ - + @@ -84639,10 +84530,11 @@ + - + @@ -84657,6 +84549,7 @@ + @@ -84680,11 +84573,12 @@ - + + - + @@ -84722,7 +84616,7 @@ - + @@ -84736,7 +84630,7 @@ - + @@ -84750,6 +84644,7 @@ + @@ -84763,6 +84658,7 @@ + @@ -84788,7 +84684,6 @@ - @@ -84803,6 +84698,7 @@ + @@ -84813,7 +84709,6 @@ - @@ -84821,12 +84716,13 @@ - + + @@ -84860,7 +84756,7 @@ - + @@ -84872,7 +84768,6 @@ - @@ -84910,13 +84805,13 @@ - + - + @@ -84925,6 +84820,7 @@ + @@ -84936,7 +84832,6 @@ - @@ -84949,7 +84844,6 @@ - @@ -84986,6 +84880,7 @@ + @@ -85002,7 +84897,7 @@ - + @@ -85034,8 +84929,9 @@ - + + @@ -85060,7 +84956,7 @@ - + @@ -85069,7 +84965,6 @@ - @@ -85082,16 +84977,15 @@ - - + - + @@ -85104,8 +84998,7 @@ - - + @@ -85133,6 +85026,7 @@ + @@ -85151,13 +85045,12 @@ - - - + + @@ -85167,7 +85060,7 @@ - + @@ -85204,17 +85097,18 @@ - + - + + @@ -85270,6 +85164,7 @@ + @@ -85285,7 +85180,7 @@ - + @@ -85294,6 +85189,7 @@ + @@ -85303,7 +85199,7 @@ - + @@ -85351,7 +85247,6 @@ - @@ -85359,7 +85254,6 @@ - @@ -85368,7 +85262,7 @@ - + @@ -85382,7 +85276,7 @@ - + @@ -85393,6 +85287,7 @@ + @@ -85407,13 +85302,11 @@ - - @@ -85483,7 +85376,7 @@ - + @@ -85497,7 +85390,6 @@ - @@ -85518,14 +85410,13 @@ - - + @@ -85541,7 +85432,6 @@ - @@ -85567,10 +85457,10 @@ - + - + @@ -85610,7 +85500,6 @@ - @@ -85705,8 +85594,7 @@ - - + @@ -85714,6 +85602,7 @@ + @@ -85729,17 +85618,16 @@ + - - @@ -85799,14 +85687,14 @@ - + - + @@ -85832,7 +85720,7 @@ - + @@ -85853,6 +85741,7 @@ + @@ -85870,7 +85759,6 @@ - @@ -85895,10 +85783,10 @@ - + - + @@ -85928,7 +85816,6 @@ - @@ -85936,6 +85823,7 @@ + @@ -85955,9 +85843,9 @@ + - @@ -85977,14 +85865,14 @@ - + - + @@ -86014,7 +85902,8 @@ - + + @@ -86031,7 +85920,7 @@ - + @@ -86078,10 +85967,9 @@ - - + @@ -86089,6 +85977,7 @@ + @@ -86116,10 +86005,9 @@ - + - @@ -86129,7 +86017,6 @@ - @@ -86144,19 +86031,18 @@ - - + + - @@ -86199,10 +86085,10 @@ + - + - @@ -86327,7 +86213,6 @@ - @@ -86348,7 +86233,7 @@ - + @@ -86357,7 +86242,7 @@ - + @@ -86380,7 +86265,7 @@ - + @@ -86409,6 +86294,7 @@ + @@ -86423,7 +86309,7 @@ - + @@ -86432,7 +86318,7 @@ - + @@ -86482,6 +86368,7 @@ + @@ -86523,6 +86410,7 @@ + @@ -86547,7 +86435,7 @@ - + @@ -86556,6 +86444,7 @@ + @@ -86675,10 +86564,10 @@ - + - + @@ -86700,7 +86589,6 @@ - @@ -86726,7 +86614,7 @@ - + @@ -86737,7 +86625,7 @@ - + @@ -86771,7 +86659,6 @@ - @@ -86787,7 +86674,6 @@ - @@ -86797,6 +86683,7 @@ + @@ -86820,7 +86707,6 @@ - @@ -86839,13 +86725,14 @@ + - + - + @@ -86864,7 +86751,6 @@ - @@ -86883,7 +86769,7 @@ - + @@ -86897,7 +86783,6 @@ - @@ -86912,7 +86797,7 @@ - + @@ -86977,13 +86862,11 @@ - - @@ -86994,7 +86877,8 @@ - + + @@ -87004,12 +86888,14 @@ + - + + @@ -87054,7 +86940,7 @@ - + @@ -87067,7 +86953,7 @@ - + @@ -87082,7 +86968,7 @@ - + @@ -87101,7 +86987,7 @@ - + @@ -87144,7 +87030,6 @@ - @@ -87182,7 +87067,7 @@ - + @@ -87195,6 +87080,7 @@ + @@ -87206,7 +87092,7 @@ - + @@ -87261,7 +87147,7 @@ - + @@ -87287,6 +87173,7 @@ + @@ -87304,7 +87191,7 @@ - + @@ -87341,13 +87228,14 @@ - + + - + @@ -87360,11 +87248,11 @@ - - + + @@ -87396,14 +87284,14 @@ - + - + @@ -87423,7 +87311,6 @@ - @@ -87487,7 +87374,6 @@ - @@ -87497,10 +87383,11 @@ + - + @@ -87524,7 +87411,6 @@ - @@ -87573,7 +87459,7 @@ - + @@ -87585,7 +87471,7 @@ - + @@ -87641,7 +87527,7 @@ - + @@ -87665,9 +87551,7 @@ - - @@ -87682,6 +87566,7 @@ + @@ -87698,7 +87583,7 @@ - + @@ -87729,7 +87614,6 @@ - @@ -87771,7 +87655,7 @@ - + @@ -87808,7 +87692,7 @@ - + @@ -87822,7 +87706,7 @@ - + @@ -87847,6 +87731,7 @@ + @@ -87855,7 +87740,7 @@ - + @@ -87886,7 +87771,6 @@ - @@ -87930,6 +87814,7 @@ + @@ -87939,7 +87824,7 @@ - + @@ -87954,13 +87839,11 @@ - - @@ -87984,7 +87867,7 @@ - + @@ -87995,7 +87878,6 @@ - @@ -88010,7 +87892,6 @@ - @@ -88018,7 +87899,7 @@ - + @@ -88078,12 +87959,14 @@ + + @@ -88104,6 +87987,7 @@ + @@ -88115,7 +87999,6 @@ - @@ -88148,7 +88031,6 @@ - @@ -88182,13 +88064,12 @@ - - + @@ -88202,7 +88083,6 @@ - @@ -88210,7 +88090,6 @@ - @@ -88218,10 +88097,10 @@ - + - + @@ -88248,7 +88127,7 @@ - + @@ -88259,7 +88138,7 @@ - + @@ -88278,7 +88157,6 @@ - @@ -88289,7 +88167,7 @@ - + @@ -88298,6 +88176,7 @@ + @@ -88342,6 +88221,7 @@ + @@ -88361,7 +88241,7 @@ - + @@ -88401,6 +88281,7 @@ + @@ -88420,7 +88301,7 @@ - + @@ -88433,6 +88314,7 @@ + @@ -88468,8 +88350,8 @@ - - + + @@ -88477,13 +88359,13 @@ - + - + @@ -88497,6 +88379,7 @@ + @@ -88507,7 +88390,7 @@ - + @@ -88527,7 +88410,7 @@ - + @@ -88540,6 +88423,7 @@ + @@ -88573,6 +88457,7 @@ + @@ -88605,7 +88490,7 @@ - + @@ -88614,13 +88499,11 @@ - - @@ -88657,7 +88540,7 @@ - + @@ -88706,18 +88589,17 @@ - + - - + @@ -88725,7 +88607,7 @@ - + @@ -88744,17 +88626,18 @@ - + - - + + + @@ -88810,14 +88693,14 @@ - - + + @@ -88898,7 +88781,6 @@ - @@ -88907,6 +88789,7 @@ + @@ -88942,12 +88825,12 @@ + - @@ -88956,7 +88839,6 @@ - @@ -88991,9 +88873,9 @@ + - @@ -89004,7 +88886,6 @@ - @@ -89021,7 +88902,6 @@ - @@ -89053,7 +88933,6 @@ - @@ -89104,9 +88983,9 @@ - + @@ -89152,7 +89031,6 @@ - @@ -89164,6 +89042,7 @@ + @@ -89177,10 +89056,9 @@ - - + - + @@ -89188,6 +89066,7 @@ + @@ -89215,6 +89094,7 @@ + @@ -89249,6 +89129,7 @@ + @@ -89269,9 +89150,8 @@ - - + @@ -89319,6 +89199,7 @@ + @@ -89347,14 +89228,14 @@ - + - + @@ -89381,7 +89262,6 @@ - @@ -89393,20 +89273,22 @@ + - + + - + @@ -89423,7 +89305,7 @@ - + @@ -89434,7 +89316,7 @@ - + @@ -89445,6 +89327,7 @@ + @@ -89479,19 +89362,19 @@ - - + + - + @@ -89625,7 +89508,7 @@ - + @@ -89640,11 +89523,10 @@ - - + @@ -89665,7 +89547,7 @@ - + @@ -89674,7 +89556,7 @@ - + @@ -89685,7 +89567,7 @@ - + @@ -89698,17 +89580,17 @@ + - - + @@ -89716,7 +89598,7 @@ - + @@ -89741,10 +89623,10 @@ + - @@ -89784,7 +89666,7 @@ - + @@ -89802,7 +89684,7 @@ - + @@ -89822,7 +89704,7 @@ - + @@ -89849,7 +89731,7 @@ - + @@ -89860,7 +89742,7 @@ - + @@ -89908,7 +89790,6 @@ - @@ -89952,6 +89833,7 @@ + @@ -89994,7 +89876,7 @@ - + @@ -90006,6 +89888,7 @@ + @@ -90029,6 +89912,7 @@ + @@ -90062,7 +89946,7 @@ - + @@ -90072,7 +89956,6 @@ - @@ -90104,19 +89987,18 @@ - + + - - @@ -90130,7 +90012,6 @@ - @@ -90153,7 +90034,7 @@ - + @@ -90175,7 +90056,6 @@ - @@ -90199,6 +90079,7 @@ + @@ -90210,7 +90091,7 @@ - + @@ -90246,8 +90127,9 @@ + - + @@ -90280,6 +90162,7 @@ + @@ -90347,7 +90230,7 @@ - + @@ -90392,9 +90275,8 @@ - - + @@ -90409,6 +90291,7 @@ + @@ -90424,7 +90307,8 @@ - + + @@ -90439,7 +90323,7 @@ - + @@ -90475,7 +90359,7 @@ - + @@ -90483,16 +90367,15 @@ - + - + - @@ -90518,8 +90401,9 @@ - + + @@ -90527,7 +90411,7 @@ - + @@ -90569,13 +90453,14 @@ - + + @@ -90584,6 +90469,7 @@ + @@ -90607,8 +90493,8 @@ - - + + @@ -90638,7 +90524,7 @@ - + @@ -90670,7 +90556,6 @@ - @@ -90691,6 +90576,7 @@ + @@ -90728,6 +90614,7 @@ + @@ -90742,7 +90629,7 @@ - + @@ -90774,6 +90661,7 @@ + @@ -90793,7 +90681,7 @@ - + @@ -90815,10 +90703,14 @@ + + + + @@ -90828,12 +90720,12 @@ - + - + @@ -90847,6 +90739,7 @@ + @@ -90857,14 +90750,13 @@ - - + @@ -90880,7 +90772,6 @@ - @@ -90904,7 +90795,7 @@ - + @@ -90914,8 +90805,8 @@ - - + + @@ -90937,12 +90828,11 @@ - - + @@ -90958,19 +90848,15 @@ - - - - @@ -90985,7 +90871,7 @@ - + @@ -91018,7 +90904,7 @@ - + @@ -91043,7 +90929,6 @@ - @@ -91051,12 +90936,13 @@ - + + @@ -91087,7 +90973,7 @@ - + @@ -91099,7 +90985,7 @@ - + @@ -91169,7 +91055,6 @@ - @@ -91236,7 +91121,6 @@ - @@ -91247,6 +91131,7 @@ + @@ -91254,6 +91139,7 @@ + @@ -91277,12 +91163,10 @@ - - - + @@ -91291,9 +91175,9 @@ - + - + @@ -91322,21 +91206,20 @@ - + - + - @@ -91345,7 +91228,7 @@ - + @@ -91358,9 +91241,9 @@ - + - + @@ -91393,6 +91276,7 @@ + @@ -91415,7 +91299,8 @@ - + + @@ -91430,7 +91315,6 @@ - @@ -91491,7 +91375,7 @@ - + @@ -91508,7 +91392,7 @@ - + @@ -91519,16 +91403,15 @@ - - + - + - + @@ -91563,9 +91446,8 @@ - - + @@ -91576,15 +91458,12 @@ - - - - + @@ -91593,7 +91472,7 @@ - + @@ -91601,7 +91480,6 @@ - @@ -91626,7 +91504,6 @@ - @@ -91634,7 +91511,7 @@ - + @@ -91650,7 +91527,6 @@ - @@ -91697,7 +91573,7 @@ - + @@ -91707,7 +91583,6 @@ - @@ -91717,7 +91592,7 @@ - + @@ -91756,7 +91631,6 @@ - @@ -91767,6 +91641,7 @@ + @@ -91796,7 +91671,6 @@ - @@ -91807,7 +91681,6 @@ - @@ -91825,7 +91698,6 @@ - @@ -91838,13 +91710,13 @@ - - + + @@ -91856,6 +91728,7 @@ + @@ -91918,7 +91791,7 @@ - + @@ -91944,6 +91817,7 @@ + @@ -91954,12 +91828,12 @@ - + - + @@ -92075,9 +91949,10 @@ - + + - + @@ -92119,8 +91994,9 @@ + - + @@ -92142,6 +92018,7 @@ + @@ -92176,7 +92053,7 @@ - + @@ -92241,7 +92118,7 @@ - + @@ -92291,7 +92168,7 @@ - + @@ -92304,7 +92181,7 @@ - + @@ -92346,14 +92223,13 @@ - - + @@ -92379,11 +92255,13 @@ + + @@ -92396,7 +92274,6 @@ - @@ -92429,6 +92306,7 @@ + @@ -92453,12 +92331,11 @@ - - + @@ -92483,10 +92360,10 @@ - + @@ -92494,11 +92371,12 @@ - + + - + @@ -92542,7 +92420,7 @@ - + @@ -92560,7 +92438,7 @@ - + @@ -92574,6 +92452,7 @@ + @@ -92625,6 +92504,7 @@ + @@ -92663,7 +92543,7 @@ - + @@ -92719,6 +92599,7 @@ + @@ -92742,7 +92623,7 @@ - + @@ -92765,7 +92646,7 @@ - + @@ -92791,6 +92672,7 @@ + @@ -92838,6 +92720,7 @@ + @@ -92851,6 +92734,7 @@ + @@ -92894,7 +92778,7 @@ - + @@ -92929,7 +92813,7 @@ - + @@ -92939,14 +92823,13 @@ - - + @@ -92973,7 +92856,7 @@ - + @@ -92987,7 +92870,7 @@ - + @@ -93008,7 +92891,7 @@ - + @@ -93037,7 +92920,6 @@ - @@ -93066,7 +92948,7 @@ - + @@ -93077,7 +92959,6 @@ - @@ -93110,7 +92991,7 @@ - + @@ -93133,7 +93014,7 @@ - + @@ -93149,7 +93030,7 @@ - + @@ -93188,9 +93069,7 @@ - - @@ -93203,7 +93082,7 @@ - + @@ -93218,6 +93097,7 @@ + @@ -93267,8 +93147,10 @@ + + @@ -93304,17 +93186,16 @@ - + - + - @@ -93324,13 +93205,13 @@ + - @@ -93341,6 +93222,7 @@ + @@ -93354,7 +93236,6 @@ - @@ -93376,9 +93257,11 @@ - + + + @@ -93386,7 +93269,7 @@ - + @@ -93396,7 +93279,7 @@ - + @@ -93408,11 +93291,9 @@ - - @@ -93420,11 +93301,12 @@ + - + @@ -93439,7 +93321,6 @@ - @@ -93522,6 +93403,7 @@ + @@ -93540,7 +93422,6 @@ - @@ -93555,6 +93436,7 @@ + @@ -93564,7 +93446,6 @@ - @@ -93582,7 +93463,7 @@ - + @@ -93590,7 +93471,7 @@ - + @@ -93605,7 +93486,6 @@ - @@ -93618,7 +93498,7 @@ - + @@ -93632,12 +93512,12 @@ + - @@ -93686,6 +93566,7 @@ + @@ -93693,6 +93574,7 @@ + @@ -93705,11 +93587,11 @@ + - @@ -93740,10 +93622,10 @@ - + @@ -93753,11 +93635,11 @@ - + - + @@ -93765,8 +93647,8 @@ - - + + @@ -93819,19 +93701,22 @@ + - + + + @@ -93860,10 +93745,12 @@ + + @@ -93877,8 +93764,7 @@ - - + @@ -93953,6 +93839,7 @@ + @@ -93962,7 +93849,7 @@ - + @@ -94016,7 +93903,6 @@ - @@ -94027,7 +93913,6 @@ - @@ -94046,11 +93931,10 @@ - + - @@ -94059,18 +93943,18 @@ - + - + - + @@ -94078,18 +93962,18 @@ - + + - + - - + @@ -94099,14 +93983,13 @@ - + - @@ -94205,7 +94088,7 @@ - + @@ -94215,6 +94098,7 @@ + @@ -94264,6 +94148,7 @@ + @@ -94274,6 +94159,7 @@ + @@ -94284,12 +94170,13 @@ + - + - + @@ -94302,6 +94189,7 @@ + @@ -94312,7 +94200,7 @@ - + @@ -94325,20 +94213,20 @@ - - + - + + @@ -94352,7 +94240,6 @@ - @@ -94366,6 +94253,7 @@ + @@ -94391,7 +94279,8 @@ - + + @@ -94473,6 +94362,7 @@ + @@ -94482,13 +94372,11 @@ - - @@ -94502,9 +94390,10 @@ - + + @@ -94518,7 +94407,6 @@ - @@ -94547,7 +94435,7 @@ - + @@ -94584,7 +94472,6 @@ - @@ -94609,7 +94496,6 @@ - @@ -94626,7 +94512,7 @@ - + @@ -94653,7 +94539,7 @@ - + @@ -94671,7 +94557,7 @@ - + @@ -94686,7 +94572,7 @@ - + @@ -94703,13 +94589,12 @@ - + - @@ -94724,7 +94609,7 @@ - + @@ -94742,6 +94627,7 @@ + @@ -94767,9 +94653,8 @@ - + - @@ -94781,7 +94666,6 @@ - @@ -94817,13 +94701,13 @@ - - + + - + @@ -94838,7 +94722,7 @@ - + @@ -94851,11 +94735,12 @@ - + + - + @@ -94866,13 +94751,14 @@ - + + @@ -94933,11 +94819,10 @@ - - + @@ -94989,7 +94874,7 @@ - + @@ -95001,17 +94886,16 @@ - + + - - @@ -95020,13 +94904,14 @@ + - + - + @@ -95034,6 +94919,7 @@ + @@ -95044,15 +94930,14 @@ - + - - + @@ -95125,7 +95010,7 @@ - + @@ -95145,6 +95030,7 @@ + @@ -95159,7 +95045,7 @@ - + @@ -95192,7 +95078,6 @@ - @@ -95212,7 +95097,7 @@ - + @@ -95222,7 +95107,7 @@ - + @@ -95241,7 +95126,7 @@ - + @@ -95314,6 +95199,7 @@ + @@ -95324,14 +95210,12 @@ - - @@ -95358,13 +95242,14 @@ + - + @@ -95392,11 +95277,10 @@ - + - @@ -95415,7 +95299,7 @@ - + @@ -95426,7 +95310,7 @@ - + @@ -95496,7 +95380,7 @@ - + @@ -95509,7 +95393,7 @@ - + @@ -95523,7 +95407,6 @@ - @@ -95543,7 +95426,7 @@ - + @@ -95565,7 +95448,7 @@ - + @@ -95578,7 +95461,6 @@ - @@ -95587,7 +95469,7 @@ - + @@ -95609,13 +95491,14 @@ - + + @@ -95643,7 +95526,7 @@ - + @@ -95656,13 +95539,13 @@ - + @@ -95785,9 +95668,8 @@ - - + @@ -95802,7 +95684,7 @@ - + @@ -95817,7 +95699,6 @@ - @@ -95889,7 +95770,7 @@ - + @@ -95912,8 +95793,8 @@ + - @@ -95960,6 +95841,7 @@ + @@ -95967,12 +95849,13 @@ + - + - + @@ -95983,12 +95866,10 @@ - - @@ -96009,7 +95890,6 @@ - @@ -96030,6 +95910,7 @@ + @@ -96043,6 +95924,7 @@ + @@ -96066,7 +95948,6 @@ - @@ -96076,16 +95957,16 @@ + - - + @@ -96101,6 +95982,7 @@ + @@ -96139,7 +96021,7 @@ - + @@ -96254,7 +96136,6 @@ - @@ -96280,6 +96161,7 @@ + @@ -96364,6 +96246,7 @@ + @@ -96406,6 +96289,7 @@ + @@ -96442,7 +96326,7 @@ - + @@ -96474,7 +96358,7 @@ - + @@ -96509,7 +96393,6 @@ - @@ -96547,6 +96430,7 @@ + @@ -96566,7 +96450,7 @@ - + @@ -96615,7 +96499,7 @@ - + @@ -96623,7 +96507,6 @@ - @@ -96670,6 +96553,8 @@ + + @@ -96678,6 +96563,7 @@ + @@ -96698,7 +96584,7 @@ - + @@ -96715,7 +96601,7 @@ - + @@ -96725,12 +96611,13 @@ + - + @@ -96752,10 +96639,9 @@ - + - @@ -96764,9 +96650,9 @@ - + @@ -96779,7 +96665,6 @@ - @@ -96848,10 +96733,11 @@ + - + @@ -96875,7 +96761,7 @@ - + @@ -96896,7 +96782,7 @@ - + @@ -96933,13 +96819,14 @@ - + - + + @@ -96967,10 +96854,10 @@ - + - + @@ -96987,6 +96874,7 @@ + @@ -97044,10 +96932,10 @@ + - @@ -97068,10 +96956,8 @@ - - @@ -97090,6 +96976,7 @@ + @@ -97099,7 +96986,7 @@ - + @@ -97133,9 +97020,7 @@ - - - + @@ -97147,6 +97032,7 @@ + @@ -97167,11 +97053,12 @@ - + + - + @@ -97196,6 +97083,7 @@ + @@ -97204,7 +97092,6 @@ - @@ -97218,6 +97105,7 @@ + @@ -97235,14 +97123,14 @@ - + - + @@ -97253,6 +97141,7 @@ + @@ -97260,7 +97149,7 @@ - + @@ -97287,11 +97176,11 @@ - + - + @@ -97309,20 +97198,18 @@ - - - + - + @@ -97339,18 +97226,16 @@ - - - + - + @@ -97369,13 +97254,12 @@ - + - @@ -97415,7 +97299,7 @@ - + @@ -97452,11 +97336,13 @@ + + @@ -97469,7 +97355,7 @@ - + @@ -97518,7 +97404,6 @@ - @@ -97526,7 +97411,6 @@ - @@ -97597,7 +97481,6 @@ - @@ -97610,6 +97493,7 @@ + @@ -97617,6 +97501,7 @@ + @@ -97641,7 +97526,7 @@ - + @@ -97686,24 +97571,20 @@ - - - + - - @@ -97733,7 +97614,7 @@ - + @@ -97741,10 +97622,10 @@ + - @@ -97775,9 +97656,10 @@ - + + @@ -97792,7 +97674,7 @@ - + @@ -97818,6 +97700,7 @@ + @@ -97834,6 +97717,7 @@ + @@ -97846,7 +97730,6 @@ - @@ -97857,7 +97740,7 @@ - + @@ -97924,6 +97807,7 @@ + @@ -97937,7 +97821,8 @@ - + + @@ -97945,13 +97830,13 @@ - + - + @@ -97961,8 +97846,8 @@ - + @@ -97979,6 +97864,7 @@ + @@ -97999,19 +97885,19 @@ - + - + - + @@ -98033,13 +97919,12 @@ - - + @@ -98047,6 +97932,7 @@ + @@ -98058,6 +97944,7 @@ + @@ -98100,7 +97987,7 @@ - + @@ -98113,6 +98000,7 @@ + @@ -98121,7 +98009,7 @@ - + @@ -98178,6 +98066,7 @@ + @@ -98185,6 +98074,7 @@ + @@ -98213,7 +98103,6 @@ - @@ -98222,8 +98111,8 @@ - + @@ -98279,7 +98168,7 @@ - + @@ -98289,7 +98178,7 @@ - + @@ -98324,7 +98213,7 @@ - + @@ -98338,7 +98227,7 @@ - + @@ -98349,10 +98238,11 @@ + - + @@ -98368,7 +98258,7 @@ - + @@ -98425,7 +98315,7 @@ - + @@ -98434,6 +98324,7 @@ + @@ -98459,7 +98350,6 @@ - @@ -98468,7 +98358,6 @@ - @@ -98476,7 +98365,7 @@ - + @@ -98522,14 +98411,13 @@ - - + - + @@ -98551,6 +98439,7 @@ + @@ -98559,14 +98448,13 @@ - - + @@ -98602,8 +98490,9 @@ - + + @@ -98621,7 +98510,7 @@ - + @@ -98660,7 +98549,7 @@ - + @@ -98670,6 +98559,7 @@ + @@ -98680,7 +98570,6 @@ - @@ -98714,12 +98603,12 @@ + - @@ -98743,6 +98632,7 @@ + @@ -98757,18 +98647,18 @@ + - + - @@ -98798,7 +98688,7 @@ - + @@ -98807,7 +98697,8 @@ - + + @@ -98832,7 +98723,7 @@ - + @@ -98875,6 +98766,7 @@ + @@ -98889,7 +98781,7 @@ - + @@ -98925,7 +98817,7 @@ - + @@ -98957,7 +98849,6 @@ - @@ -98969,7 +98860,6 @@ - @@ -98991,7 +98881,7 @@ - + @@ -99027,7 +98917,7 @@ - + @@ -99051,7 +98941,6 @@ - @@ -99137,7 +99026,7 @@ - + @@ -99175,7 +99064,7 @@ - + @@ -99189,6 +99078,7 @@ + @@ -99196,7 +99086,7 @@ - + @@ -99232,9 +99122,7 @@ - - @@ -99252,6 +99140,7 @@ + @@ -99260,7 +99149,6 @@ - @@ -99271,7 +99159,6 @@ - @@ -99288,14 +99175,14 @@ + - + - @@ -99343,7 +99230,7 @@ - + @@ -99368,7 +99255,7 @@ - + @@ -99384,12 +99271,13 @@ - + + @@ -99397,7 +99285,7 @@ - + @@ -99419,14 +99307,14 @@ + - + - @@ -99437,18 +99325,15 @@ - + - - - @@ -99464,7 +99349,7 @@ - + @@ -99478,7 +99363,6 @@ - @@ -99492,6 +99376,7 @@ + @@ -99501,6 +99386,7 @@ + @@ -99538,6 +99424,7 @@ + @@ -99580,7 +99467,6 @@ - @@ -99601,13 +99487,11 @@ - - @@ -99644,6 +99528,7 @@ + @@ -99659,7 +99544,7 @@ - + @@ -99758,11 +99643,12 @@ - + + - + @@ -99778,7 +99664,6 @@ - @@ -99797,7 +99682,7 @@ - + @@ -99826,7 +99711,6 @@ - @@ -99852,7 +99736,7 @@ - + @@ -99863,11 +99747,10 @@ - + - @@ -99888,6 +99771,7 @@ + @@ -99896,7 +99780,7 @@ - + @@ -99955,12 +99839,12 @@ - + - - + + @@ -100002,7 +99886,6 @@ - @@ -100014,7 +99897,6 @@ - @@ -100041,7 +99923,6 @@ - @@ -100080,7 +99961,6 @@ - @@ -100092,16 +99972,15 @@ - - + - + @@ -100117,7 +99996,7 @@ - + @@ -100130,13 +100009,13 @@ - + @@ -100173,11 +100052,11 @@ - + - + @@ -100196,7 +100075,7 @@ - + @@ -100234,7 +100113,7 @@ - + @@ -100243,7 +100122,7 @@ - + @@ -100276,6 +100155,7 @@ + @@ -100285,16 +100165,15 @@ + - - - + + - @@ -100314,7 +100193,6 @@ - @@ -100326,17 +100204,18 @@ - + + @@ -100349,7 +100228,7 @@ - + @@ -100357,13 +100236,14 @@ + - + @@ -100383,8 +100263,9 @@ - - + + + @@ -100409,6 +100290,7 @@ + @@ -100428,7 +100310,7 @@ - + @@ -100438,7 +100320,6 @@ - @@ -100450,12 +100331,12 @@ - + - + - + @@ -100485,7 +100366,7 @@ - + @@ -100498,7 +100379,7 @@ - + @@ -100507,7 +100388,6 @@ - @@ -100607,21 +100487,21 @@ - - + + + - @@ -100641,8 +100521,6 @@ - - @@ -100661,8 +100539,10 @@ + + @@ -100680,14 +100560,15 @@ - + + - + @@ -100721,6 +100602,7 @@ + @@ -100778,6 +100660,7 @@ + @@ -100790,7 +100673,6 @@ - @@ -100801,7 +100683,7 @@ - + @@ -100836,7 +100718,6 @@ - @@ -100876,7 +100757,7 @@ - + @@ -100890,7 +100771,7 @@ - + @@ -100925,8 +100806,8 @@ + - @@ -100953,7 +100834,7 @@ - + @@ -100979,9 +100860,9 @@ + - @@ -100996,16 +100877,19 @@ - + + + + @@ -101018,6 +100902,7 @@ + @@ -101026,7 +100911,7 @@ - + @@ -101072,7 +100957,7 @@ - + @@ -101087,6 +100972,7 @@ + @@ -101099,11 +100985,13 @@ + + @@ -101117,12 +101005,11 @@ - + - + - @@ -101136,9 +101023,9 @@ - + - + @@ -101152,13 +101039,13 @@ - + - + @@ -101174,6 +101061,7 @@ + @@ -101198,9 +101086,10 @@ + - + @@ -101216,7 +101105,7 @@ - + @@ -101228,6 +101117,7 @@ + @@ -101289,7 +101179,7 @@ - + @@ -101298,8 +101188,9 @@ + - + @@ -101318,9 +101209,7 @@ - - @@ -101349,7 +101238,6 @@ - @@ -101377,6 +101265,7 @@ + @@ -101386,7 +101275,7 @@ - + @@ -101413,7 +101302,6 @@ - @@ -101428,7 +101316,7 @@ - + @@ -101452,7 +101340,7 @@ - + @@ -101480,7 +101368,7 @@ - + @@ -101525,7 +101413,7 @@ - + @@ -101550,6 +101438,7 @@ + @@ -101603,7 +101492,7 @@ - + @@ -101669,10 +101558,8 @@ - - @@ -101686,7 +101573,6 @@ - @@ -101753,7 +101639,6 @@ - @@ -101767,7 +101652,6 @@ - @@ -101799,7 +101683,6 @@ - @@ -101829,6 +101712,7 @@ + @@ -101843,6 +101727,7 @@ + @@ -101885,6 +101770,7 @@ + @@ -101894,6 +101780,7 @@ + @@ -101912,7 +101799,6 @@ - @@ -101920,7 +101806,6 @@ - @@ -101934,13 +101819,13 @@ - + @@ -101951,7 +101836,6 @@ - @@ -101994,7 +101878,6 @@ - @@ -102105,6 +101988,7 @@ + @@ -102131,7 +102015,6 @@ - @@ -102141,7 +102024,6 @@ - @@ -102149,6 +102031,7 @@ + @@ -102191,7 +102074,6 @@ - @@ -102225,6 +102107,7 @@ + @@ -102265,7 +102148,6 @@ - @@ -102286,7 +102168,6 @@ - @@ -102320,7 +102201,6 @@ - @@ -102340,7 +102220,6 @@ - @@ -102356,10 +102235,11 @@ + + - @@ -102371,6 +102251,7 @@ + @@ -102397,7 +102278,6 @@ - @@ -102434,13 +102314,11 @@ - - @@ -102484,17 +102362,16 @@ - - + @@ -102523,7 +102400,6 @@ - @@ -102610,6 +102486,7 @@ + @@ -102691,7 +102568,6 @@ - @@ -102712,6 +102588,7 @@ + @@ -102725,7 +102602,6 @@ - @@ -102760,6 +102636,7 @@ + @@ -102769,7 +102646,6 @@ - @@ -102835,6 +102711,7 @@ + @@ -102865,7 +102742,6 @@ - @@ -102933,7 +102809,6 @@ - @@ -102963,6 +102838,7 @@ + @@ -103067,7 +102943,6 @@ - @@ -103087,10 +102962,8 @@ - - @@ -103152,7 +103025,6 @@ - @@ -103214,7 +103086,6 @@ - @@ -103239,7 +103110,6 @@ - @@ -103253,7 +103123,6 @@ - @@ -103265,10 +103134,10 @@ - + @@ -103276,6 +103145,7 @@ + @@ -103286,7 +103156,6 @@ - @@ -103414,7 +103283,7 @@ - + @@ -103426,7 +103295,6 @@ - @@ -103461,6 +103329,7 @@ + @@ -103497,7 +103366,6 @@ - @@ -103519,7 +103387,6 @@ - @@ -103542,7 +103409,7 @@ - + @@ -103592,7 +103459,6 @@ - @@ -103664,7 +103530,6 @@ - @@ -103723,7 +103588,6 @@ - @@ -103761,7 +103625,6 @@ - @@ -103842,7 +103705,6 @@ - @@ -103898,7 +103760,6 @@ - @@ -103985,7 +103846,6 @@ - @@ -104001,7 +103861,6 @@ - @@ -104027,7 +103886,6 @@ - @@ -104071,7 +103929,6 @@ - @@ -104092,7 +103949,6 @@ - @@ -104110,7 +103966,6 @@ - @@ -104138,7 +103993,6 @@ - @@ -104155,7 +104009,6 @@ - @@ -104194,11 +104047,11 @@ + - @@ -104225,7 +104078,6 @@ - @@ -104246,7 +104098,6 @@ - @@ -104276,6 +104127,7 @@ + @@ -104287,6 +104139,7 @@ + @@ -104302,6 +104155,7 @@ + @@ -104349,6 +104203,7 @@ + @@ -104401,7 +104256,6 @@ - @@ -104420,7 +104274,6 @@ - @@ -104434,16 +104287,12 @@ - - - - @@ -104468,7 +104317,6 @@ - @@ -104500,13 +104348,13 @@ - + @@ -104572,7 +104420,6 @@ - @@ -104615,7 +104462,6 @@ - @@ -104672,14 +104518,12 @@ - - @@ -104700,11 +104544,9 @@ - - @@ -104747,7 +104589,6 @@ - @@ -104760,6 +104601,7 @@ + @@ -104783,12 +104625,9 @@ - - - @@ -104837,7 +104676,6 @@ - @@ -104879,7 +104717,6 @@ - @@ -104892,7 +104729,6 @@ - @@ -104902,9 +104738,7 @@ - - @@ -104961,13 +104795,11 @@ - - @@ -104993,7 +104825,6 @@ - @@ -105004,7 +104835,6 @@ - @@ -105015,6 +104845,7 @@ + @@ -105027,11 +104858,13 @@ + + @@ -105051,6 +104884,7 @@ + @@ -105065,12 +104899,10 @@ - - @@ -105085,7 +104917,6 @@ - @@ -105099,6 +104930,7 @@ + @@ -105119,7 +104951,6 @@ - @@ -105143,6 +104974,7 @@ + @@ -105161,7 +104993,6 @@ - @@ -105207,7 +105038,6 @@ - diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/AppIcon.appiconset/Contents.json b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000000..d8db8d65fd79 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/Contents.json b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/Contents.json new file mode 100644 index 000000000000..da4a164c9186 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.h b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.h new file mode 100644 index 000000000000..07d647e9e257 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.h @@ -0,0 +1,36 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// AppDelegate.h +// FrameworkWrapper +// +// Created by Ryan West on 6/13/19. +// + +#import + +#include "UnrealView.h" + +#if CAN_USE_UE4 && __cplusplus + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Weverything" + + #include "PreIOSEmbeddedView.h" + #include "IOS/IOSAppDelegate.h" + + #pragma clang diagnostic pop +#else + // Stub class to inherit from in a non-UE context + @interface IOSAppDelegate : NSObject + - (void)applicationWillEnterForeground:(UIApplication *)application; + - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; + - (void)applicationDidEnterBackground:(UIApplication *)application; + @end +#endif // CAN_USE_UE4 + + +@interface AppDelegate : IOSAppDelegate + + @property (strong, nonatomic) UIWindow *window; + +@end + diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.mm b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.mm new file mode 100644 index 000000000000..01ab9841dc58 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/AppDelegate.mm @@ -0,0 +1,45 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// AppDelegate.m +// FrameworkWrapper +// +// Created by Ryan West on 6/13/19. +// + +#import "AppDelegate.h" +#import "UnrealView.h" + +#if !CAN_USE_UE4 || !__cplusplus + // Stub class to inherit from in a non-UE context + @implementation IOSAppDelegate + - (void)applicationWillEnterForeground:(UIApplication *)application {} + - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; } + - (void)applicationDidEnterBackground:(UIApplication *)application {} + @end +#endif // !CAN_USE_UE4 + +@implementation AppDelegate + +@dynamic window; + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + [super application:application didFinishLaunchingWithOptions:launchOptions]; + + return YES; +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + [super applicationDidEnterBackground:application]; + [UnrealContainerView AllowUnrealToSleep]; +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + [super applicationWillEnterForeground:application]; + [UnrealContainerView WakeUpUnreal]; +} + +@end diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/main.mm b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/main.mm new file mode 100644 index 000000000000..b8c2d16502e9 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/IOS/main.mm @@ -0,0 +1,18 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// main.m +// FrameworkWrapper +// +// Created by Ryan West on 6/13/19. +// + + + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.h b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.h new file mode 100644 index 000000000000..315e82ba7ad9 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.h @@ -0,0 +1,22 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// ViewController.h +// FrameworkWrapper +// +// Created by Ryan West on 7/29/19. +// + +#ifndef ViewController_h +#define ViewController_h + +#import +#import "UnrealView.h" + +@interface ViewController : UIViewController + +// MARK: Outlets + @property (weak, nonatomic) IBOutlet UnrealContainerView *unrealView; + +@end + +#endif /* ViewController_h */ diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.m b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.m new file mode 100644 index 000000000000..1f8c98bc4c04 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ViewControllers/ViewController.m @@ -0,0 +1,21 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// ViewController.m +// FrameworkWrapper +// +// Created by Ryan West on 7/29/19. +// + +#import "ViewController.h" + +@implementation ViewController + +-(void) viewDidLoad +{ + [super viewDidLoad]; + + [UnrealContainerView DelayedCreateView]; + [UnrealContainerView WakeUpUnreal]; +} + +@end diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.h b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.h new file mode 100644 index 000000000000..febf6b8b9332 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.h @@ -0,0 +1,60 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// UnrealWrapper.h +// FrameworkWrapper +// +// Created by Andrew Grant on 9/4/18. +// + +#if defined(__aarch64__) + #define CAN_USE_UE4 1 +#else + #define CAN_USE_UE4 0 +#endif + +#define NW_LOG NSLog + +#if SHIPPING + #define NW_LOG_DEBUG(...) +#else + #define NW_LOG_DEBUG NW_LOG +#endif + + +#import + +typedef void(^EmbeddedParamsCompletionType)(NSDictionary* _Nullable Results , NSString* _Nullable Error); + +NS_ASSUME_NONNULL_BEGIN + +IB_DESIGNABLE +@interface UnrealContainerView : UIView + ++(void)DelayedCreateView; + + ++(void)EmbeddedCallForSubsystem:(NSString* _Nullable)Subsystem WithCommand:(NSString* _Nullable)Command Params:(NSDictionary* _Nullable)Params Priority:(int)Priority CompletionHandler:(EmbeddedParamsCompletionType)InHandler; +// Allows native code to more easily generate the embedded call required to invoke UObject bridge methods by name. NOTE: responses not hooked up yet. ++(void)JSBridgeCallByName:(NSString*)UObjectName MethodName:(NSString*)MethodName MethodParamsJSON:(NSString*)MethodParamsJSON Priority:(int)Priority CompletionHandler:(EmbeddedParamsCompletionType)CompletionHandler; ++(void)SetEmbeddedObject:(void* _Nullable)Object ForName:(NSString* _Nonnull)Name; ++(void)HandleTouchMessage:(NSDictionary*)Message; ++(void)WakeUpUnreal; ++(void)AllowUnrealToSleep; + + ++(void)ResizeUnrealView:(CGSize)Size; ++(void)PositionUnrealView:(CGPoint)Location; ++(void)ResetUnrealViewToFullScreen; ++(void)EnsureVisible; +-(void)TakeOwnershipOfUnrealView; + + ++(void)GoFullResolution; ++(void)RestoreResolution; + +@property (weak, nonatomic, readonly) UIView* unrealView; +@property (nonatomic, assign) IBInspectable NSString* CommandLine; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.mm b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.mm new file mode 100644 index 000000000000..07e05d3efa06 --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/Views/UnrealView.mm @@ -0,0 +1,408 @@ +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. +// +// UnrealWrapper.m +// FrameworkWrapper +// +// Created by Andrew Grant on 9/4/18. +// + + +#import "UnrealView.h" + +#if CAN_USE_UE4 && __cplusplus + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Weverything" + + #include "PreIOSEmbeddedView.h" + #include "IOS/IOSView.h" + #include "Misc/EmbeddedCommunication.h" + + #pragma clang diagnostic pop +#endif // CAN_USE_UE4 + + +@implementation UnrealContainerView + +-(void) awakeFromNib +{ + [super awakeFromNib]; + [self createUnrealView]; +} + +static UIView* sharedUnrealView = nil; +static UnrealContainerView* DelayedCreateContainer = nil; + +-(BOOL) IsUnrealUsable +{ +#if CAN_USE_UE4 + // check memory amount, and running OS version, etc + return YES; +#else + return NO; +#endif + +} + ++(void)DelayedCreateView +{ + static bool bHasBeenCreated = false; + if (bHasBeenCreated) + { + return; + } + bHasBeenCreated = true; + + NW_LOG(@"DelayedCreateView start"); + + // @todo these views will never be released +#if CAN_USE_UE4 + if ([DelayedCreateContainer IsUnrealUsable]) + { + sharedUnrealView = [[FIOSView alloc] initWithFrame:DelayedCreateContainer.bounds]; + // start hidden until we are needed + sharedUnrealView.hidden = YES; + } + else +#endif + { + // make a dummy UE4 view + UIImageView* ImageView = [[UIImageView alloc] initWithFrame:DelayedCreateContainer.bounds]; + ImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Res/Logo" ofType:@"jpg"]]; + ImageView.contentMode = UIViewContentModeScaleAspectFit; + ImageView.backgroundColor = [UIColor blackColor]; + + sharedUnrealView = ImageView; + } + + // makes the unreal view resize to fit parent + sharedUnrealView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); + + // now continue where we left off before + [DelayedCreateContainer createUnrealView]; + DelayedCreateContainer = nil; + + NW_LOG(@"DelayedCreateView end"); +} + +-(void) createUnrealView +{ + if (sharedUnrealView == nil) + { +#if CAN_USE_UE4 + +// [self SetupEmbeddedToNativeCallback]; + + DelayedCreateContainer = self; + + // kick off unreal boot, but don't create the IOSView yet + [FIOSView StartupEmbeddedUnreal]; +#endif + + return; + } + else + { + [sharedUnrealView removeFromSuperview]; + } + + _unrealView = sharedUnrealView; + _unrealView.frame = self.bounds; + [self addSubview:self.unrealView]; + [self layoutSubviews]; +} + + +#if CAN_USE_UE4 ++(id)UE4ToGeneric:(const FEmbeddedCommunicationMap&)UE4Map +{ + // look for a special single entry { "json", "xxxx" } map + if (UE4Map.Num() == 1 && UE4Map.Find(TEXT("json")) != nullptr) + { + NSString* JSONString = [NSString stringWithFString:UE4Map.FindRef(TEXT("json"))]; + NSError* JSONError; + id JSONObject = [NSJSONSerialization JSONObjectWithData:[JSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&JSONError]; + if (JSONObject != nil) + { + return JSONObject; + } + else + { + NW_LOG(@"Got JSON decoding error: %@", [JSONError localizedDescription]); + } + } + + // if we got here, we couldn't convert to generic json object, so just convert TMap to NSDictionary + NSMutableDictionary* ReturnValues = [NSMutableDictionary dictionaryWithCapacity:UE4Map.Num()]; + for (auto Pair : UE4Map) + { + [ReturnValues setValue:[NSString stringWithFString:Pair.Value] forKey:[NSString stringWithFString:Pair.Key]]; + } + + return ReturnValues; +} +#endif + ++(void)EmbeddedCallForSubsystem:(NSString* _Nullable)InSubsystem WithCommand:(NSString* _Nullable)Command Params:(NSDictionary* _Nullable)Params Priority:(int)Priority CompletionHandler:(EmbeddedParamsCompletionType)InHandler +{ + // we have to copy the handler because it will go out of scope after this call (if it's a stack block) and can't be retained or anything + EmbeddedParamsCompletionType Handler = [InHandler copy]; + +#if CAN_USE_UE4 + FEmbeddedCallParamsHelper CallHelper; + __block FEmbeddedCallParamsHelper* BlockHelper = &CallHelper; + CallHelper.Command = Command; + + NW_LOG_DEBUG(@"NativeToEmbeddedCall: Subsystem: %@, Command: %@, Params:%@", InSubsystem, Command, Params); + + FString Subsystem = InSubsystem; + FName SubsystemName(*Subsystem); + FName CommandName = *(FString::Printf(TEXT("%s_%s"), *Subsystem, *CallHelper.Command)); + + // wake up UE + FEmbeddedCommunication::KeepAwake(CommandName, false); + + // convert Obj-C types to UE4 types + if (Params != nil) + { + if (![Params isKindOfClass:[NSDictionary class]]) + { + NW_LOG_DEBUG(@"WARNING! Command %@:%@ had params that was not a dictionary!", InSubsystem, Command); + } + else + { + [Params enumerateKeysAndObjectsUsingBlock:^(NSString* Key, id Value, BOOL* Stop) + { + // convert complex types into JSON representations, not plain ToString type + if ([Value isKindOfClass:[NSDictionary class]] || [Value isKindOfClass:[NSArray class]]) + { + NSData* JSONData = [NSJSONSerialization dataWithJSONObject:Value options:NSJSONWritingPrettyPrinted error:nil]; + NSString* JSONString = [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding]; + BlockHelper->Parameters.Add(Key, JSONString); + } + else + { + BlockHelper->Parameters.Add(Key, [NSString stringWithFormat:@"%@",Value]); + } + }]; + } + } + + // this struct will peform Obj-C reference counting on an object from a C++ object that the UE4 lambdas will copy around + // this makes sure that the Handler is referenced until all copies of CallHelper go away + struct FObjCWrapper + { + FObjCWrapper(id InObj) + : Obj(InObj) + { + [Obj retain]; + } + FObjCWrapper(const FObjCWrapper& Other) + { + Obj = Other.Obj; + [Obj retain]; + } + ~FObjCWrapper() + { + [Obj release]; + } + id Obj; + }; + + FObjCWrapper ObjCWrapper(Handler); + + // wrapper owns it now + [Handler release]; + + // set up the UE4 completion handler to wrap the obj-c handler + CallHelper.OnCompleteDelegate = [self, Handler, ObjCWrapper, CommandName](const FEmbeddedCommunicationMap& InReturnValues, FString InError) + { + + // we can let UE4 go to sleep now + FEmbeddedCommunication::AllowSleep(CommandName); + + // call the obj-c block after converting back to Obj-C types + if (Handler != nil) + { + // convert from ue4 land + id GenericResults = [UnrealContainerView UE4ToGeneric:InReturnValues]; + NSString* ErrorString = InError.Len() ? [NSString stringWithFString:InError] : nil; + + // and finally call it on IOS thread + dispatch_async(dispatch_get_main_queue(), ^ + { + // pass back the results strings, and an error if there was one + Handler(GenericResults, ErrorString); + + }); + } + }; + + // now that we have set up the marshalling, call the UE4 delegate on the GameThread, and the completion handler will be called later + FEmbeddedCommunication::RunOnGameThread(Priority, [SubsystemName, CallHelper]() + { + if (FEmbeddedDelegates::GetNativeToEmbeddedParamsDelegateForSubsystem(SubsystemName).IsBound()) + { + FEmbeddedDelegates::GetNativeToEmbeddedParamsDelegateForSubsystem(SubsystemName).Broadcast(CallHelper); + } + else + { + // if no one is listening, just call the handler with an error + CallHelper.OnCompleteDelegate({}, TEXT("No one was listening for subsystem ") + SubsystemName.ToString()); + } + }); + + +#else + if (Handler != nil) + { + // if no UE4, delay call the handler (so caller doesn't need to handle callback happening before this returns) + dispatch_async(dispatch_get_main_queue(), ^ + { + // pass back the map of strings, and an error if there was one + Handler(nil, @"UE4 is not running"); + + // release from the [Handler copy] above +// [Handler release]; + }); + } +#endif +} + ++(void)JSBridgeCallByName:(NSString*)UObjectName MethodName:(NSString*)MethodName MethodParamsJSON:(NSString*)MethodParamsJSON Priority:(int)Priority CompletionHandler:(EmbeddedParamsCompletionType)CompletionHandler +{ + NSString* Subsystem = @"browserProxy"; + NSString* Command = @"handlejs"; + NSString* Script = [NSString stringWithFormat:@"ExecuteUObjectMethod/%@/00000000000000000000000000000000/%@/{\"params\":%@}", UObjectName, MethodName, MethodParamsJSON]; + NSDictionary* Params = @{@"script" : Script}; + [UnrealContainerView EmbeddedCallForSubsystem:Subsystem WithCommand:Command Params:Params Priority:Priority CompletionHandler:CompletionHandler]; +} + ++(void)SetEmbeddedObject:(void* _Nullable)Object ForName:(NSString* _Nonnull)Name +{ +#if CAN_USE_UE4 + FEmbeddedDelegates::SetNamedObject(Name, Object); +#endif +} + ++(void)HandleTouchMessage:(NSDictionary*)Message +{ +#if CAN_USE_UE4 + + dispatch_async(dispatch_get_main_queue(), ^ + { + NSString* Command = [Message objectForKey:@"command"]; + NSDictionary* Args = [Message objectForKey:@"args"]; + CGPoint Loc; + int SourceWidth = [[Args objectForKey:@"width"] intValue]; + int SourceHeight = [[Args objectForKey:@"height"] intValue]; + // convert from web to unreal coords + Loc.x = [[Args objectForKey:@"x"] intValue] * (float)sharedUnrealView.frame.size.width / (float)SourceWidth; + Loc.y = [[Args objectForKey:@"y"] intValue] * (float)sharedUnrealView.frame.size.height / (float)SourceHeight; + CGPoint PrevLoc = Loc; + int TouchIndex = [[Args objectForKey:@"finger"] intValue]; + float Force = 1.0; + + TouchType Type = TouchMoved; + if ([Command caseInsensitiveCompare:@"touchstart"] == NSOrderedSame) + { + Type = TouchBegan; + } + else if ([Command caseInsensitiveCompare:@"touchend"] == NSOrderedSame) + { + Type = TouchEnded; + } + + TArray TouchesArray; + + [(FIOSView*)sharedUnrealView HandleTouchAtLoc:Loc PrevLoc:PrevLoc TouchIndex:TouchIndex Force:Force Type:Type TouchesArray:TouchesArray]; + + FIOSInputInterface::QueueTouchInput(TouchesArray); + + }); +#endif +} + ++(void)WakeUpUnreal +{ +#if CAN_USE_UE4 + FEmbeddedCommunication::KeepAwake(TEXT("Native"), true); +#endif + + // we can't be hidden if we need to render! + sharedUnrealView.hidden = NO; +} + ++(void)AllowUnrealToSleep +{ +#if CAN_USE_UE4 + FEmbeddedCommunication::AllowSleep(TEXT("Native")); +#endif + + sharedUnrealView.hidden = YES; +} + ++(void)ResizeUnrealView:(CGSize)Size +{ + sharedUnrealView.autoresizingMask = UIViewAutoresizingNone; + sharedUnrealView.frame = CGRectMake(sharedUnrealView.frame.origin.x, sharedUnrealView.frame.origin.y, Size.width, Size.height); + [sharedUnrealView layoutSubviews]; + + // assume we want to be shown + sharedUnrealView.hidden = NO; +} + ++(void)PositionUnrealView:(CGPoint)Location +{ + sharedUnrealView.frame = CGRectMake(Location.x, Location.y, sharedUnrealView.frame.size.width, sharedUnrealView.frame.size.height); + + // assume we want to be shown + sharedUnrealView.hidden = NO; +} + ++(void)ResetUnrealViewToFullScreen +{ + sharedUnrealView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); + sharedUnrealView.frame = sharedUnrealView.superview.bounds; + [sharedUnrealView layoutSubviews]; + + // assume we want to be shown + sharedUnrealView.hidden = NO; +} + +-(void)TakeOwnershipOfUnrealView +{ + if (_unrealView.superview != self) + { + [_unrealView removeFromSuperview]; + + _unrealView.frame = self.bounds; + [self addSubview:_unrealView]; + } +} + ++(void)EnsureVisible +{ + sharedUnrealView.hidden = NO; +} + +float GSavedScaleFactor = 0; ++(void)GoFullResolution +{ + GSavedScaleFactor = sharedUnrealView.contentScaleFactor; + sharedUnrealView.contentScaleFactor = sharedUnrealView.window.screen.nativeScale; + [sharedUnrealView layoutSubviews]; + + // assume we want to be shown + sharedUnrealView.hidden = NO; +} + ++(void)RestoreResolution +{ + if (GSavedScaleFactor != 0.0) + { + sharedUnrealView.contentScaleFactor = GSavedScaleFactor; + [sharedUnrealView layoutSubviews]; + } +} + +@end diff --git a/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ue4commandline.txt b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ue4commandline.txt new file mode 100644 index 000000000000..2ed491972dff --- /dev/null +++ b/Engine/Build/IOS/Resources/FrameworkWrapper/FrameworkWrapper/ue4commandline.txt @@ -0,0 +1 @@ +../../../PROJECT_NAME/PROJECT_NAME.uproject diff --git a/Engine/Build/InstalledEngineBuild.xml b/Engine/Build/InstalledEngineBuild.xml index 08f1afd58fd9..5fd6cfdf25e1 100644 --- a/Engine/Build/InstalledEngineBuild.xml +++ b/Engine/Build/InstalledEngineBuild.xml @@ -34,6 +34,7 @@